webiik / translation
该翻译提供国际化翻译。
Requires
- php: >=7.2
- webiik/arr: ^1
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 解析器以获得更好的了解。