読者です 読者をやめる 読者になる 読者になる

残像ブログ

残像だった

WordPressのdefaultテーマに出てくる__(アンダーバー2つ)の表記について

defaultテーマのcomments.phpの25行目あたりに

<?php 
comments_number(__('No Responses', 'kubrick'), __('One Response', 'kubrick'), __('% Responses', 'kubrick'));
?>

という表記があり、「この引数の書き方はなんだ?」と思ったのでメモ

言語のローカライズ(翻訳?)の為の物

WordPressGettextという文字列ローカライズ用のフレームワークを使っているそうです。__()って表記はその為のものらしい。

defaltテーマのフォルダの中に入ってる以下の3ファイルはGettextに関連したファイルです。

このGettextの仕組は以下のようになっています。

  1. phpコードに翻訳文字列を特定する文字列idを記述する
  2. 訳を記述する為のテンプレートファイル(pot形式)を生成する
  3. 翻訳者がテンプレートをコピーして翻訳を記述する(po形式)
  4. poファイルからmoファイルを生成(訳はこのファイルから読み込まれる)

こうする事によって、開発者と翻訳者の作業を分けることができるとか

1.phpコードに翻訳文字列を特定する文字列idを記述する

<?php 
comments_number(__('No Responses', 'kubrick'), __('One Response', 'kubrick'), __('% Responses', 'kubrick'));
?>

(このcomments_number()というテンプレートタグは、記事のコメント数を数えて、その数により表示する文字列を指定できる。引数1はコメントなしの場合、引数2はコメントが1つの場合、引数3はコメントが2つ以上の場合)

コードの「No Responses」「One Response」「% Responses」が文字列idです。文字列idは翻訳した文字列を挿入したい場所に記述します。
後の「kubrick」は翻訳ファイルを読み込むためのものらしいけど良くわからん。

2.訳を記述する為のテンプレートファイル(pot形式)を生成する

生成作業については略

生成されたpot形式のファイル(defaltテーマではkubrick.pot)は以下のようになっています(kubrick.potの245〜255行)

#: comments.php:21
msgid "No Responses"
msgstr ""

#: comments.php:21
msgid "One Response"
msgstr ""

#: comments.php:21
msgid "% Responses"
msgstr ""

「No Responses」「One Response」「% Responses」の文字列idが指定されていますが、テンプレートなので翻訳を記述するmsgstrの部分は空です。

3.翻訳者がテンプレートをコピーして翻訳を記述する(po形式)

翻訳者は2のkubrick.potをコピーしてja.poファイルを作り、そこに訳を記述していきます(ja.poの245〜255行)。

#: comments.php:21
msgid "No Responses"
msgstr "コメント / トラックバックはありません"

#: comments.php:21
msgid "One Response"
msgstr "コメント / トラックバック1件"

#: comments.php:21
msgid "% Responses"
msgstr "コメント / トラックバック%件"

先ほどは空だったmsgstrに訳が記述されています。
(「% Responses」の訳にある%マークはcomments_numberでコメント数を表示させる為の物)

4.poファイルからmoファイルを生成(訳はこのファイルから読み込まれる)

poファイルができあがったらmoファイルを生成します(生成作業は省略)。defaultテーマではja.moです。

最後に大事なのが、このja.moをphpに読み込ませるためにfunction.phpに以下のコードを記述することです(defaultテーマのfunctions.phpの7行目)。

load_theme_textdomain( 'kubrick' );

ここの「kubrick」がコード内のkubrickと一致していないと行けないそうです。