どうも 多言語化というと たいそうな話に聞きこえますが、 Laravelでのロケールの話です。
つまり、 webアプリケーションを作る時に htmlに文字をベタ書きしてしまうと、 あとあと 「このサイト英語にするのどれくらいかかる?」 とかの 無邪気な質問に対応しづらくなります。
ベタ書きしてしまうと、 後から、置き換える必要のある場所を洗い出して 全部htmlなりテンプレートファイルを 書き換えないといけません。
最近 Laravelでアプリを作りはじめていて 使い方を調べたので、 ここにまとめておきます。
ちなみにLaravelのバージョンは5.4です。 この記事はここを参考にしました。 https://laravel.com/docs/5.4/localization
ロケールファイルの置き場所
ロケールファイルこのように、 resources/lang/の下に 言語に分けてそれぞれの言語ファイルを置いて起きます。
/resources
/lang
/en
messages.php
/ja
messages.php
それぞれの中身は (英語版) lang/en/message.php
<?php
return [
'description' => 'welcome to our site. this is shopping site on the web !!'
]
(日本語版) lang/ja/message.php
<?php
return [
'description' => 'ようこそ私たちのオンラインショッピングサイトへ'
]
になります。 このようにしておくと message.descriptionなどを キーにviewファイルから文字を呼びだすようになります。
ロケールファイルに書いたメッセージの呼び出し
上の設定が住んで入れば、 view ファイルで
__('message.description')'
のように、 呼び出せます。
ロケールの設定
ここまでで、 ・言語ごとのロケールファイルの設定 ・viewファイルでの呼び出し
はできます。 が、 日本語が呼ばれるか、英語が呼ばれるかどこで判断するの? という疑問が生まれると思います。
それがどこかというと、 それは、
config/app.phpのlocaleになります。
/*
|--------------------------------------------------------------------------
| 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',
また、config/app.phpはアプリの起動時に 読まれるはずですが、 アプリの起動中でも
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
のような形でロケールを変更できるよう。
これはやってみてはないですが、 これを使って、 言語をユーザに選ばせるとかはできそう。
おまけ - メッセージを動的にする
以下は少し補足的な内容になりますが、 メッセージを動的に変化させたい時ありますよね。
例えば、 ログイン後の画面でよくある「ようこそ〇〇さん」みたいな表示です。
これをロケールでやろうとすると (英語版)
<?php
return [
'welcom' => ':name , welcome to our site!!'
]
(日本語版)
<?php
return [
'welcom' => 'ようこそ :name さん'
]
のようにファイルに定義して、 呼び出す際に
__('messages.welcome', ['name' => 'John']);
のようにすれば、 変数の文字を埋め込んだ形でメッセージを表示することができます。
まとめ
ここまでで、 ロケールとか国際化とか多言語化とかに 役立つ情報をまとめました。
これはアプリを多言語で作ると決めてから コツコツ両方のロケールを更新していくという作業 が必要なので、 早めに知っておくと良いと思います。 (後から文字を全部置き換えるという単純作業は地獄なので・・・)
以上です!!