【Laravel初心者】Laravel8エラーメッセージの日本語化


Laravel初学者です。
オリジナルアプリを作成しているのでその過程を記事にしています。

理解が曖昧なところも多いため、ご指摘等ありましたらご連絡いただければ幸いです。

今回はエラーメッセージの日本語化です。
先人の方々のおかげですごい簡単でした。
他にも方法はたくさんあるみたいですね。

## 環境

|                | Version     |
|:---------------|------------:|
| PHP            | 7.4.14      |
| Laravel        | 8.24.0      |
| mysql          | 8.0.23      |
| docker         | 20.10.2     |
| docker-compose | 1.27.4      |


## エラーメッセージファイル作成

エラーメッセージは`resources/lang`配下の`en`ディレクトリで定義されています。
この`en`ディレクトリを中身そのままコピーします。
ディレクトリ名は`ja`にしましょう。

![スクリーンショット 2021-02-02 19.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/250d877d-4dcd-8d4f-5b7b-fd3399905bd4.png)

上記のような配置になると思います。


## 日本語に翻訳

`ja`ディレクトリ内の4つのファイルを見てみると中身は

```PHP:resources/lang/ja/validation
<?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.',
],
//省略
```

こんな感じになっていると思います。

**`=>`の左側がバリデーションのルール、右側が引っかかった場合のメッセージです。**

読める人はこれ全部翻訳して直せばいいんですけど量も多いので大変です。

なので有志の方が翻訳してくれているものを使わせて頂きます。
私は[この方](https://github.com/minoryorg/laravel-resources-lang-ja/tree/master/resources/lang/ja)のgithubを使わせて頂きました。
ありがとうございます。

githubにアクセスすると

![スクリーンショット 2021-02-02 20.46.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/5ff1b8be-54f6-091d-a85f-5f4f274b8cc3.png)

上記のように4つのファイルがあると思います。
これを開き

![スクリーンショット 2021-02-02 20.48.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1051152/5c5909f8-84a2-9de4-bdb1-1ff9cb129fb3.png)

このソースコードをコピーし、自分の`ja`ディレクトリのコピーしたファイルと同じ名前のファイルに上書きします。
4つのファイル同じように貼り付けしましょう。

自分でオリジナルの文言にしたい場合は変更してもOKです。

で、この状態だと不完全で
`passwordは8文字以上にしてください`とか
`nameは必須です`みたいに中途半端な日本語になります。

なので`validation.php`に追記します。

```PHP:resources/lang/ja/validation.php
//~省略
'attributes' => [], 
```

上記の部分を

```PHP:resources/lang/ja/validation.php
'attributes' => [
    'name' => 'ユーザー名',
    'email' => 'メールアドレス',
    'password' => 'パスワード'
],
```

上記のように変更します。
これはテキストフィールドのname属性を日本語に変えているので、プロジェクトによって変えましょう。
例えば`ユーザー名`じゃなくて`ニックネーム`とかにしたかったらそのように編集します。


## 言語ディレクトリを変更

`config/app.php`を開きましょう。

```PHP:config/app.php
'locale' => 'en',
```

上記の`locale`を


```PHP:config/app.php
'locale' => 'ja',
```

上記のように`ja`にすることで`ja`のディレクトリを使う設定に変わります。

以上です。