iqomp / locale
简单的模块文本翻译
Requires
- composer-plugin-api: ^2.0
- ext-gettext: *
- ext-intl: *
Requires (Dev)
- iqomp/formatter: ^1.0
- phpunit/phpunit: ^9
- squizlabs/php_codesniffer: 3.*
This package is auto-updated.
Last update: 2024-08-29 05:41:12 UTC
README
简单的模块文本翻译。此模块通过特殊规则捕获所有已安装的composer模块中的所有翻译文本,并使它们全局可用。此模块的目的是使每个composer模块能够带来自己的翻译文本,并通过应用程序覆盖而无需编辑模块翻译数据。
在composer update
期间生成语言缓存。在更新翻译文件后,您可以随时调用composer update
。
安装
composer require iqomp/locale
配置
如果您的composer模块有翻译,请将以下配置添加到模块的composer.json文件中
{ "extra": { "iqomp/locale": "iqomp/locale/" } }
extra键应为iqomp/locale
,字符串值指向模块主目录中的一个文件夹。
将文件夹内的所有PHP文件取出来,与一个应用程序合并,并使它们全局可用。
文件名将用作翻译域。
还会加载来自应用程序composer.json
的extra->iqomp/locale
。
翻译文件
每个翻译文件应返回一个翻译数组,其中文件名是翻译域,数组键是翻译键,值是格式为ICU MessageFormat的翻译结果。
<?php // dududu.php return [ 'Thankyou' => 'Thank you!', 'Hi name' => 'Hi {name}!', 'x item' => '{qty, number} {qty, plural, =0{item}=1{item}other{items}}' ];
使用方法
使用类Iqomp\Locale\Locale
如下翻译文本
<?php use Iqomp\Locale\Locale; // optional Locale::setLanguage('en-US', 'en-UK', 'en'); $res = Locale::translate('Thankyou'); $res = Locale::translate('Hi name', ['name'=>'Iqbal']); $res = Locale::translate('x item', ['qty'=>12], 'dududu');
目录结构
每个翻译应遵循以下目录结构
[locale/main/path]/
[locale-NAME]/
[domain].php
en-US/
gender.php
...
id-ID/
gender.php
...
方法
static addLocaleDir(string $path): void
将自定义区域文件夹添加到动态包含翻译。此方法使它可能包含动态目录在翻译数据库中。但不建议这样做,因为文件夹中的每个翻译都不会被缓存。如果您的应用程序有翻译,请将文件夹添加到您的应用程序composer.json
中。
static encode(string $text, array $map=[], string $domain=null): string
将翻译编码为用于formatter的文本。map
参数是键值对数组,其中键是翻译参数,值是使用该值的前缀$
从格式化对象中获取的值。
static fetchTranslation(): void
重新从缓存或从当前活动语言中附加的区域目录重新获取所有翻译。
static getAllLanguages(): array
从缓存和附加的区域目录中获取模块或应用程序定义的所有可用语言。
static getCacheDir(): string
获取当前使用的翻译缓存。
static getLanguage(): ?string
获取当前使用的翻译语言。
static setLanguage(): void
设置活动语言。此方法接受多个参数,将检查语言的存在性。如果您从未调用此方法,则语言将从请求头HTTP_ACCEPT_LANGUAGE
中获取。
static translate(string $text, array $params=[], string $domain=null): string
翻译文本。如果domain
为null,则将使用随机域。
格式化器
如果您使用iqomp/formatter作为您的对象格式化程序,则此模块添加新的格式类型以用于翻译编码的区域映射。
使用上面编码函数保存编码的区域
$object = [ 'user' => 1, 'greeting' => Locale::encode('Hello name', [ 'title' => 'Mr', 'name' => '$user.name.last' ]) ]; Model::create($object);
然后使用locale
格式类型将编码的翻译转换为当前区域请求。
return [ 'formats' => [ 'greeting' => [ 'user' => stdModel,// ... 'greeting' => [ 'type' => 'locale' ] ] ] ];
单元测试
运行以下脚本以运行单元测试
composer test
代码检查器
运行以下脚本以运行psr-12代码检查器
composer lint