Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як Spatie керує перекладами, коли змінюється локал програми


Як Spatie керує перекладами, коли змінюється локал програми


Spatie керує перекладами в програмах Laravel, інтегруючись із системою локалізації Laravel та надаючи гнучкі способи зберігання та вилучення перекладів на основі поточного локальної програми програми.

Як Spatie обробляє переклади, коли змінюється локал програми

1. Зберігання та пошук перекладу

-Spatie пропонує пакет під назвою Laravel-Translation-навантажувач, який дозволяє зберігати переклади в базі даних замість просто мовних файлів. Цей пакет замінює постачальника послуг перекладу Laravel за замовчуванням на постачальника Spatie, що дозволяє динамічно отримувати переклади з бази даних [1].
- Переклади зберігаються в таблиці (як правило, `language_lines`), де кожен запис містить групу (як -от" перевірка "), ключ (наприклад," необхідний "), і об'єкт JSON, що тримає переклади для декількох локалів (наприклад,` 'en' => 'Це необхідне поле', 'nl' => 'dit - це een verplicht veld'`) [1].
- Коли ви називаєте функцію Laravel `__ ()` Функцією з ключем перекладу, Loader Spatie отримує переклад для поточного локального, встановленого в додатку. Наприклад, якщо локаль програми є `'nl'`,` __ (' Validation.Required ') `Повертає переклад голландської мови з бази даних [1].

2. Перемикання локальної ланки

- Локал додатків може бути змінений під час виконання, використовуючи Laravel `App ()-> setLocale ('locale_code')` метод.
- Після того, як Locale буде змінено, всі наступні пошуки перекладу через `__ ()` або інші функції перекладу автоматично повертають текст у нещодавно встановленому локалі.
- Якщо переклад відсутній для поточного локальної бази в базі даних, механізм локальної локаль Ларавеля може повернути переклад з локального за замовчуванням, якщо явно не відключений [1] [8].

3. Переклади на рівні моделі з JSON Storage

- Ще один пакет Spatie, Laravel Translatable, призначений для красномовних моделей, щоб зробити атрибути перекладними.
- Переклади зберігаються як JSON в одному стовпці бази даних на атрибут, що перекладається, не потребуючи додаткових таблиць [3].
- Коли Locale App змінюється, доступ до атрибута перекладу на моделі автоматично повертає значення для поточного локалу. Наприклад, `$ newyitem-> name 'поверне переклад для поточного локального, встановленого в додатку [4].
- Ви можете явно отримати або встановити переклади для конкретних локалів, використовуючи такі методи, як `getTranslation (атрибут, locale)` та `setTranslation (атрибут, локал, значення)` [4].

4. Замерзні та відсутні переклади

- Пакет Spatie's Translatable підтримує резервні локальні місця, тому якщо переклад відсутній для поточного локальної локальності, він може повернути переклад з іншого локального (як правило, за замовчуванням) [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://filmantphp.com/plugins/filament-patie-ranslatable
[6] https://github.com/filmantphp/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-tefault-locale-when-i-try-to-retrieve-th