開発の時に、Qiita(の中の人)にはいつもお世話になっているので、私も、「ググっても解決方法が無くて、しょうが無いから自己解決した問題」を、後学の為にブログにアップしていこうと思います。
(って程、大した話じゃ無いんだけどね。)
Laravel の Validation を日本語化する話題は結構ある。
Qiita@Rock22
→ Laravel5でのValidationMessageを日本語化してみた
RitoLabo
→ Laravelのvalidationメソッドでバリデーションを実装する入門編
Laravel公式
→ Laravel 5.6 validation.php言語ファイル
で、それらの実装を施した後に、当方の環境では問題があった。
「違うフォーム(の違う訳語)で、同じ’attributes’を使用していた場合にどうやって訳語を使い分けるんだ?」
今回の案件なんだけど、顧客入力用フォームの「氏名」と不動産物件入力用フォームの「物件名」は、どちらも’attributes’は、”name”だった。
DBも項目名には単純な名前を入れることにしているので、そこから → Model → Controller → フォーム と名前を引き継いでいるだけで、単純にフォームの段階で分ければいいんだけどね♪
で、
- 顧客入力用フォームからのエラーの場合には、「”氏名”が違います」
- 不動産物件入力用フォームからのエラーの場合には、「”物件名”が違います」
と使い分けたい。
ま、解決方法は簡単で、以下を読めばいいんだけど、
/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Validation/ValidatesRequests.php
public function validate(Request $request, array $rules,
array $messages = [], array $customAttributes = [])
とある。
要は4番目の引数として、’attributes’を渡せばいいだけ。
(実際には第1引数は、$requestなので、使い方としては第3引数)
顧客入力用には、
/laravel/app/Http/Controllers/CustomerController.php
$validatedData = $request->validate([
’name’ => ‘required’,
],[],[
’name’ => ‘氏名’,
]);
不動産物件入力用には、
/laravel/app/Http/Controllers/RealEstateController.php
$validatedData = $request->validate([
’name’ => ‘required’,
],[],[
’name’ => ‘物件名’,
]);
とすればいい。
そこで渡さない場合には、上記リンクを参考にして日本語化したときの
/laravel/resources/lang/ja/validation.php
’attributes’ => [
’name’ =>’名前’,
],
が参照されるので、日本語化の時に使った労力は無駄にはならない。
って、まあ、大した話じゃなくて、書き方もQiitaっぽくなかったけど、徐々に慣れていくから許してね♪