mrmonat/nova-spatie-translatable

此包已被弃用且不再维护。作者建议使用 mrmonat/nova-translatable 包。

Laravel Nova 字段用于 spatie/laravel-translatable。

2.2.0 2021-08-29 13:41 UTC

This package is auto-updated.

Last update: 2022-03-11 09:42:35 UTC


README

此包将不再维护。请使用 https://github.com/spatie/nova-translatable 作为替代。如果您不喜欢 spatie 包的不同方法,请随意分叉此存储库并发布新的版本。

Nova 可翻译字段

Latest Version on Packagist

添加了使用 spatie/laravel-translatable 包创建的可翻译字段的显示和编辑功能。

它在详情视图中将显示如下

68747470733a2f2f6d726d6f6e61742e64652f6769746875622f696d616765732f6e6f76612d7370617469652d7472616e736c617461626c652d64657461696c732e706e67

在编辑视图中将显示如下

68747470733a2f2f6d726d6f6e61742e64652f6769746875622f696d616765732f6e6f76612d7370617469652d7472616e736c617461626c652d656469742e706e67

支持更多字段类型的替代方案

如果您需要支持更多可翻译的字段类型,请查看 spatie 的官方包:https://github.com/spatie/nova-translatable

安装和用法

您可以使用 composer 需求此包

composer require mrmonat/nova-translatable

您可以根据以下步骤添加字段

use MrMonat\Translatable\Translatable;

Translatable::make('Description'),

确保您的 Eloquent 模型设置正确

  • 首先,您需要添加 Spatie\Translatable\HasTranslations - trait。
  • 接下来,您应该创建一个公共属性 $translatable,它包含您希望使其可翻译的所有属性名称的数组。
  • 最后,您应该确保所有可翻译属性都已设置为数据库中的 text - 数据类型。如果您的数据库支持 json - 列,请使用它。

以下是一个准备好的模型的示例

use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;

class NewsItem extends Model
{
    use HasTranslations;
    
    public $translatable = ['name'];
}

定义区域设置

可以通过配置文件 config/translatable.php 定义区域设置(可以通过 spatie/laravel-translatable 包创建配置文件)通过添加 locales 数组

// config/translatable.php
return [
    ...
    'locales' => [
        'en' => 'English',
        'de' => 'German',
        'fr' => 'French',
    ],
];

或者您可以使用 locales(...) 方法“覆盖”配置区域设置

Translatable::make('Description')->locales([
    'en' => 'English',
    'de' => 'German',
]),

单行选项

默认情况下,编辑视图上的输入字段是文本区域。如果您想将其更改为单行输入字段,可以添加 singleLine() 选项

Translatable::make('Description')->locales([...])->singleLine(),

Trix 编辑器

您可以使用 trix() 选项在可翻译字段中使用 trix 编辑器

Translatable::make('Description')->trix(),

索引视图

默认情况下,在索引视图中显示字段时使用的区域设置由 app()->getLocale() 确定。要覆盖此设置,您可以使用 indexLocale($locale) 选项

Translatable::make('Description')->indexLocale('de'),