Laravel Lang Publisher — Менеджер локализаций

При использовании мультиязычного приложения перед разработчиком встаёт проблема перевода стандартных фраз из файлов auth.php, validation.php и тому подобных, а также поддержка перевода в актуальном состоянии.

В попытках автоматизации многие находят пакет Laravel-Lang/lang. Сейчас в нём переводы для 77 языков, включая английский. Переводы поддерживает как основная команда мейнтейнеров, так и может любой желающий — пакет опенсорсный под MIT-лицензией.

Но у него есть один недостаток — он предоставляет только файлы перевода, которые необходимо вручную скопировать в своё приложение, при этом не потеряв другие свои переводы. Например, в блоке attributes файла validation.php. И здесь мы сталкиваемся с проблемой, которую решает пакет Laravel Lang Publisher.

Использование менеджера локализаций

При использовании специального менеджера локализаций, вы не будете больше беспокоиться об актуальности файлов переводов — пакет решит эту проблему.

Одна из его особенностей — это сохранение нестандартных переводов в файлах. То есть, если вы добавите новый перевод, например, в файл validation.php, то пакет сохранит его при обновлении.

return [
  // ...

  'attributes' => [
    'foo_bar' => 'Foo Bar',

    // ...
  ]
];

Вторая особенность заключается в том, что он обновляет файлы всех установленных в приложении локализаций. Ничего лишнего он не установит. Установка новых локализаций производится только вручную, и это правильно:

php artisan lang:install en de ro zh-CN lv

// или

php artisan lang:install --json en de ro zh-CN lv

Третья особенность заключается в том, что родительский пакет, laravel-lang/lang, содержит три типа переводов: обычный, inline и json:

// Обычный:
return [
  'accepted' => 'Вы должны принять :attribute.',
  // ...
];

// Inline:
return [
  'accepted' => 'Должно быть принято.',
  // ...
];

// Json:
{
  "Already registered?": "Уже зарегистрированы?",
  // ...
}

Пакет Laravel Lang Publisher опубликует только нужный вариант перевода.

Используете Jetstream? — php artisan lang:update --jet
Используете Fortify? — php artisan lang:update --fortify
Обе команды являются алиасом для php artisan lang:update --json и включают в себя все json-ключи.

Хотите выводить сообщения вида «Должно быть принято.» вместо «Вы должны принять :attribute.» — просто измените опцию inline в конфигурационном файле и выполните php artisan lang:update.

Установка

Для установки пакета просто выполните команду composer require andrey-helldar/laravel-lang-publisher --dev и добавьте вызов в файл composer.json:

{
  "scripts": {
    "post-update-cmd": [
      "php artisan lang:update"
    ]
  }
}

Если хотите изменить дефолтные настройки, то вызовите команду:

php artisan vendor:publish --provider="Helldar\LaravelLangPublisher\ServiceProvider"

Теперь, при вызове команды composer update файлы локализаций будут автоматически обновлены.

Разумеется, вы можете вызвать команду php artisan lang:update и вручную.

Пакет работает с фреймворками Laravel и Lumen начиная с версий 5.3. Смотрите таблицу совместимости для определения нужной версии пакета под Ваш проект:

таблица совместимости laravel lang publisher

Полезное

Для тех, кто хочет получить информацию, например, об текущей основной, либо запасной локализации, или получить список установленных и/или доступных пакетов, существует простое API:

use Helldar\LaravelLangPublisher\Facades\Config;

// Получить дефолтную локализацию
Config::getLocale(): string


// Получить резервную локализацию
Config::getFallbackLocale(): string
use Helldar\LaravelLangPublisher\Facades\Locale;

// Список доступных локализаций
Locale::available(): array

// Список установленных локализаций
Locale::installed(bool $is_json = false): array

Заключение

Используя менеджер локализаций andrey-helldar/laravel-lang-publisher, вы получаете на одну большую проблему меньше.

Автор: Andrey Helldar

Наш Телеграм-канал — следите за новостями о Laravel.