L’interfaccia di amministrazione di EmDash è traducibile utilizzando Lingui per l’estrazione dei messaggi e Lunaria per tracciare i progressi della traduzione. Tutte le traduzioni si trovano nei file PO (gettext) — uno per lingua.
Stato della traduzione
Consulta il pannello delle traduzioni per vedere i progressi attuali in tutte le lingue.
Chi può tradurre
Ogni traduzione deve essere supervisionata da un madrelingua o parlante fluente. Le traduzioni generate da 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 inviarla. L’output automatico non supervisionato non è accettato. Vedi Traduzioni assistite da IA e Testare le tue traduzioni di seguito.
Lasciare una stringa non tradotta è meglio che tradurla in modo errato. Una traduzione errata inganna gli utenti; il fallback in inglese li disturba solo.
Struttura dei file
I cataloghi delle traduzioni si trovano in packages/admin/src/locales/:
packages/admin/src/locales/
├── en/
│ └── messages.po # English (source)
├── de/
│ └── messages.po # German
└── ...
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 utilizzerà l’inglese come fallback a runtime.
Tradurre le stringhe
-
Controlla il pannello delle traduzioni per vedere cosa necessita di lavoro. Controlla le PR aperte per evitare di duplicare gli sforzi.
-
Fai il fork del repository e crea un branch:
git checkout -b i18n/de -
Apri il file PO della tua lingua (ad esempio,
packages/admin/src/locales/de/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 "Mit Passkey anmelden" -
Testa le tue traduzioni (vedi sotto).
-
Apri una PR verso
main. Formato del titolo:i18n(de): add/update German translations.
Cosa tradurre
- Il valore
msgstrper ogni voce.
Cosa NON tradurre
- I valori
msgid— sono chiavi di ricerca. - I segnaposto di interpolazione come
{error},{email},{label}— mantienili esattamente come sono. - Tag in stile XML come
<0>,</0>— questi racchiudono elementi interattivi (link, pulsanti). Mantieni i tag e traduci il testo tra di essi. - I commenti che iniziano con
#:— sono riferimenti sorgente aggiunti da Lingui.
Interpolazione e tag
Alcune stringhe contengono segnaposto e tag:
msgid "Authentication error: {error}"
msgstr "Authentifizierungsfehler: {error}"
msgid "Don't have an account? <0>Sign up</0>"
msgstr "Noch kein Konto? <0>Registrieren</0>"
msgid "If an account exists for <0>{email}</0>, we've sent a sign-in link."
msgstr "Falls ein Konto für <0>{email}</0> existiert, haben wir einen Anmeldelink gesendet."
I segnaposto ({error}, {email}) vengono sostituiti con valori dinamici a runtime. I tag (<0>...</0>) racchiudono componenti React. Entrambi devono apparire nella tua traduzione esattamente come appaiono nella sorgente — stessi nomi, stesso annidamento.
Testare le tue traduzioni
-
Compila ed esegui la demo:
pnpm run locale:compile pnpm build pnpm --filter emdash-demo dev -
Cambia lingua nella pagina Impostazioni dell’amministrazione e verifica che le tue traduzioni appaiano corrette nel contesto.
Lingua pseudo
EmDash include una lingua pseudo che trasforma tutte le stringhe racchiuse in sosia accentati — "Dashboard" diventa "Ðàšĥƀöàřð", e così via. Qualsiasi stringa che appare in inglese normale mentre la lingua pseudo è attiva manca di un wrapper t\…“ o proviene dall’esterno del catalogo.
Per abilitarla, aggiungi quanto segue al tuo file .env nella directory demo:
EMDASH_PSEUDO_LOCALE=1
Quindi riavvia il server di sviluppo. La lingua pseudo appare come Pseudo nel selettore della lingua sulla pagina di accesso e nelle Impostazioni. Passa ad essa per individuare stringhe non racchiuse a colpo d’occhio.
Aggiungere una nuova lingua
Se la tua lingua non ha ancora un file PO:
-
Aggiungi la lingua a
packages/admin/src/locales/locales.ts:export const LOCALES: LocaleDefinition[] = [ { code: "en", label: "English", enabled: true }, { code: "de", label: "Deutsch", enabled: true }, // ... { code: "ja", label: "日本語", enabled: false }, // add yours ];Questa è l’unica fonte di verità —
lingui.config.ts,lunaria.config.tse il runtime di amministrazione derivano tutti le loro liste di lingue da questo file. Impostaenabled: falsea meno che le tue traduzioni abbiano una copertura del 100% — un maintainer lo abiliterà una volta che la traduzione raggiunge una copertura sufficiente. -
Esegui l’estrazione per generare il file PO vuoto:
pnpm run locale:extractQuesto crea
packages/admin/src/locales/{your-locale}/messages.pocon tutte le stringhe pronte per la traduzione. -
Traduci e testa seguendo i passaggi sopra.
Standard di traduzione
Accuratezza
Le traduzioni devono rappresentare fedelmente il testo sorgente in inglese al livello di un madrelingua. 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 terminologia coerente all’interno della tua lingua. Se traduci “collection” come “Sammlung” in un punto, non passare a “Kollektion” altrove. Se la tua lingua ha già traduzioni, leggi il file PO esistente prima di iniziare per corrispondere alla terminologia stabilita.
Tono
L’interfaccia di amministrazione usa un tono diretto e professionale. Adattati a questo nella tua lingua — evita frasi eccessivamente formali o eccessivamente casuali.
Traduzioni assistite da IA
Puoi generare traduzioni con strumenti IA, incluso un primo passaggio completo, 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 incorretti.
- 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’interfaccia utente.
- Divulga 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 PR — qualsiasi progresso aiuta. Le stringhe non tradotte utilizzeranno l’inglese come fallback a runtime.