Spatie gestisce le traduzioni in applicazioni Laravel integrando con il sistema di localizzazione di Laravel e fornendo modi flessibili per archiviare e recuperare le traduzioni in base all'attuale locale dell'app.
Come spatie gestisce le traduzioni quando la locale dell'app cambia
1. Archiviazione e recupero della traduzione
-Spatie offre un pacchetto chiamato Laravel-Translation-Loader che consente di archiviare le traduzioni in un database anziché solo file di lingua. Questo pacchetto sostituisce il fornitore di servizi di traduzione predefinita di Laravel con il fornitore di Spatie, consentendo di recuperare dinamicamente le traduzioni dal database [1].
- Le traduzioni sono archiviate in una tabella (di solito `lingua_lines`) in cui ogni voce contiene un gruppo (come" convalida "), una chiave (come" richiesta ") e un oggetto JSON che tiene traduzioni per più locali (ad esempio,` 'en' => 'Questo è un campo richiesto', 'nl' => 'dit è een verplicht veld'`) [1].
- Quando si chiama la funzione `__ ()` `con una chiave di traduzione, il caricatore di Spatie prende la traduzione per la localizzazione corrente impostata nell'applicazione. Ad esempio, se la posizione dell'app è `'nl'`,` __ (' convalidtion.required ') `restituisce la traduzione olandese dal database [1].
2. Commutazione locale
- La locale APP può essere modificata in fase di esecuzione utilizzando il metodo `app ()-> setLocale ('locale_code').
- Una volta modificata il locale, tutti i successivi recuperi di traduzione tramite `__ ()` o altre funzioni di traduzione restituiscono automaticamente il testo nella posizione di nuova impostazione.
- Se manca una traduzione per l'attuale locale nel database, il meccanismo di fallback di Laravel può restituire la traduzione dal locale predefinito, a meno che non sia esplicitamente disabilitato [1] [8].
3. Traduzioni a livello di modello con archivio JSON
- Un altro pacchetto spatie, traducibile aravel, è progettato per i modelli eloquenti per rendere traducibili gli attributi.
- Le traduzioni sono archiviate come JSON in una colonna di database singola per attributo traducibile, senza bisogno di tabelle extra [3].
- Quando la locale dell'app cambia, accedere a un attributo traducibile sul modello restituisce automaticamente il valore per la locale corrente. Ad esempio, `$ newstem-> name` restituirà la traduzione per l'attuale locale impostata nell'app [4].
- È possibile ottenere o impostare esplicitamente traduzioni per locali specifici usando metodi come `getTranslation (attributo, locale)` e `settranslation (attributo, locale, valore)` [4].
4. Fallback e traduzioni mancanti
- Il pacchetto traducibile di Spatie supporta le località di fallback, quindi se manca una traduzione per la locale corrente, può restituire la traduzione da un altro locale (di solito il valore predefinito) [8].
- Questo comportamento può essere controllato passando una bandiera booleana a "GetTranslation" per disabilitare il fallback e ottenere una stringa vuota se manca la traduzione [8].
Riepilogo
Quando la localizzazione dell'app cambia, i pacchetti di traduzione di Spatie servono automaticamente la traduzione appropriata dalle linee di lingua memorizzate dal database o dagli attributi del modello memorizzati da JSON, sfruttando l'impostazione locale di Laravel. Questa integrazione senza soluzione di continuità garantisce che le funzioni di recupero della traduzione restituiscano la stringa localizzata corretta in base alla locale dell'app corrente, con meccanismi di fallback disponibili se manca una traduzione.
Questo approccio consente la commutazione dinamica della localizzazione in fase di esecuzione e supporta l'archiviazione delle traduzioni in modi flessibili, nelle tabelle di database o nelle colonne JSON, a seconda del pacchetto utilizzato.
Riferimenti: [1] [3] [4] [8]
Citazioni:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translable/v6/introduction
[3] https://github.com/spatie/laravel-translable
[4] https://spatie.be/docs/laravel-translable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/filament-spatie-translable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translable-shows-the-default-locale-when-i-try-to-retrieve-th