Laravelの認証確認メール・パスワードリセットメールを日本語化する方法

Laravel 7での、取り組みです。

Laravelは、メール送付機能を持っていますが、デフォルト設定は勿論英語の状態です。今回は、認証確認メール・パスワードリセットメール送付における日本語化を紹介していきます。

bladeを直接日本語へ変換するやり方もあるかと思いますが、お勧めしません。
というのも、Laravelでは、email送付の雛形を定めておいて、中身を認証確認メール・パスワードリセットメールと状況に応じて使い分けているので直接編集してしまうと、上手く切り替えが難しくなってしまうと思います。
あくまで、Laravelの設計に沿って日本語化していく方法を進めていきます。

ポイント:
1:メールの雛形を作っている php
2:メールの中身を作っている php
3:英語から日本語へ変換する設定

1:メールの雛形を作っている php

まずは、メールの雛形を作っている部分を紹介します。

vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php 

こちらのbladeがemail内容の雛形です。

{{ $line }} 、 {{ $actionText }}  などが後から紹介する「 2:メールの中身を作っている php 」部分で生成されて流れてきます。
ここの部分が、認証確認メール・パスワードリセットメールでは切り替えられています。

ここの「vendor」配下のbladeをいじっても内容を変更することは可能ですが、避けましょう。というのもバージョン変更などがあった際に上書きされてしまう場所だからです。

このbladeを編集できるように、オーバーライドするカタチで複製する方法があります。
それが下記のコマンドです。

 php artisan vendor:publish --tag=laravel-notifications 

こちらを実行すると、先ほどのbladeと同じ内容が、

resources/views/vendor/Notifications /email.blade.php 

に複製されます。
ここを編集したものが、メールの雛形として反映されます。
(オーバーライドされます。)

このemail.blade.php 日本語に変換しても、日本語文章を送ることは出来ますが、冒頭に言及した通りオススメは出来ません。
どうやって、日本語化していくは後述していきます。

その前に、2:メールの中身を作っている php を見ていきます。

2:メールの中身を作っている php

認証確認メール・パスワードリセットメールでファイルが違います。

パスワードリセットメール:

vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php 

認証確認メール:

vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php

こちらで、色々な処理が行われています。

今回は文章の内容だけに注目していきます。

認証確認メール: の方で確認していきます。

return (new MailMessage)     
->subject(Lang::get(‘Verify Email Address’))    
 ->line(Lang::get(‘Please click the button below to verify your email address.’))     
->action(Lang::get(‘Verify Email Address’), $verificationUrl)     
->line(Lang::get(‘If you did not create an account, no further action is required.’));

この、 subject 、line、actionなどが、先ほどの、メールの雛形に送られます。
このままだと、英語がそのまんまおくられています。
・Verify Email Address  
・ Please click the button below to verify your email address.
などです。

これを、日本語に変換していきます。

3:英語から日本語へ変換する設定

2つの処理をしていきます。
・ config/app.php で日本語入力へ反映する指示
・英語文章から変換される日本語を指示

config/app.php で日本語入力へ反映する指示

 config/app.php

-'timezone' => 'UTC', 
+'timezone' => 'Asia/Tokyo', 


-'locale' => 'en', 
+'locale' => 'ja', 

-'faker_locale' => 'en_US', 
+'faker_locale' => 'ja_JP', 

上記、3箇所変更して下さい。

英語文章から変換される日本語を指示

resources/lang/ja.json

下記の位置に、ja.jsonというjsonファイルを作成してください。

 {
 "Thank you.": "ご利用頂きまして誠にありがとうございます。",
 "Verify Email Address": "メール認証をして登録を完了して下さい。",
 "Please click the button below to verify your email address.": "下のボタンをクリックしてメールアドレスの認証を完了してください。",
 "If you did not create an account, no further action is required.": "アカウントを作成していない場合は、何もしなくて大丈夫です。",
 "If you’re having trouble clicking the,": "もしもボタンをクリックしてもサイトへ遷移しない場合は、",
 "copy and paste the URL below": "下記のURLをコピーして",
 "into your web browser:": "ブラウザで反映して下さい。"
}

 

jsonファイルは上記のように、英語から日本語に変換したい対応を記述していきましょう。

先ほど紹介した

vendor/laravel/framework/src/Illuminate/Auth/Notifications/VerifyEmail.php ( ResetPassword.php  )

の中の、英語に対応する部分を日本語化していくこともできますし

return (new MailMessage)     
->subject(Lang::get(‘Verify Email Address’))    
 ->line(Lang::get(‘Please click the button below to verify your email address.’))     
->action(Lang::get(‘Verify Email Address’), $verificationUrl)     
->line(Lang::get(‘If you did not create an account, no further action is required.’));

雛形に存在している英語の中で

resources/views/vendor/Notifications /email.blade.php 

@lang( )で囲まれている部分も、日本語に変換できます。

たとえば、

@lang(‘Regards’)

@lang(‘Hello’)

などありますよね。
これに対応する日本語をjsonファイルに反映すれば、英語ではなくて日本語が反映されます。