digitalcloud/multilingual-nova

💪 多语言 Nova (使用默认 nova 字段)


README

Latest Version on Packagist Total Downloads

此包允许您切换 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 的 tools 方法中完成。

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。它允许您在 buttonlist 显示选项之间混合。例如,如果系统支持少于三个区域,则它们将显示为 button,否则将选择 list。这种情况可以通过在配置文件中将 convert_to_list_after 设置为 3 或您想要的任何值来实现。

特性

  • 在索引视图中显示支持的区域。
  • 允许您在任何支持的区域中编辑任何资源。
  • 没有额外的字段,只需使用默认的 Laravel 表单字段。
  • 在索引、详情、创建和更新页面之间快速切换语言。
  • 支持关系字段和子表。
  • 自动用默认/回退语言内容填充表单字段。
  • 显示每个地区翻译/未翻译的状态。
  • 使用配置文件列出支持的地区。

路线图

  • 显示每个地区翻译/未翻译的状态。
  • 使用配置文件列出支持的地区。
  • 使用数据库资源管理支持的地区。
  • 自动检测可翻译的模型。
  • 更好地支持不可翻译的字段。

截图

索引页面

Index languages buttons

创建/更新页面

mmmm

语言工具

multiligual tool