Traducir EmDash

En esta página

La interfaz de administración de EmDash es traducible usando Lingui para la extracción de mensajes y Lunaria para el seguimiento del progreso de traducción. Todas las traducciones se encuentran en archivos PO (gettext) — uno por idioma.

Estado de traducción

Consulte el panel de traducción para ver el progreso actual en todos los idiomas.

Quién puede traducir

Toda traducción debe ser supervisada por un hablante nativo o fluido. Se aceptan traducciones generadas por IA, pero solo cuando un hablante fluido revisa cada cadena y la previsualiza en el panel de administración en ejecución antes de enviarla. No se aceptan resultados de máquinas sin supervisión. Consulte Traducciones asistidas por IA y Probar sus traducciones a continuación.

Dejar una cadena sin traducir es mejor que traducirla incorrectamente. Una traducción incorrecta confunde a los usuarios; el respaldo en inglés solo les causa inconvenientes.

Estructura de archivos

Los catálogos de traducción se encuentran en packages/admin/src/locales/:

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

Cada archivo .po contiene pares msgid/msgstr. El msgid es el texto fuente en inglés; el msgstr es su traducción. Un msgstr vacío significa “aún no traducido” — Lingui recurrirá al inglés en tiempo de ejecución.

Traducir cadenas

  1. Consulte el panel de traducción para ver qué necesita trabajo. Revise los PRs abiertos para evitar duplicar esfuerzos.

  2. Bifurque el repositorio y cree una rama:

    git checkout -b i18n/de
  3. Abra el archivo PO de su idioma (por ejemplo, packages/admin/src/locales/de/messages.po).

  4. Complete las traducciones. Cada entrada se ve así:

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

    Complete el msgstr:

    #: packages/admin/src/components/LoginPage.tsx:304
    msgid "Sign in with Passkey"
    msgstr "Mit Passkey anmelden"
  5. Pruebe sus traducciones (ver abajo).

  6. Abra un PR dirigido a main. Formato del título: i18n(de): add/update German translations.

Qué traducir

  • El valor msgstr para cada entrada.

Qué NO traducir

  • Valores msgid — estos son claves de búsqueda.
  • Marcadores de posición de interpolación como {error}, {email}, {label} — manténgalos exactamente como están.
  • Etiquetas de estilo XML como <0>, </0> — estas envuelven elementos interactivos (enlaces, botones). Mantenga las etiquetas y traduzca el texto entre ellas.
  • Comentarios que comienzan con #: — estas son referencias de origen agregadas por Lingui.

Interpolación y etiquetas

Algunas cadenas contienen marcadores de posición y etiquetas:

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

Los marcadores de posición ({error}, {email}) se reemplazan con valores dinámicos en tiempo de ejecución. Las etiquetas (<0>...</0>) envuelven componentes de React. Ambos deben aparecer en su traducción exactamente como aparecen en la fuente — mismos nombres, mismo anidamiento.

Probar sus traducciones

  1. Compile y ejecute la demostración:

    pnpm run locale:compile
    pnpm build
    pnpm --filter emdash-demo dev
  2. Cambie el idioma en la página de Configuración de administración y verifique que sus traducciones se vean correctas en contexto.

Idioma pseudo

EmDash incluye un idioma pseudo que convierte todas las cadenas envueltas en parecidos acentuados — "Dashboard" se convierte en "Ðàšĥƀöàřð", y así sucesivamente. Cualquier cadena que aparezca en inglés normal mientras el idioma pseudo está activo carece de un envoltorio t\…“ o proviene de fuera del catálogo.

Para habilitarlo, agregue lo siguiente a su archivo .env en el directorio de demostración:

EMDASH_PSEUDO_LOCALE=1

Luego reinicie el servidor de desarrollo. El idioma pseudo aparece como Pseudo en el selector de idioma en la página de inicio de sesión y en Configuración. Cámbielo para detectar cadenas sin envolver de un vistazo.

Agregar un nuevo idioma

Si su idioma aún no tiene un archivo PO:

  1. Agregue el idioma 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
    ];

    Esta es la única fuente de verdad — lingui.config.ts, lunaria.config.ts y el tiempo de ejecución de administración derivan sus listas de idiomas de este archivo. Establezca enabled: false a menos que sus traducciones tengan 100% de cobertura — un mantenedor lo habilitará una vez que la traducción alcance una cobertura suficiente.

  2. Ejecute la extracción para generar el archivo PO vacío:

    pnpm run locale:extract

    Esto crea packages/admin/src/locales/{your-locale}/messages.po con todas las cadenas listas para traducir.

  3. Traduzca y pruebe siguiendo los pasos anteriores.

Estándares de traducción

Precisión

Las traducciones deben representar fielmente el texto fuente en inglés a nivel de hablante nativo. No agregue, elimine ni reinterprete el significado. Si una cadena fuente es ambigua, verifique el comentario #: para la ubicación del archivo fuente — lea el código del componente para comprender el contexto.

Consistencia

Use terminología consistente dentro de su idioma. Si traduce “collection” como “Sammlung” en un lugar, no cambie a “Kollektion” en otro lugar. Si su idioma ya tiene traducciones, lea el archivo PO existente antes de comenzar para que coincida con la terminología establecida.

Tono

La interfaz de administración utiliza un tono directo y profesional. Ajústese a eso en su idioma — evite frases excesivamente formales o excesivamente casuales.

Traducciones asistidas por IA

Puede generar traducciones con herramientas de IA, incluida una primera pasada completa, pero un hablante fluido debe supervisar el resultado:

  • Un hablante fluido debe revisar cada cadena. Las herramientas de IA cometen errores sutiles que solo un hablante fluido detecta — registro incorrecto, frases poco naturales, términos técnicos incorrectos.
  • Un hablante fluido debe previsualizar las traducciones en la interfaz de administración en ejecución. Las herramientas de IA no tienen conocimiento de las limitaciones de diseño o el contexto de la interfaz de usuario.
  • Divulgue el uso de IA en la descripción de su PR.
  • Los PRs con traducciones automáticas sin supervisión se cerrarán.

Traducciones parciales

Las traducciones parciales son bienvenidas. No necesita traducir cada cadena en un PR — cualquier progreso ayuda. Las cadenas sin traducir recurrirán al inglés en tiempo de ejecución.