翻訳ファイルを用意してプラグインを日本語化する

WordPressの便利なところはプラグインによる拡張性だが、多くのプラグインが英語で提供されている。英語のままでも別に問題はないのだが、企業サイト、商用ホームページを作成するにあたって、クライアントが直接触れるようなところはなるべく日本語化しておきたいところだ。また、顧客の要望に応じたプラグインを作成する必要性が生じた際に初めから国際化できるように対応しておくと有益なプラグインができた時に公開することもできるだろう。

プラグインの国際化(ローカライズ)、翻訳はどのようにして行えばいいのだろうか。WordPressの翻訳については、本家サイトのTranslating WordPress « WordPress Codexに詳しく書かれているので一度見ていただきたいが、翻訳に際して、大きく2つのステップがあることがわかる。

  1. プログラムの開発者が国際化対応のコードを書く
  2. 翻訳リソースファイルを編集して翻訳する

WordPressの翻訳の仕組み
WordPressの国際化は、gettextを用いている。gettextについては、PHPでメッセージカタログはgettextしかありえないでしょ(何故gettextか?編)あたりを読んでいただけるといいと思うが、要は多言語化するためのライブラリとコマンドのことである。仕組みとしてはこうである。プログラムのコードから、メッセージカタログである翻訳リソースファイル(.poファイル)を作成し、それを各言語用に翻訳し、バイナリファイル(.moファイル)を生成し読み込むのである。

国際化対応のコードとは?
実際にインストールしてあるプラグインのソースコードを見てみてほしい。国際化に対応してあるプラグインはたいていソースのはじめに下記のようなコードがあるはずだ。

load_plugin_textdomain('cforms');

これは複雑なお問い合わせフォームを作成するプラグイン cforms II
で紹介したcforms IIのコードである。この関数を読み込むと、__()と_e()で囲まれた部分が自動的に翻訳対象となる仕組みである。ちなみにこの関数は第一引数に任意のドメイン(通常はプラグイン名か)を、第二引数に翻訳ファイル(.moファイル)を読み込むディレクトリを指定できる。デフォルトではプラグインディレクトリのwp-content/pluginsとなっているので、このcforms IIの翻訳ファイルはwp-content/pluginsにアップロードしなくてはいけない。

load_plugin_textdomain('cforms','wp-content/plugins/contactforms');

このようにディレクトリを指定すると、翻訳ファイルの位置が変わる。余談だが、多くのプラグインはディレクトリ構造を持っており、wp-content/pluginsにディレクトリごとアップロードする仕組みだ。このcformsのように翻訳ファイルの位置がプラグインディレクトリの直下にある(つまりcforms II本体はwp-content/plugins/contactformsなのにcforms-ja.moはwp-content/pluginsにあるということ)となんだか気持ち悪い気がするのだが、まぁ、好みの違いか。

翻訳対象となる関数 __()と_e()
さて、翻訳対象となる関数が2つ用意されている。__()と_e()である。どちらも翻訳するメッセージを引数にとるが、違いは翻訳されたメッセージをreturnで返すか、echoで返すかの違いである。第1引数に翻訳するメッセージを、第2引数にload_plugin_textdomain()で指定したドメインを代入する。ドメインを指定しない場合はWordPress本体の翻訳ファイルを参照するようになるので忘れずに指定したい。

__($message, $domain)
翻訳された$messageをreturnで返す
_e($message, $domain)
翻訳された$messageをechoで返す

例文を見てみよう。

$message = __('This is an example.', 'wordpressgogo');
_e('This is an example.', 'wordpressgogo');

上の__()は$messageに値を代入するのに対し、_e()はメッセージを出力するコードである。そのため、以下のコードは同じことだ(冗長的だけど)。

_e('This is an example.', 'wordpressgogo');
echo __('This is an example.', 'wordpressgogo');

ちなみに動的な値を翻訳する場合はどうすればよいのだろうか。sprintf()を利用すると変数を$message内に含ませることができる。下記のような感じだ。

$name1 = 'WordPress';
$name2 = 'Go Go';
echo sprintf(__('I am %s.','wordpressgogo'), $name); // 1つの時
echo sprintf(__('I am %1$s %2$s.', 'wordpressgogo'), $name1, $name2); // 2つ以上の時 

gettextの翻訳関連ファイル
gettextの翻訳関連ファイルは3つある。プラグインを翻訳するには、.potファイルが用意されている場合は、各言語用に.poファイルを編集し、.moファイルを作成する。.potファイルがない場合はソースコードから.potファイルを生成することになる。

POT (Portable Object Template)
ソースコードの中から先ほどの__()と_e()のメッセージをすべて抽出した翻訳リソースのもとになるファイルだ。実質的には.poファイルと同じだと思うが、元の翻訳リソースファイルとして.potファイルといわれる。ちなみに.potはPowerPointのテンプレートファイルと同じ拡張子である。
PO (Portable Object)
上の.potファイルをもとに各言語に翻訳したものが.poファイルである。
MO (Machine Object)
その名の通り、.poファイルを機械が効率よく読み込めるようにしたバイナリファイルが.moファイルである。

実際に翻訳するには?
さて、実際に翻訳するには翻訳ファイルを編集できるツールを使う必要がある。広く紹介されているのがpoEditというエディタでWindows、Mac OS X、Linuxに対応している。現在の最新バージョンは1.3.9のようだ。インストールの仕方や使い方は、お問い合わせフォームを簡単に作成するプラグイン Contact Form 7で取り上げたプラグインの開発者のmiyoshiさんが、poEdit で翻訳ファイルを作る « iDeasiloで詳しく解説してくださっているのでそちらを参照してほしい。ここでは簡単に流れだけを追っておく。

poEdit

  1. poEditをダウンロードし、インストールする
  2. .potファイルもしくは.poファイルをpoEditで開く
  3. 翻訳する
  4. 保存する(自動的に.moファイルが生成されるはず)
  5. できた.moファイルをload_plugin_textdomain()で指定されたディレクトリにアップロードする

以上の流れで、プラグインの翻訳が完成するはずである。poEditは使い方に少し癖がある気がするのでmiyoshiさんの解説をしっかり読んだ方がいいかもしれない。

翻訳ファイル.moファイルのファイル名
さて、最後に注意しておかなければならないのが、翻訳ファイル.moのファイル名についてだ。このファイル名がきちんと設定されていないと翻訳がうまくいかない。ファイル名の規則としては、load_plugin_textdomain()で指定した{ドメイン}-{ロケール}.moとなる。ロケールの確認方法は、wp-config.phpの下記の部分。

define ('WPLANG', 'ja');

おそらく’ja’となっているはずだ。そのため、上記のcforms IIの場合だと、ドメインがcforms、ロケールがjaなので、cforms-ja.moとなる。間違えないようにしたい。

テーマファイルの翻訳
上記まではプラグインの翻訳を中心に見てきたが、テーマファイルの翻訳も可能である。しかしながら、国際化対応されたテーマファイルは多くないかもしれない。テーマファイルの翻訳にはまず、load_theme_textdomain()を読み込んでおく必要がある。通常はfunctions.phpで呼び出される。引数は1つだけで、ドメインを指定するのみである。翻訳ファイルの位置は自動的にテーマディレクトリの中(wp-content/themes/theme-name)となる。また、翻訳ファイル.moファイルの名前は、{ロケール}.moと決まっており、上記の例だと、ja.moとなる。テーマファイルも翻訳できるということを知っておくといいだろう。

最後に
さて、長々とプラグインの日本語化について述べてきたが、複雑そうに見えても一度仕組みさえ知ってしまえば簡単だと思う。早い話、プラグインの翻訳はpoEditで.poファイルを編集し、生成した.moファイルをアップロードするだけである。WordPressは海外のプラグインが多くまだまだ日本語化されていないプラグインも多いのでぜひ日本語化に挑戦してもらいたい。そして、翻訳ができたら積極的に公開するのがいいだろう。また、新たにプラグインを作成する場合もはじめからローカライズ対応しておくとよいだろう。

参考にしたページ

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

«
»

関連する投稿

Comments and Trackback are closed.

Trackbacks (11)

[…] By kungfu • 2008年4月7日 翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブ

[…] WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go […]

[…] default.moをエディタでみると、どうやらバイナリのファイルのようで、moファイルを直接エディタで作成するのは難しいことがわかりました。default.poは、テキストファイルで、おそらくこちらを作成・編集し、なんらかのツールを使ってmoファイルを作成するのだろうと思いました。Webで調べたところ、WordPress Go Goというサイトの「翻訳ファイルを利用してプラグインを日本語化する」のページに、poEditというpoファイルを編集し、moファイルを作成してくれるツールが紹介されていたので、これを使うことにしました。default.poをコピーし、ja.poファイルを作り、ja.poファイルを編集し、一部の日本語訳を記入し、ja.moファイルを作成しました。このja.moファイルをdfblogの下のlanguagesフォルダにコピーすると、翻訳したところは日本語が表示されるようになりました。 WordPress […]

[…] Continued here: 翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go Share and Enjoy: […]

[…] インやテーマを作る際には国際化対応した方が絶対良いです。簡単に出来るので是非、挑戦してみてください。ここが参考になるかな。翻訳ファイルを用意してプラグインを日本語化する […]

[…] また、翻訳の手順は、翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Goを参照。 […]

[…] インやテーマを作る際には国際化対応した方が絶対良いです。簡単に出来るので是非、挑戦してみてください。ここが参考になるかな。翻訳ファイルを用意してプラグインを日本語化する […]

[…] 翻訳ファイル(ja.po)を取ってきます。WordPressの翻訳ファイルに関しては、ここのサイトをご覧ください。気に入らない翻訳はPoeditで修正してしまいます。Poeditは保存すればpoファイルか […]

[…] 翻訳ファイルを用意してプラグインを日本語化する | WordPressで企業ウェブサイト作成・商用ホームページ制作 WordPress Go Go […]