Cakephp localize

Cakephpのローカライズ。

コンソールでの作業になるので、先ずは\app\console\に行ってパスを通す。

cd ...\app\cnosole
SET PATH=%PATH%;%CD%

アプリのルートパスへ行き、コマンドを実行。

cake i18n

対話形式でプログラムが実行される。

[E]xtract POT file from sources
What would you like to do? 

先ずはPOTファイルの生成。

What is the path you would like to extract?
[Q]uit [D]one 

そして抽出元を選択。

Would you like to extract the messages from the CakePHP core? (y/n)

cakePHPからの翻訳を書き込む場合はy

What is the path you would like to output?
/app/Locale/jpn/LC_MESSAGES

アウトプット先のパスを指定。
言語ファイルは/app/Locale/ 配下に格納される。
後で移動させても問題無いが、とりあえずそこに置く。

Would you like to merge all domains strings into the default.pot file? (y/n)

全ての翻訳データをマージするかどうか。

ここまで来ると、指定したディレクトリにファイルが作成される。

次に、翻訳ファイルの作成。

Poeditを使う。

ファイル→POTファイルを元に新しいカタログを作成。

一つ注意事項。カタログの設定で、複数形を以下のように設定。

#変更前
nplurals=INTEGER; plural=EXPRESSION;
#変更後
nplurals=2; plural=(n > 1);

ここまでくれば、あとはコツコツ翻訳するだけ。

そしてcakePHP側の言語指定。

強制的に言語を指定するには、Appcontrollerで下のように指定。

function beforeFilter() {
    Configure::write('Config.language', 'en');
    }

日本語に指定するばあいは、これで上手く行った。
翻訳ファイルは、app\Locale\jpn\LC_MESSAGES

function beforeFilter() {
    Configure::write('Config.language', 'ja');
    }

・追記

potファイルのアップデート。

ファイルを更新・追加したら、再度コンソールでのpotファイル作成の手順を踏んでdefault.potを上書きする。

そしてpoeditを使って、該当する.poファイルを開く。
(日本語だったら open -> /locale/jpn/LC_MESSAGES/default.po をひらく)
そして開いたら、メニューのcatalog -> Update from POT fileでアップデート。 以上!