wowmaking/nova-translatable

Laravel Nova的laravel-translatable扩展。

dev-master 2023-07-07 12:37 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:33:21 UTC


README

Latest Version on Packagist Total Downloads

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

要求

  • laravel/nova: ^2.9 || ^3.0
  • spatie/laravel-translatable: ^4.0 || ^5.0

功能

  • 支持几乎所有字段(包括第三方字段)
  • 自动支持默认验证
  • 简单易用,代码更改最少(在添加spatie/laravel-translatable支持后)
  • 地区选项卡以在相同字段的不同的地区值之间切换
  • 双击选项卡以切换所有字段到该地区
  • 支持nova-settings

已知无法正常工作的字段

限制

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

屏幕截图

Detail View

Form View

Form View w/ Validation Errors

安装

首先,设置spatie/laravel-translatable

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

# Install nova-translatable
composer require optimistdigital/nova-translatable

# 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()并在您的Nova资源上添加HandlesTranslatable特质。

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

use OptimistDigital\NovaTranslatable\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"

从配置选项填充其他地区

配置选项fill_other_locales_from允许您从单个地区预先填充其他地区。这需要资源也具有HandlesTranslatable特质。

边缘情况

BelongsToMany allowDuplicateRelations边缘情况

当您使用此字段作为具有->allowDuplicateRelations()的BelongsToMany中的枢纽字段并希望使用NotExactlyAttached规则过滤出精确匹配时,请使用BelongsToManyTranslatable字段而不是常规的BelongsToMany

致谢

许可证

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