サイトを多言語化するときには、サイトの構成やサイト内コンテンツの翻訳など多言語環境に合わせた設計と構築作業が必要です。ここではコンテンツの翻訳について、WordPressで使用する翻訳関数の主なものを紹介したいと思います。POT,PO,MOの翻訳ファイルはPoeditを使って作成しています。
多言語化全体やPoeditの使い方については「WordPressテーマの多言語化」を参照ください。
目次
WordPress翻訳関数
WordPressで使用する翻訳関数はいろいろあります。
__() _e() _n() _n_noop() _x() _nx() _nx_noop() _ex() esc_attr__() esc_attr_e() esc_attr_x() esc_html__() esc_html_e() esc_html_x() _c() _nc()
この中から主な(よく使われるか、たまに見る)関数を取り上げます。また、テキストドメインは各関数を使用するときに必ず設定することがWordPressで推奨されています。
__( $text, $domain ); *アンダーバー2つ
$textの翻訳した文字列を返します。文字列を変数に入れたり、HTMLの属性値を設定する時に使います。
文字列をエスケープしたい場合は、esc_attr__()もしくはesc_html__()を使います。
_e( $text, $domain );
$textの翻訳した文字列をechoを使って表示します。戻り値はありません。文字列を表示する時に使います。
文字列をエスケープしたい場合は、esc_attr_e()もしくはesc_html_e()を使います。
_n( $single, $plural, $number, $domain );
$singleと$pluralの翻訳した文字列を返します。$singleは単数形で$pluralは複数形です。$numberが単数のときは$singleの翻訳文字列、複数のときは$pluralの翻訳文字列が返ります。
例) $rating = 3; printf( _n( '%s star', '%s stars', $rating, 'text-domain' ), $rating ); // 3starsが表示される
_x( $text, $context, $domain );
$textの翻訳した文字列を返します。文字列を変数に入れたり、HTMLの属性値を設定する時に使います。__()との違いは、$textを翻訳する時に表示箇所などの違いによっては同じ$textでも翻訳を変えたい場合、$contextを設定して同じ$textに違う翻訳を割り当てることができるようにする関数です。
例)'Book'という英語の翻訳を表示する場所によっては「本」と「書籍」という翻訳に使い分けたいときなど、 printf( _x( 'Book', 'Category of each book', 'text-domain' ); printf( _x( 'Book', 'General naiming', 'text-domain' ); とすると同じBookで違う翻訳を作成できます。
文字列をエスケープしたい場合は、esc_attr_x()もしくはesc_html_x()を使います。また、_xの翻訳文字列を表示したい場合は、_ex()を使います。
Poeditの設定
上記の関数で翻訳する対訳文字をPoeditで作成しますが、ここでは少し調べても情報があまり無かった設定内容を記述します。Poeditの使い方は「WordPressテーマの多言語化」を参照ください。
対訳を作成するために、Poeditの「ソース中のキーワード」タブの設定に上記関数を追加していくのですが、単純に追加して動作するのは__()と_e()だけなので、_n()や_x()も動作するように設定する必要があります。以下は設定の一覧です。
__ _e _n:1,2 _x:1,2c _ex:1,2c esc_attr__ esc_attr_e esc_attr_x:1,2c esc_html__ esc_html_e esc_html_x:1,2c
ご覧のように_nや_xには付加情報があります。これを設定時に記述しないと動作しません。
「:1,2」の付加情報は、Poeditにこの関数は2つの翻訳部分(引数が2つ)があることを示しています。1つ目は単数形で2つ目は複数形の翻訳。「:1,2c」は、2つ目の引数がcommentであることを示しています。つまり翻訳対象は1つ目の引数で、2つ目のcommentによって対訳を変えることを示しています。