イントロダクションIntroduction
Laravelのローカリゼーション機能はアプリケーションで多言語をサポートできるように、様々な言語の文字列を便利に取得できる方法を提供します。Laravel's localization features provide a convenient way to retrieve strings in various languages, allowing you to easily support multiple languages within your application.
言語の文字列はresources/lang
ディレクトリー下のファイルに保存します。このディレクトリーの中にアプリケーションでサポートする言語のディレクトリーを設置します。Language strings are stored in files within the resources/lang
directory. Within this directory there should be a subdirectory for each language supported by the application:
/resources
/lang
/en
messages.php
/es
messages.php
全ての言語ファイルはシンプルにキーと文字列の配列をリターンします。例を見てください。All language files simply return an array of keyed strings. For example:
<?php
return [
'welcome' => 'Welcome to our application'
];
ロケールの設定Configuring The Locale
アプリケーションのデフォルト言語はconfig/app.php
設定ファイルで指定します。もちろんこの値はアプリケーションに合うように変更できます。さらにApp
ファサードのsetLocale
メソッドを使い、実行時にアクティブな言語を変更することもできます。The default language for your application is stored in the config/app.php
configuration file. Of course, you may modify this value to suit the needs of your application. You may also change the active language at runtime using the setLocale
method on the App
facade:
Route::get('welcome/{locale}', function ($locale) {
App::setLocale($locale);
//
});
指定された言語行がアクティブな言語で存在しない場合に使用される、「フォールバック言語」を設定することもできます。デフォルト言語と同様に、フォールバック言語もconfig/app.php
設定ファイルで指定されます。You may also configure a "fallback language", which will be used when the active language does not contain a given language line. Like the default language, the fallback language is also configured in the config/app.php
configuration file:
'fallback_locale' => 'en',
基本的な使用法Basic Usage
言語ファイルから行を取得するにはtrans
ヘルパ関数を使用します。trans
メソッドはファイルと言語行を第1引数として受け取ります。たとえばresources/lang/messagesphp
言語ファイルのwelcome
言語行を取得してみましょう。You may retrieve lines from language files using the trans
helper function. The trans
method accepts the file and key of the language line as its first argument. For example, let's retrieve the language line welcome
in the resources/lang/messages.php
language file:
echo trans('messages.welcome');
もちろん、Bladeテンプレートエンジンを使っていれば、言語行をechoするために{{ }}
記法が使えます。Of course if you are using the Blade templating engine[/docs/{{version}}/blade], you may use the {{ }}
syntax to echo the language line:
{{ trans('messages.welcome') }}
指定した言語行が存在していない場合、trans
関数はただ言語行のキーを返します。ですから前記の例で言語行が存在していなければ、trans
関数はmessages.welcome
をリターンします。If the specified language line does not exist, the trans
function will simply return the language line key. So, using the example above, the trans
function would return messages.welcome
if the language line does not exist.
言語行のパラメーターの置き換えReplacing Parameters In Language Lines
お望みなら言語行でプレースホルダーを定義することもできます。全プレースホルダーは:
のプレフィックスが付きます。たとえばnameプレースホルダー付きの歓迎メッセージの例をご覧ください。If you wish, you may define place-holders in your language lines. All place-holders are prefixed with a :
. For example, you may define a welcome message with a place-holder name:
'welcome' => 'Welcome, :name',
取得する言語行のプレースホルダーを置き換えるには、trans
関数の第2引数に対象の配列を指定してください。To replace the place-holders when retrieving a language line, pass an array of replacements as the second argument to the trans
function:
echo trans('messages.welcome', ['name' => 'Dayle']);
複数形化Pluralization
複数形化は複雑な問題であり、異なった言語において多種複雑な複数形化のルールが存在しています。あなたの言語ファイルでこれを簡単に管理できます。「パイプ」記号の縦線を使うことで、単数形の文字列と複数形の文字列を分けることができます。Pluralization is a complex problem, as different languages have a variety of complex rules for pluralization. By using a "pipe" character, you may distinguish a singular and plural form of a string:
'apples' => 'There is one apple|There are many apples',
それから「数」を指定し、trans_choice
関数で行を取得します。以下の例では数が1より大きので、複数形の言語行が返されます。Then, you may then use the trans_choice
function to retrieve the line for a given "count". In this example, since the count is greater than one, the plural form of the language line is returned:
echo trans_choice('messages.apples', 10);
Laravelの翻訳にはSymfony Translationコンポーネントを使用しているため、もっと便利な複数形化のルールも簡単に作成できます。Since the Laravel translator is powered by the Symfony Translation component, you may create even more complex pluralization rules:
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
ベンダーの言語ファイルのオーバーライドOverriding Vendor Language Files
いくつかのパッケージではそれ自身の言語ファイルが提供されています。出力される文言を調整するためパッケージのコアをハックする代わりに、resources/lang/vendor/{パッケージ}/{ロケールコード}
ディレクトリーにファイルを設置することで、オーバーライドできます。Some packages may ship with their own language files. Instead of hacking the package's core files to tweak these lines, you may override them by placing your own files in the resources/lang/vendor/{package}/{locale}
directory.
たとえばskyrim/hearthfire
パッケージが持っているmessages.php
の英語の言語行をオーバーライドする必要があるなら、resources/lang/vendor/hearthfire/en/messages.php
に言語ファイルを設置します。このファイルには置き換えたい言語行の定義だけを設置することができます。オーバーライドしなかった言語行は、パッケージの言語ファイル中の定義のままロードされます。So, for example, if you need to override the English language lines in messages.php
for a package named skyrim/hearthfire
, you would place a language file at: resources/lang/vendor/hearthfire/en/messages.php
. In this file you should only define the language lines you wish to override. Any language lines you don't override will still be loaded from the package's original language files.