Traduire EmDash

Sur cette page

L’interface d’administration d’EmDash est traduisible grâce à Lingui pour l’extraction des messages et Lunaria pour le suivi de la progression des traductions. Toutes les traductions sont stockées dans des fichiers PO (gettext) — un par locale.

État des traductions

Consultez le tableau de bord des traductions pour connaître la progression actuelle de toutes les locales.

Qui peut traduire

Les traductions doivent provenir de locuteurs natifs ou courants. Nous n’acceptons pas les traductions générées par machine. Si vous utilisez des outils d’IA pour vous assister, vous devez vérifier chaque chaîne manuellement et tester le résultat en contexte (voir Tester vos traductions ci-dessous).

Nous préférons qu’une chaîne reste non traduite plutôt que mal traduite. Une mauvaise traduction est pire que d’afficher le texte anglais par défaut — elle induit activement les utilisateurs en erreur.

Structure des fichiers

Les catalogues de traduction se trouvent dans packages/admin/src/locales/ :

packages/admin/src/locales/
├── en/
│   └── messages.po    # English (source)
├── de/
│   └── messages.po    # German
└── ...

Chaque fichier .po contient des paires msgid/msgstr. Le msgid est le texte source en anglais ; le msgstr est votre traduction. Un msgstr vide signifie « pas encore traduit » — Lingui utilisera l’anglais par défaut à l’exécution.

Traduire les chaînes

  1. Consultez le tableau de bord des traductions pour voir ce qui nécessite du travail. Vérifiez les PR ouvertes pour éviter les doublons.

  2. Forkez le dépôt et créez une branche :

    git checkout -b i18n/de
  3. Ouvrez le fichier PO de votre locale (par ex., packages/admin/src/locales/de/messages.po).

  4. Remplissez les traductions. Chaque entrée ressemble à ceci :

    #: packages/admin/src/components/LoginPage.tsx:304
    msgid "Sign in with Passkey"
    msgstr ""

    Remplissez le msgstr :

    #: packages/admin/src/components/LoginPage.tsx:304
    msgid "Sign in with Passkey"
    msgstr "Mit Passkey anmelden"
  5. Testez vos traductions (voir ci-dessous).

  6. Ouvrez une PR ciblant main. Format du titre : i18n(de): add/update German translations.

Ce qu’il faut traduire

  • La valeur msgstr de chaque entrée.

Ce qu’il ne faut PAS traduire

  • Les valeurs msgid — ce sont des clés de recherche.
  • Les espaces réservés d’interpolation comme {error}, {email}, {label} — gardez-les tels quels.
  • Les balises de style XML comme <0>, </0> — elles encapsulent des éléments interactifs (liens, boutons). Conservez les balises et traduisez le texte entre elles.
  • Les commentaires commençant par #: — ce sont des références au code source ajoutées par Lingui.

Interpolation et balises

Certaines chaînes contiennent des espaces réservés et des balises :

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

Les espaces réservés ({error}, {email}) sont remplacés par des valeurs dynamiques à l’exécution. Les balises (<0>...</0>) encapsulent des composants React. Les deux doivent apparaître dans votre traduction exactement comme dans le texte source — mêmes noms, même imbrication.

Tester vos traductions

  1. Compilez et lancez la démo :

    pnpm run locale:compile
    pnpm build
    pnpm --filter emdash-demo dev
  2. Changez de locale dans la page Paramètres de l’administration et vérifiez que vos traductions sont correctes en contexte.

Locale pseudo

EmDash fournit une locale pseudo qui transforme toutes les chaînes encapsulées en caractères accentués similaires — "Dashboard" devient "Ðàšĥƀöàřð", et ainsi de suite. Toute chaîne qui apparaît en anglais normal lorsque la locale pseudo est active est soit manquante d’un encapsuleur t..“, soit provient de l’extérieur du catalogue.

Pour l’activer, ajoutez ce qui suit à votre fichier .env dans le répertoire de démo :

EMDASH_PSEUDO_LOCALE=1

Puis redémarrez le serveur de développement. La locale pseudo apparaît sous le nom Pseudo dans le sélecteur de langue de la page de connexion et dans les Paramètres. Basculez vers elle pour repérer les chaînes non encapsulées d’un coup d’œil.

Ajouter une nouvelle langue

Si votre langue n’a pas encore de fichier PO :

  1. Ajoutez la locale à 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
    ];

    C’est la source unique de vérité — lingui.config.ts, lunaria.config.ts et le runtime de l’administration dérivent tous leurs listes de locales à partir de ce fichier. Définissez enabled: false sauf si vos traductions couvrent 100 % — nous l’activerons une fois que la traduction aura atteint une couverture suffisante.

  2. Lancez l’extraction pour générer le fichier PO vide :

    pnpm run locale:extract

    Cela crée packages/admin/src/locales/{your-locale}/messages.po avec toutes les chaînes prêtes à traduire.

  3. Traduisez et testez en suivant les étapes ci-dessus.

Standards de traduction

Exactitude

Les traductions doivent refléter fidèlement le texte source anglais au niveau d’un locuteur natif. N’ajoutez pas, ne supprimez pas et ne réinterprétez pas le sens. Si une chaîne source est ambiguë, consultez le commentaire #: pour l’emplacement du fichier source — lisez le code du composant pour comprendre le contexte.

Cohérence

Utilisez une terminologie cohérente au sein de votre locale. Si vous traduisez « collection » par « Sammlung » à un endroit, ne passez pas à « Kollektion » ailleurs. Si votre langue possède déjà des traductions, lisez le fichier PO existant avant de commencer pour vous aligner sur la terminologie établie.

Ton

L’interface d’administration utilise un ton direct et professionnel. Adoptez le même ton dans votre langue — évitez les formulations trop formelles ou trop familières.

Traductions assistées par IA

Vous pouvez utiliser des outils d’IA pour ébaucher des traductions, mais :

  • Vous devez vérifier chaque chaîne vous-même. Les outils d’IA font des erreurs subtiles que seul un locuteur courant peut détecter — mauvais registre, formulation non naturelle, termes techniques incorrects.
  • Vous devez tester le résultat dans l’interface d’administration en cours d’exécution. Les outils d’IA n’ont pas conscience des contraintes de mise en page ni du contexte de l’interface.
  • Indiquez l’utilisation de l’IA dans la description de votre PR.
  • Les PR contenant des traductions machine manifestement non vérifiées seront fermées.

Traductions partielles

Les traductions partielles sont les bienvenues. Vous n’avez pas besoin de traduire toutes les chaînes en une seule PR — toute progression est utile. Les chaînes non traduites utiliseront l’anglais par défaut à l’exécution.