問題描述

創建一個翻譯準備好的插件的最好方法是什麼?

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

最佳解決方案

寫入本地化的想法

不要使用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。