zicht / messages-bundle
Zicht Messages bundle
Requires
- php: ^8.0
- doctrine/dbal: ^2.13.1 || ^3
- doctrine/orm: ^2.5
- sonata-project/admin-bundle: ^4
- symfony/console: ^6.4
- symfony/finder: ^6.4
- symfony/yaml: ^6.4
Requires (Dev)
- phpunit/phpunit: ^9.6
Suggests
- google/cloud-translate: To use the TranslateCommand with batch-translations through the Google Translate API
- dev-release/8.x
- dev-release/7.x
- dev-release/4.x
- 8.0.0
- 7.1.1
- 7.1.0
- 7.0.1
- 7.0.0
- 6.0.4
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.3.2
- 5.3.1
- 5.2.2
- 5.2.1
- 5.2.0
- 5.1.0
- 5.0.5
- 5.0.4
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.2
- 4.0.1
- 4.0.0
- 3.1.1
- 3.1.0
- 3.0.0
- 2.5.8
- 2.5.7
- 2.5.6
- 2.5.5
- 2.5.4
- 2.5.3
- 2.5.2
- 2.5.1
- 2.5.0
- 2.4.6
- 2.4.5
- 2.4.4
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.2.4
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.0
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0
- dev-release/6.x
- dev-release/5.x
- dev-feature/fix-translations-filter
- dev-feature/rewire-loader--2
- dev-feature/rewire-loader
This package is auto-updated.
Last update: 2024-09-02 15:44:28 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
维护者
- Boudewijn Schoon boudewijn@zicht.nl