andrewakram / multilang-nova
💪 多语言 Nova(使用默认 nova 字段)
Requires
- php: ^8.0
- spatie/laravel-package-tools: ^1.11.3
- spatie/laravel-translatable: ^6.0.0
Requires (Dev)
- laravel/framework: ^8.0
- laravel/nova: ~3.0
- orchestra/testbench: ^6.23
- 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 中注册它来将其用作工具。通常在 app/Providers/NovaServiceProvider.php
中的 NovaServiceProvider 的工具方法中这样做。
use Digitalcloud\MultilingualNova\NovaLanguageTool; // .... public function tools() { return [ // ... new NovaLanguageTool(), // ... ]; }
Nova 语言字段
您可以为资源添加 多语言
字段,该字段将显示语言。
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
安全漏洞
请查看我们如何报告安全漏洞的 安全策略
显示选项
此工具允许您在语言选择器字段的显示样式之间切换。可能的显示选项是按钮、列表或混合。默认情况下,显示样式是 按钮
。如果字段具有特定语言的翻译,则按钮将是蓝色的一等按钮,如果没有可用的翻译,则按钮将是灰色的一等按钮。
如果您的应用程序支持多种语言,则此 按钮
显示样式不合适,因此 列表
显示将更合适。使用 列表
显示,区域将分组在下拉列表中,允许您从此列表中选择选项。
显示语言的另一种完美选项是 混合
。它允许您在 按钮
和 列表
显示选项之间混合。例如,如果系统支持少于三个区域,则它们将显示为 按钮
,否则将选择 列表
。此情况可以通过在配置文件中设置 convert_to_list_after
为 3 或您想要的任何值来实现。
功能
- 在索引视图中显示支持的区域
- 允许您在任何支持的区域中编辑任何资源
- 没有额外的字段,只需使用默认的 Laravel 表单字段。
- 在索引、详情、创建和更新页面上快速切换语言
- 支持关系字段和子表
- 自动使用默认/回退语言内容填充表单字段
- 显示每个区域的翻译/未翻译状态
- 使用配置文件列出支持的区域
路线图
- 显示每个区域的翻译/未翻译状态
- 使用配置文件列出支持的区域
- 使用数据库资源管理支持的语言。
- 自动检测可翻译的模型。
- 更好地支持不可翻译的字段。