Laravelで多言語(日本語/中国語/英語)のアプリケーションを作っています。
ユーザのロールによって、販売画面は英語・中国語、管理画面は日本語・英語に切り分ける仕様。
その為、config/app.phpの localは英語(en)で設定します。
'locale' => 'en',
管理画面でユーザ登録や商品登録をしようとした時に、日本語のバリデーションを表示させたい。
### バリデーション(Request)作成
$ php artisan make:request CreateClientRequest
CreateClientRequest.php
public function rules() { return [ 'company' => ['required','max:100'], 'name' => ['required','unique:users,name','min:2','max:24'], 'lang' => ['required'], // 省略 ]; }
-> これだと、英語のバリデーションファイルを読みに行ってしまうので、日本語のバリデーションファイルを作ります。
/resources/lang/ja/validation.php
ここに日本語のvalidationを書きます。
return [ // 省略 'required' => ':attributeは必須です。', // 省略 'attributes' => [ 'company'=>'会社名', 'id'=>'ユーザID', 'lang'=>'言語', // 省略 ], ];
それで、CreateClientRequestで、この日本語のバリデーションを読み込むように、setlocaleで日本語を指定します。
CreateClientRequest.php
use Illuminate\Support\Facades\App; public function rules() { App::setLocale('ja'); return [ // 'company' => ['required','max:100'], 'name' => ['required','unique:users,name','min:2','max:24'], 'lang' => ['required'], // 省略 ]; }
そうすると、このバリデーションでは、/ja/validation.phpを読みに行ってくれます。
App::setLocale(”); は、バリデーションファイル(Request)だけでなく、Controller側で指定しても、同じように、日本語のバリデーションファイルを読みにいきます。
つまり、config/app.phpで指定した言語以外のバリデーションも、App::setLocale(”)で自由に呼び出すことができるとういわけです。
うおおおおおおおおおおおおおお
俺がやりたかったのコレ。
久々にプログラミングで興奮した。