Spatie主要通过其Laravel-Translation-Loader软件包处理数据库和语言文件的翻译,该软件包与Laravel的本机翻译系统无缝集成。
###使用数据库和语言文件时的工作方式
- 该软件包允许您使用专用表(`Lanaging_lines')将翻译存储在数据库中。每个翻译条目由“ Languageline”模型实例表示,其中包括:
- `组:翻译组(例如,“验证”或“ auth”)。
- “键”:组中的翻译键。
- `text`:一个持有不同语言环境的翻译的数组(例如,`'[en''=>'这是一个必需的字段','nl'=>'dit是een verplicht veld']`)。
- 当您使用Laravel的常规翻译函数(如trans()或`__()
``''__()
``'''''themake首先检查数据库中的转换时。如果找到匹配条目,它将返回数据库版本。
- 如果在数据库中找不到翻译,它将返回到Laravel s`ravels/lang`目录中存储的传统语言文件。
- 这意味着数据库翻译覆盖语言文件翻译如果两个都存在于相同的密钥和语言环境中。
- 软件包通过使用特殊的组名称`'*'
`'*'*'
'*'*'''*'
''*'````''
###其他功能和行为
- 软件包缓存的翻译组以优化性能,减少重复翻译请求的数据库查询。创建,更新或删除翻译时,缓存无效。
- 可扩展:您可以通过实现软件包的“ Translationloader”接口来添加自定义转换提供商(例如YAML,CSV),从而可以从数据库和语言文件以外的其他源中加载转换。
- 您可以继续使用Laravel的默认翻译助手和刀片指令(@@lang`,`trans()``,'__()`)而无需修改。
### 概括
Spatie的Translation Loader软件包有效地将数据库存储的翻译与Laravel的基于本机文件的翻译合并,通过优先考虑数据库条目。这允许通过数据库支持的UI进行翻译的动态编辑,同时保留静态语言文件的后备。集成平稳,需要对现有翻译调用的最小更改,并为高级用例提供缓存和可扩展性[1] [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-a-laravel-package-to-store-to-language-lines-lines-in-the-database
[8] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translatable