前回で PoEdit のインストールを書いたので、ついでにWordPressテーマを作成した時に行う PoEdit でのカタログ作成で、一部わかりづらい所があるのでメモ。
今回はWordPressテーマの作成として、Twentyシリーズに従って、テーマディレクトリの中にlanguagesフォルダを作成し、その中に.poファイルと.moファイルを置くという前提で解説します。
PoEdit を起動します。
メニューから [ファイル] – [新規カタログ] を選択します。
カタログの設定画面が開きますので、「翻訳の設定」タブの プロジェクト名、翻訳者、メールアドレス、言語、文字コードを入力します。文字コードは UTF-8 がいいでしょう。
次に複数形の値指定ですが、英語に併せて
1 |
nplurals=2; plural=n != 1; |
と書いておけばそれでいいのですが、意味がわからないまま使うのも気持ち悪いので一応解説をします。
例えば英語では単数形・複数形で単語自体が変わってきますよね。1 item, 2 items といったように後ろにsがついたり ~es になったりします。Gettextによる翻訳では、値を変数で指定することもできるので、1パターンのみの翻訳文では 1 items や 2 item といった間違った表記になる可能性があります。その為、変数の値が単数の場合と複数の場合で翻訳文を振り分ける必要があるわけです。
次の例は PoEdit公式ページにあったものです。結論から言って、上の英語の条件と意味は同じになります。
1 |
nplurals=2; plural=n == 1 ? 0 : 1; |
前半部分の nplurals=2; ですが、これは「変数の値によって翻訳文が2パターンありますよ」という指定です。
日本語の場合は、単数・複数関係ないので nplurals=1 になります。言語によって(セルビア語?)は3パターンに分かれる事もあるようです。
後半部分は振り分け条件を指定しています。三項演算子とか三項式 と呼ばれる表記方法で書かれています。if文の省略形と考えればわかりやすいです。PHP や Javascript でも使える書き方です。次の例は同じ意味の式になります。
1 2 3 4 5 6 7 8 9 |
// 三項式 n == 1 ? 0 : 1; // if文 if( n == 1 ) { return 0; } else { return 1; } |
?(クエスチョンマーク) と :(コロン)で then, else の区切りにしています。
話を戻すと、この場合は、「変数の値が1だったら0を返し、それ以外ならば1を返す」という意味になります。
じゃあ返り値の0とか1って何だ?ってことになりますが、それは作成される.poファイルを見ればわかります。
1 2 3 4 |
msgid "% comment so far" msgid_plural "% comments so far" msgstr[0] "" msgstr[1] "" |
返り値の0や1は配列のキーを指しているわけです。
ですから msgstr[0] には単数形の場合の翻訳文、msgstr[1] に複数形の翻訳文を入れるということになります。
簡単にまとめると、日本語の場合は単数・複数は関係ないので
1 |
nplurals=1; plural=0; |
フランス語の場合は
1 |
nplurals=2; plural=n > 1; |
となるようです。true(1), false(0)ですね。
英語とフランス語の違いは0(ゼロ)の扱い方で、英語のゼロは複数形扱いになるためです。
次に、「ソースの検索パス」タブに移ります。ここがわかりづらい所の2箇所目です。
ベースのパス ですが、作成する.poファイルから、テーマのルートディレクトリまでを相対パスで指定します。絶対パスでももちろん動作しますが、コメントとして入る ファイル名:行番号 の箇所に絶対パスが入ってしまいますので後々面倒なのです。今回は1つ上の階層になるので ../ と指定しましょう。
次に パス の指定です。ベースのパスだけで充分なのですが、ここも指定しないと「ソースから更新」が出来ないので . ドット1つだけ打っておきましょう。
最後に「ソース中のキーワード」タブを設定します。
現在のバージョンでのWordPressに使われる国際化関係の関数を全て登録します。(テーマ作成では上2つくらいしか使いませんが念のため)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
__ _e _n _x _ex _nx __ngettext translate esc_attr__ esc_attr_e esc_attr_x esc_html__ esc_html_e esc_html_x _n_noop _nx_noop translate_nooped_plural |
これですべての設定が完了したので、一度保存をします。.poファイルの保存場所を聞かれるので、テーマの languagesフォルダ内に保存してください。
保存する事で、.poファイルの場所と先ほどの設定内容からベースディレクトリが確定した事になります。
PoEditは、このベースディレクトリ以下のソースファイル内を検索し、設定した関数に渡している文字列を翻訳対象として自動で収集し、カタログ化します。
しばしの読み込みの後、ご丁寧に新規追加される文字列と削除される文字列を教えてくれます。
OKを押すと、ソーステキストの欄に翻訳対象の文字列が追加されます。
この状態で再度保存をし、.poファイルを .potファイルへリネームすれば完了です。