webiik/translation

该翻译提供国际化翻译。

1.1 2020-01-23 16:17 UTC

This package is auto-updated.

Last update: 2024-09-24 02:06:34 UTC


README

翻译

该翻译提供具有用户可扩展翻译格式的 i18n。

安装

composer require webiik/translation

示例

$translation = new \Webiik\Translation\Translation($arr);

$translation->setLang('en');
$translation->add('greeting', 'Hello {name}!');
echo $translation->get('greeting', ['name' => 'Kitty']);

$translation->setLang('cs');
$translation->add('greeting', 'Ahoj {name}!');
echo $translation->get('greeting', ['name' => 'Kitty']);

设置

setLang

setLang(string $lang): void

setLang() 设置翻译的当前语言。此语言用于设置和获取 Translation 类的值。

$translation->setLang('en');

inject

inject(string $parserClassName, TranslationInjector $injector): void

inject() 向特定解析器注入依赖项。当您创建自定义解析器并需要注入一些外部依赖项时很有用。

$translation->inject('Route', new \Webiik\Translation\TranslationInjector(function () use (&$router) {
    return [$router];
}));

添加

add

add(string $key, string $val): void

add() 通过键添加翻译。了解更多关于 支持的翻译格式 的信息。

$translation->add('greeting', 'Hello {name}!');

addArr

addArr(array $translation, &$context = false): void

addArr() 从数组中添加翻译。

关于解决键冲突的说明

数组值 - 新的数组值与旧的数组值合并。如果数组键是字符串,新键的值替换旧键的值。

混合值 - 新值与旧值的类型不同时,替换旧值。例如,新的字符串值替换旧的数组值,反之亦然。

$translation->addArr(['greeting' => 'Hello {name}!']);

获取

get

get(string $key, array|bool|null $parse = null): string|array

get() 通过键获取翻译。键支持点表示法。如果键不存在,则返回空字符串。调用后,所有缺失的键和上下文都可以通过 getMissing() 方法获取。

$translation->get('greeting', ['name' => 'Kitty']);

getAll

getAll(array|bool|null $parse = null): array

getAll() 获取所有翻译。调用后,所有缺失的上下文都可以通过 getMissing() 方法获取。

$translation->getAll(['name' => 'Kitty']);

getMissing

getMissing(): array

getMissing() 返回一个数组,其中包含通过调用方法 get() 和 getAll() 的所有缺失的键和上下文。

$missing = $translation->$arr->getMissing();

解析

翻译可以包含特殊格式,有助于动态更新翻译值。

基本语法

{var}

您可以使用折叠括号将任何变量添加到翻译中。

$translation->add('greeting', 'Hello {name}!');
echo $translation->get('greeting', ['name' => 'Kitty']);
// Hello Kitty!

复数语法

{variableName, Plural, {int message}...}

有时翻译依赖于某些特定的计数。允许的 Int 值为: int, int-int, int-, int+

$translation->add('cats', '{numCats, Plural, {0- No cats.} {1 One cat.} {2+ {numCats} cats.}}');
echo $translation->get('cats', ['numCats' => 2]);
// 2 cats.

选择语法

{variableName, Select, {condition message}...}

有时翻译依赖于某个特定的值。在选择语法中,string 代表该值。

$translation->add('hello-cat', '{gender, Select, {male Hello Tom!} {female Hello Kitty!}}');
echo $translation->get('hello-cat', ['gender' => 'male']);
// Hello Tom!

链接语法

{Link, {link text} {url} {target} {rel}}

如果您需要生成链接而不想使用 HTML。

$translation->add('link', 'Visit the {Link, {official page} {https://www.webiik.com} {_blank} {nofollow}}.');
echo $translation->get('link', true);
// Visit the <a href="https://www.webiik.com" target="_blank" rel="nofollow">official website</a>.

⚠️ 注意调用方法 get 时的 true 参数。如果没有它,则不会生成链接,翻译文本将以原始格式显示。

自定义解析器语法

{variableName, FormatterClassName, formatter syntax}

{FormatterClassName, formatter syntax}

您可以编写自己的解析器。每个自定义解析器都必须

  • 与上述语法兼容
  • 实现 Webiik\Translation\Parser\ParserInterface.php
  • 使用命名空间 Webiik\Translation\Parser

查看 Select 解析器以获得更好的了解。

资源