zicht/messages-bundle

Zicht Messages bundle

8.0.0 2024-05-02 14:51 UTC

README

The ZichtMessagesBundle 提供了一个 Doctrine 实体和管理屏幕来管理消息,并让数据库为消息键提供翻译。此外,还提供了一些方便的命令行工具。

管理

管理界面基于 SonataAdminBundle。

命令行工具

一些实用命令行工具可用。

  • zicht:messages:add 将消息添加到数据库目录
  • zicht:messages:load 将翻译文件加载到数据库目录
  • zicht:messages:flush 清空 Symfony 的翻译缓存

安装

  • 确保您的项目中存在 translations/ 目录。
    • 使用翻译似乎取决于扫描目录的顺序。使用此目录,我们确保自己是最后一个,覆盖数据库中的模板。
  • 为每个域-区域组合添加 db 文件,例如:message.en.db
  • 通过 CMS 添加翻译。
  • 使用 php app/console cache:clear 清除缓存
  • 所有现有消息状态都将显示为 未知,您需要运行 zicht:messages:load --sync 一次来更新这些状态

配置手动缓存清除

编辑您的 zicht_admin.yml 并添加

zicht_admin:
    rc:
        messages:
            route: zicht_messages_rc_flush
            method: DELETE
            title: Clear translation cache
            button: Clear

消息状态

messages-bundle 为每个消息维护一个状态,此状态可以是 导入用户未知。您可以通过添加以下内容来配置 z 在每次部署时导入消息

tasks:
    deploy:
        post: 
            - @messages.load_files

为确保消息状态正确更新,请将以下内容添加到您的 z 配置中

messages:
    overwrite_compatibility: false

自动翻译

使用 zicht:message:translate 命令和选择的 API 进行自动翻译。通过使用提供的 Google Translate API 启动使用。

设置

composer require google/cloud-translate

配置

在项目中定义 Google Translator 为服务。您的 API 密钥应该是服务帐户的私钥(https://cloud.google.com/translate/docs/basic/setup-basic

parameters:
    env(GOOGLE_API_KEY): '%kernel.root_dir%/config/your-google-api-key.json'
<service id="Zicht\Bundle\MessagesBundle\Translator\GoogleTranslator">
    <argument key="$googleTranslateServiceAccount">%env(json:file:resolve:GOOGLE_API_KEY)%</argument>
</service>

添加 CompilerPass 来在 MessageTranslator 上注册 BatchTranslatorInterface

use Zicht\Bundle\MessagesBundle\Translator\GoogleTranslator;
use Zicht\Bundle\MessagesBundle\Translator\MessageTranslator;

/**
 * {@inheritDoc}
 */
public function process(ContainerBuilder $container)
{
    $container
        ->getDefinition(MessageTranslator::class)
        ->addMethodCall('setBatchTranslator', [new Reference(GoogleTranslator::class)]);
}

用法

在这个例子中,我们已将 .nl.yaml 复制到 es.yaml,并告知命令源语言是 nl,目标语言应为 es。由于我们已经重命名了文件,因此只有此文件的内容将被重写。

php bin/console zicht:message:translate /dir/to/project/translations/validators.es.(yaml|xlf) --source=nl --target=es

条件

对于 yaml,需要目标语言(--target=xx),因为它无法自动发现。对于 xlf,我们在文件内部使用 target-language 属性,但也可以通过目标选项强制使用。

翻译中的参数将被重写,不会发送到翻译 API 以防止翻译它们。它们应采用 %param%!param{param} 格式。

如果您的文件是 xliff,我们只支持 1.2

如果您的文件是 yaml,并且具有分层内容,则这些内容将丢失,文件将被重写为包含完整路径的单行翻译。

之前

app:
   index:
        title: Abc

之后

app.index.title: Abc

维护者