kkhomeriki/nova-translatable

使 Nova 字段可翻译

3.0.1 2020-03-18 19:17 UTC

This package is auto-updated.

Last update: 2024-09-08 00:00:29 UTC


README

Latest Version on Packagist StyleCI Total Downloads

此包包含一个 Translatable 类,您可以使用它来使任何 Nova 字段类型可翻译。

假设您在 Post Nova 资源中有一个这样的 fields 方法

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

        Translatable::make([
            Text::make('title'),
            Trix::make('text'),
        ]),
    ];
}

Post Nova 资源将渲染成这样。

screenshot

要求

此 Nova 字段需要特定 Nova 3 和 MySQL 5.7.8 或更高版本。

支持我们

我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们哪些包。您可以在 我们的联系页面 找到我们的地址。我们将在 我们的虚拟明信片墙上 发布所有收到的明信片。

安装

首先,您必须将 spatie/laravel-translatable 安装到您的 Laravel 应用中。简而言之,此包将在您的表中的 json 列中存储您的模型翻译。除此之外,它还提供了许多方便的功能来存储和检索翻译。在使用此 Nova 包之前,请务必阅读 laravel-translatable 的整个 README

接下来,您可以通过 composer 将此 Nova 包安装到使用 Nova 的 Laravel 应用中

composer require spatie/nova-translatable

用法

为了使用此包,您必须首先使用 Translatable::defaultLocales() 方法让 Translatable 知道您的应用程序使用哪些区域设置。您可以将此代码放在 AppServiceProvider 或您自己的专用服务提供商中。

// in any service provider

\Spatie\NovaTranslatable\Translatable::defaultLocales(['en', 'fr']);

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

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

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

        Translatable::make([
            Text::make('title'),
            Trix::make('text'),
        ]),
    ];
}

按可翻译项定制区域设置

如果您有一个 Nova 资源,您想要使用与全局配置不同的区域设置,您可以在 Translatable 上调用 locales 方法。

Translatable::make([
    Text::make('title'),
    Trix::make('text'),
])->locales(['de', 'es']),

这些字段现在将使用 dees 区域设置。

定制可翻译的名称

默认情况下,可翻译字段名称将附加 ($locale)。您可以通过提供闭包到 Translatable 上的 displayLocalizedNameByDefaultUsing 来全局定制此行为。此回调将用于渲染本地化字段名称。

Translatable::displayLocalizedNameByDefaultUsing(function(Field $field, string $locale) {
   return ucfirst($field->name) . " [{$locale}]";
})

有了这个,所有可翻译字段的名称都将附加 [$locale]

您还可以通过传递闭包到 displayLocalizedNameUsing 函数来按资源定制本地化字段名称。

Translatable::make([
    Text::make('title'),
    Trix::make('text'),
])->displayLocalizedNameUsing(function(Field $field, string $locale) {
   return ucfirst($field->name) . " --- {$locale}]";
}),

有了这个,本地化字段名称将被后缀为 --- $locale

当然,您仍然可以像往常一样定制字段的名称。

Translatable::make([
    Text::make('My title', 'title'),
    Trix::make('text'),
])->displayLocalizedNameUsing(function(Field $field, string $locale) {
   return ucfirst($field->name) . " [{$locale}]";
}),

使用上面名字周围的代码,title字段的标题将是"我的标题 ['en']"。

关于自定义UI

你可能想知道为什么我们没有在标签页、面板或旁边有神奇独角兽的情况下渲染可翻译字段。事实上,每个人希望翻译的显示方式都略有不同。这就是为什么我们现在选择保持它们非常简单。

如果Nova能够原生地更好地结构化长表单,我们可能会在包的新主要版本中开始利用这一点。

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全

如果您发现任何安全相关的问题,请通过电子邮件freek@spatie.be联系,而不是使用问题跟踪器。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件