https://developer.wordpress.org/cli/commands/i18n/make-mo/
編寫wordpress plugin需要多個語言版本供用戶閱覽,可以利用wordpress內置的多語言機制編寫插件,從而使插件支持多語言(multi-language)的目的
1. 插件入口檔案設定:
/**
* Plugin Name: my plugin
* Plugin URI: PLUGIN SITE HERE
* Description: PLUGIN DESCRIPTION HERE
* Author: YOUR NAME HERE
* Author URI: YOUR SITE HERE
* Text Domain: my-plugin
* Domain Path: /languages
* Version: 0.1.0
*
* @package Myplugin
*/
主要是下面2行指定了多語言
* Text Domain: my-plugin 文本域,與其他插件區別
* Domain Path: /languages 域路徑,固定在這裏即可
順便說一下,上面的格式直接用wordpress cli生成插件腳手架的時候已經幫你寫好
$ wp scaffold plugin sample-plugin --allow-root --skip-tests
腳手架命令安裝 https://developer.wordpress.org/cli/commands/
有這個命令,以後創建插件,啟用,禁用插件,主題等代碼都很方便
2.其他語言的.po檔(依照語言命名)
檔案名稱:my-plugin-[locale].po
若此檔要套用至繁體中文, 則檔案名稱命名為:my-plugin-zh_TW.po
my-plugin-zh_TW.po 的內容例子
msgid "apple"
msgstr "蘋果"
msgid "car"
msgstr "小車"
語言名稱 | 代碼 |
---|---|
Chinese (China) | zh_CN |
Chinese (Hong Kong) | zh_HK |
Chinese (Taiwan) | zh_TW |
更多的在語言代碼 https://wpastra.com/docs/complete-list-wordpress-locale-codes/
3.將撰寫好的.po檔轉成.mo檔 (php只認.mo檔,所以po檔更改後要記得轉.mo檔才會套用變更)
cd /var/www/html/wp-content/plugins/my-plugin/languages
# 調用cli 命令,生成 mo 文件
sudo -u www-data wp i18n make-mo my-plugin-zh_TW.po
4.插件主文件代碼需要加個Action
/*
* Load plugin textdomain.
*/
function plugin_load_textdomain() {
load_plugin_textdomain( 'my-plugin', false, basename( dirname( __FILE__ ) ) .'/languages/' );
//這邊等於我把翻譯檔路徑設在我外掛下的languages資料夾,wordpress框架會自動去抓翻譯檔
}
add_action( 'init', 'plugin_load_textdomain' );
5.代碼調用翻譯函數
_e('car', 'my-plugin');
printf(__('your car is %s.', 'my-plugin'),$carName);