[Laravel]メッセージファイル(Lang)の使い方

Laravel Laravel

laravelでメッセージを取得する方法について書いています。

プログラムの中で、メッセージを固定で書くのではなく、resources/lang 配下のファイルにまとめていた方がメッセージを修正する時にも便利です。

en / jaなどのディレクトリに分けることで多言語対応ができます。

laravel6で確認しています。
こちらの翻訳サイトが参考になります。

メッセージはどこにまとめるか

laravelでメッセージをどこにまとめておくか問題ですが。。

コントローラーでエラーを返している処理で

return view('top', ['error_message' => 'なんらかのエラー']);

みたいに固定で書いているソースを発見したのですが、

メッセージをlangのところにまとめれるので
まとめておいたほうが、保守的にも可読的にもいいかと思います。

メッセージをまとめる

言語設定を確認する

言語設定がconfig/app.phpに書いてあるので、使う国の言語にしておきます。
大体が日本リリースのプロジェクトだと思うので、localをjaにします。

/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/

'locale' => 'ja',

メッセージファイルを作成する

resource/lang/jaの配下にmessages.phpを作成します。

初期ではenのディレクトリがあると思いますが、localeをjaに設定したことで、jaディレクトリを見るようになります。

return [
    'exception' => '例外エラーが発生しました',
    'user'      => [
        'name_size_error' => '名前はXX文字以内で入力してください。',
    ]
];

メッセージを取得する

コントローラーでメッセージを取得する

Langファサードを使って、

echo \Lang::get("messages.exception");
=> 例外エラーが発生しました

と書いたり

echo __("messages.exception");
=> 例外エラーが発生しました

と書いたりできます。

ファイル名から始まって、配列のキーを「.」で繋いでいきます。
なのでname_size_errorにアクセスしたい場合は

messages.user.name_size_error となりますね!

ビューでメッセージを取得する

ファサードもかけるみたいですが「__」を使った方がスッキリしそうです。

{{ __('messages.exception') }}

メッセージを穴埋めする(汎用メッセージ)

一部の文字をパラメータとして渡して、汎用的なメッセージを作りたい時があると思います。

そんな時は、第2引数に連想配列で渡します。

下記のようにメッセージを定義した場合…

return [
    'exception' => ':screen_nameで例外エラーが発生しました',
];

パラメータ名をキーに配列を作って渡してあげるといいです。

echo \Lang::get("messages.exception", ['screen_name' => 'ユーザー画面']);

結果 => ユーザー画面で例外エラーが発生しました

おわりに

簡単にまとめられて、ソースも見やすく、取り出すときも楽々なので
ぜひ、まとめておくようにしましょう!

コメント

タイトルとURLをコピーしました