CodeIgniter4 言語クラスを使ってのi18n対応

4での日本語化対応についてソースを見て調べてみた。
Codeigniter4は2017/05/01現在、正式リリースがされていません。現段階のソースでの検証となります。

CodeIgniter3では、i18n対応を行う場合、通常の言語クラスを使うより、PHPが提供しているgettextを使いましょうと言われている。
https://blog.noldor.info/do-not-use-lang-class/
まあ、少々作り込みは必要だが、そんな難しいものでもない。
githubでもいくつか登録されているのでそれを使うのもありかと思います。
https://github.com/Marko-M/codeigniter-gettext
https://github.com/bkader/ci-gettext

でも、「めんどくさーい」、「日本語専用サイトだしー」という場合には、gettextを使わなくても大丈夫かと思います。
language helperのlang関数を使えば、ソースは短く書けますしね。

さて、CodeIgniter4でのi18n対応だが、ソースを見る限り、localeが使用されていて、設定ファイルの設定次第では、HTTPヘッダーのAccept-Languageを使用してリアルタイムで言語ファイルを切り替えることが出来るようになっている
これなら、gettextを使わなくても済みそうだ。

CodeIgniter4の設定ファイルは、application/config/config.phpではなく、application/Config/App.php に変わっている。
他にもいろいろ変わってるんで、今までのようにすごい簡単にできるって感じではなくなっているような・・・

i18n対応方法

設定ファイルの内容変更

application/Config/App.php の内容をi18n対応向けに変更する

変更する箇所は、次の3つの値になります。

$defaultLocale は、デフォルトは日本語のサイトとするので値は「ja」とする

$negotiateLocale は、コメントに書かれているように「Accept-Language header」の値を見て変更するかしないかのフラグとなっています。
よって、この値は、「true」に変更。

i18n対応しない場合はデフォルトの「false」でOK。

$supportedLocales は、サポートする言語を配列で記述するようになります。デフォルトで英語の言語ファイルがあるので、とりあえず日本語と英語の2つという形にします。
ポイントは、デフォルト言語である日本語を配列の一番目にすることです。
これによって「Accept-Language」の値が「*」「*/*」の場合に配列インデックス=0の値がセットされるようになっています。

$negotiateLocale が「false」となっていれば使われない値なのでデフォルトのままでOK。

言語設定は以上。他にもサイト設定に必要な箇所はありますがここでは省きます。

言語ファイルの追加

application/Language ディレクトリには言語ファイルは無いので日本語用のディレクトリを作成します。

application/Language/ja
このjaディレクトリの中に日本語対応した言語ファイルを作成します。
とりあえず、system/Language/en ディレクトリの中にあるファイルをコピーしてもってきます。
わかりやすい、Validation用の言語ファイルの内容を日本語に変えます。

application/Language/ja/Validation.php

CodeIgniter3以前のものとは書き方は違いますが、キーとバリューの関係は同じなので見ればわかります。
とりあえずのテストの為に「noRuleSets」のメッセージだけを変更します。

英語メッセージはこのようになっています。

表示確認

デフォルトでコントローラファイルが2つありますが、Homeコントローラの中にメッセージの表示確認を記述します。

application/Controllers/Home.php

コントローラファイルの更新ができたらサイトにアクセスします。

http://127.0.0.1/

Welcome to CodeIgniter の上に「検証設定で指定されたルールセットがありません。」と表示されていれば正しく動作しています。
ただ、これだと、自動で言語設定が切り替わっているとは言えません。
現在の設定だとデフォルトが日本語設定となっているからです。

言語設定切替テスト

設定ファイルを変更し、デフォルトを英語にして、日本語メッセージが表示されるかを確認します。
まずは英語メッセージが表示されるように変更。

この設定だと $negotiateLocale がfalseなので $supportedLocales の値は使用されず、英語メッセージが表示されるはずです。
サイトへアクセスし確認します。

No rulesets specified in Validation configuration. とメッセージが表示されています。

次に言語ファイルが切り替わるように設定を変更。

$negotiateLocale をtrueに変更しました。

サイトへアクセスし確認します。

「検証設定で指定されたルールセットがありません。」と表示されています。
言語ファイルが、切り替わっているのを確認できます。

上記のままではデフォルトが英語設定なので、デフォルト日本語設定にしておきます。

CodeIgniter4では、標準機能でi18n対応ができるようになっているのがこれでわかります。
ただし、CodeIgniter4は、2017/05/01現在でも開発中なのでソースが変更される可能性がありますので
正式リリース後でもこの内容で使用できるかは保証できません。
正式リリースされたあと、また確認したいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です