CakePHP 4 + Localized プラグインで 400 系エラー画面が日本語化されない

はじめに

前回「CakePHP 4 を Localized プラグインで日本語化」で CakePHP Localized plugin を使った日本語化の方法をご紹介しましたが、
400 系エラー時の画面(debug オフの場合の画面)に出るメッセージが英語のままでした。

今日はその解決方法をご紹介します。

CakePHP
4.5
CakePHP Localized plugin
4.1

原因と解決方法

原因を調べてみたところ Localized プラグインの cake.po と、テンプレの error400.php で msgid が異なっていることが分かりました。

下記のいずれかの変更で日本語表示にできます。

1. 言語ファイルの変更で対応

msgid と msgstr の %s を {0} に するだけです。
個人的にはこちらの対応が簡単かなと思います。

/resources/locales/ja_JP/cake.po
# 変更前
msgid "The requested address %s was not found on this server."
msgstr "要求されたアドレス %s はこのサーバー上に見つかりませんでした。"

# 変更後
msgid "The requested address {0} was not found on this server."
msgstr "要求されたアドレス {0} はこのサーバー上に見つかりませんでした。"

変更しても日本語化されない場合は下記コマンドなどでキャッシュクリアをしてみてください。

bin/cake cache clear _cake_core_

2. テンプレの変更で対応

もし cake.po に手を加えずにテンプレ側で対応する場合は、下記のようにすることで日本語化できます。

/templates/Error/error400.php
// 変更前
<?= __d('cake', 'The requested address {0} was not found on this server.', "<strong>'{$url}'</strong>") ?>

// 変更後
<?= sprintf(
  __d('cake', 'The requested address %s was not found on this server.'),
  "<strong>'{$url}'</strong>"
) ?>