adizbek/nova-translatable

使 Nova 字段可翻译

3.1.0 2022-04-19 12:24 UTC

This package is auto-updated.

Last update: 2024-09-21 08:52:01 UTC


README

Latest Version on Packagist GitHub Workflow Status Check & fix styling 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 或更高版本。

安装

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

接下来,您可以通过 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 字段的名称将是 "My title ['en']"。

关于自定义UI

您可能想知道为什么我们没有在选项卡、面板或旁边显示神奇独角兽的情况下渲染可翻译字段。事实上,每个人都希望翻译显示得略有不同。这就是为什么我们决定目前保持它们非常简单。

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

测试

composer test

变更日志

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

贡献

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

安全

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

致谢

许可证

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