Laravel のローカリゼーション機能は、さまざまな言語の文字列を取得する便利な方法を提供します。これにより、アプリケーションで複数の言語を簡単にサポートできるようになります。
言語文字列は、resources/lang ディレクトリの下のファイルに保存されます。このディレクトリでは、サポートされている複数の言語のサブディレクトリを分割する必要があります。
/resources /lang /en messages.php /es messages.php
すべての言語ファイルは、次のような文字列をキーとした配列を返すだけです。
<?phpreturn [ 'welcome' => 'Welcome to our application'];
言語環境を構成します
アプリケーションによって使用されます デフォルトの言語が保存されますconfig/app.php 設定ファイル内。もちろん、必要に応じて現在の設定を自由に変更できます。 App ペルソナの setLocale メソッドを使用して、実行時に言語を切り替えることもできます:
Route::get('welcome/{locale}', function ($locale) { App::setLocale($locale); // });
アクティブなロケールで特定の言語キーが見つからない場合に使用されるフォールバック言語を設定することもできます。バックアップ言語は config/app.php 構成ファイルでも設定されます:
'fallback_local' => 'en',
App ペルソナの isLocale メソッドを使用して、現在のロケールが指定された値を持つかどうかを確認できます:
if (App::isLocale('en')) { //}
App ペルソナの getLocale メソッドを使用して、現在のロケール:
return App::getLocale();
trans ヘルパー メソッドを使用して、言語ファイルからコンテンツを抽出できます。 trans メソッドは、最初の引数としてファイル名とキー値を受け取ります。たとえば、resources/lang/messages.php 言語ファイル内のウェルカム キーを取得してみましょう:
echo trans('messages.welcome');
Blade テンプレート エンジンを使用する場合は、ビュー ファイルで二重括弧構文を使用するか、@lang ディレクティブを使用して抽出できます。内容:
{{ trans('message.welcome') }}@lang('messages.welcome')
指定された言語ファイルにキーが存在しない場合、trans メソッドは単にキー名を返します。したがって、上記の例のキーが存在しない場合は、messages.welcome が返されます。
言語コンテンツのパラメータ置換
必要に応じて、言語コンテンツにプレースホルダーを定義できます。すべての言語プレースホルダーは、次を使用して識別されます。たとえば、誰かを歓迎するためのプレースホルダーを定義したいとします:
'welcome' => 'Welcome, :name',
trans メソッドの 2 番目のパラメーターとして配列を渡すことができます。これにより、配列の値が言語コンテンツのプレースホルダーに置き換えられます:
echo trans('message.welcome', ['name' => 'dayle']);
If yourプレースホルダーに最初の大文字またはすべて大文字が含まれている場合、置換された文字列はそれに応じて処理されます:
'welcome' => 'Welcome, :NAME', // Welcome, DAYLE'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
言語の多様性は複雑な問題です。言語が異なれば、多元性を定義するための複雑なルールがあります。 | string を使用すると、完全な文字列から単数形と複数形を区別できます:
'apples' => 'There is one apple|There are many apples',
その後、trans_choice メソッドを使用して、指定された数値に基づいて言語コンテンツを取得できます。この例では、数値が 1 より大きいため、言語は複数形を抽出します:
echo trans_choice('messages.apples', 10);
laravel のトランスレーターは Symfony 翻訳コンポーネントに基づいているため、より複雑な複数規則を作成できます:
'apples' => '{0} There are none|[1,19] There are some|[20,Inf] There are many',
多くのパッケージには独自の言語ファイルが付属しています。言語コンテンツの一部を置き換える必要がある場合は、独自の言語ファイルを resource/lang/vendor/{package}/{locale} ディレクトリに配置することで実行できます。
そのため、たとえば、skyrim/hearthfire というパッケージ内のmessages.php ファイルを上書きする必要がある場合は、独自の言語ファイルを resource/lang/vendor/hearthfire/en/message.php に保存する必要があります。このファイルには、オーバーライドしたい言語コンテンツのみを追加する必要があります。カバーされていないコンテンツも、パッケージに付属の元の言語ファイルを使用します。