Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как Spatie управляет переводами, когда меняется локаль приложения


Как Spatie управляет переводами, когда меняется локаль приложения


Spatie управляет переводами в приложениях Laravel, интегрируясь с системой локализации Laravel и предоставляя гибкие способы хранения и извлечения переводов на основе текущей локали приложения.

Как Spatie обрабатывает переводы, когда локаль приложения меняется

1. Хранение и поиск перевода

-Spatie предлагает пакет под названием Laravel-Translation-Loader, который позволяет хранить переводы в базе данных вместо просто языковых файлов. Этот пакет заменяет поставщика услуг по умолчанию Laravel поставщиком поставщика Spatie, что позволяет динамически извлекать переводы из базы данных [1].
- Переводы хранятся в таблице (обычно `language_lines`), где каждая запись содержит группу (например,« валидация »), ключ (например,« требуется ») и переводы объекта JSON для нескольких локалов (например,« en '=> ». Это необходимое поле', 'nl' => 'DIT - Een Verplicht Veld'`) [1].
- Когда вы называете функцию Laravelâ S `__ ()` с ключом перевода, загрузчик Spatie приносит перевод для текущей локали, установленной в приложении. Например, если локаль приложения составляет `nl'`,` __ ('valyation.required') `возвращает голландский перевод из базы данных [1].

2. Переключение локализации

- Локаль приложения может быть изменена во время выполнения с использованием Laravelâ S `app ()-> setlocale ('locale_code')` метод.
- Как только локаль будет изменен, все последующие поиски перевода через `__ ()` или другие функции перевода автоматически возвращают текст в недавно установленном локале.
- Если для текущей локали в базе данных отсутствует перевод, механизм Laravels Swarkback Locale может вернуть перевод с локали по умолчанию, если только явно не отключен [1] [8].

3. Переводы на уровне модели с JSON Storage

- Еще один пакет Spatie, Laravel-Translatable, предназначен для красноречивых моделей, чтобы сделать атрибуты переводимыми.
- Переводы хранятся в виде JSON в одном столбце базы данных на первое атрибут, без необходимости дополнительных таблиц [3].
- Когда локаль приложения изменяется, доступ к переводящему атрибуту на модели автоматически возвращает значение текущей локали. Например, `$ newsitem-> name` вернет перевод для текущей локали, установленной в приложении [4].
- Вы можете явно получить или установить переводы для конкретных локалов, используя такие методы, как `getTranslation (атрибут, локал)` и `settranslation (атрибут, локал, значение)` [4].

4. Запасные и отсутствующие переводы

- Spatie's Translatable Package поддерживает резервные локалы, поэтому, если для текущей локали отсутствует перевод, он может вернуть перевод из другой локали (обычно по умолчанию) [8].
- Такое поведение можно контролировать, передавая логический флаг «getTranslation», чтобы отключить запасную сторону и получить пустую строку, если перевод отсутствует [8].

Краткое содержание

Когда локаль приложений меняется, пакеты переводов Spatie автоматически служат соответствующему переводу из языковых линий, хранящихся в базе данных, либо с атрибутами модели, хранящейся JSON, используя настройки локали Laravel. Эта бесшовная интеграция гарантирует, что функции поиска перевода возвращают правильную локализованную строку на основе текущей локали приложений, при этом механизмы отступления доступны, если перевод отсутствует.

Этот подход позволяет динамическому переключению локализации во время выполнения и поддерживает хранение переводов гибкими способами, либо в таблицах базы данных, либо в столбцах JSON, в зависимости от используемого пакета.

Список литературы: [1] [3] [4] [8]

Цитаты:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-patie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default-locale-wan --try-to-retreief-th