多言語化とは、よくWebページの右上辺りに【Japanese】【English】のリンクがあり、クリックすると画面が日本語になったり、英語になったりするあれです。
またLaravelはアメリカ生まれのフレームワークでもあるので、デフォルトのエラーメッセージが英語だったりします。
それらの内容を日本語に変換させる仕組みでもあります。
『.env』ファイル内の《APP_LOCALE=en》を《APP_LOCALE=ja》へ変更します。
Laravel」ルートディレクトリ([artisan]ファイルがある場所)から以下を叩きます。
以下を叩く
C:\~\laravel_12>php artisan lang:publish
INFO Language files published successfully.
C:\~\laravel_12>
『laravel_12\lang\en』に数種類のファイルが作成されるので【ja】ディレクトリを作成し《validation.php》をコピーします。
それでは前準備として任意のビューに以下を追記します。
任意のビュー
<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' => 'お名前',
],
再度ビューへアクセスし、空のまま「送信」ボタンを押下すると。。
今度は『お名前は必須項目です。』と表示されるハズです。
お手軽なのは親クラスである『Controllers/Controller.php』を利用する方法です。
例えば任意の画面に言語の切り替え画面(共通ヘッダ辺り)を作成し、セッションに以下の様に保存します。
$request->session()->put('locale', 'en');
後は『Controller.php』を以下の様に修正すれば切り替わります。
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\en\messages.php
○ ~\lang\ja\messages.php
それぞれのファイルを以下の内容とします。
en\messages.php
<?php
return [
'welcome' => 'Welcome',
'submit' => 'Submit',
];
ja\messages.php
<?php
return [
'welcome' => 'ようこそ',
'submit' => '送信',
];
最後にビューの送信ボタンのコードを以下の様に修正してみましょう。
任意のビュー
<button type="submit">{{ __('messages.submit')}}</button>
これで設定は完了です。
送信ボタンの文字が多言語対応されたハズです。
__('{~\lang\en\ファイル名}.{配列KEY名}')
関数「__()」を記述する事で、「~\lang\{現在のロケール}」が参照されます。
引数「ファイル名」の部分は「messages.php」に対応
引数「配列KEY名」の部分はファイル内の連想配列KEY名に対応
ファイル名は任意の名前でも問題ありません。
引数はドットで複数繋ぐ事でn次元配列に対応できます。