ワードプレスのテーマやプラグインを翻訳ファイル編集ソフト「Poedit」でローカライズ(翻訳)する方法

今までは日本語のみだったんですが、英語から各言語に翻訳表示できるようにしました。漸くテーマ「ShapeShifter」の翻訳が終わりました。「バージョン1.0.3」が翻訳済みです。
日本語で見ると日本語表記が若干変化していると思いますが、実質何も変化していません。完全に公式リポジトリ用です。
僕自身最初は日本語でのみ配布するつもりでしたが、後からローカライズ対応にしようと編集すると実際かなり面倒で、テーマやプラグインを作り始める時から英語ベースで翻訳可能にしておくべきだと痛感しました。僕の場合、950のテキストがあって、面倒過ぎて鬱になりそうでした。
最初から翻訳可能にしておけば、非常に簡単ですので、今から作成を考えている場合は、面倒かもしれませんが是非試してみてください。
翻訳方法
まず「Poedit download | SourceForge.net」から翻訳編集ソフト「Poedit」を自分のパソコンにインストールする必要があります。
「Windows」「Mac」「Linux」に対応していますので、殆どのパソコンで使える無料のソフトですので、先にインストールしておきましょう。
手順としては以下の通りに解説していきます。
- 翻訳関数
- 「Poedit」の使い方
翻訳関数
ワードプレスに用意されている関数には、翻訳を適応させるための関数が用意されています。
基本的には「出力テキストにかける関数」と「テキストドメインをロードする関数」の2つが必要ですので、順番に使い方を紹介していきます。
出力テキストにかける関数
まずは「出力テキストにかける関数」です。管理画面の設定項目の説明書きなどに使うことが想定されます。
テキストを翻訳する関数は幾つかありますので、先に紹介します。
<?php // 一般 __( 'Texts', 'your_textdomain' ); // 出力用 _e( 'Texts', 'your_textdomain' ); // echo __( 'Texts', 'your_textdomain' ); // 単数・複数をカバー _n( '%s Text', '%s Texts', intval( $num ), 'your_textdomain' ); // 条件により意味が異なる場合 _x( 'Texts', 'Context', 'your_textdomain' ); ?>
といった感じです。
この他にも「_ex」とか「_nx」とかありますが、組み合わせているだけの関数なので、ベーシックなこれらを覚えておけば良いと思います。ええ、「e」は「echo」、「n」は「numeric」、「x」は「context」と覚えておきましょう。「esc_attr」との組み合わせの「esc_attr__」などもありますが、ここでは不要でしょう。
ただ、実際に使うテキストには変数が含まれているので関数「printf」や「sprintf」を使って以下のように出力すると良いんじゃないでしょうか。
<?php $Text = sprintf( __( 'The value of %1$s is %2$d', 'your_textdomain' ), $name, $value ); // 出力用 printf( __( 'The value of %1$s is %2$d', 'your_textdomain' ), $name, $value ); ?>
といった感じです。
このようにして出力されるテキストに関数をかけていきます。
他の言語に翻訳されやすそうなので、英語の方をベースにした方が良いです。
JavaScriptだと「wp_localize_script」を使って、翻訳した値を持たせることができるみたいですが、僕はAJAXロードでPHP関数を使ったり、JSファイルを読まなくて良いなら直接phpタグを使って翻訳関数を使ったテキストを出力させています。
テキストドメインをロード
僕は最初テキストドメインという言葉がよく分からなかったんですが、翻訳ファイルに与えるIDみたいなもんだと思っています。
テーマの場合だと「load_theme_textdomain」で次のように読ませます。
load_theme_textdomain( 'your_textdomain', get_template_directory() . '/languages' );
この場合、テーマのルートにある「languages」フォルダを指定し、その中にある翻訳ファイル「ja.po」などのファイルを言語に合わせて読んでくれます。
プラグインの場合は以下のように「load_plugin_textdomain」を使います。
load_plugin_textdomain( 'your_textdomain', // テキストドメイン false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
翻訳ファイルですので最初の方に読ませてしまいましょう。僕は「functions.php」でフックさせずに読ませていますが、アクションフック「init」でも大丈夫です。翻訳されるテキストが読まれる前に読ませれば良いんだと思います。
翻訳ソフト
「Poedit」をインストールしたら起動させ、「ファイル」->「新規カタログ」でファイルを作成します。

するとフォームがポップアップしますので、項目を埋めていきます。
最初の「翻訳の設定」タブでは、次のように埋めます。

「プロジェクトの名前とバージョン」「翻訳チーム」「翻訳チームのメールアドレス」は自由に設定してください。
今回は英語のテキストを日本語に翻訳するようにするので、言語を「Japanese」に設定しています。
「文字符号化法」「ソースコードの文字符号化法」は「UTF-8」に設定し、「複数形」に関しては「Plural Forms — Localization Guide 0.9.0 documentation」で対象言語の値を入力します。これは言語によって異なります。日本語の場合は複数形でも変化はありませんが、英語などは複数形の名詞に「s」を付けるように、翻訳する言語によって値は異なりますのでちゃんと参照ページで確認してください。参照ページから貼り付けるのが無難です。
日本語の場合は、スクリーンショットの値でOKです。
次は「ソースの検索パス」タブです。

左から2つ目のアイコンが新規追加ですので、「.」だけ入力すれば、保存する場所をルートにして全てのファイルを検索対象にしてくれます。「languages」フォルダにファイルを保存する場合は、「..」と入力しておけば、1つ前のルートディレクトリを対象にできます。
最後の「ソース中のキーワード」タブでは、検索する関数を指定します。

テーマやプラグイン内で使用している翻訳対象のテキストに使った関数名を指定しています。
「_n」は2つ目に複数形の値を持たせた場合のテキストがあり、「_x」は2つ目にコンテキストを指定しますので、これをコメントとして取得できるようにしています。
あとは「OK」をクリックして、保存する箇所を指定するだけです。
日本語の場合はファイル名は「ja」にしてください。プラグインの場合は「your_textdomain-ja」という名前にしてください。
翻訳テキストを入力
あとは取得したテキストの翻訳テキストを以下のように入力するだけです。


上のリストから選択して、下の「翻訳:」のテキストボックスに翻訳テキストを入力します。
2つ目の例は関数「_n」でテキストを2つ取得したために、元のテキストが2つあります。
英語テキストはかなりスペルミスや誤訳もあるでしょうが、まぁ後々気付いた時に更新していけばいいと思っています。
テーマやプラグインを更新した時
更新した際は、翻訳のバージョンもそうかもしれませんが、一度上のボタンの左から2つ目にある「更新」をクリックし、再度全てのテキストを取得する必要があります。
同じ似たテキストの場合は勝手に推測して適当な翻訳テキストが貼り付けられている場合がありますが、色付きのテキストでリストに表示されます。問題なければ、「未確定」というアイコンをクリックして「確定状態」に変更し、誤訳の場合は翻訳テキストを入力してください。
さいごに
最初から翻訳関数を使っていれば、僕みたいに日本語テキストを英語翻訳して翻訳関数をかけ、さらに翻訳ファイルで日本語に翻訳するような面倒な作業が不要になります。950個のテキストを翻訳するのは本当に面倒ですので、ちょっとでもローカライズする可能性があるなら最初から翻訳関数を使うようにしておきましょう。
また、僕はまだ「_x」を使っていないんですが、2つ目のパラメーターの「Context」は、「Poedit」ではキーワード指定時に解説した通りの値を指定していれば、ちゃんとコメントとして取得でき差別化できるそうです。
僕も徐々に慣らしていくつもりです。
次はフランス語でも翻訳してみようかと思います。書き言葉は全然自信無いんですけどね。