Spatie upravlja prevode v aplikacijah Laravel, tako da se integrira z Laravelovem lokalizacijskim sistemom in zagotavlja prilagodljive načine za shranjevanje in pridobivanje prevodov na podlagi trenutnega lokala aplikacije.
Kako Spatie obravnava prevode, ko se spremeni lokacija aplikacije
1. Prevod shranjevanja in iskanja
-Spatie ponuja paket, imenovan Laravel-Translation-Loader, ki omogoča shranjevanje prevodov v bazo podatkov namesto samo jezikovnih datotek. Ta paket nadomešča privzete ponudnike prevajalskih storitev Laravela s ponudnikom Spatie, kar omogoča, da se prevode dinamično pridobijo iz baze podatkov [1].
- Prevodi so shranjeni v tabeli (običajno `jezikovni_lines`), kjer vsak vnos vsebuje skupino (na primer" validacija "), ključ (na primer" zahtevano ") in JSON objekt, ki drži prevode za več krajev (npr." En "=>" To je potrebno polje "," nl "=>" dit je een verplicht veld') [1].
- Ko pokličete funkcijo Laravel's `__ ()` s prevodnim ključem, nakladalnik Spatie prinaša prevod za trenutni lokalni nastavi v aplikaciji. Na primer, če je lokal aplikacije "nl'", "__ (" Validaration.required ")" vrne nizozemski prevod iz baze podatkov [1].
2. Preklop kraja
- Lokalo aplikacij lahko spremenite med izvajanjem z uporabo metode Laravel's App ()-> setLocale ('locale_code') `.
- Ko se lokal spremeni, vsi nadaljnji prevodni iskanje prek `__ ()` ali drugih prevajalskih funkcij samodejno vrnejo besedilo v novo nastavljeni lokali.
- Če za trenutni lokal v bazi podatkov manjka prevod, lahko Laravelov lokalni mehanizem lokalnega lokala prevod vrne iz privzetega lokala, razen če je izrecno onemogočeno [1] [8].
3. Prevodi na ravni modela z JSON Storage
- Še en paket Spatie, Laravel-translatable, je zasnovan za zgovorne modele, da bi bili atributi prevodni.
- Prevodi so shranjeni kot JSON v enem samem stolpcu baze podatkov na atribut, ki ga je mogoče pretvoriti, ne da bi potrebovali dodatne tabele [3].
- Ko se lokalna aplikacija spremeni, dostop do premeščanega atributa na modelu samodejno vrne vrednost za trenutni lokal. Na primer, `$ NewsItem-> Name` bo prevod vrnil za trenutni lokal, ki je nastavljen v aplikaciji [4].
- Lahko izrecno dobite ali nastavite prevode za določene kraje po metodah, kot so `getTranslation (atribut, lokal)` in `setTranslation (atribut, locale, vrednost)` [4].
4. Falback in manjkajoči prevodi
- Spatie -jev prevodni paket podpira lokalne kraje, tako da, če za trenutni lokal manjka prevod, lahko prevod vrne iz drugega lokala (običajno privzete) [8].
- To vedenje je mogoče nadzorovati s prenašanjem logične zastave na "getTranslation", da onemogoči odhod in dobite prazen niz, če v prevodu manjka [8].
Povzetek
Ko se lokalna aplikacija spremeni, prevajalski paketi Spatie samodejno služijo ustreznemu prevodu bodisi iz jezikovnih vrstic, ki jih hrani baza podatkov, bodisi z atributi modela, ki jih hrani JSON, s pomočjo Laravelove nastavitve. Ta brezhibna integracija zagotavlja, da funkcije iskanja prevodov vrnejo pravilen lokalizirani niz na podlagi trenutnega lokala aplikacij, na voljo so mehanizmi za odmike, če manjka prevod.
Ta pristop omogoča dinamično preklapljanje v lokalnem času med izvajanjem in podpira shranjevanje prevodov na prilagodljive načine, bodisi v tabelah baz podatkov bodisi JSON stolpcev, odvisno od uporabljenega paketa.
REFERENCE: [1] [3] [4] [8]
Navedbe:
[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-spatie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-lavel/spatie-lavel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-lavel-translatable-shows-the-default-locale-when-i-trieve-th