Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hur hanterar Spatie översättningar när appens språk ändras


Hur hanterar Spatie översättningar när appens språk ändras


Spatie hanterar översättningar i Laravel -applikationer genom att integrera med Laravels lokaliseringssystem och tillhandahålla flexibla sätt att lagra och hämta översättningar baserade på appens nuvarande landskap.

Hur Spatie hanterar översättningar när appens språk ändras

1. Översättningslagring och hämtning

-Spatie erbjuder ett paket som heter Laravel-Translation-Loader som tillåter lagring av översättningar i en databas istället för bara språkfiler. Detta paket ersätter Laravels standardleverantör för översättningstjänster med Spaties leverantör, vilket gör att översättningar kan hämtas dynamiskt från databasen [1].
- Översättningar lagras i en tabell (vanligtvis `språk_lines ') där varje post innehåller en grupp (som" validering "), en nyckel (som" obligatorisk "), och ett json -objekt som innehar översättningar för flera platser (t.ex.' en '=>' Detta är ett obligatoriskt fält ',' nl '=>' '-dit är een verplicht velat') [1] [1].
- När du kallar Laravels `__ () -funktion med en översättningsnyckel, hämtar Spaties Loader översättningen för den nuvarande landsuppsättningen i applikationen. Till exempel, om app -landskapet är `'nl'`,` __ (' validering.Required ') `returnerar den nederländska översättningen från databasen [1].

2. Lokalväxling

.
- När landskapet har ändrats returnerar alla efterföljande översättningshämtningar via `__ ()` eller andra översättningsfunktioner automatiskt texten i det nyligen inställda landskapet.
- Om en översättning saknas för det aktuella landskapet i databasen kan Laravels fallback -landsmekanism returnera översättningen från standardlokalen, såvida inte uttryckligen inaktiveras [1] [8].

3. Modellnivåöversättningar med JSON-lagring

- Ett annat Spatie-paket, Laravel-Translatable, är utformat för vältaliga modeller för att göra attribut översättas.
- Översättningar lagras som JSON i en enda databaskolumn per översättningsbart attribut utan att behöva extra tabeller [3].
- När App Locale ändras returnerar åtkomst till ett översättningsbart attribut på modellen värdet för det aktuella landskapet automatiskt. Till exempel kommer `$ NewsItem-> Name 'att returnera översättningen för den nuvarande landskapet i appen [4].
- Du kan uttryckligen få eller ställa in översättningar för specifika platser med metoder som `getTranslation (attribut, landskap)` och `setTranslation (attribut, land, värde)` [4].

4. Fallback och saknade översättningar

- Spaties översättningsbara paket stöder Fallback -platser så om en översättning saknas för det nuvarande landskapet kan det returnera översättningen från ett annat landskap (vanligtvis standard) [8].
- Detta beteende kan kontrolleras genom att överföra en boolesk flagga till "getTranslation" för att inaktivera fallback och få en tom sträng om översättningen saknas [8].

Sammanfattning

När App Local ändras tjänar Spaties översättningspaket automatiskt lämplig översättning från antingen databaslagrade språklinjer eller JSON-lagrade modellattribut, vilket utnyttjar Laravels landets inställning. Denna sömlösa integration säkerställer att översättningshämtningsfunktioner returnerar rätt lokaliserad sträng baserad på det aktuella applokalet, med fallbackmekanismer tillgängliga om en översättning saknas.

Detta tillvägagångssätt möjliggör dynamisk landsomkoppling vid körning och stöder lagring av översättningar på flexibla sätt, antingen i databaskondeller eller JSON -kolumner, beroende på det använda paketet.

Referenser: [1] [3] [4] [8]

Citeringar:
[1] https://github.com/spatie/laravel-translations-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/geting-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-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-cal