Laravelの日本語化ファイルを編集し、バリデーションメッセージの:valueや:dateなどのプレースホルダーを日本語化する


Laravelを日本語化し、言語ファイルのvalidation.phpを編集することで、バリデーションメッセージを日本語化することができます。

attributesメソッドを編集することで英語の属性名も日本語化できるので、例えば年齢入力欄の属性名をageにしていても、

ageには、数字を指定してください。

ではなく、

年齢には、数字を指定してください。

と表示することが可能です。

問題

ただ、attributesメソッドを追加しても、:dateなどのプレースホルダーは日本語化されないため、一部日本語化されない箇所があります。

例えば、以下のような例です。

まず、日本化していない場合はLaravelの言語を日本語に変更の記事に沿って日本語しておきます(インストーラのダウンロードでは対応したバージョンを指定します)。

次に、make:requestコマンドでフォームリクエストクラスを作成します。

CLI
php artisan make:request ExampleRequest

バリデーションルールを追加します。

app/Http/Request/ExampleRequest.php
public function rules()
{
    return [
        'deadline' => 'required|date|after_or_equal:today',
    ];
}

ここでは、deadline(締切日)という属性に、

  • 必須
  • 日付文字列
  • 本日以降

というルールを設定しました。

次に、カスタムバリデーション属性名を設定するため、attributeメソッドを追加します。

resources/lang/ja/validation.php
'attributes' => [
    'deadline' => '締切日',
],

これによって、例えばrequiredのバリデーションに失敗した場合の表示が

deadlineは必ず指定してください。

から

締切日は必ず指定してください。

という表示に変わります。

:valueや:dateなどのプレースホルダーを日本語に置き換えたい

しかしながら、after_or_equalのバリデーションメッセージは

resources/lang/ja/validation.php
'after_or_equal'       => ':attributeには、:date以降の日付を指定してください。',

となっているため、:dateプレースホルダーの部分は、attributeメソッドでも置き換えられず、after_or_equalのバリデーションに失敗した場合、

締切日には、today以降の日付を指定してください。

という表示になってしまいます。

解決策

:valueや:dateなどのプレースホルダーを変更する場合は、valuesメソッドを使います。

:valueプレースホルダーの変更方法は、ドキュメントの言語ファイルでカスタム値を指定に記載があります。

:dateプレースホルダーの変更は、次のように記述します。

resources/lang/ja/validation.php
'values' => [
    'date' => [
        'today' => '本日',
    ],
],

これによって、

締切日には、本日以降の日付を指定してください。

と表示されるようになります。