Tradurre EmDash

In questa pagina

L’interfaccia di amministrazione di EmDash è traducibile utilizzando Lingui per l’estrazione dei messaggi e Lunaria per il monitoraggio del progresso delle traduzioni. Tutte le traduzioni sono memorizzate in file PO (gettext) — uno per locale.

Stato delle traduzioni

Consulta la dashboard delle traduzioni per il progresso attuale di tutti i locale.

Chi può tradurre

Le traduzioni devono provenire da madrelingua o parlanti fluenti. Non accettiamo traduzioni generate da macchina. Se utilizzi strumenti di IA per assisterti, devi verificare ogni stringa manualmente e testare il risultato nel contesto (vedi Testare le tue traduzioni qui sotto).

Preferiamo che una stringa resti non tradotta piuttosto che tradotta male. Una traduzione sbagliata è peggiore della visualizzazione del testo inglese come fallback — induce attivamente in errore gli utenti.

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 utilizzerà l’inglese come fallback in fase di esecuzione.

Tradurre le stringhe

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

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

    git checkout -b i18n/de
  3. Apri il file PO del tuo locale (es., packages/admin/src/locales/de/messages.po).

  4. Inserisci le traduzioni. Ogni voce ha questo aspetto:

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

  6. Apri una PR con target main. Formato del titolo: i18n(de): add/update German 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 "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 in fase di esecuzione. I tag (<0>...</0>) avvolgono componenti React. Entrambi devono apparire nella tua traduzione esattamente come nel testo sorgente — stessi nomi, stessa annidamento.

Testare le tue traduzioni

  1. Compila ed esegui la demo:

    pnpm run locale:compile
    pnpm build
    pnpm --filter emdash-demo dev
  2. Cambia locale nella pagina Impostazioni dell’amministrazione e verifica che le tue traduzioni appaiano correttamente nel contesto.

Locale pseudo

EmDash include un locale pseudo che trasforma tutte le stringhe avvolte in caratteri accentati simili — "Dashboard" diventa "Ðàšĥƀöàřð", e così via. Qualsiasi stringa che appare in inglese normale mentre il locale pseudo è attivo manca di un wrapper t..“ oppure proviene dall’esterno del catalogo.

Per attivarlo, aggiungi quanto segue al tuo file .env nella directory della demo:

EMDASH_PSEUDO_LOCALE=1

Poi riavvia il server di sviluppo. Il locale pseudo appare come Pseudo nel selettore di lingua nella pagina di accesso e nelle Impostazioni. Passa ad esso per individuare a colpo d’occhio le stringhe non avvolte.

Aggiungere una nuova lingua

Se la tua lingua non ha ancora un file PO:

  1. Aggiungi il 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: "ja", label: "日本語", enabled: false },  // add yours
    ];

    Questa è l’unica fonte di verità — lingui.config.ts, lunaria.config.ts e il runtime dell’amministrazione derivano tutti le loro liste di locale da questo file. Imposta enabled: false a meno che le tue traduzioni non abbiano una copertura del 100% — lo abiliteremo quando la traduzione raggiungerà una copertura sufficiente.

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

    pnpm run locale:extract

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

  3. Traduci e testa seguendo i passaggi sopra.

Standard di traduzione

Accuratezza

Le traduzioni devono riflettere fedelmente il testo sorgente in inglese a livello di 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 comprendere il contesto.

Coerenza

Usa una terminologia coerente all’interno del tuo locale. 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 allinearti alla terminologia stabilita.

Tono

L’interfaccia di amministrazione usa un tono diretto e professionale. Adotta lo stesso tono nella tua lingua — evita formulazioni eccessivamente formali o eccessivamente informali.

Traduzioni assistite dall’IA

Puoi usare strumenti di IA per redigere bozze di traduzioni, ma:

  • Devi verificare ogni stringa personalmente. Gli strumenti di IA commettono errori sottili che solo un parlante fluente noterebbe — registro sbagliato, formulazioni innaturali, termini tecnici errati.
  • Devi testare il risultato nell’interfaccia di amministrazione in esecuzione. Gli strumenti di IA non sono consapevoli dei vincoli di layout né del contesto dell’interfaccia.
  • Dichiara l’uso dell’IA nella descrizione della tua PR.
  • Le PR con traduzioni automatiche palesemente non verificate verranno chiuse.

Traduzioni parziali

Le traduzioni parziali sono benvenute. Non è necessario tradurre tutte le stringhe in una singola PR — qualsiasi progresso è utile. Le stringhe non tradotte utilizzeranno l’inglese come fallback in fase di esecuzione.