2018/10/04
CakePHP3 の国際化と地域化機能をつかう
CakePHP3 で国際化と地域化機能 (英語から日本語) をつかう機会があったので、残しておきます。
環境
- CakePHP 3.6.10
国際化する文字列の指定
国際化したい文字列を __() で囲むことで指定ができます。
例えば以下のようなビューの記述を国際化したいとすると。
<h2>Hello</h2>
以下のように、__() で囲むことで指定ができます。
<h2><?= __('Hello') ?></h2>
デフォルトロケールの設定
デフォルトロケールは config/app.php ファイルの App.defaultLocale から設定できます。
例えばデフォルトロケールを日本に設定するためには以下のようにします。
'App' => [
...
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja-JP'),
...
]
POT ファイルの作成
次に、国際化のために POT ファイルというものを作ります。
これは i18n コマンドを使うと作成できます。
ルートディレクトリで以下のコマンドを入力してください。
bin/cake i18n extract
いろいろ聞かれると思いますが適宜答えてみてください。
自分はエンターと y しか打っていません。
終わると、src/Locale に default.pot というファイルが出力されているはずです。
ファイルの中をエディタでみてみると、
#: Template/Hello/index.ctp:8
msgid "Hello"
msgstr ""
のような記述があると思います。
この msgstr 欄に翻訳後の文字列を書き入れます。
日本語にするなら以下のようにします。
#: Template/Hello/index.ctp:8
msgid "Hello"
msgstr "こんにちは"
しかし、このままでは反映されません。
反映させるためには、以下のようにファイルをコピーし拡張子を pot から po に変えて src/Locale/ja に置く必要があります。
$ mkdir -p src/Locale/ja
$ cp src/Locale/default.pot src/Locale/ja/default.po
すでに、default.po を作っている場合には差分をコピーして追記しましょう。
変更が反映されないときにやること
キャッシュが残っていると、変更が反映されないことがあります。
それは tmp/cache/persistent/ にある cake_core_default_jpn などを削除することで解決できます。
参考
- 国際化と地域化 - 3.6
- CakePHP3を触ってみました 〜ちょっとだけグローバル気分〜 | 日記の間 | あかつきのお宿
- POSTORO: CakePHPで poファイルの変更が反映されない場合の解決方法