問題描述
建立一個翻譯準備好的外掛的最好方法是什麼?
它不一定要從一開始就翻譯出來,但它必須易於翻譯,因此來自不同文化的其他開發人員可以參與外掛的本地化過程。
最佳解決方案
寫入本地化的想法
不要使用 echo 或 print()來產生文字輸出,而是使用 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。