iqomp/locale

简单的模块文本翻译

维护者

详细信息

github.com/iqomp/locale

源代码

问题

安装: 22

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

开放性问题: 0

类型:composer-plugin

1.1.1 2021-02-01 07:43 UTC

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.jsonextra->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