上記に全て書いてあるが、自分用にメモ。
最初に
テキストを記述するときは必ずこう書いておく事。
これで、後からこう記述した所を自動抽出して翻訳ファイルを生成することが出来る。
<?php echo __('翻訳するテキスト'); ?>
工程
- コンソールでpotファイル生成
- Poeditでpot→poに変換、mo出力
- CakePHPで言語設定
コンソールでpotファイル生成
コンソール(コマンドプロンプト)でappディレクトリに移動。
以下のコマンドを実行。
C:\xampp568\htdocs\cakephp\app>cake i18n
Welcome to CakePHP v2.7.3 Console
---------------------------------------------------------------
App : app
Path: C:\xampp568\htdocs\cakephp\app\
---------------------------------------------------------------
I18n Shell
---------------------------------------------------------------
[E]xtract POT file from sources
[I]nitialize i18n database table
[H]elp
[Q]uit
What would you like to do? (E/I/H/Q)
>
[E]を選択。
抽出対象のディレクトリを指定。
Current paths: None
What is the path you would like to extract?
[Q]uit [D]one
[C:\xampp568\htdocs\hondapdf\app\] >
その後はデフォルトのままでOK。
Current paths: C:\xampp568\htdocs\hondapdf\app\
What is the path you would like to extract?
[Q]uit [D]one
[D] >
Would you like to extract the messages from the CakePHP core? (y/n)
[n] >
What is the path you would like to output?
[Q]uit
[C:\xampp568\htdocs\hondapdf\app\Locale] >
Would you like to merge all domain and category strings into the default.pot file? (y/n)
[n] >
Extracting...
---------------------------------------------------------------
Paths:
C:\xampp568\htdocs\hondapdf\app\
Output Directory: C:\xampp568\htdocs\hondapdf\app\Locale\
---------------------------------------------------------------
Done.
これでapp\Localeに幾つかのpotファイルが生成された。
自分で記述したテキストはdefault.potに抽出されているはず。
言語ごとに指定のフォルダに配置する必要があるので、
app\Locale\jpn\LC_MESSAGES
を作成しpotを配置する。
※英語→日本語の翻訳をする場合
※実際にCakeが使うのはこの後生成するmoファイルなので、potはここに置いておく必要はないが同じ場所に置いておく。
Poeditでpot→poに変換、mo出力
Poeditを起動し、「ファイル」→「POTファイルを元に新しいカタログを作成します」で先程のpotを読み込み。
「カタログの設定」ダイアログの「複数形」を以下のようにしておく。
こうしないと後で「invalid nplurals value」エラーが出てしまう。
#変更前
nplurals=INTEGER; plural=EXPRESSION;
#変更後
nplurals=2; plural=(n > 1);
そのままPoedit上で翻訳する。
保存すると同じ場所にmoファイルが生成される。
CakePHPで言語設定
app\Locale\jpn\LC_MESSAGES\default.mo
ができた。
ここに置いてあるだけでCakeはブラウザの言語設定から自動で言語を判断して表示してくれる。
任意で切り替える場合はControllerに以下を記述。
// 英語のまま
Configure::write( 'Config.language', 'eng');
// 日本語へ翻訳
Configure::write( 'Config.language', 'jpn');