LoginSignup
23
25

More than 5 years have passed since last update.

CakePHPを多言語化する

Posted at

__()で書く

まずは、viewとか(他のところでもページに表示されるもの)に書いてある自然言語(ここでは日本語)の文字列を__()で書くようにします。
<?php echo __('確認して下さい'); ?>という感じ。
多言語化しなければそのまま表示されるだけなので、将来多言語化する可能性があるなら、ちょっと面倒でも__()で書いておいたらいいと思います。
ちなみに__d()とか__n()とかもあるので、時と場合に応じて使います。(Cookbook 2.x - グローバル関数)
modelの$validatemessageに書くものは、そのまま('message' => '選択してください'とか)で大丈夫みたい。

POTファイルを作る

Console/cake i18n extract
を実行すると、Localeディレクトリの下にdefault.pot等のPOTファイルができます。
参考:Cookbook 2.x - I18N shell

Poeditで翻訳ファイルを作る

Poeditをインストールして、上で作ったPOTファイル(default.pot)を元に翻訳ファイルを作ります。
ソーステキストに対応する翻訳を入力すればOK。

日本語で書いてあったものを英語に翻訳する場合は、Locale/eng/LC_MESSAGESというディレクトリを作成し、その下にdefault.poという名前で保存します。バイナリのdefault.moファイルも同時に保存されます。
poファイルはテキストなのでPoeditとか使わなくても作れますが、CakePHPが使うのはmoファイルのようなので、Poeditじゃなくても何らかの方法でコンパイル(?)する必要があります。(Poeditが簡単だと思います。)

Config.languageの設定

普通はブラウザの情報を元に言語が判断されてるみたいなので、デフォルトで自分が使ってる言語(ここ見てる人はたぶん日本語)になってるはず。これを英語に変えるには、

Configure::write('Config.language', 'eng');

とすれば英語に翻訳されたものが表示されます。
引数とかで言語を指定できるactionを書いてcookieとかに入れておくといいのかな。

どうでもいいけど、i18nってinternationalizationの略で、i+18文字+nってことなのね。

23
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
25