Laravelの国際化
ロケールの設定と動的な切り替え
Laravelで多言語のWebアプリケーションを開発する方法。
言語パックを配置する
Laravelの言語パックは、
app/lang
に配置されており、インストール直後は、
en(英語)
のみが配置されています。
バリデーションのエラーメッセージを日本語化するので、enフォルダをコピーしてjaフォルダを作成します。
jaフォルダを配置しましたが、中身は英語になっています。英語のままjaにロケールの変更をしてみます。
ロケールの変更
静的な設定
ロケールの設定は、
app/config/app.php
で設定されています。
'locale' => 'en',
標準では上の通り設定されていますが、
'locale' => 'ja',
と設定することで日本語の言語パックを利用するようにLaravelを変更することが可能です。
動的な設定
ロケール情報をアプリケーションで動的に変更することも出来ます。Laravelのアプリケーションルートである、
app/routes.php
の先頭に下の一行を追加してjaに変更可能です。
App::setLocale('ja');
localeだけでなく、timezoneも動的に設定することができます。
Config::set('app.timezone', 'Asia/Tokyo');
Config::set()を利用してtimezoneをアプリケーション側で設定することが出来ます。
バリデーションのエラーメッセージを日本語化
日本語のエラーを作成
本記事の冒頭で作成してjaフォルダ内の
validation.php
を日本語化することで、エラーメッセージを日本語にすることが出来ます。
requiredルールのエラーを日本語にするために、以下の行を日本語にします。
"required" => ":attributeは必ず入力してください",
フォームで未入力のままsubmitしたのが画像の状態です。
日本語のエラーメッセージを表示することができました。
属性値の翻訳
画像の通り日本語が表示されましたが、
nameは必ず入力してください
nameの部分を日本語にするためには、属性値の翻訳が必要になります。
setAttributeNames
validationクラスのsetAttributeNamesメソッドを利用して属性名を翻訳することが可能です。
$rules = array( 'name' => 'required' ); // 属性名の定義 $attr_names = array( 'name' => '名前', ); $validation = Validator::make(Input::all(), $rules); // 属性名を設定 $validation->setAttributeNames($attr_names);
attributes.phpを利用する方法
app/lang/ja
内に
attributes.php
という属性名を翻訳するファイルを作成して日本語化することも出来ます。
$rules = array( 'name' => 'required' ); $validation = Validator::make(Input::all(), $rules); $validation->setAttributeNames(Lang::get('attributes.form'));
attributes.phpを利用した場合には、コード内から属性名の翻訳データを除外することが可能です。attributes.php内では以下のようにコーディングします。
return array( 'form' => array( 'name' => '名前', ) );
エラーメッセージを日本語化することが出来ました。