adizbek / nova-translatable
使 Nova 字段可翻译
Requires
- php: ^7.3|^8.0
- laravel/nova: ^4.0
- spatie/laravel-translatable: ^5.0|^6.0
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^5.0|^6.0|^7.0
- phpunit/phpunit: ^8.5|^9.0
README
此包包含一个 Translatable
类,您可以使用它来使任何 Nova 字段类型可翻译。
想象一下,您在 Post
Nova 资源中有一个这个 fields
方法
public function fields(Request $request) { return [ ID::make()->sortable(), Translatable::make([ Text::make('title'), Trix::make('text'), ]), ]; }
该 Post
Nova 资源将渲染成这样。
支持我们
我们投入了大量资源来创建 一流的开放源代码包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们哪个包。您可以在 我们的联系页面 找到我们的地址。我们将把所有收到的明信片发布在我们的 虚拟明信片墙上。
要求
此 Nova 字段需要特定的 Nova 3 和 MySQL 5.7.8 或更高版本。
安装
首先,您必须在您的 Laravel 应用中安装 spatie/laravel-translatable。简而言之,此包将在您的表中的 json 列中存储模型的翻译。此外,它还提供了许多方便的函数来存储和检索翻译。在使用此 Nova 包之前,请务必阅读 laravel-translatable 的整个说明。
接下来,您可以通过 composer 将此 Nova 包安装到使用 Nova 的 Laravel 应用中
composer require spatie/nova-translatable
用法
为了使用此包,您必须首先使用 Translatable::defaultLocales()
方法让 Translatable
知道您的应用使用哪些语言区域。您可以将此代码放在 AppServiceProvider
或您自己的专用服务提供者中。
// in any service provider \Spatie\NovaTranslatable\Translatable::defaultLocales(['en', 'fr']);
接下来,您必须按照 laravel-translatable 中的说明 准备 您的模型。简而言之:您必须为要翻译的每个字段在模型表中添加 json
列。您的模型必须在您的模型上使用 Spatie\Translatable\HasTranslations
。最后,您还必须在模型上添加一个 $translatable
属性,该属性包含一个包含可翻译属性名称的数组。
现在,当您的模型配置为翻译时,您可以在相关的 Nova 资源中使用 Translatable
。任何您想要以多语言方式显示的字段都可以作为数组传递给 `Translatable`。
public function fields(Request $request) { return [ ID::make()->sortable(), Translatable::make([ Text::make('title'), Trix::make('text'), ]), ]; }
为可翻译的每个语言区域定制
如果您有一个 Nova 资源,您想要不同的语言区域而不是全局配置的语言区域,您可以在 Translatable
上调用 locales
方法。
Translatable::make([ Text::make('title'), Trix::make('text'), ])->locales(['de', 'es']),
这些字段现在将使用 de
和 es
语言区域。
定制可翻译的名称
默认情况下,可翻译字段将 ($locale)
追加到其名称中。您可以通过向 Translatable
上的 displayLocalizedNameByDefaultUsing
提供闭包来全局定制此行为。此回调将用于渲染本地化字段名称。
Translatable::displayLocalizedNameByDefaultUsing(function(Field $field, string $locale) { return ucfirst($field->name) . " [{$locale}]"; })
将此设置后,所有可翻译字段的名称都将附加 [$locale]
。
您还可以通过传递一个闭包给 displayLocalizedNameUsing
函数来按资源自定义本地化字段名称。
Translatable::make([ Text::make('title'), Trix::make('text'), ])->displayLocalizedNameUsing(function(Field $field, string $locale) { return ucfirst($field->name) . " --- {$locale}]"; }),
设置此功能后,本地化字段名称将附加 --- $locale
后缀。
当然,您仍然可以像往常一样自定义字段名称。
Translatable::make([ Text::make('My title', 'title'), Trix::make('text'), ])->displayLocalizedNameUsing(function(Field $field, string $locale) { return ucfirst($field->name) . " [{$locale}]"; }),
使用上述代码,title
字段的名称将是 "My title ['en']"。
关于自定义UI
您可能想知道为什么我们没有在选项卡、面板或旁边显示神奇独角兽的情况下渲染可翻译字段。事实上,每个人都希望翻译显示得略有不同。这就是为什么我们决定目前保持它们非常简单。
如果Nova能够原生地更好地结构化长表单,我们可能会在包的新主要版本中利用这一点。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 freek@spatie.be 联系,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅 许可证文件。