yiisoft/translator-extractor

2.1.1 2024-02-13 13:39 UTC

This package is auto-updated.

Last update: 2024-09-22 15:11:10 UTC


README

Yii

Yii 翻译器消息提取器

Latest Stable Version Total Downloads Build status Scrutinizer Code Quality Code Coverage Mutation testing badge static analysis type-coverage

该包允许自动从 PHP 源文件中提取翻译 ID,并将其写入 翻译消息源之一

需求

  • PHP 8.0 或更高版本。

安装

可以使用 Composer 安装此包

composer require yiisoft/translator-extractor

配置

您需要在包的配置文件中配置 MessageReaderMessageWriter,即 config/console/translator-extractor.php

例如,当使用 PHP MessageSource 时,配置如下(使用 相对路径

use \Yiisoft\Translator\Message\Php\MessageSource;

return [
    Extractor::class => [
        '__construct()' => [
            [
                DynamicReference::to([
                    'class' => ExtractorCategorySource::class,
                    '__construct()' => [
                        'app',
                        'messageReader' => DynamicReference::to(static fn () => new MessageSource($params['yiisoft/translator-extractor']['messagePath'])),
                        'messageWriter' => DynamicReference::to(static fn () => new MessageSource($params['yiisoft/translator-extractor']['messagePath'])),
                    ],
                ]),
            ],
        ],
        '->translate' // optional, default value for Translation call to look for.
    ],
];

params.php 文件中,您可以配置消息源参数

return [
    'yiisoft/yii-console' => [
        'commands' => [
            'translator/extract' => ExtractCommand::class,
        ],
    ],
    'yiisoft/translator-extractor' => [
        // Using relative path:
        'messagePath' => dirname(__DIR__, 5) . '/messages',
    ],
];

或者,如果使用 PHP MessageSource,配置如下(使用 别名

use \Yiisoft\Translator\Message\Php\MessageSource;

return [
    Extractor::class => [
        '__construct()' => [
            [
                DynamicReference::to([
                    'class' => ExtractorCategorySource::class,
                    '__construct()' => [
                        'app',
                        'messageReader' => DynamicReference::to(static fn (Aliases $aliases) => new MessageSource($aliases->get('@message'))),
                        'messageWriter' => DynamicReference::to(static fn (Aliases $aliases) => new MessageSource($aliases->get('@message'))),
                    ],
                ]),
            ],
        ],
    ],
];

注意:为了与现有消息一起工作,需要为 MessageReaderMessageWriter 配置 相同MessageSource

通用用法

./yii translator/extract

此命令将递归地找到从当前目录开始的代码中的所有消息,并将其保存到默认语言 en 的消息源中。您可以明确指定路径

./yii translator/extract /path/to/your/project

注意:默认情况下,提取器会排除应用程序目录中的 vendor 目录。要包含它,您可以指定 except 的空值

./yii translator/extract /path/to/your/project --except=''

完整选项列表

Usage:
  translator/extract [options] [--] [<path>]

Arguments:
  path                       Path for extracting message IDs.

Options:
  -L, --languages=LANGUAGES  Comma separated list of languages to write message sources for. By default it is `en`. [default: "en"]
  -C, --category=CATEGORY    Default message category to use when category is not set. [default: "app"]
  -E, --except[=EXCEPT]      Exclude path from extracting. (multiple values allowed)
  -O, --only[=ONLY]          Use the only specified path for extracting. (multiple values allowed)

指定语言

您可以指定多个语言来写入 ID

./yii translator/extract --languages=en,ru

或使用简短格式

./yii translator/extract -Lru

指定默认类别

此外,您还可以指定当类别未设置时使用的默认消息类别。

./yii translator/extract --category=your_category_name

使用 except 选项

要排除所有名为 dir1 的目录,请使用 --except

./yii translator/extract --except=**/dir1/**

要排除 vendortests 目录,可以使用以下选项

./yii translator/extract --except=./vendor/** --except=./tests/**

使用 only 选项

要解析任何目录中的 test.php 文件,请使用 --only 选项

./yii translator/extract --only=**/test.php

要解析 /var/www/html/test.php 文件,请使用

./yii translator/extract --only=/var/www/html/test.php

有关 exceptonly 参数的更多信息,请参阅 yiisoft/files 包 的文档。

与 gettext 一起使用

该包目前不支持将消息提取到 gettext 格式。要提取 gettext 格式的消息,您可以使用以下 shell 脚本(在基于 Linux 的操作系统上)

find src/ -name *.php | xargs xgettext --from-code=utf-8 --language=PHP --no-location --omit-header --sort-output --keyword=translate --output="locales/category.pot"

for d in locales/*/ ; do
    for i in locales/*.pot; do
        if [ ! -f "$d$(basename "$i" .pot).po" ]; then
            touch "$d$(basename "$i" .pot).po"
        fi

        msgmerge --update --silent --backup=off "$d$(basename "$i" .pot).po" $i
    done
done

文档

如果您需要帮助或有疑问,Yii 论坛 是一个很好的地方。您还可以查看其他 Yii 社区资源

许可证

Yii 翻译器消息提取器是免费软件。它根据 BSD 许可证发布。有关更多信息,请参阅 LICENSE

Yii 软件 维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack