max26292 / multilingual-nova
💪 多语言 Nova(使用默认 nova 字段)
Requires
- php: ^8.0|^8.1|^8.2
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-translatable: ^6.5
Requires (Dev)
- laravel/framework: ^10.0
- laravel/nova: ~4.0
- orchestra/testbench: ^8
- pestphp/pest-plugin-faker: ^1.0
- pestphp/pest-plugin-laravel: ^1.1
- pestphp/pest-plugin-parallel: ^1.0
- phpunit/phpunit: ^9.5.10
README
此包允许您切换 Nova 语言。语言可以从配置文件或数据库中检索为数组。
需求
安装
您可以通过 composer 安装此包
composer require digitalcloud/multilingual-nova
您可以发布配置文件
php artisan vendor:publish --provider="Digitalcloud\MultilingualNova\FieldServiceProvider"
这是将发布到 config/multilingual.php
的文件内容
<?php return [ /* * The source of supported locales on the application. * Available selection "array", "database". Default array. * When you set source "array" you can declare your languages from below at locales. * And when you set source "database" you can declare languages model from below and follow database instructions. */ 'source' => 'array', /* * If you choose array selection, you should add all supported translation on it as "code" => "label" */ 'locales' => [ 'en' => 'English', 'ar' => 'Arabic', 'de' => 'Deutsch' ], /* * If you choose database selection, you should create or choose the model responsible for retrieving supported translations. * If there is not existed model for retrieving supported translations, you must create a new model and must contain two columns from values "code_field", "label_field". * And choose the 'code_field' for example "en","ar","ru"... * And choose the 'label_field' which will be shown for users, for example "English","EN", .... */ 'database' => [ 'model' => 'App\\Language', 'code_field' => 'code', 'label_field' => 'label' ], /* * The view style you want to show on index & details page. * Available selection "button", "list", "mix" default button. */ 'style' => 'button', /* * If you choose mix selection, you can define after how many languages should the button convert to list. */ 'convert_to_list_after' => 3 ];
用法
Nova 语言工具
您可以通过将 Nova 注册为工具来使用它。这通常在 NovaServiceProvider 的 tools 方法中完成,在 app/Providers/NovaServiceProvider.php
中。
use Digitalcloud\MultilingualNova\NovaLanguageTool; // .... public function tools() { return [ // ... new NovaLanguageTool(), // ... ]; }
Nova 语言字段
您可以为资源添加 Multilingual
字段,该字段将显示语言。
use Digitalcloud\MultilingualNova\Multilingual; // .... public function fields(Request $request) { return [ // ... Multilingual::make('Language'), // ... ]; }
注意:该字段是虚拟字段,不需要是数据库列。您可以将它视为语言切换器输入。
在索引和详情页中,该字段允许您使用所选语言进入编辑表单。在创建和更新页中,该字段允许您以简单直接的方式更改表单中的输入语言。
模型
我们使用 Spatie laravel translatable
use Spatie\Translatable\HasTranslations; // .... class User extends Model { use HasTranslations; protected $fillable = ['name']; protected $translatable = ['name']; }
定义区域
您可以在配置文件中设置区域源。可能的选项是数组或数据库。如果您的语言源是数组,您需要在配置文件中的区域数组中添加允许的语言。如果您的语言源是数据库,您需要配置语言表的 Eloquent 模型、语言代码列和语言标签列。
或者,您可以使用 setLocales(...)
函数覆盖配置区域
use Digitalcloud\MultilingualNova\Multilingual; // .... public function fields(Request $request) { return [ // ... Multilingual::make('Language')->setLocales([ 'ar' => 'Arabic', 'en' => 'English', 'de' => 'Deutsch', ]), // ... ]; }
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG
安全漏洞
请参阅我们关于如何报告安全漏洞的 安全策略
显示选项
此工具允许您在语言选择器字段的显示样式之间切换。可能的显示选项是按钮、列表或混合。默认显示样式是 button
。如果字段有特定语言的翻译,按钮将是蓝色的一 - 主要按钮,如果没有可用的翻译,按钮将是灰色的一 - 默认按钮。
如果您的应用程序支持多种语言,此 button
显示样式不合适,因此 list
显示将更适合。使用 list
显示,区域将按下拉列表分组,允许您从该列表中选择选项。
显示语言的另一个完美选项是 mix
。它允许您在 button
和 list
显示选项之间混合。例如,如果系统支持少于三个区域,则它们将显示为 button
,否则将选择 list
。这种情况可以通过在配置文件中将 convert_to_list_after
设置为 3 或您想要的任何值来实现。
功能
- 在索引视图中显示支持的区域。
- 允许您在任何支持的区域中编辑任何资源。
- 没有额外的字段,只需使用默认的 Laravel 表单字段。
- 在索引、详情、创建和更新页面之间快速切换语言。
- 支持关系字段和子表。
- 使用默认/后备语言内容自动填充表单字段。
- 显示每个地区的翻译/未翻译状态。
- 使用配置文件列出支持的地区。
路线图
- 显示每个地区的翻译/未翻译状态。
- 使用配置文件列出支持的地区。
- 使用数据库资源管理支持的地区。
- 自动检测可翻译的模型。
- 更好地支持不可翻译的字段。