WP CLIでかんたんにWordPress自作プラグインを多言語対応させてみる

自作プラグインの国際化

WordPressのプラグインを多言語対応化することによって、より多くの人にとって使いやすいプラグインになります。

国際化の手順は簡単で

  1. 翻訳対象の文を設定する
  2. WP CLIをインストールする
  3. wp i18nコマンドでpotファイルを生成する
  4. poeditで翻訳する
  5. 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 DomainDomain 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だけでよいです。

サイトの言語を日本語にすると

最終更新や価格などが日本語になりました!

めでたしめでたし。