Tradurre EmDash

In questa pagina

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

  1. Consulta la dashboard delle traduzioni per vedere cosa necessita lavoro. Controlla le PR aperte per evitare di duplicare gli sforzi.

  2. Fai il fork del repo e crea un branch:

    git checkout -b i18n/it
  3. Apri il file PO della tua locale (es., packages/admin/src/locales/it/messages.po).

  4. 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"
  5. Testa le tue traduzioni (vedi sotto).

  6. Apri una PR verso main. Formato del titolo: i18n(it): add/update Italian translations.

Cosa tradurre

  • Il valore msgstr di 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

  1. Compila ed esegui la demo:

    pnpm run locale:compile
    pnpm build
    pnpm --filter emdash-demo dev
  2. 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:

  1. 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.ts e il runtime dell’admin derivano tutti le loro liste di locale da questo file. Imposta enabled: false mentre la traduzione è in corso. Un maintainer abilita la locale una volta che ha una copertura sufficiente per l’uso nell’interfaccia di amministrazione.

  2. Esegui l’estrazione per generare il file PO vuoto:

    pnpm run locale:extract

    Questo crea packages/admin/src/locales/{tua-locale}/messages.po con tutte le stringhe pronte per la traduzione.

  3. 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.