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