kraenkvisuell/nova-astrotranslatable

用于 Laravel Nova 的 Astrotomic 可翻译扩展。

v2.1.0 2023-07-10 10:32 UTC

README

Laravel Nova 字段允许您使任何输入字段与 astrotomic/laravel-translatable 兼容并进行本地化。

它是由 Optimist Digital 的 Optimist DigitalLaravel Nova Translatable 字段派生而来,该字段是为 Spatie Laravel Translatable 包定制的 - 因此要向他们表示极大的感谢,99% 的工作是由他们完成的!

要求

  • laravel/nova: ^2.9 || ^3.0
  • astrotomic/laravel-translatable: ^11.0

功能

  • 支持几乎所有字段(包括第三方字段)
  • 自动支持默认验证
  • 易于实现,仅需最少代码更改(在支持 astrotomic/laravel-translatable 之后)
  • 地区标签,用于在不同的地区值之间切换同一字段的值

已知无法工作的字段

  • ImageFile

限制

  • 以下方法不能使用,因为此包内部使用它们
    • resolveUsing
    • fillUsing
    • displayUsing(最终可能修复)

屏幕截图

Detail View

Form View

Form View w/ Validation Errors

安装

首先,设置 astrotomic/laravel-translatable

使用 Composer 在 Laravel Nova 项目中安装此包

# Install nova-translatable
composer require kraenkvisuell/nova-astrotranslatable

# Publish configuration (optional, but useful for setting default locales)
php artisan vendor:publish --tag="nova-translatable-config"

用法

在任意字段上调用 ->translatable(),如下所示

// Any Nova field
Text::make('Name')
  ->rules('required', 'min:2')
  ->translatable(),

// Any third-party input field
Multiselect::make('Football teams')
  ->rules('required')
  ->translatable(),

// Optionally pass custom locales on a per-field basis
Number::make('Population')
  ->translatable([
    'en' => 'English',
    'et' => 'Estonian',
  ]),

验证

可以定义特定于地区的验证规则。

为此,请在您的字段上添加 ->rulesFor() 并将 HandlesTranslatable 特性添加到您的 Nova 资源中。

->rulesFor 接受 array|string|callable 地区和 array|callable 规则。

use KraenkVisuell\NovaAstrotranslatable\HandlesTranslatable;

class Product extends Resource
{
    use HandlesTranslatable;

    public function fields(Request $request)
    {
        return [
            Text::make(__('Name'), 'name')
                ->sortable()
                ->translatable()
                ->rules(['max:255'])
                ->rulesFor('en', [
                    'required',
                ])
                ->rulesFor(['en', 'et'], function ($locale) {
                    return ["unique:products,name->$locale{{resourceId}}"];
                }),
        ];
    }
}

在此示例中,规则将添加到以下值

max: name.*
required: name.en
unique: name.en & name.et

配置

您可以在配置文件中定义所有 translatable 字段的默认地区。可以使用以下方法发布配置文件

php artisan vendor:publish --tag="nova-translatable-config"

鸣谢

许可证

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