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ファイルに反映すれば、英語ではなくて日本語が反映されます。