Laravelでレッツ多言語対応!
今回はlaravelでいろんな言語に対応するための「ローカリゼーション」について紹介します。
ロケールの設定
Laravelで開発するときは基本的に適切なロケールを設定して上げる必要があります。
おそらくこの記事を見ているのは日本にいる方が多いと思うので、アプリのロケールを日本に設定してみます。
config/app.phpを編集する
config/app.phpの timezone
と locale
と fallback_locale
と faker_locale
を日本に変更します。
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'Asia/Tokyo', // 編集
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'ja', // 編集
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'ja', // お好きな言語で
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
'faker_locale' => 'ja_JP', // お好きな言語で
fallback_localeとfaker_localeとは
timezoneとlocaleは日本に合わせるのはわかりますが、
fallback_localeとfaker_localeって何のことなのでしょうか。
fallback_localeは、localeで指定した言語の設定が無かった場合に設定する言語のことです。localeで日本!って設定しているのに、システムに日本語の場合の表示方法の設定がなかったらコンピュータも困りますよね。
faker_localeは、Fakerというライブラリの言語設定です。
Laravelをお使いの方なら使ったことがある方も多いと思いますが、Factoryには標準でFakerが使えるようになっています。
例えばfakerで適当な名前を表示したいってなったときに、言語設定がenだとローマ字で外国人っぽい名前が出てきますし、日本だと日本人っぽい名前が漢字で出てきます。
バリデーションを多言語化する
まず resource/lang
の配下に言語専用のディレクトリを作成します。
app/resource/lang/ja
を作成しましょう。
そして、例えばバリデーションの場合はバリデーションファイルを作成します。(app/resource/lang/ja/validation.php)
このバリデーションファイルの中で、バリデーションエラー時のメッセージや属性(attribute)についていろいろ書き込んでいくと、
実際にバリデーションエラーになったときに日本語でエラー文が表示されるようになります。
全てを丁寧に書いていくと時間がかかるので、すでに誰かが作っている日本語のバリデーションファイルを拝借して書き換えるのが良いと思います!
↑こちらはLaravel5.5の時のものですが、ダウンロードしてきて、 app/resource/lang/ja/validation.php
において、ご自身で編集していただくことで、きちんと使えるかと思います。
これを英語やフランス語、ドイツ語など様々な言語を設定したい場合は、同じように resource/lang/
の中にそれぞれの言語用のフォルダを作成して、validation.phpを置き、 config/app.php
のロケールを変えればその言語を使えるようになります。
bladeで表示する内容を多言語化する
bladeで標準で __('messages.welcome')
このような謎の記号が使われていることがあります。
最初見たときに、この記号の意味をどう調べたらいいのか悩みましたが、これこそが多言語対応のための記号です。
__('messages.welcome')
の意味は、ロケールを日本語で設定している場合 app/resource/lang/ja/messages.php
の welcome
という定数を参照して表示しています
messages.phpの中身の例
<?php
return [
'welcome' => 'ようこそ!こんにちは!',
];
フランスやドイツ語でwelcomeメッセージを表示したい場合は、それぞれの言語用のディレクトリを作成し、その中にmessages.phpファイルを作り、同じようにwelcome
を設定してあげればOKです。
おわりに
今回はバリデーションを多言語対応する方法について解説してみました。
そもそも config/app/php
にある「fallback_locale」や「faker_locale」って何なのか、バリデーションを多言語化する際にどういう手順を踏めば良いのか、 __('messages.welcome')
この記号は何なのか?みたいなところを説明しました。
みなさんの学習のお役に立てると幸いです。
Discussion