Fixture Factories で Faker が日本語にならなかった #CakePHP

問題

CakePHP に Fixture Factories を導入しようとしていた。 Faker が利用できるので、日本語化しようと思ったがどうもうまくいかない。

原因と解決

defaultLocale がハイフン区切りの ja-JP になっていた。

アンダースコア区切りの ja_JP を指定することで解決した。

詳細

Fixture Factories で使用する Faker は、 I18n::getLocale() で取得した Locale を使用するようになっている。

なので、アプリケーション側で設定されている Locale が自動的に適用される。

github.com

今回は CakePHP 側で Locale 設定していたが、アンダースコアの ja_JP ではなく、 ja-JP になっていた。

処理を追っていくと、適用する Locale のプロバイダーがアンダースコア形式になっているのが前提のためだった。

備忘

原因としては分かったけれど、アンダースコアかハイフンかって、なにか仕様とか規格で決まってるのかなぁと思って調べてみた。

これ!という決定的な情報は見つからなかったんだけれども、どうやら Unix / Linux 系の言語設定ではアンダースコア区切りらしい。

locale コマンドや、LANG 環境変数を確認すると ja_JP.UTF-8 のようになっている。(まぁ自分の設定次第ではあるが)

ところが RFC5646 で言語タグのフォーマットを見てみると、ハイフン区切りで定義されている。

この辺で間違いが起こりやすいのかもしれない。

datatracker.ietf.org

CakePHP の国際化のドキュメントでは en_US とか fr_FR のようなアンダースコア形式がサンプルの中で用いられているので、アンダースコアで設定するのが正攻法で間違いなさそう。

book.cakephp.org