承接 slexx/lang 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

slexx/lang

Composer 安装命令:

composer require slexx/lang

包简介

Internalization library

README 文档

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)

Устанавливает файл локализации

Аргументы:

Имя Тип Описание
$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 我们能提供哪些服务?
定制开发 / 二次开发

基于 slexx/lang 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 14
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 20
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-08-01