Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Wie verwaltet Spatie Übersetzungen, wenn sich das App -Gebietsschema ändert?


Wie verwaltet Spatie Übersetzungen, wenn sich das App -Gebietsschema ändert?


Spatie verwaltet Übersetzungen in Laravel -Anwendungen, indem es in das Lokalisierungssystem von Laravel integriert und flexible Möglichkeiten zum Speichern und Abrufen von Übersetzungen basierend auf dem aktuellen Gebietsschema der App bietet.

Wie Spatie über Übersetzungen umgeht, wenn sich das App -Gebietsschema ändert

1. Übersetzungsspeicher und Abruf

-Spatie bietet ein Paket namens Laravel-Translation-Loader an, mit dem Übersetzungen in einer Datenbank anstelle von Sprachdateien gespeichert werden können. Dieses Paket ersetzt den Standard -Übersetzungsdienstanbieter von Laravel durch den Anbieter von Spatie und ermöglicht es dynamisch aus der Datenbank [1].
- Übersetzungen werden in einer Tabelle gespeichert (normalerweise "Language_lines"), in der jeder Eintrag eine Gruppe (wie "Validierung"), einen Schlüssel (wie "Erforderlich") und ein JSON -Objekt enthält, das Übersetzungen für mehrere Orte (z. B. "'en' => 'Dies ist ein erforderliches Feld', 'nl' => 'dit Een verplitzt veld' ').
- Wenn Sie Laravels `__ ()" Funktion mit einem Übersetzungsschlüssel nennen, holt Spatie's Loader die Übersetzung für das in der Anwendung festgelegte aktuelle Gebietsschema. Wenn das App -Gebietsschema beispielsweise "nl'`" ist, `__ (" validation.Required ")" gibt die niederländische Übersetzung aus der Datenbank [1] zurück.

2. Gebietsschema umschaltet

- Das App-Gebietsschema kann zur Laufzeit mit Laravels `app ()-> setlocale ('locale_code')` `` -Methode geändert werden.
- Sobald das Gebietsschema geändert wurde, geben alle nachfolgenden Übersetzungsabrufe über `__ ()` oder andere Übersetzungsfunktionen den Text automatisch im neu eingestellten Gebietsschema zurück.
- Wenn für das aktuelle Gebietsschema in der Datenbank eine Übersetzung fehlt, kann der Fallback -Gebietsschema -Mechanismus von Laravel die Übersetzung aus dem Standardgebietsschema zurückgeben, sofern nicht ausdrücklich deaktiviert [1] [8].

3. Übersetzungen auf Modellebene mit JSON-Speicher

- Ein weiteres Spatie-Paket, Laravel-translatable, ist für eloquente Modelle ausgelegt, um Attribute übersetzbar zu machen.
- Übersetzungen werden als JSON in einer einzelnen Datenbankspalte pro übersetzbarem Attribut gespeichert, ohne zusätzliche Tabellen zu benötigen [3].
- Wenn sich das App -Gebietsschema ändert, gibt der Zugriff auf ein übersetzbares Attribut auf das Modell den Wert für das aktuelle Gebietsschema automatisch zurück. Zum Beispiel wird `$ newItem-> name` die Übersetzung für das aktuelle Gebietsschema in der App [4] zurückgeben.
- Sie können explizit Übersetzungen für bestimmte Orte mithilfe von Methoden wie "getTranslation (Attribut, Gebietsschema)` und "settranslation (Attribut, Ort, Wert)` [4] erhalten oder festlegen.

4. Fallback und fehlende Übersetzungen

- Das übersetzbare Paket von Spatie unterstützt Fallback -Orte. Wenn eine Übersetzung für das aktuelle Gebietsschema fehlt, kann die Übersetzung die Übersetzung von einem anderen Gebietsschema zurückgeben (normalerweise der Standard) [8].
- Dieses Verhalten kann kontrolliert werden, indem eine booleale Flagge an "getTranslation" übergeben wird, um Fallback zu deaktivieren und eine leere Zeichenfolge zu erhalten, wenn die Übersetzung fehlt [8].

Zusammenfassung

Wenn sich das App-Gebietsschema ändert, servieren die Übersetzungspakete von Spatie die entsprechende Übersetzung automatisch entweder aus datenbankgelagerten Sprachlinien oder JSON-gespeicherten Modellattributen, wodurch die Einstellung von Laravels Gebietsschema verwendet wird. Diese nahtlose Integration stellt sicher, dass Übersetzungsabruffunktionen die korrekte lokalisierte Zeichenfolge basierend auf dem aktuellen App -Gebietsschema zurückgeben, wobei Fallback -Mechanismen verfügbar sind, wenn eine Übersetzung fehlt.

Dieser Ansatz ermöglicht es dynamisch, dass das Gebietsschema zur Laufzeit wechselt und unterstützt das Speichern von Übersetzungen auf flexible Weise, entweder in Datenbanktabellen oder JSON -Spalten, abhängig vom verwendeten Paket.

Referenzen: [1] [3] [4] [8]

Zitate:
[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://laravaveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default-locale-when-i-y-to-retieve-th