[Laravel8.46.0] 多言語(日・英・中国語)でバリデーションを切り分けて表示したい時

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(”)で自由に呼び出すことができるとういわけです。

うおおおおおおおおおおおおおお
俺がやりたかったのコレ。
久々にプログラミングで興奮した。