多言語化
はじめに
またLaravelはアメリカ生まれのフレームワークでもあるので、デフォルトのエラーメッセージが英語だったりします。
それらの内容を日本語に変換させる仕組みでもあります。
多言語化設定
Laravel」ルートディレクトリ([artisan]ファイルがある場所)から以下を叩きます。
C:\~\laravel_12>php artisan lang:publish
INFO Language files published successfully.
C:\~\laravel_12>
それでは前準備として任意のビューに以下を追記します。
<form>
@error('name')
<span class="error text-danger">{{ $message }}</span>
@enderror
<BR />
<input type="text" name="name" value="">
<button type="submit">送信</button>
</form>
public function index(Request $request) {
$request->validate([
'name' => 'required',
]);
return view('hoge/index', []);
}
『The name field is required.』と表示されます。
これはコントローラ側の以下設定で属性[name]を必須としているためです。
'name' => 'required', そして、エラーメッセージに対応するのが、先ほどコピーした「validation.php」ファイルとなります。
例えば必須項目の内容を変更したい場合、ファイル内にある『'required' => 'The :attribute field is required.',』を編集します。
例)
'required' => ':attributeは必須項目です。', 『:attribute』はファイルの最後にある『'attributes' => [],』を参照しています。
よって、ここも以下の様に変更します。
例)
'attributes' => [
'name' => 'お名前',
], 再度ビューへアクセスし、空のまま「送信」ボタンを押下すると。。
今度は『お名前は必須項目です。』と表示されるハズです。
言語を切り替える方法
例えば任意の画面に言語の切り替え画面(共通ヘッダ辺り)を作成し、セッションに以下の様に保存します。
$request->session()->put('locale', 'en');
後は『Controller.php』を以下の様に修正すれば切り替わります。
<?php
namespace App\Http\Controllers;
abstract class Controller {
public function __construct() {
// CLI(php artisan)時はスキップ
if (app()->runningInConsole()) {
return;
}
// 言語設定
$locale = session('locale', config('app.locale'));
if (in_array($locale, ['en', 'ja'])) {
app()->setLocale($locale);
}
}
}
任意の文字を多言語化する
では任意の文字についてはどうするか?
実はこっちが多言語化の最も基本的な内容となります。
以下の2箇所にファイルを作成します。
○ ~\lang\ja\messages.php
<?php
return [
'welcome' => 'Welcome',
'submit' => 'Submit',
];
<?php
return [
'welcome' => 'ようこそ',
'submit' => '送信',
];
<button type="submit">{{ __('messages.submit')}}</button>
送信ボタンの文字が多言語対応されたハズです。
書式
関数「__()」を記述する事で、「~\lang\{現在のロケール}」が参照されます。
引数「ファイル名」の部分は「messages.php」に対応
引数「配列KEY名」の部分はファイル内の連想配列KEY名に対応





ファイル名は任意の名前でも問題ありません。
引数はドットで複数繋ぐ事でn次元配列に対応できます。