slexx/lang
Composer 安装命令:
composer require slexx/lang
包简介
Internalization library
README 文档
README
Класс для управления локализацией, не привязан к файловой системе, может работать с любой структурой файлов и папок. Умеет работать с json, yaml, ini и php файлами.
// Устанавливаем файлы с переводами 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)
Устанавливает файл локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
$namespace |
string |
Пространство имён для строк локализации |
$path |
string |
Путь к файлу (yaml, json, php, ini) |
Исключения:
| Тип | Описание |
|---|---|
FileNotExistsException |
Будет брошено если файла не существует |
Возвращает: void
Lang::hasFile($locale, $namespace)
Проверка существования файла локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
$namespace |
string |
Пространство имён для строк локализации |
Возвращает: bool
Lang::getFile($locale, $namespace)
Получение пути к файлу локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
$namespace |
string |
Пространство имён для строк локализации |
Возвращает: string, null - Путь к файлу или null в случае его отсуцтвия
Lang::removeFile($locale, $namespace)
Удаление файла локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
$namespace |
string |
Пространство имён для строк локализации |
Возвращает: void
Lang::getLocales()
Получение списка всех доступных локализаций
Возвращает: string[]
Lang::props($string, $props)
Замена переменных в строке
| Имя | Тип | Описание |
|---|---|---|
$string |
string |
Строка в которой будет произведена замена |
$props |
array |
Массив параметров |
Возвращает: 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)
Проверка доступности локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
Возвращает: bool
Lang::setLocale($locale)
Установка локализации
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
Исключения:
| Тип | Описание |
|---|---|
UndefinedLocaleException |
Если локализация отсуцтвует |
Возвращает: void
Lang::getLocale()
Получение локализации
Возвращает: string
Lang::searchLocale([$default])
Ищет наиболее подходящюю локализацию по заголовку Accept-Language. Перед использованием метода следует указать файлы локализации с помощью метода setFile
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
[$default] |
string |
Локализация по умолчанию, в случае если парсинг Accept-Language не дал результатов |
Возвращает: string - ISO код наиболее подходящей локализации
Lang::raw($path)
Получение сырого не обработанного перевода
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
$path |
string |
Клуч перевода вида: пространство_имён:ключ_в_массиве |
Исключения:
| Тип | Описание |
|---|---|
NamespaceNotExistsException |
Если пространство имён не существует |
NoLocalizationException |
Если локализация не существует |
Возвращает: array, string, null
Lang::translate($path[, $props])
Получение перевода с заменой параметров
Аргументы:
| Имя | Тип | Описание |
|---|---|---|
| $path | string |
Клуч перевода вида: пространство_имён:ключ_в_массиве |
| [$props] | array |
Массив параметров |
Исключения:
| Тип | Описание |
|---|---|
NamespaceNotExistsException |
Если пространство имён не существует |
NoLocalizationException |
Если локализация не существует |
Возвращает: 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)
Установка функции плюрализации для языка
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
$function |
array |
Функции плюларизации |
Возвращает: 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)
Удаление функции плюрализации для языка
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
Возвращает: void
Lang::hasPluralFunction($locale)
Проверка существования функции плюрализации для языка
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
Возвращает: bool
Lang::getPluralFunction($locale)
Получение функции плюрализации для языка
| Имя | Тип | Описание |
|---|---|---|
$locale |
string |
ISO код язака (ru, en_AU, ru_RU...) |
Возвращает: callable, null
Lang::getPluralFunction($path, $counter[, $props])
Плюрализация перевода
| Имя | Тип | Описание |
|---|---|---|
$path |
string |
Клуч перевода вида: пространство_имён:ключ_в_массиве |
$counter |
int |
Сщётчик |
[$props] |
array |
Массив параметров |
Возвращает: string
Исключения:
| Тип | Описание |
|---|---|
UndefinedPluralFunctionException |
Если для языка нет фунции плюларизации |
NoLocalizationException |
Если локализация не существует |
Пример:
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 коментариев
slexx/lang 适用场景与选型建议
slexx/lang 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 3, 最近一次更新时间为 2017 年 08 月 01 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「i18n」 「translation」 「localization」 「internationalization」 「plural」 「pluralization」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 slexx/lang 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 slexx/lang 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 slexx/lang 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy to use i18n translation PHP class for multi-language websites
Package for convenient work with Laravel's localization features
Field for number with restricted count of digits and decimal places
A custom URL rule class for Yii 2 which allows to create translated URL rules
A Laravel Eloquent model trait for translatable resource
Deepl Automated translations for Laravel lang files
统计信息
- 总下载量: 14
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 20
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-08-01