wavevision/namespace-translator

此包已废弃,不再维护。未建议替代包。

按命名空间管理 Nette 应用程序翻译。

1.0.7 2021-04-15 19:08 UTC

README

Wavevision s.r.o.

命名空间翻译器

Build Status Coverage Status PHPStan

使用 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

filekeyformat 不应被修改。

有关详细信息,请参阅示例 export.csv

TranslationClass的限制

  • 定义的函数必须只有一个语句(return [...]
  • 数组键必须是字符串或类常量
  • 数组值必须是数组、字符串或 Message::create() 函数调用
  • 导入后应检查PHP文件是否有错误

示例

查看测试以获取示例应用程序实现。