Lingo.dev + .po (Gettext)

Lingo.dev CLI traduce archivos .po de GNU gettext preservando referencias msgid, metadatos y convenciones de formato específicas de gettext. La CLI sigue exactamente la especificación de GNU gettext, funciona con herramientas xgettext, msgfmt y Poedit, maneja msgctxt para desambiguación, soporta reglas complejas de formas plurales y preserva toda la información de traductores y compilación.

Configuración rápida

Configurar para archivos portable object de gettext:

{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de"]
  },
  "buckets": {
    "po": {
      "include": ["locale/[locale]/LC_MESSAGES/messages.po"]
    }
  }
}

Recordatorio: [locale] es un marcador de posición que debe permanecer literalmente en la configuración, ya que se reemplaza con la configuración regional real durante la ejecución de la CLI.

Traducir archivos PO

npx lingo.dev@latest i18n

Preserva referencias msgid, comentarios de traductores y metadatos de gettext mientras actualiza las traducciones msgstr.

Manejo de estructura Gettext

Traducción básica de mensajes

#: src/main.c:42
msgid "Welcome to our application"
msgstr "Bienvenido a nuestra aplicación"

#: src/dialog.c:15
#, c-format
msgid "You have %d new messages"
msgstr "Tienes %d mensajes nuevos"

Formas plurales

#: src/counter.c:28
msgid "One file selected"
msgid_plural "%d files selected"
msgstr[0] "Un archivo seleccionado"
msgstr[1] "%d archivos seleccionados"

Manejo de contexto

#: src/menu.c:12
msgctxt "menu item"
msgid "File"
msgstr "Archivo"

#: src/toolbar.c:8
msgctxt "document type"
msgid "File"
msgstr "Fichero"

Preservación de metadatos

Información de cabecera PO


# Archivo de traducción para MyApp

# Copyright (C) 2024 MyCompany

# Este archivo se distribuye bajo la misma licencia que el paquete MyApp.

#
msgid ""

msgstr ""
"Project-Id-Version: MyApp 1.0\n"
"Report-Msgid-Bugs-To: [email protected]\n"
"POT-Creation-Date: 2024-01-15 10:30+0000\n"
"Language: es\n"
"Content-Type: text/plain; charset=UTF-8\n"

Todos los metadatos de cabecera y comentarios de traductores se preservan exactamente.

Tipos de comentarios

  • Comentarios del traductor: # Esto necesita contexto
  • Comentarios extraídos: #. Nota del desarrollador sobre el uso
  • Comentarios de referencia: #: src/file.c:123
  • Comentarios de indicadores: #, c-format, fuzzy

Configuración avanzada

Múltiples dominios

"po": {
  "include": [
    "locale/[locale]/LC_MESSAGES/messages.po",
    "locale/[locale]/LC_MESSAGES/errors.po"
  ]
}

Bloquear IDs de mensajes

"po": {
  "include": ["locale/[locale]/LC_MESSAGES/messages.po"],
  "lockedKeys": ["version", "copyright"]
}