Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon W jaki sposób spatie zarządza tłumaczeniami, gdy zmienia się lokalizację aplikacji


W jaki sposób spatie zarządza tłumaczeniami, gdy zmienia się lokalizację aplikacji


Spatie zarządza tłumaczeniami w aplikacjach Laravel, integrując się z systemem lokalizacji Laravel i zapewniając elastyczne sposoby przechowywania i pobierania tłumaczeń na podstawie aktualnej lokalizacji aplikacji.

Jak spatie obsługuje tłumaczenia, gdy zmienia się lokalizację aplikacji

1. Przekłada i pobieranie tłumaczeń

-Spatie oferuje pakiet o nazwie Laravel-Translation-Loader, który umożliwia przechowywanie tłumaczeń w bazie danych zamiast tylko plików językowych. Ten pakiet zastępuje domyślny dostawcę usług tłumaczenia Laravel na dostawcę Spatie, umożliwiając dynamiczne pobieranie tłumaczeń z bazy danych [1].
- Tłumaczenia są przechowywane w tabeli (zwykle `` Language_Lines '), gdzie każdy wpis zawiera grupę (np. „Walidacja”), klucz (jak „wymagany”) i tłumaczenia obiektów JSON dla wielu lokalizacji (np. `` En' => 'To jest wymagane pole', 'nl' => 'Dit jest wniesieniem een ​​verplicht VETD') [1].
- Kiedy nazywasz funkcję Laravel `__ ()` z kluczem do tłumaczenia, ładowarka spatie pobiera tłumaczenie bieżącego ustawienia lokalizacji w aplikacji. Na przykład, jeśli lokalizacja aplikacji wynosi `` 'nl' ', `__ (' Validation.required ')' 'zwraca tłumaczenie holenderskie z bazy danych [1].

2. Przełączanie lokalizacji

- Lokale aplikacji można zmienić w czasie wykonywania za pomocą Laravel `app ()-> setLocale („ locale_code ”)` Method.
- Po zmianie lokalizacji wszystkie kolejne pobieranie tłumaczeń za pośrednictwem „__ ()` lub innych funkcji tłumaczenia automatycznie zwracają tekst w nowo ustawionym regionie.
- Jeśli brakuje tłumaczenia dla bieżącej lokalizacji w bazie danych, mechanizm lokalizacji Farvava może zwrócić tłumaczenie z domyślnego regionu, chyba że wyraźnie wyłączone [1] [8].

3. Tłumaczenia na poziomie modelu z magazynem JSON

- Kolejny pakiet spatie, Laravel-Translatible, został zaprojektowany dla elokwentnych modeli, aby atrybuty były tłumaczone.
- Tłumaczenia są przechowywane jako JSON w jednej kolumnie bazy danych na atrybut tłumaczenia, bez konieczności dodatkowych tabel [3].
- Gdy lokalizację aplikacji zmienia się, dostęp do atrybutu tłumaczenia w modelu zwraca wartość dla bieżącego regionu. Na przykład `$ NewsItem-> Name` zwróci tłumaczenie bieżącego ustawienia ustawień w aplikacji [4].
- Możesz jawnie uzyskać lub ustawić tłumaczenia dla określonych lokalizacji przy użyciu metod takich jak „getTranslation (atrybut, lokalizacja)` i `setTranslation (atrybut, lokalizacja, wartość)` [4].

4. Zatrzymania i brakujące tłumaczenia

- Pakiet tłumalny Spatie obsługuje lokalizacje awarii, więc jeśli brakuje tłumaczenia dla bieżącej lokalizacji, może zwrócić tłumaczenie z innego regionu (zwykle domyślnie) [8].
- To zachowanie można kontrolować, przekazując flagę logiczną do „getTranslation”, aby wyłączyć wypadek i uzyskać pusty ciąg, jeśli brakuje tłumaczenia [8].

Streszczenie

Gdy lokalizację aplikacji zmienia się, pakiety tłumaczeniowe spatie automatycznie obsługują odpowiednie tłumaczenie z linii językowych przechowywanych przez bazę danych lub atrybutów modelu przechowywanego przez JSON, wykorzystując ustawienie lokalizacji Laravela. Ta bezproblemowa integracja zapewnia, że ​​funkcje pobierania tłumaczenia zwracają prawidłowy zlokalizowany ciąg na podstawie bieżącej lokalizacji aplikacji, z mechanizmami awarii, jeśli brakuje tłumaczenia.

To podejście umożliwia dynamiczne przełączanie lokalizacji w czasie wykonywania i obsługuje przechowywanie tłumaczeń w elastyczne sposoby, w tabelach bazy danych lub kolumnach JSON, w zależności od używanego pakietu.

Odniesienia: [1] [3] [4] [8]

Cytaty:
[1] https://github.com/spatie/Laravel-translation-loader
[2] https://spatie.be/docs/Laravel-translatable/v6/introdukcja
[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-spatie-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-when-i-siter-to-trieve-th