L’interfaccia di amministrazione di EmDash è traducibile utilizzando Lingui per l’estrazione dei messaggi e Lunaria per il tracciamento dei progressi di traduzione. Tutte le traduzioni si trovano in file PO (gettext) — uno per locale.
Stato della traduzione
Consulta la dashboard delle traduzioni per i progressi attuali in tutte le lingue.
Chi può tradurre
Ogni traduzione deve essere supervisionata da un parlante nativo o fluente. Le traduzioni generate dall’IA sono accettate, ma solo quando un parlante fluente rivede ogni stringa e la visualizza in anteprima nel pannello di amministrazione in esecuzione prima di inviare. L’output automatico non supervisionato non è accettato. Vedi Traduzioni assistite dall’IA e Testare le tue traduzioni di seguito.
Lasciare una stringa non tradotta è meglio che tradurla in modo errato. Una traduzione sbagliata fuorvia gli utenti; il fallback in inglese li mette solo a disagio.
Struttura dei file
I cataloghi di traduzione si trovano in packages/admin/src/locales/:
packages/admin/src/locales/
├── en/
│ └── messages.po # Inglese (sorgente)
├── de/
│ └── messages.po # Tedesco
└── ...
Ogni file .po contiene coppie msgid/msgstr. Il msgid è il testo sorgente in inglese; il msgstr è la tua traduzione. Un msgstr vuoto significa “non ancora tradotto” — Lingui ricorrerà all’inglese a runtime.
Tradurre le stringhe
-
Consulta la dashboard delle traduzioni per vedere cosa necessita lavoro. Controlla le PR aperte per evitare di duplicare gli sforzi.
-
Fai il fork del repo e crea un branch:
git checkout -b i18n/it -
Apri il file PO della tua locale (es.,
packages/admin/src/locales/it/messages.po). -
Compila le traduzioni. Ogni voce appare così:
#: packages/admin/src/components/LoginPage.tsx:304 msgid "Sign in with Passkey" msgstr ""Compila il
msgstr:#: packages/admin/src/components/LoginPage.tsx:304 msgid "Sign in with Passkey" msgstr "Accedi con Passkey" -
Testa le tue traduzioni (vedi sotto).
-
Apri una PR verso
main. Formato del titolo:i18n(it): add/update Italian translations.
Cosa tradurre
- Il valore
msgstrdi ogni voce.
Cosa NON tradurre
- I valori
msgid— sono chiavi di ricerca. - I segnaposto di interpolazione come
{error},{email},{label}— mantienili esattamente come sono. - I tag in stile XML come
<0>,</0>— avvolgono elementi interattivi (link, pulsanti). Mantieni i tag e traduci il testo tra di essi. - I commenti che iniziano con
#:— sono riferimenti al codice sorgente aggiunti da Lingui.
Interpolazione e tag
Alcune stringhe contengono segnaposto e tag:
msgid "Authentication error: {error}"
msgstr "Errore di autenticazione: {error}"
msgid "Don't have an account? <0>Sign up</0>"
msgstr "Non hai un account? <0>Registrati</0>"
msgid "If an account exists for <0>{email}</0>, we've sent a sign-in link."
msgstr "Se esiste un account per <0>{email}</0>, abbiamo inviato un link di accesso."
I segnaposto ({error}, {email}) vengono sostituiti con valori dinamici a runtime. I tag (<0>...</0>) avvolgono componenti React. Entrambi devono apparire nella tua traduzione esattamente come appaiono nel sorgente — stessi nomi, stessa nidificazione.
Testare le tue traduzioni
-
Compila ed esegui la demo:
pnpm run locale:compile pnpm build pnpm --filter emdash-demo dev -
Cambia la locale nella pagina Impostazioni dell’admin e verifica che le tue traduzioni appaiano corrette nel contesto.
Locale pseudo
EmDash include una locale pseudo che trasforma tutte le stringhe avvolte in imitazioni accentuate — "Dashboard" diventa "Ðàšĥƀöàřð", e così via. Qualsiasi stringa che appare in inglese normale mentre la locale pseudo è attiva non ha un wrapper t\…“ o proviene dall’esterno del catalogo.
Per abilitarla, aggiungi quanto segue al tuo file .env nella directory della demo:
EMDASH_PSEUDO_LOCALE=1
Poi riavvia il server di sviluppo. La locale pseudo appare come Pseudo nel selettore della lingua nella pagina di login e nelle Impostazioni. Passa ad essa per individuare le stringhe non avvolte a colpo d’occhio.
Aggiungere una nuova lingua
Se la tua lingua non ha ancora un file PO:
-
Aggiungi la locale a
packages/admin/src/locales/locales.ts:export const LOCALES: LocaleDefinition[] = [ { code: "en", label: "English", enabled: true }, { code: "de", label: "Deutsch", enabled: true }, // ... { code: "vi", label: "Tiếng Việt", enabled: false }, // aggiungi la tua ];Questa è l’unica fonte di verità —
lingui.config.ts,lunaria.config.tse il runtime dell’admin derivano tutti le loro liste di locale da questo file. Impostaenabled: falsementre la traduzione è in corso. Un maintainer abilita la locale una volta che ha una copertura sufficiente per l’uso nell’interfaccia di amministrazione. -
Esegui l’estrazione per generare il file PO vuoto:
pnpm run locale:extractQuesto crea
packages/admin/src/locales/{tua-locale}/messages.pocon tutte le stringhe pronte per la traduzione. -
Traduci e testa seguendo i passaggi sopra.
Standard di traduzione
Precisione
Le traduzioni devono rappresentare fedelmente il testo sorgente in inglese a livello di parlante nativo. Non aggiungere, rimuovere o reinterpretare il significato. Se una stringa sorgente è ambigua, controlla il commento #: per la posizione del file sorgente — leggi il codice del componente per capire il contesto.
Coerenza
Usa una terminologia coerente all’interno della tua locale. Se traduci “collection” come “collezione” in un posto, non passare a “raccolta” altrove. Se la tua lingua ha già delle traduzioni, leggi il file PO esistente prima di iniziare per allinearti alla terminologia stabilita.
Tono
L’interfaccia di amministrazione usa un tono diretto e professionale. Rispecchia quello nella tua lingua — evita un linguaggio eccessivamente formale o eccessivamente informale.
Traduzioni assistite dall’IA
Puoi generare traduzioni con strumenti IA, inclusa una prima passata completa, ma un parlante fluente deve supervisionare il risultato:
- Un parlante fluente deve rivedere ogni stringa. Gli strumenti IA commettono errori sottili che solo un parlante fluente coglie — registro sbagliato, frasi innaturali, termini tecnici scorretti.
- Un parlante fluente deve visualizzare in anteprima le traduzioni nell’interfaccia di amministrazione in esecuzione. Gli strumenti IA non hanno consapevolezza dei vincoli di layout o del contesto dell’UI.
- Dichiara l’uso dell’IA nella descrizione della tua PR.
- Le PR con traduzioni automatiche non supervisionate verranno chiuse.
Traduzioni parziali
Le traduzioni parziali sono benvenute. Non è necessario tradurre ogni stringa in una singola PR — qualsiasi progresso aiuta. Le stringhe non tradotte ricorreranno all’inglese a runtime.