kkhomeriki / nova-translatable
使 Nova 字段可翻译
Requires
- php: >=7.2.0
- laravel/nova: ^3.0
- spatie/laravel-translatable: ^4.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^8.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 或更高版本。
支持我们
我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们哪些包。您可以在 我们的联系页面 找到我们的地址。我们将在 我们的虚拟明信片墙上 发布所有收到的明信片。
安装
首先,您必须将 spatie/laravel-translatable 安装到您的 Laravel 应用中。简而言之,此包将在您的表中的 json 列中存储您的模型翻译。除此之外,它还提供了许多方便的功能来存储和检索翻译。在使用此 Nova 包之前,请务必阅读 laravel-translatable 的整个 README。
接下来,您可以通过 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
字段的标题将是"我的标题 ['en']"。
关于自定义UI
你可能想知道为什么我们没有在标签页、面板或旁边有神奇独角兽的情况下渲染可翻译字段。事实上,每个人希望翻译的显示方式都略有不同。这就是为什么我们现在选择保持它们非常简单。
如果Nova能够原生地更好地结构化长表单,我们可能会在包的新主要版本中开始利用这一点。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全
如果您发现任何安全相关的问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。