Laravelのバリデーションエラーを日本語で表示する方法

Laravelのバリデーションエラーを日本語で表示する方法

こんにちは!

今回はLaravelのバリデーションエラーを日本語表示する方法というテーマで解説していきます。

Laravelでフォームなどを実装していると、バリデーションエラーが英語になってしまっていて困ることが多々ありますよね。そこで、バリデーションエラーを簡単に日本語化するための方法を解説していこうと思います。

このようにお困りの方には参考になるかと思います。

それでは、早速見ていきましょう!

注意: 本記事では、Laravel11系を前提として解説しています。

Laravelでエラーメッセージを日本語化する方法

実は、エラーメッセージを日本語化する方法はいくつかあるのですが、今回は筆者が思う最も簡単かつ保守が楽な方法をご紹介したいと思います。

それは、バリデーション設定ファイルで一括管理するという方法です。

リクエストフォームクラスを都度作り、その中で設定していく方法などもあるのですが、正直面倒かなと思います。今後のことを考えると、リクエストごとに個別に設定するよりも、1ファイルで管理した方が楽です。

というわけで、手順を見ていきましょう。

手順1. アプリケーション全体の言語設定を日本語に変更する

まずは、アプリケーション全体の言語設定を日本語にしていきましょう。app/config/app.phpが設定ファイルです。中身を覗くと、以下のようになっています。

'locale' => env('APP_LOCALE', 'en'),
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),

言語設定を見てみると、どうやら.envに環境変数として設定すれば良さそうですね。というわけで、.envに以下を記述します。

APP_LOCALE=ja
APP_FALLBACK_LOCALE=ja
APP_FAKER_LOCALE=ja_JP

これで基本的な言語設定は完了しました。

手順2. バリデーションの設定ファイルを作成する

それでは、バリデーションを設定ファイルを作成していきます。作成方法は非常に簡単で、以下のコマンドを叩きます。

$ php artisan lang:publish

これで、アプリケーションルートにlang/というフォルダが出来上がるはずです。このフォルダの中にはenフォルダがありますが、これは英語用です。そこで、enフォルダを複製して「ja」に名前を変更してください。

次に、lang/ja/validation.phpの内容を以下に変更します。

<?php
	return [
		"accepted"             => ":attributeを承認してください。",
		"active_url"           => ":attributeは、有効なURLではありません。",
		"after"                => ":attributeには、:dateより後の日付を指定してください。",
		"after_or_equal"       => ":attributeには、:date以降の日付を指定してください。",
		"alpha"                => ":attributeには、アルファベッドのみ使用できます。",
		"alpha_dash"           => ":attributeには、英数字('A-Z','a-z','0-9')とハイフンと下線('-','_')が使用できます。",
		"alpha_num"            => ":attributeには、英数字('A-Z','a-z','0-9')が使用できます。",
		"array"                => ":attributeには、配列を指定してください。",
		"before"               => ":attributeには、:dateより前の日付を指定してください。",
		"before_or_equal"      => ":attributeには、:date以前の日付を指定してください。",
		"between" => [
			"numeric" => ":attributeには、:minから、:maxまでの数字を指定してください。",
			"file"    => ":attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。",
			"string"  => ":attributeは、:min文字から:max文字にしてください。",
			"array"   => ":attributeの項目は、:min個から:max個にしてください。"
		],
		"boolean"              => ":attributeには、'true'か'false'を指定してください。",
		"confirmed"            => ":attributeと:attribute確認が一致しません。",
		"date"                 => ":attributeは、正しい日付ではありません。",
		"date_equals"          => ":attributeは:dateに等しい日付でなければなりません。",
		"date_format"          => ":attributeの形式は、':format'と合いません。",
		"different"            => ":attributeと:otherには、異なるものを指定してください。",
		"digits"               => ":attributeは、:digits桁にしてください。",
		"digits_between"       => ":attributeは、:min桁から:max桁にしてください。",
		"dimensions"           => ":attributeの画像サイズが無効です",
		"distinct"             => ":attributeの値が重複しています。",
		"email"                => ":attributeは、有効なメールアドレス形式で指定してください。",
		"ends_with"            => "The :attribute must end with one of the following: :values",
		"exists"               => "選択された:attributeは、有効ではありません。",
		"file"                 => ":attributeはファイルでなければいけません。",
		"filled"               => ":attributeは必須です。",
		"gt" => [
			"numeric" => ":attributeは、:valueより大きくなければなりません。",
			"file"    => ":attributeは、:value KBより大きくなければなりません。",
			"string"  => ":attributeは、:value文字より大きくなければなりません。",
			"array"   => ":attributeの項目数は、:value個より大きくなければなりません。"
		],
		"gte" => [
			"numeric" => ":attributeは、:value以上でなければなりません。",
			"file"    => ":attributeは、:value KB以上でなければなりません。",
			"string"  => ":attributeは、:value文字以上でなければなりません。",
			"array"   => ":attributeの項目数は、:value個以上でなければなりません。"
		],
		"image"                => ":attributeには、画像を指定してください。",
		"in"                   => "選択された:attributeは、有効ではありません。",
		"in_array"             => ":attributeが:otherに存在しません。",
		"integer"              => ":attributeには、整数を指定してください。",
		"ip"                   => ":attributeには、有効なIPアドレスを指定してください。",
		"ipv4"                 => ":attributeはIPv4アドレスを指定してください。",
		"ipv6"                 => ":attributeはIPv6アドレスを指定してください。",
		"json"                 => ":attributeには、有効なJSON文字列を指定してください。",
		"lt" => [
			"numeric" => ":attributeは、:valueより小さくなければなりません。",
			"file"    => ":attributeは、:value KBより小さくなければなりません。",
			"string"  => ":attributeは、:value文字より小さくなければなりません。",
			"array"   => ":attributeの項目数は、:value個より小さくなければなりません。"
		],
		"lte" => [
			"numeric" => ":attributeは、:value以下でなければなりません。",
			"file"    => ":attributeは、:value KB以下でなければなりません。",
			"string"  => ":attributeは、:value文字以下でなければなりません。",
			"array"   => ":attributeの項目数は、:value個以下でなければなりません。"
		],
		"max" => [
			"numeric" => ":attributeには、:max以下の数字を指定してください。",
			"file"    => ":attributeには、:max KB以下のファイルを指定してください。",
			"string"  => ":attributeは、:max文字以下にしてください。",
			"array"   => ":attributeの項目は、:max個以下にしてください。"
		],
		"mimes"                => ":attributeには、:valuesタイプのファイルを指定してください。",
		"mimetypes"            => ":attributeには、:valuesタイプのファイルを指定してください。",
		"min" => [
			"numeric" => ":attributeには、:min以上の数字を指定してください。",
			"file"    => ":attributeには、:min KB以上のファイルを指定してください。",
			"string"  => ":attributeは、:min文字以上にしてください。",
			"array"   => ":attributeの項目は、:min個以上にしてください。"
		],
		"not_in"               => "選択された:attributeは、有効ではありません。",
		"not_regex"            => ":attributeの形式が無効です。",
		"numeric"              => ":attributeには、数字を指定してください。",
		"password"             => ":attributeが間違っています",
		"present"              => ":attributeが存在している必要があります。",
		"regex"                => ":attributeには、有効な正規表現を指定してください。",
		"required"             => ":attributeは、必ず指定してください。",
		"required_if"          => ":otherが:valueの場合、:attributeを指定してください。",
		"required_unless"      => ":otherが:values以外の場合、:attributeを指定してください。",
		"required_with"        => ":valuesが指定されている場合、:attributeも指定してください。",
		"required_with_all"    => ":valuesが全て指定されている場合、:attributeも指定してください。",
		"required_without"     => ":valuesが指定されていない場合、:attributeを指定してください。",
		"required_without_all" => ":valuesが全て指定されていない場合、:attributeを指定してください。",
		"same"                 => ":attributeと:otherが一致しません。",
		"size" => [
			"numeric" => ":attributeには、:sizeを指定してください。",
			"file"    => ":attributeには、:size KBのファイルを指定してください。",
			"string"  => ":attributeは、:size文字にしてください。",
			"array"   => ":attributeの項目は、:size個にしてください。"
		],
		"starts_with"          => ":attributeは、次のいずれかで始まる必要があります。:values",
		"string"               => ":attributeには、文字を指定してください。",
		"timezone"             => ":attributeには、有効なタイムゾーンを指定してください。",
		"unique"               => "指定の:attributeは既に使用されています。",
		"uploaded"             => ":attributeのアップロードに失敗しました。",
		"url"                  => ":attributeは、有効なURL形式で指定してください。",
		"uuid"                 => ":attributeは、有効なUUIDでなければなりません。",
		"custom" => [
			"attribute-name" => [
				"rule-name" => "custom-message"
			]
		]
	];

これで、基本的にはバリデーションエラーの日本語化は完了です。

手順3. 属性名の随時更新

ただ、「:attribute」の属性名の部分はフォームのname属性に設定した名前によって異なるため、随時更新する必要があります。

例えば、以下のようなフォームを作った場合。

<input type="text" name="name" class="form-control" />

この場合は、例えば「nameは必ず指定してください」のようなエラーメッセージになってしまいます。そのため、先ほどのlang/ja/validation.phpに以下を追記します。

'attributes' => [
	'name' => '名前',
]

あとは、フォームを作ったら、このattributes配列に値を追記していくだけでOKです。

実際に確認してみる

それでは、実際に確認してみます。

まずは、日本語化前はどうなっていたか確認してみます。

ログイン画面(日本語化前) 次に、日本語化対応後です。

ログイン画面(日本語化後) はい、日本語化できました!

バリデーションエラーの日本語化にお困りの方はぜひ試してみてください。ではでは😁

参考

https://readouble.com/laravel/11.x/ja/validation.html