ローカリゼーション
- 短いキーの使用方法
- 翻訳文字列の取得
- ##拡張パックの言語ファイルを書き換える
はじめに
Laravel ローカリゼーション機能は、さまざまな言語ファイルから文字列を取得する簡単な方法を提供し、アプリケーションが多言語開発をより適切にサポートできるようにします。言語ファイルは、デフォルトでは
resources/lang
ディレクトリに配置されます。このディレクトリでは、対応する言語ファイルが対応するサブディレクトリに保存されます。例:/resources /lang /en messages.php /es messages.php
すべての言語ファイルは、キーと値のペアの配列を返します。例:
<?php return [ 'welcome' => 'Welcome to our application' ];
ローカル設定
アプリケーションのデフォルトの言語設定は、
config/app.php
構成ファイルに保存されます。必要に応じて現在の設定を変更できます。また、App
ファサードのsetLocale
メソッドを使用して、アプリケーションの実行中に使用される言語を動的に変更することもできます:Route::get('welcome/{locale}', function ($locale) { App::setLocale($locale); // });
現在の言語に指定された翻訳文字列が含まれていない場合に使用される「バックアップ言語」を設定することもできます。デフォルト言語と同様に、代替言語も
config/app.php
設定ファイルで設定できます:'fallback_locale' => 'en',
現在のロケールを確認する
you
App
ファサードのgetLocale
メソッドとisLocale
メソッドを使用して、現在のロケールを確認したり、ロケールが指定された値であるかどうかを確認したりできます。$locale = App::getLocale();if (App::isLocale('en')) { // }
翻訳文字列の定義使用短いキー通常、翻訳文字列はresources/lang
ディレクトリ内のファイルに保存されます。このディレクトリには、アプリケーションでサポートされている各言語に対応するサブディレクトリが必要です。
/resources /lang /en messages.php /es messages.php
すべての言語ファイルは、キーと値のペアの配列を返します。例:<?php // resources/lang/en/messages.php return [ 'welcome' => 'Welcome to our application' ];
翻訳文字列をキーとして使用する多数の翻訳要件があるアプリケーションの場合、各翻訳ステートメントで「短いキー」を 1 つずつ使用する必要があります。定義上、ビュー内でこれらの「短いキー」を参照しようとすると、簡単に混乱する可能性があります。したがって、Laravel は、翻訳文字列を定義するためのキーワードとして文字列 "default" translation を使用することもサポートしています。 翻訳文字列をキーとして使用する翻訳ファイルは、resources/lang
ディレクトリに JSON 形式で保存されます。たとえば、アプリにスペイン語の翻訳がある場合は、次のディレクトリに新しい
resources/lang/es.jsonファイルを作成する必要があります:
{ "I love programming.": "Me encanta programar." }
翻訳文字列の取得
ヘルパー関数
__
を使用して言語ファイルから取得できます。__
この関数はファイル名とキー名を受け入れます。ここで、翻訳文字列は最初の引数として配置されます。たとえば、resources/lang/messages.php
言語ファイル内の翻訳文字列welcome
を取得したいとします。echo __('messages.welcome'); echo __('I love programming.');
Blade テンプレート エンジンを使用している場合、ビュー ファイルで
{{ }}
構文を使用するか、@lang
ディレクティブを使用して翻訳文字列を出力できます:{{ __('messages.welcome') }} @lang('messages.welcome')
If 指定された翻訳文字列存在しない場合、
# この関数は、翻訳文字列のキー名を直接返します。したがって、上記の例の翻訳文字列に対応するキーと値のペアが存在しない場合、
__
関数は直接messages.welcome
を返します。
翻訳文字列内のパラメータの置換 必要に応じて、プレースホルダを定義できます。すべてのプレースホルダーには{note}
@lang
ディレクティブは出力をエスケープしません。このディレクティブを使用するときは、 出力をエスケープする責任をすべて自分で負う必要があります。:
プレフィックスが付きます。たとえば、プレースホルダ名を使用してウェルカム メッセージを定義できます。
'welcome' => 'Welcome, :name',
__
関数の 2 番目のパラメータとして配列を渡すと、配列内の値が次のように置き換えられます。翻訳文字列のプレースホルダー内:
echo __('messages.welcome', ['name' => 'dayle']);
プレースホルダーの最初の文字が大文字またはすべて大文字である場合、翻訳されたコンテンツもそれに応じて大文字になります:'welcome' => 'Welcome, :NAME', // Welcome, DAYLE 'goodbye' => 'Goodbye, :Name', // Goodbye, Dayle
複数の数字言語が異なれば複数の数字に対するルールも異なるため、複数の数字は複雑な問題になります。「パイプ文字」を使用してください|
、文字列の単数形と複数形を区別できます:
'apples' => 'There is one apple|There are many apples',
複数の数値範囲の翻訳文字列を指定して、より複雑な複数形ルールを作成することもできます:'apples' => '{0} There are none|[1,19] There are some|[20,*] There are many',
After複数のオプションを含む翻訳文字列を定義すると、trans_choice
関数を使用して、指定された「数量」の内容を取得できます。たとえば、「合計数」を 10 に設定すると、数量範囲 1 ~ 19 に対応するため、複数形のステートメントが得られます。
echo trans_choice('messages.apples', 10);
複数形の文字列にプレースホルダーを挿入することもできます。trans_choice
関数の 3 番目のパラメーターで渡された配列は、プレースホルダーを置き換えます。
'minutes_ago' => '{1} :value minute ago|[2,*] :value minutes ago', echo trans_choice('time.minutes_ago', 5, ['value' => 5]);
trans_choice
関数に渡す「number」パラメーターを次のようにしたい場合は、翻訳文字列では、
:countプレースホルダーを使用できます:
'apples' => '{0} There are none|{1} There is one|[2,*] There are :count',
拡張パッケージの言語ファイルを書き換える
一部の拡張パッケージには独自の言語ファイルが付属している場合があります。拡張機能パッケージのコア ファイルを直接変更する代わりに、ファイルを
resources/lang/vendor/{package}/{locale}
ディレクトリに配置することで、これらをオーバーライドできます。たとえば、
この記事は、skyrim/hearthfire
拡張パックの英語の言語ファイルmessages.php
を書き直す必要がある場合、ファイルを ## として保存する必要があります。 #resources/lang /vendor/hearthfire/en/messages.php。このファイルでは、変更する翻訳文字列を定義するだけで済みます。オーバーライドされていない翻訳文字列は、引き続き拡張パックの元の言語ファイルからロードされます。