Laravelのロケールを変更してエラーメッセージを日本語にする

Laravelの国際化

ロケールの設定と動的な切り替え

Laravelで多言語のWebアプリケーションを開発する方法。

言語パックを配置する

Laravelの言語パックは、

app/lang

に配置されており、インストール直後は、

en(英語)

のみが配置されています。

バリデーションのエラーメッセージを日本語化するので、enフォルダをコピーしてjaフォルダを作成します。

laravel-language-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したのが画像の状態です。

laravel-form-error

日本語のエラーメッセージを表示することができました。

属性値の翻訳

画像の通り日本語が表示されましたが、

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' => '名前',
  )
);

laravel-attributes-locale

エラーメッセージを日本語化することが出来ました。

Webエンジニアブログにコメント

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

Laravelのロケールを変更してエラーメッセージを日本語にするの記事にコメントを投稿