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' => 'ユーザー画面']);
結果 => ユーザー画面で例外エラーが発生しました
おわりに
簡単にまとめられて、ソースも見やすく、取り出すときも楽々なので
ぜひ、まとめておくようにしましょう!
コメント