WordPressプラグインの開発(7)

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


前回はショートコード生成用のメタボックスを追加し、オプション設定項目を増やしました。しかし、画面に表示する文言は英語でしたので、国際化対応して日本語で表示できるようにします。

国際化対応に必要なのことは3つ、表示させたい言語のリソースを用意すること、load_plugin_textdomain()で言語リソースを読み込むこと、そして__()関数を使用して翻訳した文言を用いることです。

今回は日本語のリソースを用意し、その他の(言語リソースの用意されていない)言語では英語で表示されるようにします。

言語リソースは、後で解説するテキストドメイン名に言語のロケールを付加したファイル名にします。拡張子は.moです。今回、テキストドメイン名はembed-osmとしますので、日本語ロケール(ja)を付けてembed-osm-ja.moとなります。
.moファイルは、拡張子.poのテキストファイルからmsgfmtコマンドで作成するバイナリファイルです。
そこで、まずは以下のようなembed-osm-ja.poファイルを作成します。文字コードはUTF-8を使用します。

msgid "Embed OpenStreetMap on the page."
msgstr "OpenStreetMapの地図をページに埋め込みます。"
msgid "Midori IT Office LLC"
msgstr "合同会社 緑IT事務所"
msgid "Embed OSM shortcode"
msgstr "Embed OSM ショートコード"
msgid "Map Layer"
msgstr "地図のレイヤー"
msgid "Generate shortcode"
msgstr "ショートコード生成"
msgid "Embed OSM Options"
msgstr "Embed OSM設定"
msgid "Map Width"
msgstr "地図の幅"
msgid "Map Height"
msgstr "地図の高さ"
msgid "Home Position"
msgstr "ホーム位置"
msgid "Latitude"
msgstr "緯度"
msgid "Longitude"
msgstr "経度"
msgid "Zoom"
msgstr "ズームレベル"
msgid "Get Coordinates from Map"
msgstr "地図から座標を取得"
msgid "Marker"
msgstr "マーカー"
msgid "Link to Large Map"
msgstr "大きな地図へのリンク"
msgid "Show"
msgstr "表示"
msgid "Hide"
msgstr "非表示"
msgid "View Larger Map"
msgstr "大きな地図を表示"

msgidで翻訳前の文言を、msgstrで翻訳後の文言を定義するだけです。

.poファイルから.moファイルを作成するときには、gettextライブラリに含まれるmsgfmtコマンドを使用します。Windows環境では、GetText for Windowsを利用することができます。コマンドプロントで

msgfmt -o embed-osm-ja.mo embed-osm-ja.po

を実行すると.moファイルができます。.moファイルは
embed-osm/languages
フォルダ内に置くことにします。

プラグインのヘッダコメントには、国際化のために以下の2行を追加し、

Text Domain: embed-osm
Domain Path: /languages/

テキストドメイン名と、言語リソースのパスを定義します。テキストドメイン名は、そのプラグイン固有の言語リソースを識別するための名前です。
以上で、WordPressの管理画面の「インストール済プラグイン」ページに表示されるプラグイン情報は日本語になります。

プログラムの中で出力する文言を国際化するには、load_plugin_textdomain()で言語リソースを読み込む必要があります。load_plugin_textdomain()はプラグインのロード時に実行する必要があるため、

add_action('plugins_loaded', array(&$this, 'embed_osm_loaded'));

でplugins_loadedアクションをフックし、

function embed_osm_loaded() {
  load_plugin_textdomain('embed-osm', false,
    basename(dirname(__FILE__)).'/languages/');
}

フックメソッドで言語リソースを読み込みます。ここでも、テキストドメイン名(embed-osm)と、言語リソースのパスを指定しています。
あとは、

echo '<tr><td>Map Width</td>';

のように、直接文字列を埋め込んでいる箇所をすべて、__()関数を用いて

echo '<tr><td>'.__('Map Width', 'embed-osm').'</td>';

のように書き換えます。__()関数の第1引数は.poファイルで定義したmsgid、第2引数はテキストドメイン名です。ロケールに対応した.moファイルがない場合は、msgidがそのまま出力されます。

以上で、ショートコード生成のメタボックス

と、オプション設定画面

の国際化ができました。

今回作成したプラグインのダウンロードはこちらからどうぞ。

WordPressプラグインの開発 1234567891011