bbs-lab/nova-translation

v5.1.0 2024-06-14 08:28 UTC

README

StyleCI Quality Score

内容

安装

您可以通过 composer 将 nova 工具安装到使用 Nova 的 Laravel 应用中

composer require bbs-lab/nova-translation

服务提供程序将自动注册。或者,您也可以手动在您的 config/app.php 文件中添加服务提供程序

'providers' => [
    // ...
    BBSLab\NovaTranslation\NovaTranslationServiceProvider::class,
],

您可以通过以下命令自定义应用程序的默认设置

php artisan vendor:publish --provider="BBSLab\NovaTranslation\NovaTranslationServiceProvider"

您需要运行迁移和种子 Locales。

php artisan migrate

模型设置

// @TODO... 解释

  • use Traits\Translatable

  • auto_synced_models 在 config.php 中

  • 定义 $nonTranslatable 属性(在条目更新期间将被覆盖的所有翻译中的属性)。

  • 定义 $onCreateTranslatable 属性(在翻译条目创建期间将复制的属性)。

  • 如果您使用 michielkempen/nova-order-field 包,您必须通过以下方式覆盖模型中的系统

/**
 * {@inheritdoc}
 */
public function buildSortQuery()
{
    return static::query()->locale();
}

配置

您可以通过运行以下命令发布默认配置

php artisan vendor:publish --provider="BBSLab\NovaTranslation\NovaTranslationServiceProvider"

使用 Cookies

默认情况下,语言设置在更改时存储在会话中,但如果您需要在会话启动之前访问它,您可以通过在配置中启用它来指示包将其保存到 Cookie 中

'use_cookies' => true,

Cookie 将持有在 locale_session_key 中定义的相同名称

💡 注意:Cookie 将默认加密,要将其排除,您可以将其添加到您的 EncryptCookies 中间件

class EncryptCookies extends Middleware
{
    public function __construct(EncrypterContract $encrypter)
    {
        parent::__construct($encrypter);

        $this->except = array_merge($this->except, [
            // ...
            NovaTranslation::localeSessionKey(),
        ]);
    }
}

配置 Nova

在应用程序内核中添加 SetLocale 中间件。

// app/Http/Kernel.php

protected $middleware = [
    // ...
    \BBSLab\NovaTranslation\Http\Middleware\SetLocale::class,
];

用法

TranslationMatrix 工具

您必须使用 Nova 注册翻译矩阵后端工具

// app/Providers/NovaServiceProvider.php

public function tools()
{
    return [
        new \BBSLab\NovaTranslation\Tools\TranslationMatrix,
    ];
}

Nova 资源

Nova 资源必须 继承 BBSLab\NovaTranslation\Resources\TranslatableResource 才能正常工作。

区域资源

您可以在您的应用程序中添加 Locale Nova 资源

// app/Nova/Locale.php

<?php

namespace App\Nova;

use App\Helpers\StaticLabel;
use BBSLab\NovaTranslation\Resources\Locale as BaseResource;

class Locale extends BaseResource
{
    /**
     * {@inheritdoc}
     */
    public static $group = StaticLabel::GROUP_ADMINISTRATION;
}

GraphQL

如果您使用 Lighthouse PHP,您可以添加一些默认指令和端点,用于 LocaleLabel

指令 @allTranslations@paginateTranslations@firstTranslation 相关

作为类似 @all@paginate@first 的操作。

您需要将包指令路径添加到您的 lighthouse.php 配置文件中

// config/lighthouse.php

'namespaces' => [
    // ...
    'directives' => ['App\\GraphQL\\Directives', 'BBSLab\\NovaTranslation\\GraphQL\\Directives'],
],

模式

您可以将这些包含到现有的模式中

#import ../../../vendor/bbs-lab/nova-translation/src/Http/GraphQL/Locale/*.graphql
#import ../../../vendor/bbs-lab/nova-translation/src/Http/GraphQL/Label/*.graphql

旗帜资源

UTF-8(例如 en.json)旗帜来自 EmojiTerra

TODO

  • 在键标题上添加排序按钮
  • 添加搜索栏以过滤键
  • 添加复选框以启用/禁用显示区域
  • 当未选择区域时,添加自定义消息/组件