問題描述

建立一個翻譯準備好的外掛的最好方法是什麼?

它不一定要從一開始就翻譯出來,但它必須易於翻譯,因此來自不同文化的其他開發人員可以參與外掛的本地化過程。

最佳解決方案

寫入本地化的想法

不要使用 echoprint()來產生文字輸出,而是使用 WordPress 函式__()_e()

/** Not localization friendly */
echo "Welcome to my plugin";
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()__()將提供當前語言的翻譯作為第一個引數提供的文字。 _e()將輸出文字,而__()將返回。

第二個引數是文字域,您將使用它來告訴 WordPress,作為第一個引數提供的文字屬於此外掛,您可以使用任何您想要的名稱,但我更喜歡使用與我用於外掛的名稱相同的名稱目錄檔案,我覺得它比較直觀。

如何輸出動態文字:「Hello< username>」?

__()sprintf()

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. 準備.pot /.po /.mo 檔案

定義

  • .pot 檔案:由外掛開發人員處理,它用作建立新翻譯的起點,WordPress 不使用它。

  • .po 檔案:您或其他人啟動的翻譯檔案,可能已完成,WordPress 不會使用它。

  • A.mo 檔案:當您儲存.po 檔案時,由 Poedit 自動建立,只要您建立或更新.po 檔案,您可以使用這些檔案進行上傳,即可上傳 re-upload 。 WordPress 從.mo 檔案獲取翻譯。

開啟 Poedit 並建立一個新的目錄 (檔案> 新 Catallog …) 與這些設定:

  • 專案資訊:使用您 (或您的團隊) 資訊,語言和國家/地區應符合您的外掛預設語言

  • 路徑:

    • 基本路徑:.

    • 路徑:刪除所有& 新增..,(我們將把語言檔案儲存在一個名為 languages 的 plugin 子目錄中)

  • 關鍵字:刪除所有& 加入___e

將目錄儲存為/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot,並透過按更新按鈕掃描您的外掛檔案以進行可翻譯的文字。更新完成後關閉該目錄,您不需要更新該檔案,除非您新增新的可翻譯字串 (即__()_e()) 插入到您的外掛。

現在我們來建立第一個翻譯 (我將使用 fr_FR):

使用 Podeit,從 POT 檔案建立目錄 (檔案> POT 檔案中的新目錄…):

  • 專案資訊:使用您 (或您的團隊) 資訊,更改語言和國家,我將使用法國和法國

  • 路徑:不要改變

  • 關鍵詞:別開玩笑

將目錄儲存為/my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po 。翻譯部分或全部字串,再次儲存.po 檔案,同時上傳.po 和.mo 檔案。

請注意,每當儲存.po 檔案時,.mo 檔案都將使用相同的名稱生成,所以.po 檔案的檔名至關重要,它由插入文字域 (my-plugin) 和語言區域設定 (fr_FR) 的連線組成, ,總是為你的.po 檔案命名這樣的外掛:[textdomain] – [locale] .po,這裡有一些例子:

  • 義大利語/義大利語:wpcf7-it_IT.po

  • 葡萄牙語/巴西:wpcf7-pt_BR.po

  • 阿拉伯語:wpcf7-ar.po … 是的!

每當外掛使用新文字更新時,請更新 po 檔案,翻譯新字串並重新上傳.po 和.mo 檔案

3. 指示外掛載入當前語言的翻譯文字

在外掛的某處,您必須告訴 WordPress 使用您的.mo 檔案,您可以在外掛檔案的開頭使用此程式碼:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

load_plugin_textdomain 功能的第 1 和第 3 引數中用外掛名替換 my-plugin

4. 測試和排除故障

某些原因可能無法正常工作:

  • 字串不會匯入到.pot 或.po 檔案中

    • â†「錯誤的目錄設定 (路徑或關鍵字或兩者)

  • 文字未在 WordPress 網站上翻譯

    • →.mo 檔案丟失或檔名錯誤

    • →未使用文字域 (用_e('my text', 'my-plugin')替換_e('my text'))

    • →文字域未載入 (使用正確的引數上面的示例,WP 不會警告你有關錯誤)

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。