ウェブアプリケーションでは、場合によって、
日本語だけでなく、英語など多言語に対応する必要があります。
CakePHPでは多言語対応の仕組みとして、i18nがあります。
イメージ的には、特定の箇所の文字列を、言語ごとに作成された翻訳ファイルから読み込む形です。
POTファイルの作成(翻訳ファイルのテンプレート)
以下のコマンドで作成されます。(cake4/appディレクトリで実行)
1 | ./bin/cake i18n extract |
何回か選択肢が出ますが、すべてEnterとyで回答していけば大丈夫です。
実際の出力結果を抜粋します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | PS C:\xampp\htdocs\cake4\app> ./bin/cake i18n extract Current paths: None What is the path you would like to extract? [Q]uit [D] one [C:\xampp\htdocs\cake4\app\src\] > Current paths: C:\xampp\htdocs\cake4\app\src\ What is the path you would like to extract? [Q]uit [D] one [C:\xampp\htdocs\cake4\app\templates\] > Current paths: C:\xampp\htdocs\cake4\app\src\, C:\xampp\htdocs\cake4\app\templates\ What is the path you would like to extract? [Q]uit [D] one [D] > Would you like to extract the messages from the CakePHP core? (y/n) [n] > y What is the path you would like to output? [Q] uit [C:\xampp\htdocs\cake4\app\resources\locales\] > Extracting... ------------------------------------------------------------------------------- Paths: C:\xampp\htdocs\cake4\app\src\ C:\xampp\htdocs\cake4\app\templates\ C:\xampp\htdocs\cake4\app\vendor\cakephp\cakephp\src\ Output Directory: C:\xampp\htdocs\cake4\app\resources\locales\ ------------------------------------------------------------------------------- > > > > > > > > > (後略) |
言語ごとのディレクトリを作成
例えば以下の様に、英語と日本語用のディレクトリを作成しましょう。
cakephp/src/Locale/en
cakephp/src/Locale/ja
作成したディレクトリにdefault.poを配置
作成した「default.pot」 を 「default.po」にリネームして、Locale内の各フォルダに配置しましょう。
default.poを編集
cakephp/src/Locale/ja/default.po の中身を見てみましょう。
以下のようなセットがたくさん記述されています。
1 2 3 4 | #: Controller/MembersController.php:54 #: Controller/MembersController.php:78 msgid "The member has been saved." msgstr "“ |
この中で、以下の2カ所をセットで設定していくことになります。
・msgid ⇒ 対象箇所(MembersControllerで、 __(The member has been saved.) の箇所 )
・msgstr ⇒ 適用する文字列(空文字の場合には、msgidが使用される。)
では、ここを以下の様に変えてみましょう。
1 2 3 4 | #: Controller/MembersController.php:54 #: Controller/MembersController.php:78 msgid "The member has been saved." msgstr “メンバーが保存されました“ |
これで、日本語(ja)の場合には、msgstrが使用されるように設定ができました。
言語の切り替え方法
いくつか方法があるので、以下で紹介します。
いずれかを設定して、/cake3/Members/add ページで登録したときに、
前ページで設定した「メンバーが保存されました」が表示されればOKです。
1. デフォルトロケールの設定
「config/app.php」の以下を設定
1 2 3 4 5 | 'App' => [ ... 'defaultLocale' => env( 'APP_DEFAULT_LOCALE' , ‘ja_JP'), ... ] |
2.コントローラーで切り替え
任意のコントローラーのメソッドに、以下を追加。
I18n::setLocale(‘ja_JP’);
例)AppControllerに追加する場合
1 2 3 4 5 6 | use Cake\I18n\I18n; // ← 追加 public function initialize() { I18n::setLocale( 'ja_JP' ); // ← 追加 } |
3.ブラウザの設定によってロケール切り替え
「config/app.php」の以下を設定
1 2 3 4 5 | 'App' => [ ... 'defaultLocale' => locale_accept_from_http(env( 'HTTP_ACCEPT_LANGUAGE' , env( 'APP_DEFAULT_LOCALE' , 'en_US' ))), ... ] |