【Laravel】Breezeのバリデーションを日本語表記に変更する方法

![20230702_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/4f9d6fd3-9a25-dac0-e045-c649b71ff806.png)
<p>
    上のように初期状態ですとバリデーションが英語で表示されてしまいます。
</p>
<p>
    今回はこの英語表記を日本語表記に変更していく手順を紹介していきます。
</p>

<h2>使用する環境</h2>
<ul>
    <li>laravel : 8</li>
    <li>Windows : 10</li>
</ul>
<p>
    <font color="Red">
        ※今回Laravel8を使用していますが、Laravel9以降の場合はlang/jaフォルダを作成すれば対応可能になります。（詳しくは以下まで）
    </font>
</p>

<h2>日本語フォルダ作成</h2>
<p>以下のよう「 lang 」フォルダ内に「 ja 」フォルダを作成してください。</p>

![20230702_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/ea0d314c-b0e9-97e2-d0ce-7dfc4000d887.png)

<p>「 en 」フォルダと「 ja 」フォルダが同じ階層にあることを確認できたら、以下のように「 ja 」フォルダ内に４つのファイルを作成していきます。
    <font color="Red">
        ※基本的には「 en 」フォルダと同じファイル名で作成してください。
    </font>
</p>

<h4>作成ファイル</h4>
<ul>
    <li>auth.php</li>
    <li>pagination.php</li>
    <li>passwords.php</li>
    <li>validation.php</li>
</ul>

![20230702_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/c37b4084-8983-0a9f-de15-1fa09e2bf56c.png)

<h2>作成したファイルに日本語用のコードを記述（コピペでOK）</h2>

> auth.php

```php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | 認証言語行
    |--------------------------------------------------------------------------
    |
    | 以下の言語行は認証時にユーザーに対し表示する必要のある
    | 様々なメッセージです。アプリケーションの必要に合わせ
    | 自由にこれらの言語行を変更してください。
    |
    */

    'failed' => 'ログイン情報が登録されていません。',
    'throttle' => 'ログインに続けて失敗しています。:seconds秒後に再度お試しください。',

];
```
<br>

> pagination.php

```php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | ペジネーション言語行
    |--------------------------------------------------------------------------
    |
    | 以下の言語行はペジネーターライブラリーによりシンプルなペジネーション
    | リンクを生成するために使用されます。アプリケーションに合うように、
    | 自由に変更してください。
    |
    */

    'previous' => '&laquo; 前',
    'next' => '次 &raquo;',

];
```
<br>

> passwords.php

```php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | パスワードリセット言語行
    |--------------------------------------------------------------------------
    |
    | 以下の言語行は既存のパスワードを無効にしたい場合に、無効なトークンや
    | 新しいパスワードが入力された場合のように、パスワードの更新に失敗した
    | 理由を示すデフォルトの文言です。
    |
    */

    'reset' => 'パスワードをリセットしました。',
    'sent' => 'パスワードリセットメールを送信しました。',
    'throttled' => 'しばらく再試行はお待ちください。',
    'token' => 'このパスワードリセットトークンは無効です。',
    'user' => "メールアドレスに一致するユーザーは存在していません。",

];
```
<br>

> passwords.php

```php
<?php

return [

    /*
    |--------------------------------------------------------------------------
    | バリデーション言語行
    |--------------------------------------------------------------------------
    |
    | 以下の言語行はバリデタークラスにより使用されるデフォルトのエラー
    | メッセージです。サイズルールのようにいくつかのバリデーションを
    | 持っているものもあります。メッセージはご自由に調整してください。
    |
    */

    'accepted'             => ':attributeを承認してください。',
    'accepted_if' => ':otherが:valueの場合、: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 kBから、:max kBの間で指定してください。',
        'string'  => ':attributeは、:min文字から、:max文字の間で指定してください。',
        'array'   => ':attributeは、:min個から:max個の間で指定してください。',
    ],
    'boolean'              => ':attributeは、trueかfalseを指定してください。',
    'confirmed'            => ':attributeと、確認フィールドとが、一致していません。',
    'current_password'     => 'パスワードが正しくありません。',
    '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'            => ':attributeには、: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個以上指定してください。',
    ],
    'multiple_of' => ':attributeには、:valueの倍数を指定してください。',
    'not_in'               => '選択された:attributeは正しくありません。',
    'not_regex'            => ':attributeの形式が正しくありません。',
    'numeric'              => ':attributeには、数字を指定してください。',
    'password'             => '正しいパスワードを指定してください。',
    '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を指定してください。',
    'prohibited'           => ':attributeは入力禁止です。',
    'prohibited_if' => ':otherが:valueの場合、:attributeは入力禁止です。',
    'prohibited_unless'    => ':otherが:valueでない場合、:attributeは入力禁止です。',
    'prohibits'            => 'attributeは:otherの入力を禁じています。',
    'same'                 => ':attributeと:otherには同じ値を指定してください。',
    'size'                 => [
        'numeric' => ':attributeは:sizeを指定してください。',
        'file'    => ':attributeのファイルは、:sizeキロバイトでなくてはなりません。',
        'string'  => ':attributeは:size文字で指定してください。',
        'array'   => ':attributeは:size個指定してください。',
    ],
    'starts_with'          => ':attributeには、:valuesのどれかで始まる値を指定してください。',
    'string'               => ':attributeは文字列を指定してください。',
    'timezone'             => ':attributeには、有効なゾーンを指定してください。',
    'unique'               => ':attributeの値は既に存在しています。',
    'uploaded'             => ':attributeのアップロードに失敗しました。',
    'url'                  => ':attributeに正しい形式を指定してください。',
    'uuid'                 => ':attributeに有効なUUIDを指定してください。',

    /*
    |--------------------------------------------------------------------------
    | Custom バリデーション言語行
    |--------------------------------------------------------------------------
    |
    | "属性.ルール"の規約でキーを指定することでカスタムバリデーション
    | メッセージを定義できます。指定した属性ルールに対する特定の
    | カスタム言語行を手早く指定できます。
    |
    */

    'custom' => [
        '属性名' => [
            'ルール名' => 'カスタムメッセージ',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | カスタムバリデーション属性名
    |--------------------------------------------------------------------------
    |
    | 以下の言語行は、例えば"email"の代わりに「メールアドレス」のように、
    | 読み手にフレンドリーな表現でプレースホルダーを置き換えるために指定する
    | 言語行です。これはメッセージをよりきれいに表示するために役に立ちます。
    |
    */

    'attributes' => [
        'name' => '氏名',
        'email' => 'メールアドレス',
        'password' => 'パスワード',
    ],

];
```

<p>
    これでLaravel Breeze の日本語表記にする作業は終了です。一応簡易サーバーを立ち上げて確認してみてください。
</p>

<h3>表示確認</h3>
<p>以下のように表示されていればOKです!!「文言などはお好みで変更してください。」</p>

![20230702_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/a7a09236-0a8f-54ec-d13a-fd488c4c66f4.png)

<p>
    <font color="Red">
        Whoops!Something went wrong.
    </font>
    と表示されている箇所も変更したい方は以下を実施してください。
</p>

<h2>ファイルの作成</h2>
<p>以下のように「 lang 」フォルダ内に「 ja.json 」ファイルを作成してください。</p>

![20230702_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/d7353c46-9347-fa82-8d63-d36fb9a2ccf2.png)

<h2>jsonファイルにコードを記述（コピペでOK）</h2>
<p>
    「 json 」ファイルは「JavaScript」のオブジェクトのような書き方になります。
</p>

```json
{"Whoops! Something went wrong.":"何か問題が発生しました。正しく入力してください。"}
```

<p>「 {"キー":"バリュー"} 」で連想配列のように書いています。</p>

<h3>表示確認</h3>
<p>以下のように表示されていればOKです!!「文言などはお好みで変更してください。」</p>

![20230702_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3494399/3087a3de-4bb0-1838-0568-c5eeb60e470e.png)