プラグインとテーマをローカライズする

WordPress のローカライズの基本

WordPress には gettext を利用したローカライゼーション(多言語化、現地語化)の仕組みが組み込まれているので、必要な翻訳ファイルさえ手に入ればわずかな設定で日本語化することが可能です。

簡単に手順をまとめると、

  1. 翻訳ファイル(.mo) を入手する。日本語リソースの情報がこちらにまとめられています
  2. 翻訳ファイルを <WP_INSTALL>/wp-includes/languages/ 以下に配置する。languages というディレクトリは最初はないので自分で作る必要があります。
  3. <WP_INSTALL>/wp-config.php の
    define ('WPLANG', '');
    の行を翻訳ファイルの名前に合わせて書き換える。日本語なら翻訳ファイルが ja.mo なので
    define ('WPLANG', 'ja');
    とします。WPLANG を変更できない場合はファイル名の方を WPLANG に合わせて変更しても問題ないはずです(ja.mo ⇒ ja_UTF.mo とか)。

ところがこの手順で日本語化できるのは基本的には管理パネルの内容だけで、一般の読者が目にするオモテの部分は対象になりません。なぜかというとオモテの部分はテーマでコントロールされているので、テーマのテンプレートに含まれるテキストの日本語化がされない限りオモテは変わらないのです。プラグインについても同様で、プラグインで制御されるテキストのローカライズは個々のプラグインごとに考慮される必要があります。

それではテーマやプラグインの作者がローカライズのために考慮すべきポイントとは何でしょうか。テーマやプラグインにおいても gettext を使用してローカライズすることには変わりありません。テーマやプラグインではその内部で明示的に翻訳ファイル(.mo) をロードする必要があるわけですが、プラグインが翻訳ファイルをロードするために使うのが load_plugin_textdomain() という関数です。

プラグインをローカライズする

Geo プラグインを例に見てみると、コードの先頭に次のような1行があるのがわかります。

load_plugin_textdomain('Geo');

load_plugin_textdomain() の引数はローカライズが及ぶ範囲を示すドメインで、翻訳ファイルのファイル名は {ドメイン}-{ロケール}.mo で決まります。従って Geo ドメインの日本語ロケール(ja) の翻訳ファイルは Geo-ja.mo です。

またプラグインの中でローカライズの対象となるテキストには、次のように __() や _e() の第2引数で明示的にドメインを指定してやる必要があります。

__('Options updated.', 'Geo')

ドメインの指定を忘れると、そのテキストはデフォルトのドメインに属することになってしまいます。デフォルトのドメインというのは <WP_INSTALL>/wp-includes/languages/ に置かれた翻訳ファイルの対象という意味です。

なお、load_plugin_textdomain() では第2引数(オプション)で翻訳ファイルの置き場所を指定することができます。デフォルトの置き場所は <WP_INSTALL>/wp-content/plugins/ の直下です。

ここまでをまとめると、/wp-config.php で
define ('WPLANG', 'ja');
が定義されているときに、<WP_INSTALL>/wp-content/plugins/Geo-ja.mo という翻訳ファイルが存在するなら、Geo プラグインの出力するテキストは Geo-ja.mo の内容に従って日本語にローカライズされるということになります。

テーマをローカライズする

テーマのローカライズも基本はプラグインの場合と同じです。テーマの場合は、翻訳ファイルのロードが load_theme_textdomain() で行なわれる違いがあります。

load_theme_textdomain() でも同様に第1引数でドメインを指定しますが、翻訳ファイルのファイル名はドメインに関わりなく {ロケール}.mo で決定されます。従って日本語ロケール(ja) の翻訳ファイルは ja.mo です。

なお load_plugin_textdomain() と異なり、load_theme_textdomain() では第2引数のファイルパス指定がありません。翻訳ファイルの置き場所はテーマのディレクトリ(<WP_INSTALL>/wp-content/themes/theme-name/)直下に固定されます。

テーマにおける load_theme_textdomain() の呼び出しは普通、functions.php の内部で行なわれます。

なお残念なことですが、gettext によるローカライゼーションをサポートしているテーマはそれほど多くありません。WordPress に標準で付いてくる Default テーマや Classic テーマでもサポートされていません。そのためこれまで多くの人は日本語環境でテーマを使うためにテンプレートファイルを編集して直接日本語のテキストを埋め込んで使ってきました。これは結構な苦労です!

最近注目を集めている Sandbox テーマでは、幸いなことに gettext をサポートしています。今後さらに gettext をサポートするテーマが拡がれば、WordPress を使うウェブデザイナーの仕事は今より多少は楽になるかもしれませんよ。

4 thoughts on “プラグインとテーマをローカライズする

  1. Pingback: WordPress情報関連サイト一覧

  2. Pingback: WP-PostViewsの日本語化 | H2+ Goes On

  3. Pingback: テーマの日本語化ではまったこと | C-STYLES

  4. >翻訳ファイルの置き場所はテーマのディレクトリ(/wp-content/themes/theme-name/)直下に固定されます。

    この記事のおかげで昨日一日中悩んだテーマの日本語化ができました。moファイルの置き場所がいけなかったという単純な原因でした。

    ありがとうございます!!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s