Spatie通过与Laravel的本地化系统集成并提供灵活的方法来存储和检索基于应用程序当前语言环境的翻译,从而管理Laravel应用程序中的翻译。
##当应用程序网站更改时,Spatie如何处理翻译
1。翻译存储和检索
- Spatie提供了一个称为Laravel-Translation-Loader的软件包,该软件包允许将翻译存储在数据库中,而不是仅仅是语言文件。该软件包用Spatie的提供商代替了Laravel的默认翻译服务提供商,从而使翻译可以从数据库中动态获取[1]。
- 翻译存储在表中(通常是``landical_lines'),其中每个条目包含一个组(例如“验证”),一个键(例如“必需”)和一个json对象保存多个语言环境的翻译(例如,'en''=>'这是一个必需字段',nl'=>'dit是een verplicht verplicht verplicht velplicht veld veld veld veld veld veld'')。
- 当您使用翻译键调用Laravel s` __()`函数时,Spatie的Loader会在应用程序中的当前语言环境中获取翻译。例如,如果应用程序语言环境为`'nl'',`__(“验证”)`返回数据库的荷兰翻译[1]。
2。网站切换
- 可以在运行时使用Laravel s`app() - > setLocale('Locale_code')`方法更改应用程序区域。
- 一旦更改了语言环境,所有随后的翻译检索通过`__()或其他翻译功能自动返回新设置的语言环境中的文本。
- 如果数据库中当前语言环境缺少翻译,则除非明确禁用[1] [8],否则Laravel的后备语言环境机制可以从默认场所返回翻译。
3。带有JSON存储的模型级翻译
- 另一个Spatie软件包,Laravel-Translatable,是为雄辩的模型而设计的,以使属性可翻译。
- 翻译作为JSON存储在每个可翻译属性的单个数据库列中,而无需额外的表[3]。
- 当应用程序区域更改时,访问模型上的可翻译属性会自动返回当前语言环境的值。例如,`$ newsitem-> name'将返回应用程序中当前语言环境的翻译[4]。
- 您可以使用`gettranslation(属性,locale)``setTranslation''(属性,locale,value)``gettranslation oftranslation oftranslation oftranslation oftranslation oftranslation oftranslation of translation''[4]'和`[4]''和`setTranslation(属性)。
4。后备和缺少翻译
- Spatie的Transloable Package支持后备场所,因此,如果当前语言环境缺少翻译,则可以从另一个语言环境(通常是默认设置)返回翻译[8]。
- 可以通过将布尔标志传递给“ getTranslation”以禁用后备并获得空字符串来控制这种行为[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-angting-angting-anging-anging-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-locale-when-i--------------------------------------------------------------