Spatie administrerer oversættelser i Laravel -applikationer ved at integrere med Laravels lokaliseringssystem og give fleksible måder at gemme og hente oversættelser baseret på appens aktuelle lokalitet.
Hvordan spatie håndterer oversættelser, når appens land ændres
1. Oversættelsesopbevaring og hentning
-Spatie tilbyder en pakke kaldet laravel-translation-loader, der tillader lagring af oversættelser i en database i stedet for bare sprogfiler. Denne pakke erstatter Laravels standardoversættelsestjenesteudbyder med Spatie's udbyder, hvilket gør det muligt at hente oversættelser dynamisk fra databasen [1].
- Oversættelser gemmes i en tabel (normalt `sprog_linjer '), hvor hver post indeholder en gruppe (som" validering "), en nøgle (som" krævet "), og et JSON -objekt, der holder oversættelser til flere lokaliteter (f.eks." "En". Dette er et krævet felt ",' NL '=>' Dit er een verplicht veld '').
- Når du ringer til Laravel's `__ ()` funktion med en oversættelsesnøgle, henter Spaties loader oversættelsen til det aktuelle land, der er indstillet i applikationen. For eksempel, hvis app -lokaliteten er `'nl',` __ ('Validation.Required') 'returnerer den hollandske oversættelse fra databasen [1].
2. Locale switching
- App Locale kan ændres ved kørsel ved hjælp af Laravel's `app ()-> setLocale ('Locale_Code')` metode.
- Når lokaliteten er ændret, returnerer alle efterfølgende oversættelsesudvindinger via `__ ()` eller andre oversættelsesfunktioner automatisk teksten i det nyligt indstillede landskab.
- Hvis der mangler en oversættelse til det aktuelle sted i databasen, kan Laravels Fallback Locale -mekanisme returnere oversættelsen fra standardstedet, medmindre det eksplicit er deaktiveret [1] [8].
3. Oversættelser på modelniveau med JSON-opbevaring
- En anden spatie-pakke, Laravel-overførbar, er designet til veltalende modeller for at gøre attributter, der er oversættelige.
- Oversættelser gemmes som JSON i en enkelt databasesøjle pr. Translatable attribut uden at have brug for ekstra tabeller [3].
- Når App Locale ændrer sig, returnerer adgangen til en oversættelig attribut på modellen værdien for det aktuelle lokalitet automatisk. For eksempel returnerer `$ NewsItem-> NAVN 'oversættelsen til det aktuelle landskab, der er indstillet i appen [4].
- Du kan eksplicit få eller indstille oversættelser til specifikke lokaliteter ved hjælp af metoder som `getTranslation (attribut, lokalitet)` og `settranslation (attribut, lokalitet, værdi)` [4].
4. Fallback og manglende oversættelser
- Spaties oversættelige pakke understøtter tilbagefaldssteder, så hvis der mangler en oversættelse til det aktuelle sted, kan den returnere oversættelsen fra et andet sted (normalt standard) [8].
- Denne opførsel kan kontrolleres ved at videregive et boolsk flag til 'GetTranslation' for at deaktivere faldback og få en tom streng, hvis oversættelsen mangler [8].
Oversigt
Når App Locale ændres, tjener Spaties oversættelsespakker automatisk den relevante oversættelse fra enten databasested-sproglinjer eller JSON-lager modelattributter og udnytter Laravels lokalitetsindstilling. Denne sømløse integration sikrer, at oversættelsesindhentningsfunktioner returnerer den korrekte lokaliserede streng baseret på det aktuelle app -lokaliteter, med tilbagevendende mekanismer til rådighed, hvis der mangler en oversættelse.
Denne tilgang tillader dynamisk lokalitetsskift ved kørsel og understøtter lagring af oversættelser på fleksible måder, enten i databasetabeller eller JSON -kolonner, afhængigt af den anvendte pakke.
Referencer: [1] [3] [4] [8]
Citater:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduktion
[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/discussioner/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-default-locale-when-i-ry-to-tretrieve-th