CakePHP 多言語化ステップ
CakePHPのi18n(+10n?)機能を使うと、Webページの文章の多言語はもとより、404, 500エラーなどのエラーページのメッセージなども多言語化できます。
そもそも、デフォルトで生成されるコード(Layout/default.ctpなど)は、多言語化利用を前提としたつくりになっており、各所に __(...) とか _d(..) のようなi18nのメソッドが散見されます。最初は何の事かわからず苦労しました。そのため多言語化する予定はなくとも、Cakeを利用される方は知っておくと迷わなくなるので良いのではないかと。
以下、CakePHP2.4.10で実施した手順のメモ
手順
メッセージ・文章系
- 多言語化を意識しながらページを作成
- コマンド cake i18n を実行して pot ファイルを作成
- pot ファイルを PoEdit で読み込み翻訳し、po, mo ファイルを作成
- 「ファイル」→「POTファイルを元に新しいカタログを作成します」
- 動作確認 (以下、1に戻ってプロジェクト完了まで繰り返す)
その他リソース(画像・CSS)
メッセージ・文章は、前述の方法で多言語対応が可能ですが、他のリソース(画像やCSS)などを言語によって切り替えたい時にはどうするのが良いのでしょうか?
今回対応したプロジェクトでは、URLに /eng/ のような言語コードを含ませて、それを取得して画像ファイル名のPostfixとして利用という方法をとりました。これに対応してくれるプラグインとかあるのかな?
参考サイト
TIPS
PoEditで「invalid nplurals value」エラーが出たときの対処
日本語の場合は下記でよいはずですが、 "Plural-Forms: nplurals=1; plural=0;" 未翻訳メッセージで常に単数形になってしまうので、英語にあわせて下記指定が無難なようです。 "Plural-Forms: nplurals=2; plural=(n != 1);"