Panoramica
Le app di Twenty sono scritte in inglese: le stringhe nel tuo sorgente e nel manifest sono il testo sorgente in inglese,en è la locale di origine da cui traduci da, e
qualsiasi locale lasciata non tradotta usa quella come fallback.
La tua app ha due tipi di testo traducibile, e entrambi passano attraverso lo stesso
catalogo locales/:
- Etichette del manifest — nomi di oggetti e campi, titoli delle viste, voci di menu e altre stringhe dichiarate nei metadati della tua app.
- Stringhe dei componenti front-end — il testo dell’interfaccia utente visualizzato dai componenti front-end React.
Contrassegnare le stringhe del front-component.
Importa gli helper di traduzione datwenty-sdk/front-component:
Quando usare quale
Trans— testo statico in JSX. Usa le propmessageevaluesper l’interpolazione, come inTrans message="Hi {name}" values={{ name }}; l’interpolazione direttamente nei figli non è estraibile staticamente.useTranslate().t— stringhe dinamiche all’interno di un componente. Esegue nuovamente il rendering quando l’utente cambia lingua. Preferiscilo all’interno del rendering.t(...)(importato direttamente) — traduzione immediata utilizzabile ovunque, inclusi gestori di eventi, helper e ambito del modulo — non solo all’interno del rendering.msg(...)— un descrittore lazy per le stringhe dichiarate come dati (costanti, configurazione). Risolvilo in seguito cont(descriptor).
Contesto
Passacontext per distinguere stringhe di origine identiche che vengono tradotte
in modo diverso:
"\<context>": { "\<message>": "\<translation>" }. Le etichette del manifest sono
contestuali per costruzione — ognuna porta con sé il ruolo di metadato che svolge
(objectMetadata.labelSingular, fieldMetadata.label, view.name, …), quindi
la stessa parola può essere tradotta in modo diverso come nome di oggetto e come nome di vista.
Estrazione e traduzione
Esegui il comando di estrazione dalla directory della tua app:t()/msg()/Trans
dal tuo sorgente front-component in locales/\<locale>.json, indicizzate per
stringa sorgente. Inserisci le traduzioni:
{name} vengono sostituiti in fase di esecuzione — mantienili nella
traduzione. Qualsiasi stringa lasciata vuota ripiega sul testo di origine.
Come funziona
twenty app build compila i cataloghi e fornisce la lingua corretta per l’
utente corrente: le etichette del manifest vengono risolte lato server e i cataloghi
dei componenti front-end sono inclusi in ogni bundle di componenti. In fase di esecuzione, un componente legge le
impostazioni locali dal proprio contesto di esecuzione (la lingua corrente dell’host) e risolve
ogni stringa rispetto al proprio catalogo, ripiegando sul testo di origine quando manca
una traduzione. Cambiare lingua nell’host esegue nuovamente il render delle stringhe Trans e
useTranslate().t in tempo reale.
Le etichette del manifest vengono compilate a ogni sincronizzazione — twenty app build, twenty app apply
e anche il monitoraggio continuo di twenty app dev — quindi modificare un file di locale e
sincronizzare è sufficiente per visualizzare il nuovo testo. I cataloghi dei componenti front-end sono inclusi in
ogni bundle di componenti al momento della compilazione, quindi modificare uno di essi richiede comunque
di rieseguire twenty app build (e di effettuare nuovamente il deployment).
Recupero delle traduzioni
twenty app pull riscrive le traduzioni pubblicate di un’applicazione in
locales/. Un catalogo pubblicato è indicizzato tramite l’ID del messaggio, quindi pull recupera il
formato leggibile solo per le stringhe di cui può vedere l’origine: le etichette dei
metadati recuperati e le stringhe t()/msg()/Trans dei componenti front-end
presenti nel progetto. Tutto il resto viene mantenuto così com’è in
locales/compiled/\<locale>.json, indicizzato tramite l’ID del messaggio. La build unisce quei
file nel catalogo (una voce in locales/\<locale>.json ha la precedenza su una
compilata con lo stesso id), twenty app translations extract li lascia invariati,
e ogni pull li riscrive, quindi si riducono man mano che una parte maggiore del codice sorgente dell’app
viene aggiunta all’albero. Non modificarli manualmente; traduci in locales/\<locale>.json.
Un progetto senza una cartella locales/ non indica nulla sulle traduzioni, quindi una
sincronizzazione da esso lascia invariato tutto ciò che l’app ha già pubblicato. Per rimuovere
intenzionalmente le traduzioni pubblicate, mantieni la cartella ed elimina i file delle impostazioni locali
al suo interno: una cartella locales/ che non compila in alcuna impostazione locale è una dichiarazione
esplicita e la sincronizzazione esegue la rimozione di conseguenza.
I figli di testo di Trans possono estendersi su più righe — gli spazi bianchi vengono compressi
nello stesso modo in cui JSX li comprime, quindi entrambe queste varianti vengono estratte con la chiave Welcome back: