こちらのサイトではDRUPAL10に関連する記事を掲載しています。
はじめに
WordPressは、PHPのgettextという仕組みを利用して多言語化をしています。
今回作成したプラグインにこの機能を使って多言語化をしたいと思います。
翻訳のしくみ
WordPressで表示される文言が各言語に翻訳される仕組みは、Internationalization(多言語化できるように標準化すること)とLocalization(標準化の仕組みで翻訳をすること)によって実現しているようです。
Internationalizationは、テーマやプラグインの制作者が、翻訳ファイルなどの仕組みをちゃんと整えて、色々な国の言葉に簡単に翻訳できるようにするように環境を整えることで、Localizationは、その逆でその仕組みを利用して翻訳を行うことです。
この仕組み自体はWordPressにそれぞれモジュールが組み込まれているため、制作者はただこの仕様を理解して、コードを書くことと、仕様に則った翻訳ファイルを用意するだけです。
翻訳ファイルについて
翻訳ファイルには、拡張子がpot、po、moのそれぞれ異なるファイルが存在します。
- POTファイル (Portable Object Template)
- PO ファイル (Potable Object)
- MOファイル (Machine Object)
POTファイル (Portable Object Template)
テンプレートファイル。それぞれの言語ごとに作成される翻訳ファイルの雛形。
ソースコードで使用されるメッセージのID(基本となる言語、英語が多い)のみ。
翻訳ファイルはこれをコピーして作成する。
例
msgid: “test message”
msgstr: “”
POファイル (Potable Object)
言語ごとに存在するファイル。テンプレートファイルから作成したファイルでIDに対して翻訳がはいる。
翻訳ファイルのヘッダにはコメントを記載する
例
“Project-Id-Version: \n”
“POT-Creation-Date: \n”
“PO-Revision-Date: \n”
“Last-Translator: \n”
“Language-Team: \n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=UTF-8\n”
“Content-Transfer-Encoding: 8bit\n”
“X-Generator: Poedit 1.5.7\n”例
msgid: “test message”
msgstr: “テスト メッセージ”
MOファイル (Machine Object)
POEDITなどでコンパイルされたバイナリファイル。実行時にWordPressが読み込んで使用する。
翻訳ファイルの編集
編集アプリのダウンロード
翻訳ファイルはpoファイルと呼ばれ、編集するには専用のpoファイル編集用ソフト【 poedit 】を使用します。
poeditはフリーソフトで以下のサイトからダウンロードできます。
翻訳ファイルの読み込みと保存
POEDITでPOファイルを読み込んで、各文言をそれぞれ翻訳していきます。
翻訳がすべて完了すると、メニューのファイル→保存を選択して、POファイルを保存します。
この時、MOファイルも作成され同時に保存されます。
翻訳ファイルを使うための下準備
wp-contentフォルダの直下にlanguagesフォルダがあり、管理画面などの言語ファイルはここに入っています。
翻訳ファイルはこのフォルダがデフォルトになっているようです。
プラグインを多言語化する場合は、対象となるプラグインのlanguageフォルダに翻訳ファイルを置きたいですね。
そこでプラグインが読み込まれたタイミングで翻訳ファイルを読み込ませるコートを記述する必要があります。
翻訳ファイル読み込み関数(load_plugin_textdomain)
実際には下記のWordPress関数を呼び出して翻訳ファイルを読み込みます。
load_plugin_textdomain( string $domain, string $deprecated = false, string $plugin_rel_path = false )
翻訳ファイル読み込み関数をアクションに登録
呼び出すタイミングは、プラグインがロードされた直後がよいのでadd_actionで上記の翻訳ファイル読み込み関数を次の要領で登録します。
所属しているテーマのフォルダに配置する場合、翻訳ファイルをロードする記述は必要となります
カスタム投稿タイプ登録(functions.php)する前にロードが必要です
<br> // 翻訳ファイルをロード<br> load_theme_textdomain("product", get_stylesheet_directory() . '/languages'); <p>// カスタム投稿タイプ登録<br> add_action( 'init', 'my_custom_post_product' );<br></p>
プラグインに追加する場合は、プラグインのロード前に翻訳ファイルを読み込むようにプラグインクラスののコンストラクタに下記のコードを追加します
add_action( 'plugins_loaded', array($this, 'load_language_files')); function load_language_files() { load_plugin_textdomain( self::myPluginDomain, false, basename(dirname(__FILE__)) . '/languages/'); }
以上で、翻訳ファイルが読み込まれました。
翻訳ファイルで翻訳
プラグインの中で翻訳ファイルに登録した文言を翻訳関数を使って表示する場合は、__()や_e()などを使って、次のように書いていきます。
翻訳した文字列に変換する
$a = __( ‘About this plugin, {プラグインドメイン} );
翻訳した文字列にecho で出力する
_e( ‘About this plugin, {プラグインドメイン} );
キャッシュを使用している場合の注意点
高速化するためのプラグインを使用している場合など翻訳ファイルデータはキャッシュに取り込まれている場合があります。
その場合は一度クリアしてください。そうしないといつまでたっても新しい翻訳ファイルで翻訳されません。
KUSANAGIを使用している場合
KUSANAGIは独自のキャッシュをもっていますので、次のようにしてキャッシュをクリアします。
管理画面のKUSANAGIから翻訳アクセラレータを開きます。
次に「キャッシュの強制削除を行う」にチェックを入れて、変更を保存ボタンをクリックします。
以上で翻訳ファイルを使用して文言を表示することができるようになりました。
この記事またはDrupalに関するご質問がございましたら、お気軽にお問い合わせください。