slexx/lang

国际化库

v0.1 2017-12-28 19:20 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:55:01 UTC


README

一个用于管理本地化的类,不依赖于文件系统,可以与任何文件和文件夹结构一起工作。可以处理json、yaml、ini和php文件。

Latest Stable Version Total Downloads Latest Unstable Version License

// Устанавливаем файлы с переводами
Lang::setFile('ru', 'messages', __DIR__ . '/locales/ru/messages.json');
Lang::setFile('en', 'messages', __DIR__ . '/locales/en/messages.yaml');

// Устанавливаем локализацию
Lang::setLocale(Lang::searchLocale('ru'));

// Добываем переводы в нужных местах
Lang::translate('messages:key');

安装

通过composer安装

$ composer require slexx/lang

文档

Lang::setFile($locale, $namespace, $path)

安装本地化文件

参数

异常

返回: void

Lang::hasFile($locale, $namespace)

检查本地化文件是否存在

参数

返回: bool

Lang::getFile($locale, $namespace)

获取本地化文件的路径

参数

返回: stringnull - 文件路径或null(如果不存在)

Lang::removeFile($locale, $namespace)

删除本地化文件

参数

返回: void

Lang::getLocales()

获取所有可用本地化列表

返回: string[]

Lang::props($string, $props)

替换字符串中的变量

返回: string

示例

echo Lang::props('Hello, :name!', ['name' => 'World']);
// Hello, World!

Lang::parseAcceptLanguage()

解析HTTP头Accept-Language

返回: array

示例

var_dump(Lang::parseAcceptLanguage());
// [
//     ['code' => 'ru', 'region' => 'RU', 'quality' => 1],
//     ['code' => 'ru', 'region' => null, 'quality' => 0.8],
//     ['code' => 'en', 'region' => 'US', 'quality' => 0.6],
//     ['code' => 'en', 'region' => null, 'quality' => 0.4],
//     ...
// ]

Lang::hasLocale($locale)

检查本地化是否可用

参数

返回: bool

Lang::setLocale($locale)

设置本地化

参数

异常

返回: void

Lang::getLocale()

获取本地化

返回: string

Lang::searchLocale([$default])

根据Accept-Language头搜索最合适的本地化。在使用此方法之前,应使用setFile方法指定本地化文件

参数

返回: string - 最合适的本地化的ISO代码

Lang::raw($path)

获取未经处理的原始翻译

参数

异常

返回: arraystringnull

Lang::translate($path[, $props])

获取带有参数替换的翻译

参数

异常

返回: string

示例

messages.php

<?php
return [
    'hello' => 'Привет, :name!',
];

index.php

Lang::setFile('ru', 'messages', __DIR__ . '/messages.php');
Lang::setLocale('ru');

echo Lang::translate('messages:hello', ['name' => 'Алексей']);
// Выведет: 'Привет, Алексей!'

Lang::setPluralFunction($locale, $function)

为语言设置复数函数

返回: void

示例

Lang::setPluralFunction('ru', function($n) {
    return $n%10==1&&$n%100!=11?0:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?1:2);
});
Lang::setPluralFunction('en', function($n) {
    return $n>1?1:0;
});

Lang::removePluralFunction($locale)

删除语言的复数函数

返回: void

Lang::hasPluralFunction($locale)

检查语言是否存在复数函数

返回: bool

Lang::getPluralFunction($locale)

获取语言的复数函数

返回: callablenull

Lang::getPluralFunction($path, $counter[, $props])

复数翻译

返回: string

异常

示例

blog.php

<?php
return [
    'comments' => [':count комментарий', ':count комментария', ':count коментариев'],
];

index.php

Lang::setFile('ru', 'blog', __DIR__ . '/blog.php');
Lang::setLocale('ru');

Lang::plural('blog:comments', 1); // 1 комментарий
Lang::plural('blog:comments', 2); // 2 комментария
Lang::plural('blog:comments', 45); // 45 коментариев