0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CakePHP5 多言語化の覚書

Posted at

はじめに

CakePHP5で日本語版と英語版を切り替える必要があったので、覚書として手順を記録しておこうと思いました。

やるべきこと

基本的には
CakePHP 5.x Chiffon Book 国際化と地域化
の通りです。

翻訳対象は__()形式で記述

templateファイルで

<h2>お問合せ</h2>

<h2><?= __('お問合せ') ?></h2>

と記述することで__() の中の文字列の翻訳が表示されるので、出力したい文字列は全て__()にすることが必要です。

デフォルトの言語を設定

今回は日本語のアプリを多言語化する前提なので、
config/app.php ファイルの App.defaultLocaleを

'App' => [
    ...
    'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
    ...
]

に設定します。

言語ファイルの書き出し

bin/cake i18n extract

これで
resources/locales/

default.pot
という言語ファイルが生成されます

今回は英語(米語)版を作成するので

/resources
    /locales
        /en_US
            default.po

となるようにresources/locales/default.potを
resources/locales/en_US/にコピーして拡張子を.poにリネームします。

言語ファイルの翻訳

編集はpoeditを使うと便利です
resources/locales/en_US/default.po
をpoeditで開き、左側の日本語に対応する英語を右側に記述して保存します。

アプリでの切り替え

今回はメニューにJP/USの切り替えボタンを国旗で表示して切り替えることにしました。

$this->session->write('Config.language', $lang);
$arr = ['ja' => 'ja_JP', 'en' => 'en_US'];
I18n::setLocale($arr[$lang]);

詳細は省きますが、切り替えボタンが押されたらConfig.languageを書き換えて言語を切り替えています。

変更があった場合

できれば日本語で全て完成した後に言語だけ翻訳できればいいんですが、仕様変更やら機能追加やらバージョンアップやら大人の事情やらで日本語部分が変更になったりします。

例えば
「支払い」→「支払」など
元となる記述が変わると対応する翻訳も変更しないといけません。

この場合は

  1. 言語ファイルを再度書き出し

  2. poeditでresources/locales/en_US/default.poを開く
    翻訳>POTファイルから更新 で再度書き出したresources/locales/default.potを指定する
    スクリーンショット 2025-12-04 15.41.50.png

  3. 追加/変更になった箇所を翻訳して保存

  4. tmp/cache/persistent/myapp_cake_core_translations.default.en_USを削除

で対応します。
4.の削除を忘れると「翻訳を変更したのに反映されない」が起こるので要注意。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?