Laravelのバリデーションはエラーメッセージを$errorsから取り出すだけなので、非常に楽なのですが、デフォルトでは英語でしか表示されません。
ここはやはり日本語にしたいところ。
今回は5分でエラーメッセージを日本語化したいと思います。
##英語のエラーメッセージはどこにある?
そもそもこのエラーメッセージはどこからくるのでしょう?
/resources/lang/en
の中の4つのファイルになります。
auth.php | pagination.php | passwords.php | validation.php |
---|---|---|---|
認証関係のメッセージ | ページネーションメッセージ | パスワード部分のメッセージ | その他諸々メッセージ(大量) |
試しに、validation.php
の中身を見てみましょうか。
中身は連想配列で、キー
が指定するバリデーションルールで、値
が帰ってくるメッセージですね。
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_equals' => 'The :attribute must be a date equal to :date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'ends_with' => 'The :attribute must end with one of the following: :values',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'numeric' => 'The :attribute must be greater than :value.',
'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'The :attribute must be greater than :value characters.',
'array' => 'The :attribute must have more than :value items.',
],
'gte' => [
'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'The :attribute must have :value items or more.',
],
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'lt' => [
'numeric' => 'The :attribute must be less than :value.',
'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'The :attribute must be less than :value characters.',
'array' => 'The :attribute must have less than :value items.',
],
'lte' => [
'numeric' => 'The :attribute must be less than or equal :value.',
'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'The :attribute must not have more than :value items.',
],
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'The :attribute must be a number.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values are present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'starts_with' => 'The :attribute must start with one of the following: :values',
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
'uuid' => 'The :attribute must be a valid UUID.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap our attribute placeholder
| with something more reader friendly such as "E-Mail Address" instead
| of "email". This simply helps us make our message more expressive.
|
*/
'attributes' => [],
];
ファッ!? めっちゃ長いやんけ...!?
しかし、大丈夫。これらを1つ1つ和訳する必要はなく、先人がgithubにファイルをあげてくれているから、それをダウンロードするだけなのである。
##手順1:jaフォルダを作り、そこに移動する
まずは日本語ファイルを迎え入れる準備です。
resources/lang
以下にja
フォルダを作ってください。
そしたら、ターミナルでそのディレクトリまでcdコマンドで移動します。
##githubからダウンロード
さあいよいよ。curlコマンドで引っ張ってきます。
$ curl -OL https://raw.githubusercontent.com/rito-nishino/Laravel-Japanese-Language-fileset/master/auth.php
$ curl -OL https://raw.githubusercontent.com/rito-nishino/Laravel-Japanese-Language-fileset/master/pagination.php
$ curl -OL https://raw.githubusercontent.com/rito-nishino/Laravel-Japanese-Language-fileset/master/passwords.php
$ curl -OL https://raw.githubusercontent.com/rito-nishino/Laravel-Japanese-Language-fileset/master/validation.php
そしたら、
おおーきてますきてます!
試しにja/validation.php
を確認して見ましょう。
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
| 検証言語
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
| 次の言語行には、バリデータークラスで使用されるデフォルトのエラーメッセージが含まれています。
| これらの規則の中には、サイズ規則などの複数のバージョンがあります。
| これらのメッセージのそれぞれをここで微調整してください。
*/
'accepted' => ':attribute が未承認です',
'active_url' => ':attribute は有効なURLではありません',
'after' => ':attribute は :date より後の日付にしてください',
'after_or_equal' => ':attribute は :date 以降の日付にしてください',
'alpha' => ':attribute は英字のみ有効です',
'alpha_dash' => ':attribute は「英字」「数字」「-(ダッシュ)」「_(下線)」のみ有効です',
'alpha_num' => ':attribute は「英字」「数字」のみ有効です',
'array' => ':attribute は配列タイプのみ有効です',
'before' => ':attribute は :date より前の日付にしてください',
'before_or_equal' => ':attribute は :date 以前の日付にしてください',
'between' => [
'numeric' => ':attribute は :min ~ :max までの数値まで有効です',
'file' => ':attribute は :min ~ :max キロバイトまで有効です',
'string' => ':attribute は :min ~ :max 文字まで有効です',
'array' => ':attribute は :min ~ :max 個まで有効です',
],
'boolean' => ':attribute の値は true もしくは false のみ有効です',
'confirmed' => ':attribute を確認用と一致させてください',
'date' => ':attribute を有効な日付形式にしてください',
'date_format' => ':attribute を :format 書式と一致させてください',
'different' => ':attribute を :other と違うものにしてください',
'digits' => ':attribute は :digits 桁のみ有効です',
'digits_between' => ':attribute は :min ~ :max 桁のみ有効です',
'dimensions' => ':attribute ルールに合致する画像サイズのみ有効です',
'distinct' => ':attribute に重複している値があります',
'email' => ':attribute メールアドレスの書式のみ有効です',
'exists' => ':attribute 無効な値です',
'file' => ':attribute アップロード出来ないファイルです',
'filled' => ':attribute 値を入力してください',
'gt' => [
'numeric' => ':attribute は :value より大きい必要があります。',
'file' => ':attributeは :value キロバイトより大きい必要があります。',
'string' => ':attribute は :value 文字より多い必要があります。',
'array' => ':attribute には :value 個より多くの項目が必要です。',
],
'gte' => [
'numeric' => ':attribute は :value 以上である必要があります。',
'file' => ':attribute は :value キロバイト以上である必要があります。',
'string' => ':attribute は :value 文字以上である必要があります。',
'array' => ':attribute には value 個以上の項目が必要です。',
],
'image' => ':attribute 画像は「jpg」「png」「bmp」「gif」「svg」のみ有効です',
'in' => ':attribute 無効な値です',
'in_array' => ':attribute は :other と一致する必要があります',
'integer' => ':attribute は整数のみ有効です',
'ip' => ':attribute IPアドレスの書式のみ有効です',
'ipv4' => ':attribute IPアドレス(IPv4)の書式のみ有効です',
'ipv6' => ':attribute IPアドレス(IPv6)の書式のみ有効です',
'json' => ':attribute 正しいJSON文字列のみ有効です',
'lt' => [
'numeric' => ':attribute は :value 未満である必要があります。',
'file' => ':attribute は :value キロバイト未満である必要があります。',
'string' => ':attribute は :value 文字未満である必要があります。',
'array' => ':attribute は :value 未満の項目を持つ必要があります。',
],
'lte' => [
'numeric' => ':attribute は :value 以下である必要があります。',
'file' => ':attribute は :value キロバイト以下である必要があります。',
'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' => 'The :attribute format is invalid.',
'numeric' => ':attribute は数字のみ有効です',
'present' => ':attribute が存在しません',
'regex' => ':attribute 無効な値です',
'required' => ':attribute は必須です',
'required_if' => ':attribute は :other が :value には必須です',
'required_unless' => ':attribute は :other が :values でなければ必須です',
'required_with' => ':attribute は :values が入力されている場合は必須です',
'required_with_all' => ':attribute は :values が入力されている場合は必須です',
'required_without' => ':attribute は :values が入力されていない場合は必須です',
'required_without_all' => ':attribute は :values が入力されていない場合は必須です',
'same' => ':attribute は :other と同じ場合のみ有効です',
'size' => [
'numeric' => ':attribute は :size のみ有効です',
'file' => ':attribute は :size KBのみ有効です',
'string' => ':attribute は :size 文字のみ有効です',
'array' => ':attribute は :size 個のみ有効です',
],
'string' => ':attribute は文字列のみ有効です',
'timezone' => ':attribute 正しいタイムゾーンのみ有効です',
'unique' => ':attribute は既に存在します',
'uploaded' => ':attribute アップロードに失敗しました',
'url' => ':attribute は正しいURL書式のみ有効です',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
| カスタム検証言語
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
| ここでは、行に名前を付けるために "attribute.rule"という規則を使って属性のカスタム
| 検証メッセージを指定することができます。 これにより、特定の属性ルールに対して特定の
| カスタム言語行をすばやく指定できます。
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
| カスタム検証属性
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
| 次の言語行は、属性プレースホルダを「email」ではなく「E-Mail Address」などの
| 読みやすいものと交換するために使用されます。
|
*/
'attributes' => [],
];
日本語!!
でもまだ終わりじゃないんです。
バリデーション時にこのファイルを適用しないとダメですので。
##localeをjaに
config/app.php
の以下の記述を探してください。
'locale' => 'en',
これをjaにします。
'locale' => 'ja',
これでOKです。
試しに冒頭と同じエラーを起こします。
ドキドキ...
優勝した