yiiの国際化対応

yiiの国際化対応はかなり簡単にできるように用意されているが、良い日本語の説明がなかったので防備録。

まず翻訳対象の文字列は「Yii::t('カテゴリ名','翻訳対象のメッセージ')」として記述していく。

カテゴリ名はなんでも良いです。
→「yii、zii」などの予約語でなければ。
→バリデータのメッセージなどはフレームワーク内に入ってる。独自のメッセージに変更したい場合は後述する「message」ディレクトリにCOPYしてくる必要あり。

このカテゴリは同じ翻訳対象メッセージが存在する場合に翻訳を変えたいときに使用する。

ある程度、「Yii::t()」を記述したらここから翻訳ファイルを作成する準備に入ります。

protected/messageに移動してここにフレームワーク内のmessageフォルダからconfig.phpをcopyしてくる。

「languages」の配列でしている部分が翻訳対象なのでここは好きに定義してください。

ここまで準備できたら実際に翻訳作成します。

翻訳ファイルの作成は「yiic」コマンドで作成します。

./protected/yiic message ./protected/message/config.php

※pathは適宜読みかえること。

上記を実行するとmessageフォルダ配下にconfig.phpで指定したロケール分のフォルダが作成されているはずです。
その中に「Yii::t()」で指定したカテゴリ名のファイルがあります。
中を見ると指定したメッセージがKeyでValueが空の配列になっているので翻訳をValueに設定してください。

以上で翻訳ファイルは完成です。

最後に上記の翻訳の適用です。

protected/config/main.phpの設定に以下を加えます。

$config = array(
  'sourceLanguage'=>'ja',
  'language'=>'en_us',

この「sourceLanguage」が作成しているシステムのベース言語になります。
日本語で作成しているなら上記のままでOKでしょう。

その下の「language」がシステムに適用する言語になります。

上記の例だとベースは日本語で作成しているけど英語で表示する指定になってます。
複数言語対応で作成する場合は「language」を動的に変更すれば可能だと思います。
なお、デフォルトは「en_us」なので何も設定しない場合は英語となります。
また翻訳は「sourceLanguage」と「language」が一致しない場合に行われるそうです。