L’interfaccia di amministrazione di EmDash è traducibile: usa Lingui per l’estrazione dei messaggi e Lunaria per tracciare l’avanzamento delle traduzioni. Tutte le traduzioni risiedono in file PO (gettext), uno per lingua.
Stato della traduzione
Consulta la dashboard delle traduzioni per vedere l’avanzamento attuale di tutte le lingue.
Chi può tradurre
Ogni traduzione deve essere supervisionata da un madrelingua o da un parlante 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 dell’invio. L’output automatico non supervisionato non viene accettato. Consulta Traduzioni assistite dall’IA e Testare le tue traduzioni più avanti.
Lasciare una stringa non tradotta è meglio che tradurla in modo errato. Una traduzione sbagliata trae in inganno 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 # 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 ripiegherà sull’inglese a runtime.
Tradurre le stringhe
-
Controlla la dashboard delle traduzioni per vedere cosa richiede 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 es.
packages/admin/src/locales/de/messages.po). -
Inserisci le traduzioni. Ogni voce si presenta 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.Limita la PR al file PO, a un changeset e ai file di lingua descritti in Aggiungere una nuova lingua. Un’automazione commenta una PR di traduzione che modifica qualsiasi altra cosa.
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 così come sono. - I tag in stile XML come
<0>,</0>: racchiudono elementi interattivi (link, pulsanti). Mantieni i tag e traduci il testo al loro interno. - I commenti che iniziano con
#:: sono riferimenti al 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 comparire nella tua traduzione esattamente come nel 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.
Locale pseudo
EmDash include una locale pseudo che trasforma tutte le stringhe racchiuse in sosia con accenti: "Dashboard" diventa "Ðàšĥƀöàřð", e così via. Qualsiasi stringa che appare in inglese normale mentre la locale pseudo è attiva o non ha il wrapper t\…“ oppure proviene dall’esterno del catalogo.
Per attivarla, aggiungi quanto segue al tuo file .env nella directory della demo:
EMDASH_PSEUDO_LOCALE=1
Poi riavvia il server di sviluppo. La locale pseudo compare come Pseudo nel selettore della lingua nella pagina di accesso e nelle Impostazioni. Passa a essa per individuare a colpo d’occhio le stringhe non racchiuse.
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: "vi", label: "Tiếng Việt", enabled: false, dateLocale: () => import("react-day-picker/locale/vi").then((m) => m.vi), }, ];dateLocalecarica la localizzazione del calendario e del formato della data per la tua lingua. Scegli il file più vicino inreact-day-picker/locale, ad esempioptperpt-PT, e usa l’export indicato in quel file. Omettilo solo se la tua lingua usa il calendario dell’inglese statunitense.Questa è l’unica fonte di verità:
lingui.config.ts,lunaria.config.tse il runtime dell’amministrazione ricavano da questo file i propri elenchi di locale. Impostaenabled: falsementre la traduzione è in corso. Un maintainer abilita la locale quando 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/{your-locale}/messages.pocon tutte le stringhe pronte per essere tradotte. -
Traduci e testa seguendo i passaggi precedenti.
Standard di traduzione
Precisione
Le traduzioni devono rappresentare fedelmente il testo sorgente in inglese a livello di madrelingua. Non aggiungere, rimuovere né reinterpretare il significato. Se una stringa sorgente è ambigua, controlla il commento #: per la posizione del file sorgente e leggi il codice del componente per capire il contesto.
Coerenza
Usa una 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à delle traduzioni, leggi il file PO esistente prima di iniziare per adeguarti alla terminologia consolidata.
Tono
L’interfaccia di amministrazione usa un tono diretto e professionale. Riproducilo nella tua lingua: evita formulazioni troppo formali o troppo informali.
Traduzioni assistite dall’IA
Puoi generare traduzioni con strumenti di IA, inclusa una prima stesura completa, ma un parlante fluente deve supervisionare il risultato:
- Un parlante fluente deve rivedere ogni stringa. Gli strumenti di IA commettono errori sottili che solo un parlante fluente nota: registro sbagliato, formulazioni innaturali, termini tecnici errati.
- Un parlante fluente deve visualizzare in anteprima le traduzioni nell’interfaccia di amministrazione in esecuzione. Gli strumenti di IA non conoscono i vincoli di layout né il contesto dell’interfaccia.
- Dichiara l’uso dell’IA nella descrizione della PR.
- Le PR con traduzioni automatiche non supervisionate verranno chiuse.
Traduzioni parziali
Le traduzioni parziali sono benvenute. Non devi tradurre ogni stringa in una sola PR: ogni progresso è utile. Le stringhe non tradotte ripiegheranno sull’inglese a runtime.