При использовании мультиязычного приложения перед разработчиком встаёт проблема перевода стандартных фраз из файлов 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. Смотрите таблицу совместимости для определения нужной версии пакета под Ваш проект:
Полезное
Для тех, кто хочет получить информацию, например, об текущей основной, либо запасной локализации, или получить список установленных и/или доступных пакетов, существует простое 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.