「WordPressのローカライズ、つまり日本語化」は3部に分けて書いています。
WordPressのローカライズ、つまり日本語化 – その2 gettextとPoeditとpot
WordPressのローカライズ、つまり日本語化 – その3 poとmo
今回は「WordPressのプラグインのローカライズ、つまり日本語化 – その1 __関数と_e関数」です。
WordPressを使っていると、お世話になるのがプラグインです。
しかし、世界中で使われているWordPressですから、そのプラグインも海外のものが圧倒的に多く、表示は外国語だったりするわけです。
誰でも使い易いサイトを作る為には、プラグインの日本語へのローカライズが必要になります。
ではどうするか?
プラグインのコードを眺め、手当り次第、外国語で表示される部分を日本語訳に書き換えていくわけではないんですね。
gettextを使います。
gettextはソフトウェアの多言語化の為のライブラリーとツール群の事を言います。
英文で表示されるプログラム内の他言語に翻訳して表示させたい英文を関数やマクロでラップし、その英文を言語ファイルから呼び込んだ他言語の翻訳文に置き換える為に使う関数やツールをまとめてgettextと言うんですね。
C言語はもとよりC++やObjective-C、Bourne ShellやBashの様なUnixシェル、Python、Perl、Ruby、PHPなどのスクリプト、JavaやSmalltalk[GNU]やAwk[GNU]やPascalその他、多くのプログラム言語で採用されています。
WordPressは、PHPで書かれていますから、gettextを使えるわけです。
gettextのキーワードは__関数、_e関数と、言語ファイル(.pot .po .mo)、Poeditです。
wikipedia gettext
WordPress私的マニュアル __
WordPress私的マニュアル _e
__関数も_e関数もWordPressのテンプレートタグで、翻訳したテキストを取得したり表示させたりするものです。__関数の__は_(アンダースコア)を2つ並べたもの。_e関数は_(アンダースコア)1つにeです。
プラグイン内に
1 |
__(翻訳する英文の文字列, ドメイン名) ←__関数 |
や
1 |
_e(翻訳する英文の文字列, ドメイン名)←_e関数 |
を打ち込んでおき、プラグイン用に作った単語・文の翻訳一覧を載せた言語ファイルから該当するものを取得または表示させます。
__関数と_e関数の違いは、_e関数が__関数に出力機能を持たせたもので、WordPressのテンプレートタグで言うなら、get_bloginfo関数(__関数の方)とbloginfo関数(_e関数の方)の関係と同じです。
プラグイン内では大体__関数・_e関数が使われていますが、エスケープ処理をした翻訳テキストを取得する場合はesc_attr__関数、翻訳テキストを出力させる場合はesc_attr_e関数、htmlを取得する場合はesc_html__関数、htmlを出力するにはesc_html_e関数が用意されています。
WordPress私的マニュアル esc_attr__
WordPress私的マニュアル esc_attr_e
具体的な例をプラグイン「WP Multibyte Patch」の「wp-multibyte-patch.php」で見てみると、
1 2 3 4 |
if ( !$this->is_wp_required_version( $required_version ) ) { deactivate_plugins( __FILE__ ); exit( sprintf( __( 'Sorry, WP Multibyte Patch requires WordPress %s or later.', 'wp-multibyte-patch' ), $required_version ) ); } |
3行目に__関数が使われていて、その中の
‘Sorry, WP Multibyte Patch requires WordPress %s or later. ‘ が翻訳する英文の文字列
‘wp-multibyte-patch‘ がドメイン名です。
ドメイン名と言うのは、このプラグインで使う言語ファイルを識別する為のもので、ドメイン名の後に – と翻訳後の言語の略称と.moを付けるとその言語ファイル名になります。
日本語に翻訳する言語ファイルなら、「ドメイン名-ja.mo」
ドメイン名「wp-multibyte-patch」の日本語ファイルなら、「wp-multibyte-patch-ja.mo」
となります。
言語ファイル「wp-multibyte-patch-ja.mo」
に書き込まれている
‘Sorry, WP Multibyte Patch requires WordPress %s or later.‘
に対応する日本語訳が、この__関数の部分に入ります。
ここの__関数はsprintf関数の第1引数になっているので、この英文内の%sにsprintf関数の第2引数の$required_version(このWP Multibyte Patchが使用できるWordPressのバージョン)が代入されます。
これがスクリプトの
ここで「.mo」と言う拡張子が出てきましたので、次回は言語ファイル・gettext・Poeditについて。