自作プラグインの国際化
WordPressのプラグインを多言語対応化することによって、より多くの人にとって使いやすいプラグインになります。
国際化の手順は簡単で
- 翻訳対象の文を設定する
- WP CLIをインストールする
- wp i18nコマンドでpotファイルを生成する
- poeditで翻訳する
- moファイルを配置する
だけです。
Poeditの有料機能を用いてWordPressのテーマやプラグインのpotファイルを生成することができますが、WP CLIを使っても問題なく実現できます。
わかりにくい落とし穴もちょこちょこあるので、注意して進んでください。
ハマりポイント
現段階でハマっている人向けです。
イチから始める人はハマりポイントは飛ばしてください。
①wp i18nで – – debugを指定し、翻訳したいファイルがロードされているがpotファイルにプラグイン情報の項目しか出てこない
__()や_e()の第2引数に文字列でText Domainを設定しているか確認してください。
②WordPressがmoファイルを読み込んでくれない
(TextDomain)-(locale).moのようなファイル名になっていますか?
TextDomainが「WPEasyPaywall」で言語設定が「ja」ならば、ファイル名は「WPEasyPaywall-ja.mo」のようになります
翻訳対象の文を設定する
Text DomainとDomain Pathを記述する
WordPressのプラグイン情報(Plugin Nameなど)が書かれている、最初に読み込まれるファイルにText DomainとDomain Pathを設定します。
Text Domainは任意の文字列を指定し、Domain Pathにはこの後にpotファイルを保存するディレクトリを指定します。
/* Plugin Name: MyPlugin Plugin URI: https://toritakashi.com Description: Test Plugin Author: tori-takashi Version: 0.1 Author URI: https://toritakashi.com Text Domain: MyPlugin Domain Path: /languages */
プラグインがText Domainから言語ファイルをロードするようにする
load_plugin_textdomain()をinitフックで呼び出します。
第1引数にはText Domainを指定します。
第2引数にはfalseを指定します。
第3引数にはこの後にpotファイルを保存するディレクトリを指定します。
function myplugin_load_textdomain() { load_plugin_textdomain('MyPlugin', false, dirname(plugin_basename(__FILE__)) . '/languages'); } add_action('init', 'myplugin_load_textdomain');
翻訳対象の文を囲む
翻訳対象の文を __() や _e() を用いて設定します。
__('Sales Details', 'MyPlugin')
この第2引数にはTextDomainを設定します。
この記述を忘れるとpotファイルに出力されなくなってしまいます。
WP CLIをインストールする
wp-cli.pharをダウンロードする
$ wget https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar --2021-08-28 17:56:46-- https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar Resolving raw.github.com (raw.github.com)... 185.199.111.133, 185.199.110.133, 185.199.108.133, ... Connecting to raw.github.com (raw.github.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 301 Moved Permanently Location: https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar [following] --2021-08-28 17:56:46-- https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.108.133, 185.199.109.133, ... Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 6094557 (5.8M) [application/octet-stream] Saving to: ‘wp-cli.phar’ wp-cli.phar 100%[=========================================================================================================================>] 5.81M --.-KB/s in 0.08s 2021-08-28 17:56:47 (76.9 MB/s) - ‘wp-cli.phar’ saved [6094557/6094557]
実行権限を与えて移動する
$ chmod +x wp-cli.phar $ sudo mv wp-cli.phar /usr/local/bin/wp
インストール完了
$ wp --info PHP Warning: Module 'curl' already loaded in Unknown on line 0 OS: Linux 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 Shell: /bin/bash PHP binary: /usr/bin/php7.4 PHP version: 7.4.3 php.ini used: /etc/php/7.4/cli/php.ini MySQL binary: MySQL version: SQL modes: WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli WP-CLI vendor dir: phar://wp-cli.phar/vendor WP_CLI phar path: /mnt/c/working/my-plugin WP-CLI packages dir: WP-CLI global config: WP-CLI project config: WP-CLI version: 2.5.0
potファイルを生成する
「wp i18n make-pot」コマンドを使います。
1つ目の引数ではプラグインのルートディレクトリを指定し、2つ目の引数では出力先を選択します。
MyPlugin.potという名前でpotファイルを生成します。
後々役に立つので、ファイル名はText Domainに一致させましょう。
languagesディレクトリにpotファイルを生成するのが一般的です。
$ mkdir languages $ pwd /mnt/c/working/my-plugin $ wp i18n make-pot . ./languages/MyPlugin.pot PHP Warning: Module 'curl' already loaded in Unknown on line 0 Plugin file detected. Success: POT file successfully generated!
ここでプラグインの説明部分しか出力されない場合は、最初に__()や_e()で囲んだ際のTextdomainを設定し忘れている可能性があります。
自分はここでハマりました。
Poeditで翻訳する
Poeditというツールを使って翻訳していきます。
まずはPoeditをインストールしましょう。
- Windows
- Mac
- Linux
に対応しています。
ここではWindows版で説明します。
Poedit起動
まずはPoeditを起動しましょう。
新規作成からMyPlugin.potを開き、翻訳言語を設定する
翻訳言語を日本語に設定します。
翻訳者の設定をする
ファイル -> 設定 -> 一般
から設定できます。
翻訳する
出力するファイル名は、日本語なら「MyPlugin-ja.po」のように設定しましょう。
色々怒られたのでpotファイルを差し替えた、という場合にpoファイルに反映させる方法を説明します。
potファイルを差し替えてpoファイルに適用する
翻訳 -> potファイルから更新
を押してpotファイルをベースにpoファイルを更新します。
要確認の部分が変更があった部分になるので、ひとつひとつ確認して修正しましょう。
MOファイルを配置
MOファイルをエクスポート
ファイル -> moファイルにコンパイル
するとmoファイルが生成されます。
このファイル名にもハマりポイントがあります。
ファイル名は、(あなたの設定したTextDomain)-(言語設定).moとする必要があります。
上記の例はTextDomainが「WPEasyPaywall」で言語設定が日本語の場合ですね。
設定の反映を確認
英語(en_US)
デフォルト言語はアメリカ英語です。
日本語(ja)
ja_JPではなくjaだけでよいです。
サイトの言語を日本語にすると
最終更新や価格などが日本語になりました!
めでたしめでたし。