イントロダクション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.
Laravelは、翻訳文字列を管理する方法を2つ提供します。まず、言語文字列はresources/lang
ディレクトリ内のファイルに保存できます。このディレクトリ内には、アプリケーションがサポートする言語ごとにサブディレクトリを用意する必要があります。これは、バリデーションエラーメッセージなどのLaravel組み込み機能の翻訳文字列を管理するために、Laravelが使用しているアプローチです。Laravel provides two ways to manage translation strings. First, language strings may be stored in files within the resources/lang
directory. Within this directory, there may be subdirectories for each language supported by the application. This is the approach Laravel uses to manage translation strings for built-in Laravel features such as validation error messages:
/resources
/lang
/en
messages.php
/es
messages.php
または、翻訳文字列は、resources/lang
ディレクトリ内に配置されたJSONファイル内で定義できます。このアプローチを採用する場合、アプリケーションがサポートする言語ごとに、このディレクトリ内に対応するJSONファイルを用意します。このアプローチは、翻訳可能な文字列が多数あるアプリケーションで推奨します。Or, translation strings may be defined within JSON files that are placed within the resources/lang
directory. When taking this approach, each language supported by your application would have a corresponding JSON file within this directory. This approach is recommended for application's that have a large number of translatable strings:
/resources
/lang
en.json
es.json
このドキュメントでは、翻訳文字列を管理する各アプローチについて説明します。We'll discuss each approach to managing translation strings within this documentation.
ロケールの設定Configuring The Locale
アプリケーションのデフォルト言語は、config/app.php
設定ファイルのlocale
設定オプションに保存します。アプリケーションのニーズに合わせて、この値を自由に変更してください。The default language for your application is stored in the config/app.php
configuration file's locale
configuration option. You are free to modify this value to suit the needs of your application.
App
ファサードが提供するsetLocale
メソッドを使用して、単一のHTTPリクエストの間のデフォルト言語を実行時に変更できます。You may modify the default language for a single HTTP request at runtime using the setLocale
method provided by the App
facade:
use Illuminate\Support\Facades\App;
Route::get('/greeting/{locale}', function ($locale) {
if (! in_array($locale, ['en', 'es', 'fr'])) {
abort(400);
}
App::setLocale($locale);
//
});
「フォールバック言語」も設定できます。これは、アクティブな言語に対応する特定の翻訳文字列が含まれていない場合に使用されます。デフォルト言語と同様に、フォールバック言語もconfig/app.php
設定ファイルで指定します。You may configure a "fallback language", which will be used when the active language does not contain a given translation string. Like the default language, the fallback language is also configured in the config/app.php
configuration file:
'fallback_locale' => 'en',
現在のロケールの決定Determining The Current Locale
App
ファサードのcurrentLocale
メソッドとisLocale
メソッドを使用して、現在のロケールを判定したり、ロケールが指定する値であるかどうかを確認したりできます。You may use the currentLocale
and isLocale
methods on the App
facade to determine the current locale or check if the locale is a given value:
use Illuminate\Support\Facades\App;
$locale = App::currentLocale();
if (App::isLocale('en')) {
//
}
翻訳文字列の定義Defining Translation Strings
短縮キーの使用Using Short Keys
通常、翻訳文字列はresources/lang
ディレクトリ内のファイルに保存します。このディレクトリ内には、アプリケーションがサポートする各言語のサブディレクトリが必要です。これは、バリデーションエラーメッセージなどのLaravel組み込み機能の翻訳文字列を管理するためにLaravelが使用しているアプローチです。Typically, translation strings are stored in files within the resources/lang
directory. Within this directory, there should be a subdirectory for each language supported by your application. This is the approach Laravel uses to manage translation strings for built-in Laravel features such as validation error messages:
/resources
/lang
/en
messages.php
/es
messages.php
すべての言語ファイルは、キー付き文字列の配列を返します。例えば:All language files return an array of keyed strings. For example:
<?php
// resources/lang/en/messages.php
return [
'welcome' => 'Welcome to our application!',
];
Note: {note} For languages that differ by territory, you should name the language directories according to the ISO 15897. For example, "en_GB" should be used for British English rather than "en-gb".
地域によって異なる言語の場合、ISO15897に従って言語ディレクトリに名前を付ける必要があります。たとえば、「en-gb」ではなく「en_GB」をイギリス英語に使用する必要があります。
翻訳文字列をキーとして使用Using Translation Strings As Keys
翻訳可能な文字列が多数あるアプリケーションの場合、「短縮キー」ですべての文字列を定義すると、ビューでキーを参照するときに混乱する可能性があり、アプリケーションがサポートするすべての翻訳文字列のキーを継続的に作成するのは面倒です。For applications with a large number of translatable strings, defining every string with a "short key" can become confusing when referencing the keys in your views and it is cumbersome to continually invent keys for every translation string supported by your application.
このため、Laravelは、文字列の「デフォルト」の翻訳をキーとして使用して、翻訳文字列を定義するためのサポートも提供します。翻訳文字列をキーとして使用する翻訳ファイルは、JSONファイルとしてresources/lang
ディレクトリに保存されます。たとえば、アプリケーションにスペイン語の翻訳がある場合は、resources/lang/es.json
ファイルを作成する必要があります。For this reason, Laravel also provides support for defining translation strings using the "default" translation of the string as the key. Translation files that use translation strings as keys are stored as JSON files in the resources/lang
directory. For example, if your application has a Spanish translation, you should create a resources/lang/es.json
file:
{
"I love programming.": "Me encanta programar."
}
キー/ファイルの競合Key / File Conflicts
他の翻訳ファイル名と競合する翻訳文字列キーを定義しないでください。たとえば、nl/action.php
ファイルは存在するがnl.json
ファイルは存在しないときに"NL"ロケールの__('Action')
を翻訳すると、トランスレータはnl/action.php
の内容を返します。You should not define translation string keys that conflict with other translation filenames. For example, translating __('Action')
for the "NL" locale while a nl/action.php
file exists but a nl.json
file does not exist will result in the translator returning the contents of nl/action.php
.
翻訳文字列の取得Retrieving Translation Strings
__
ヘルパ関数を使用して、言語ファイルから翻訳文字列を取得できます。「短縮キー」を使用して翻訳文字列を定義している場合は、キーとキー自体を含むファイルを「ドット」構文を使用して__
関数に渡す必要があります。たとえば、resources/lang/en/messages.php
言語ファイルからwelcome
翻訳文字列を取得してみましょう。You may retrieve translation strings from your language files using the __
helper function. If you are using "short keys" to define your translation strings, you should pass the file that contains the key and the key itself to the __
function using "dot" syntax. For example, let's retrieve the welcome
translation string from the resources/lang/en/messages.php
language file:
echo __('messages.welcome');
指定する翻訳文字列が存在しない場合、__
関数は翻訳文字列キーを返します。したがって、上記の例を使用すると、翻訳文字列が存在しない場合、__
関数はmessages.welcome
を返します。If the specified translation string does not exist, the __
function will return the translation string key. So, using the example above, the __
function would return messages.welcome
if the translation string does not exist.
デフォルトの翻訳文字列を翻訳キーとして使用している場合は、文字列のデフォルトの翻訳を__
関数に渡す必要があります。If you are using your default translation strings as your translation keys[#using-translation-strings-as-keys], you should pass the default translation of your string to the __
function;
echo __('I love programming.');
この場合も、翻訳文字列が存在しない場合、__
関数は指定する翻訳文字列キーを返します。Again, if the translation string does not exist, the __
function will return the translation string key that it was given.
Bladeテンプレートエンジンを使用している場合は、{{}}
エコー構文を使用して翻訳文字列を表示できます。If you are using the Blade templating engine[/docs/{{version}}/blade], you may use the {{ }}
echo syntax to display the translation string:
{{ __('messages.welcome') }}
翻訳文字列中のパラメータの置換Replacing Parameters In Translation Strings
必要に応じて、翻訳文字列にプレースホルダーを定義できます。すべてのプレースホルダーには接頭辞:
が付いています。たとえば、プレースホルダー名を使用してウェルカムメッセージを定義できます。If you wish, you may define placeholders in your translation strings. All placeholders are prefixed with a :
. For example, you may define a welcome message with a placeholder name:
'welcome' => 'Welcome, :name',
翻訳文字列を取得するときにプレースホルダーを置き換えるには、置換の配列を2番目の引数として__
関数に渡します。To replace the placeholders when retrieving a translation string, you may pass an array of replacements as the second argument to the __
function:
echo __('messages.welcome', ['name' => 'dayle']);
プレースホルダーにすべて大文字が含まれている場合、または最初の文字のみが大文字になっている場合、変換された値はそれに応じて大文字になります。If your placeholder contains all capital letters, or only has its first letter capitalized, the translated value will be capitalized accordingly:
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE
'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
複数形Pluralization
別々の言語には複数形のさまざまな複雑なルールがあるため、複数形化は複雑な問題です。ただし、Laravelは、定義した複数化ルールに基づいて文字列を異なる方法で翻訳する手助けができます。|
文字を使用すると、文字列の単数形と複数形を区別できます。Pluralization is a complex problem, as different languages have a variety of complex rules for pluralization; however, Laravel can help you translate strings differently based on pluralization rules that you define. Using a |
character, you may distinguish singular and plural forms of a string:
'apples' => 'There is one apple|There are many apples',
もちろん、翻訳文字列をキーとして使用する場合でも、複数形化をサポートしています。Of course, pluralization is also supported when using translation strings as keys[#using-translation-strings-as-keys]:
{
"There is one apple|There are many apples": "Hay una manzana|Hay muchas manzanas"
}
複数の値の範囲の変換文字列を指定する、より複雑な複数化ルールを作成することもできます。You may even create more complex pluralization rules which specify translation strings for multiple ranges of values:
'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',
複数化オプションのある翻訳文字列を定義した後、trans_choice
関数を使用して、指定する「個数」に合った行を取得できます。以下の例では、個数が1より大きいため、複数形の翻訳文字列が返されます。After defining a translation string that has pluralization options, you may 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 translation string is returned:
echo trans_choice('messages.apples', 10);
複数化文字列でプレースホルダー属性を定義することもできます。これらのプレースホルダーは、trans_choice
関数の3番目の引数として配列を渡すことで置き換えられます。You may also define placeholder attributes in pluralization strings. These placeholders may be replaced by passing an array as the third argument to the trans_choice
function:
'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago',
echo trans_choice('time.minutes_ago', 5, ['value' => 5]);
trans_choice
関数に渡した整数値を表示したい場合は、組み込みの:count
プレースホルダーを使用できます。If you would like to display the integer value that was passed to the trans_choice
function, you may use the built-in :count
placeholder:
'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',
パッケージ言語ファイルのオーバーライドOverriding Package Language Files
一部のパッケージには、独自の言語ファイルが付属している場合があります。パッケージのコアファイルを変更してこれらの行を調整する代わりに、ファイルをresources/lang/vendor/{package}/{locale}
ディレクトリに配置することでそれらをオーバーライドできます。Some packages may ship with their own language files. Instead of changing the package's core files to tweak these lines, you may override them by placing 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 translation strings in messages.php
for a package named skyrim/hearthfire
, you should place a language file at: resources/lang/vendor/hearthfire/en/messages.php
. Within this file, you should only define the translation strings you wish to override. Any translation strings you don't override will still be loaded from the package's original language files.