Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon アプリのロケールが変更されたとき、Spatieはどのように翻訳を管理しますか


アプリのロケールが変更されたとき、Spatieはどのように翻訳を管理しますか


Spatieは、Laravelのローカリゼーションシステムと統合し、アプリの現在のロケールに基づいて翻訳を保存および取得する柔軟な方法を提供することにより、Laravelアプリケーションの翻訳を管理しています。

##アプリのロケールが変更されたときにSpatieが翻訳を処理する方法

1。翻訳ストレージと取得

-Spatieは、Laravel-Translation-Roaderというパッケージを提供しており、言語ファイルではなくデータベースに翻訳を保存できるようにします。このパッケージは、Laravelのデフォルトの翻訳サービスプロバイダーをSpatieのプロバイダーに置き換え、翻訳をデータベースから動的にフェッチできるようにします[1]。
- 翻訳は、各エントリにグループ(「検証」など)、キー(「必須」など)、および複数のロケールの翻訳を保持しているJSONオブジェクトが含まれるテーブル(通常は「言語_lines」)に保存されます(例えば、 `'en' => 'これは必須フィールドです。
- 翻訳キーを使用してLaravelâ `__()`関数を呼び出すと、Spatieâのローダーは、アプリケーションに設定された現在のロケールの翻訳を取得します。たとえば、アプリのロケールが「 'nl」の場合、 `__(' validation.required ')`はデータベースからオランダ語の翻訳を返します[1]。

2。ロケールスイッチング

-Appロケールは、laravelのs `app() - > setlocale( 'locale_code')`メソッドを使用して実行時に変更できます。
- ロケールが変更されると、 `__()`または他の翻訳関数を介した後続の翻訳検索はすべて、新しく設定されたロケールのテキストを自動的に返します。
- データベースの現在のロケールの変換が欠落している場合、Laravelのフォールバックロケールメカニズムは、明示的に無効になっていない限り、デフォルトのロケールから変換を返すことができます[1] [8]。

3。 JSONストレージを使用したモデルレベルの翻訳

-Raravel-Translatableの別のSPATIEパッケージは、雄弁なモデルが翻訳可能になるように設計されています。
- 翻訳は、追加のテーブルを必要とせずに、翻訳可能な属性ごとに単一のデータベース列にJSONとして保存されます[3]。
- アプリのロケールが変更されると、モデルの翻訳可能な属性にアクセスすると、現在のロケールの値が自動的に返されます。たとえば、 `$ newsitem-> name`は、アプリの現在のロケールの翻訳を返します[4]。
- `get Translation(属性、locale)および` settranslation(属性、ロケール、値) `[4]などの方法を使用して、特定のロケールの翻訳を明示的に取得または設定できます。

4。フォールバックと翻訳の欠落

-Spatieâの翻訳可能なパッケージはフォールバックロケールをサポートするため、現在のロケールの翻訳が欠落している場合、別のロケール(通常はデフォルト)から翻訳を返すことができます[8]。
- この動作は、ブールフラグを渡して「取引翻訳」に渡すことで制御できます。

まとめ

アプリのロケールが変更されると、Spatieの翻訳パッケージは、データベースが保存した言語ラインまたはJSONが貯蔵したモデル属性からの適切な翻訳を自動的に提供し、Laravelのロケール設定を活用します。このシームレスな統合により、変換検索関数は、現在のアプリロケールに基づいて正しいローカライズされた文字列を返すことができ、翻訳が欠落している場合にフォールバックメカニズムを利用できます。

このアプローチにより、実行時に動的なロケールスイッチングが可能になり、使用するパッケージに応じて、データベーステーブルまたはJSON列のいずれかで柔軟な方法で翻訳を保存することがサポートされます。

参照:[1] [3] [4] [8]

引用:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-patie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows the-default-when-i-ty-try-retrieve-th