Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Cum gestionează Spatie traduceri atunci când aplicația se schimbă


Cum gestionează Spatie traduceri atunci când aplicația se schimbă


Spatie gestionează traduceri în aplicațiile Laravel prin integrarea cu sistemul de localizare a Laravel și oferind modalități flexibile de stocare și recuperare a traducerilor pe baza locației actuale a aplicației.

Cum se ocupă Spatie traduceri atunci când se schimbă localitatea aplicației

1. Stocare și regăsire a traducerii

-Spatie oferă un pachet numit Laravel-Translation-Loader care permite stocarea traducerilor într-o bază de date în loc de doar fișiere de limbă. Acest pachet înlocuiește furnizorul de servicii de traducere implicit al Laravel cu furnizorul SPATIE, permițând traduceri să fie preluate dinamic din baza de date [1].
- Traducerile sunt stocate într -un tabel (de obicei `Language_lines`) în care fiecare intrare conține un grup (cum ar fi„ validare ”), o cheie (cum ar fi„ necesar ”) și un obiect JSON care deține traduceri pentru mai multe localități (de exemplu,` 'en' => 'Acesta este un câmp necesar', 'nl' => 'dit este een verplicht veld') [1].
- Când apelați Laravelâ s `__ ()` Funcție cu o cheie de traducere, încărcătorul Spatie preia traducerea pentru localitatea actuală setată în aplicație. De exemplu, dacă locația aplicației este `'nl'`,` __ (' validare.required ') `Returnează traducerea olandeză din baza de date [1].

2. Comutare locală

- Localul de aplicație poate fi modificat în timpul rulării folosind `aplicație ()-> setLocale ('locale_code')`.
- Odată ce localitatea este modificată, toate regăsirile ulterioare de traducere prin `__ ()` sau alte funcții de traducere returnează automat textul în localitatea nou setată.
- Dacă lipsește o traducere pentru locația curentă din baza de date, mecanismul de localizare al lui Laravel poate returna traducerea din localitatea implicită, cu excepția cazului în care este dezactivat explicit [1] [8].

3. Traduceri la nivel de model cu stocare JSON

- Un alt pachet Spatie, Laravel-Translable, este conceput pentru modele elocvente pentru a face atributele translabile.
- Traducerile sunt stocate ca JSON într -o singură coloană a bazei de date pe atribut translabil, fără a avea nevoie de tabele suplimentare [3].
- Când se modifică localizarea aplicației, accesarea unui atribut translabil pe model returnează automat valoarea pentru localitatea curentă. De exemplu, `$ NewsItem-> Nume` va returna traducerea pentru locația actuală setată în aplicație [4].
- Puteți obține sau seta traduceri în mod explicit pentru anumite localități folosind metode precum `getTranslation (atribut, local)` și `setTranslation (atribut, local, valoare)` [4].

4. Fallback și traduceri lipsă

- Pachetul translabil Spatie acceptă localități de referință, astfel încât, dacă lipsește o traducere pentru locația curentă, poate returna traducerea dintr -o altă locală (de obicei implicit) [8].
- Acest comportament poate fi controlat trecând un steag boolean la `getTranslation` pentru a dezactiva căderea și a obține un șir gol dacă traducerea lipsește [8].

Rezumat

Atunci când aplicația localizată se modifică, pachetele de traducere Spatie servesc automat traducerea corespunzătoare din linii de limbă stocate de baze de date, fie din atributele modelului stocat de JSON, folosind setarea locală a lui Laravel. Această integrare perfectă asigură că funcțiile de recuperare a traducerii returnează șirul localizat corect pe baza locației actuale a aplicației, cu mecanisme de revenire disponibile dacă lipsește o traducere.

Această abordare permite comutarea dinamică a localității la runtime și acceptă stocarea traducerilor în moduri flexibile, fie în tabelele de bază de date, fie în coloanele JSON, în funcție de pachetul utilizat.

Referințe: [1] [3] [4] [8]

Citări:
[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
]
[6] https://github.com/filamenphp/filament/discussions/6913
[7] https://laveldaily.com/lessson/multi-manguage-lavell/spatie-lavell-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-hows-the-wefault-locale-when-i-thry-to-retrieve-th