ざきのメモ

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 などを削除することで解決できます。

参考

Copyright © 2017-2021 Ryo Okazaki, all rights reserved.