wavevision / namespace-translator
按命名空间管理 Nette 应用程序翻译。
Requires
- php: >=7.4
- contributte/console: ^0.9
- contributte/translation: ^0.8
- google/apiclient: ^2.7
- nette/application: ^3.1
- nette/di: ^3.0
- nette/neon: ^3.0
- nikic/php-parser: ^4.9
- wavevision/di-service-annotation: ^4.0
- wavevision/utils: ^2.1
Requires (Dev)
- mikey179/vfsstream: ^1.6
- php-coveralls/php-coveralls: ^2.2
- wavevision/coding-standard: ^6.0
- wavevision/nette-tests: 3.1.3
This package is auto-updated.
Last update: 2024-08-21 21:58:35 UTC
README
命名空间翻译器
使用 contributte/translation 的 Nette 框架翻译管理器。它允许您将翻译文件放在实际使用的地方(例如,组件或模型旁边)。
不再有全局翻译混乱! 💪
安装
通过 Composer
composer require wavevision/namespace-translator
注意:这将自动安装
contributte/translation
。
使用方法
在项目配置中注册所需的扩展
extensions: translation: Contributte\Translation\DI\TranslationExtension namespaceTranslator: Wavevision\NamespaceTranslator\DI\Extension
您可以将 namespaceTranslator
配置如下 (默认值)
namespaceTranslator: dirNames: # names of dirs in which namespace translations will reside - translations - Translations loaders: # namespace translations loaders neon: Wavevision\NamespaceTranslator\Loaders\Neon php: Wavevision\NamespaceTranslator\Loaders\TranslationClass flatJson: Wavevision\NamespaceTranslator\Loaders\FlatJson
注意:有关配置
translation
的更多信息,请参阅 Contributte 文档。
使用此设置,您可以从容管理您的翻译 🤵。
最好的是,翻译器与 contributte/translation
设置完全兼容,因此您仍然可以像以前一样使用翻译,并逐步迁移到命名空间。任何未通过命名空间翻译器找到的翻译将回退到 translation
资源。
已翻译组件
您的组件(或演示者)可以使用 Wavevision\NamespaceTranslator\TranslatedComponent
特性。
确保您的组件允许 inject
。
该特性将为您的组件类/模板提供 $translator
属性/变量。翻译器将在组件的命名空间内配置的目录名称中查找资源。
注意:组件模板中的
translate
宏当然也可以使用。
已翻译模型
甚至您的服务也可以使用翻译器。只需使用 Wavevision\NamespaceTranslator\NamespaceTranslator
。
确保您的服务在您的配置中注册为 inject: true
。
之后,它的工作方式与您的组件相同。
加载器
默认包含三个资源加载器
- Neon – 从
neon
文件加载翻译 - TranslationClass – 从 PHP 类加载翻译
- FlatJson - 从扁平(无嵌套)的
json
文件加载翻译
当您想使用常量引用翻译并且希望资源的变化在整个项目中传播时,使用 PHP 类是有用的。
包含翻译的类必须实现 Wavevision\NamespaceTranslator\Resources\Translation
。
您也可以创建并注册自己的加载器,只需确保它实现了 Wavevision\NamespaceTranslator\Loaders\Loader
。
导出/导入
对于将翻译导出到或从 CSV 或 GoogleSheet(或两者)更新配置文件
namespaceTranslator: transfer: google: credentials: credentials.json sheetId: googleSheetId parts: - directory: %vendorDir%/../App/AdminModule tabName: admin-module csv: parts: - directory: %vendorDir%/../App/FrontModule filename: %vendorDir%/../temp/front-module.csv
从 contributte/translation 设置地区白名单。白名单用于在导出中创建翻译列。
运行命令以导出翻译
php {bin/console} namespace-translator:export
更新翻译后,运行命令导入它们
php {bin/console} namespace-translator:import
Google表格
要访问Google表格,您需要服务器到服务器API密钥和工作表ID。
导出示例
从文件
# file translations/en.neon hello: Hello %name%
# file translations/de.neon hello: Hallo %name%
<?php declare(strict_types=1); //file Translations/Cs.php use Wavevision\NamespaceTranslator\Resources\Translation; use Wavevision\NamespaceTranslator\Loaders\TranslationClass\Message; class Cs implements Translation { public const HELLO = 'hello'; public const NAME = 'name'; public static function define() : array { return [self::HELLO => Message::create('Hello %s', self::NAME)]; } }
导出应如下所示
file, key, en, de, format
/translations/, hello, Hello %name%, Hallo %name%, neon
/Translations/, c:self-HELLO, Hello {c:self-Name}, , php
列 file
、key
和 format
不应被修改。
有关详细信息,请参阅示例 export.csv。
TranslationClass的限制
- 定义的函数必须只有一个语句(
return [...]
) - 数组键必须是字符串或类常量
- 数组值必须是数组、字符串或
Message::create()
函数调用 - 导入后应检查PHP文件是否有错误
示例
查看测试以获取示例应用程序实现。