kongulov / nova-tab-translatable

制作可翻译的 Nova Tab

2.1.4 2024-07-23 06:14 UTC

README

Latest Version on Packagist Licence Total Downloads

此包包含一个NovaTabTranslatable类,您可以使用它将任何 Nova 字段类型通过选项卡进行翻译。

想象一下,您有一个这样的fields方法在一个 Post Nova 资源中

use Kongulov\NovaTabTranslatable\NovaTabTranslatable;

...

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),

        NovaTabTranslatable::make([
            SluggableText::make('Title')->slug('Slug'),
            Slug::make('Slug')->readonly(),
            Trix::make('text'),
            Text::make('Keywords'),
            Text::make('Description'),
        ]),
    ];
}

该 Post Nova 资源将渲染成这样。

screenshot screenshot

需求

  • php: >=7.1.0
  • spatie/laravel-translatable: ^4.0

安装

通过 Composer 在 Laravel Nova 项目中安装此包

# Install nova-tab-translatable
composer require kongulov/nova-tab-translatable

# Publish configuration
php artisan vendor:publish --tag="tab-translatable-config"

这是将要发布到 config/tab-translatable.php 文件的文件内容

<?php

return [
    /*
     * The source of supported locales on the application
     * Available selection "array", "database". Default array
     */
    'source' => 'array',

    /*
     * If you choose array selection, you should add all supported translation on it as "code"
     */
    'locales' => [
        'en', 'fr', 'es'
    ],

    /*
     * If you choose database selection, you should choose the model responsible for retrieving supported translations
     * And choose the 'code_field' for example "en", "fr", "es"...
     */
    'database' => [
        'model' => 'App\\Models\\Language',
        'code_field' => 'lang',
        'sort_by' => 'id',
        'sort_direction' => 'asc'
    ],

    /*
     * If you want to save the tab in the last selected language for the whole project, set this "true".
     * But if you want to use in one place call the saveLastSelectedLang(true|false) method
     */
    'save_last_selected_lang' => false,
];

用法

您必须按照 laravel-translatable 的说明准备好您的模型(如说明)。简而言之:您必须在模型表中为要翻译的每个字段添加 json 列。您的模型必须使用 Spatie\Translatable\HasTranslations 在模型上。最后,您还必须在模型上添加一个 $translatable 属性,该属性包含一个包含可翻译属性名称的数组。

现在,您的模型已配置为进行翻译,您可以在相关的 Nova 资源中使用 NovaTabTranslatable。任何您想以多语言方式显示的字段都可以作为数组传递给 NovaTabTranslatable

use Kongulov\NovaTabTranslatable\NovaTabTranslatable;

...

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),

        NovaTabTranslatable::make([
            SluggableText::make('Title')->slug('Slug'),
            Slug::make('Slug')->readonly(),
            Trix::make('text'),
            Text::make('Keywords'),
            Text::make('Description'),
        ]),
    ];
}

如果您只想在某些语言中使字段为必填项,则可以使用 required_lang 规则,

NovaTabTranslatable::make([
    Text::make('Title')->rules('required_lang:en,fr'),
    Trix::make('text')->rules('required_lang:en,fr'),
    Text::make('Keywords'),
    Text::make('Description'),
]),

但如果您想在所有语言中都使字段为必填项,则使用 laravel 规则

NovaTabTranslatable::make([
    Text::make('Title')->rules('required'),
]),
  • 替换字段名
NovaTabTranslatable::make([
    Text::make('Title')->rules('required'),
])->setTitle('Own Title'),
  • 如果您想将选项卡保存在最后选定的语言中,请调用 saveLastSelectedLang() 方法,或在配置中将 'save_last_selected_lang' => false 替换为 'save_last_selected_lang' => true
NovaTabTranslatable::make([
    Text::make('Title'),
])->saveLastSelectedLang(true|false),
  • 如果要在索引和详情页面上关闭选项卡并将每个选项卡作为一行显示,请在使用您的资源时使用 TranslatableTabToRowTrait 特性
class YourResource extends Resource
{
    use TranslatableTabToRowTrait;
    ...
}

鸣谢

许可证

此项目是开源软件,许可协议为MIT许可