Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon データベースファイルと言語ファイルの両方が使用されている場合、Spatieは翻訳をどのように処理しますか


データベースファイルと言語ファイルの両方が使用されている場合、Spatieは翻訳をどのように処理しますか


Spatieは、主にLaravel-Translation-Roaderパッケージを使用して、データベースファイルと言語ファイルの両方を使用して翻訳を処理し、Laravelのネイティブ翻訳システムとシームレスに統合します。

###データベースと言語ファイルの両方を使用するときの動作

- パッケージを使用すると、専用のテーブル( `Language_lines`)を使用して翻訳をデータベースに保存できます。各翻訳エントリは、「言語ライン」モデルインスタンスで表されます。
- 「グループ」:翻訳グループ(例:「検証」または「auth」)。
- 「キー」:グループ内の翻訳キー。
- `text`:異なるロケールの翻訳を保持する配列(` ['en' => 'これは必須フィールド'、 'nl' => 'dit is verplicht veld'] `)。

-Laravelの通常の翻訳機能を使用して翻訳をリクエストすると、 `trans()`または `__()`などの翻訳関数は、最初に翻訳のデータベースをチェックします。一致するエントリが見つかった場合、データベースバージョンを返します。

- 翻訳がデータベースにない場合、Laravelの `sostance/lang`ディレクトリに保存されている従来の言語ファイルに戻ります。

- これは、データベースの翻訳が、両方が同じキーとロケールに対して存在する場合、言語ファイルの翻訳をオーバーライドすることを意味します。

- パッケージは、JSON翻訳ラインに特別なグループ名 `'*'`を使用して、グループベースの翻訳(例:「検証」)とJSON翻訳の両方をサポートします。

###追加機能と動作

- パッケージは翻訳のグループをキャッシュして、パフォーマンスを最適化し、繰り返し翻訳要求でデータベースクエリを削減します。翻訳が作成、更新、または削除されると、キャッシュが無効になります。

- 拡張可能:パッケージの「TranslationLoader」インターフェイスを実装して、カスタム翻訳プロバイダー(YAML、CSVなど)を追加して、データベースおよび言語ファイルを超えた他のソースから翻訳をロードできるようにします。

-Laravelのデフォルトの翻訳ヘルパーとブレードディレクティブ( `@lang`、` trans() `、` __() `)を変更せずに使用できます。

### まとめ

Spatieâの翻訳ローダーパッケージは、データベースエントリに優先順位を付けることにより、Laravelのネイティブファイルベースの翻訳とデータベースで保存された翻訳を効果的にマージします。これにより、静的言語ファイルへのフォールバックを保持しながら、データベース支援UIを介した翻訳の動的編集が可能になります。統合はスムーズで、既存の翻訳呼び出しに最小限の変更が必要であり、高度なユースケース[3] [5] [6] [7]のキャッシュと拡張性を提供します。

引用:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://laravel-news.com/translation-loader-package
[4] https://github.com/spatie/laravel-translatable
[5] https://www.laravelblogs.com/courses/multi-language-laravel/spatie-laravel-translation-loader
[6] https://packagist.org/packages/spatie/laravel-translation-loader
[7] https://freek.dev/593-a-laravel-package-to-store-language-lines-in-the-database
[8] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translatable