CakePHP 4 でテーマに含めた言語ファイルを読み込む方法

はじめに

CakePHP にはプラグインの機能を使った「テーマ」の仕組みがあります。

プラグインと比較して使える機能は限定されていますが、文字通りテーマとして使うには非常に使いやすい仕組みです。

ところで CakePHP には国際化の機能もあり、言語ファイルを使ってサイトの多言語化を簡単に実装することができます。

表示する文字列はデザインにも関わってくるため、翻訳の文言をテーマ毎に設定したい場合もあると思います。

そこで今日は CakePHP 4 でテーマに含めた言語ファイルを読み込む方法 をご紹介します。

今回使用したのは CakePHP 4.0.7 です。

目次
  1. 下準備
  2. テーマ内の言語ファイルを読み込む
  3. おわりに

1. 下準備

テーマファイルは「CakePHP 4 でテーマを作成して導入する方法」で紹介した MyTheme を使いました。

動作確認用の多言語対応として下記のように、テンプレ Sample/index.php の <h2> を変更して、言語ファイル sample.po を追加してください。

/plugin/MyTheme/templates/Sample/index.php
<h2><?= __d('sample', 'Sample') ?></h2>
/plugins/MyTheme/resources/locales/ja_JP/sample.po
msgid "Sample"
msgstr "サンプル"

次に言語設定を ja_JP にします。方法はいくつかありますが、今回は config/app.php で指定しました。

/config/app.php
'App' => [
    ...
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'), // ← ja_JP に変更

2. テーマ内の言語ファイルを読み込む

テーマ内の言語ファイル読み込みは config/app.php を下記のように変更することで実現できます。

/config/app.php
'App' => [
    ...
    'paths' => [
        ...
        'locales' => [
            ROOT . DS . 'plugins' . DS . 'MyTheme' . DS . 'resources' . DS . 'locales' . DS, // ← これを追加
            RESOURCES . 'locales' . DS,
        ],
    ],

これで処理は完了で、<h2>の箇所が「サンプル」と表示されるはずです。

表示されない場合には tmp/cache/persistent 内のファイルを削除してみてください。

app.php の locales の設定は上にあるものが優先されます。今回の例では /resources/locales/ja_JP にも sample.po を置いても、/plugins/MyTheme ~ の sample.po が優先されます。

定数 RESOURCES は config/paths.php で定義されています。

3. おわりに

Cookbook ではテーマに関してはあまり詳しく書かれていなくて、最初はどうしたらいいのか分からず、ちょっと悩みました。

また執筆時点では、公式ドキュメントの日本語版は、テーマと言語ファイルに関する情報が古いのでご注意ください。(CakePHP 3 の情報になっています)