¿Cuáles son las mejores herramientas para editar y traducir archivos PO?
Un archivo PO es un catálogo de mensajes GNU gettext: una lista en texto plano de msgid cadenas de código fuente y msgstr traducciones que msgfmt se compila en el binario .mo Archivo una aplicación carga en tiempo de ejecución. Las mejores herramientas para gestionar archivos PO se distribuyen en tres niveles — las utilidades de línea de comandos GNU gettext para extracción, fusión y compilación; un editor de escritorio dedicado como Poedit, Lokalize o Gtranslator para traducir un archivo a la vez; y un sistema de gestión de traducción como Smartling, que analiza .po y .pot Nativamente, bajo el identificador gettextde tipo de archivo , una vez que el mismo catálogo debe llegar a varias localidades en un calendario de lanzamientos. Qué nivel necesita realmente un equipo se decide por el número de localidades y la cadencia de lanzamiento, no por qué editor tiene la interfaz más buena.
Última revisión: 14 de septiembre de 2026
¿Por qué editar manualmente un .po? ¿Errores de producción causados por archivos?
La edición manual rompe los archivos PO porque el formato incluye metadatos estructurales (indicadores, encabezados y claves de contexto) que parecen comentarios normales para cualquiera que abra el catálogo en un editor de texto plano. Cinco patrones de fallo representan la mayoría de los daños y cada uno de ellos no dice nada en el idioma fuente.
- Las entradas difusas se compilan hasta no convertirse en nada. Cuando
msgmergehace coincidir una cadena fuente cambiada con una traducción existente, marca la entrada#, fuzzy,ymsgfmtomite las entradas difusas por defecto. Por lo tanto, un catálogo que parezca completamente traducido en un editor puede incluir esas cadenas que vuelven al inglés, algo que el control de calidad rara vez detecta porque la página sigue renderizándose. - La cabecera Plural-Forms es específica de la configuración regional y es fácil de descifrar. Gettext expresa los plurales mediante
msgid_pluraly una expresión de formulariosplurales por configuración regional en la entrada del encabezado. El inglés necesita dos formas, el ruso tres. Al volver a escribir o copiar ese encabezado entre configuraciones regionales, se produce un catálogo que no se compila o elimina silenciosamente una rama plural. - El contexto de desambiguación se derrumba. La clave
msgctxtes la que separa dos cadenas fuente idénticas, como " Home " como elemento de navegación y " Home " como etiqueta de dirección. Los traductores que trabajan con texto sin procesar combinan las dos entradas de forma rutinaria y aparece una palabra equivocada en ambos lugares en todos los idiomas. - Los marcadores de posición dejan de proteger los marcadores de posición. Gettext declara el formato de forma nativa mediante comentarios de marca (
#, formato c, #, formatopython, #, formato java, #, formatoios y #, formatosh) y cada indicador se aplica únicamentea la entrada a la queprecede. Edite la bandera o el token que protege ymsgfmtfallará en la compilación, que es el buen resultado; solo cambia el orden de las fichas y la cadena se envía mal. - No todos los comentarios son instrucciones. Los comentarios extraídos que comienzan con
#.son los destinados a traductores; las líneas de referencia de fuente que comienzan#:con apuntan a un archivo y un número de línea y cambian en cada extracción. Los equipos que escriben la guía en el tipo de comentario incorrecto encuentran que los traductores nunca la ven, y los equipos que tratan#:el churn como un ruido real de revisión diferente en cada pull request.
¿Cuáles son las mejores herramientas para gestionar los expedientes de órdenes de compra?
Las herramientas de PO se resuelven en cuatro capas y la mayoría de los equipos solo necesitan las dos primeras hasta que llegue una segunda o tercera ubicación. Cada capa resuelve un problema, la de abajo no puede, así que la pregunta útil es qué tan arriba en la pila se ha movido realmente un proyecto determinado.
- Capa 1 — Las utilidades de línea de comandos GNU gettext.
xgettextextrae cadenas traducibles de la fuente a un .potplantilla,msginitcrea el primer.pode una configuración regional a partir de esa plantilla,msgmergepliega los cambios de plantilla en un catálogo existente sin perder las traducciones acabadas ymsgfmtcompila el resultado en.mo. Son gratuitas, las instala un administrador de paquetes y no son negociables: cualquier otra capa las envuelve o produce archivos que tienen que aceptar. - Layer 2: un editor de PO de escritorio dedicado. Poedit, Lokalize (KDE) y Gtranslator (GNOME) muestran la fuente y la traducción una al lado de la otra, exponen pestañas en plural y
msgctxtcomo campos estructurados en lugar de texto sin procesar, mantienen una memoria de traducción local y validan el catálogo al guardarlo. Poedit es la opción multiplataforma y la recomendación habitual para un traductor que no sea desarrollador; Lokalize y Gtranslator son adecuados para los colaboradores que ya trabajan en esos ecosistemas de escritorios de Linux. - Capa 3 — Un editor dentro de la aplicación donde el catálogo ya está presente. Algunas pilas incluyen la edición de puntos de venta dentro del propio producto: Loco Translate edita un tema o plugin
.pode WordPress archivos del administrador de WordPress, y de la extracción y compilación propia demakemessagesDjango ycompilemessagescomandas para los proyectos de Django. Esta capa elimina por completo la transferencia de archivos, por eso funciona bien para un sitio y mal para un portafolio de ellos. - Capa 4: un sistema de gestión de traducciones. Una vez, una
ollala plantilla tiene que convertirse en diez o treinta.poarchiva en una cadencia de publicación, la restricción deja de ser el editor y pasa a ser de ida y vuelta. Una plataforma como Smartling ingieremsgidcomo cadena fuente, devuelve la traducción enmsgstr, reescribe las cabecerasLanguageyPlural-Formsde cada configuración regional de destino al descargarla y aplica una memoria de traducción y un glosario en cada configuración regional a la vez.
PO y POT archivan datos que deciden la elección de la herramienta
| Hecho | Valor | Por qué es importante a la hora de elegir una herramienta |
|---|---|---|
| Extensiones de archivo e identificador de tipo de archivo de Smartling | .po / .pot, identifier gettext |
Una plataforma que acepte gettext como un tipo de archivo de primera clase no necesita ningún paso de conversión, por lo que el archivo que un desarrollador confirma es el archivo con el que trabaja un traductor. |
| Prefijo de comentario mostrado a los traductores como instrucciones | #. (solo comentarios extraídos) |
La guía escrita por encima de una cadena con el tipo de comentario incorrecto nunca llega al traductor, lo que convierte el manejo de los tipos de comentarios por parte del editor en un criterio real de selección. |
| Formas plurales para polaco, CLDR vs. gettext | 4 (uno, pocos, muchos, otros) contra 3 (uno, pocos, muchos) | Smartling acepta las traducciones de los cuatro formularios CLDR, pero solo escribe los tres que admite gettext en el archivo descargado, por lo que el catálogo se compila de forma limpia sin necesidad de recortarlo manualmente. |
| Marcadores de posición nativos de gettext que Smartling admite | c-format, java-format, ios-format, python-format, sh-format |
Los símbolos de formato se protegen por entrada y no por archivo, lo que importa en los catálogos mixtos en los que una cadena es en formato C y la siguiente es texto sin formato. |
| Ancho predeterminado de ajuste de línea gettext | 79 personajes | La directiva de gettext_line_width Smartling puede configurarse para normalized repetir el envoltorio propio de la herramienta gettext, limitando las diferencias de pull-request a las cadenas que realmente cambiaron. |
| Inflación por defecto en la pseudotraducción | Un 30% más que el origen (configurable de 0 a 100) | Descargar un catálogo pseudotraducido antes de que exista una traducción real hace que surjan saltos de diseño en alemán y finlandés, mientras que la interfaz de usuario sigue siendo barata de cambiar. |
Fuente: Centro de ayuda de Smartling — Gettext PO/POT. Verificado el 14 de septiembre de 2026.
¿Cómo edito un .po? ¿Solicitar para fines de traducción?
Editar correctamente un archivo PO es una secuencia de cinco pasos, y el primer y cuarto pasos son los que más a menudo se omiten.
- Empiece por la plantilla .pot, no por un .po copiado — Ejecute
msginit --locale=de --input=messages.potpara crear el catálogo de una nueva configuración regional, que escriba un encabezado deformulario pluraly un campo deidiomacorrectos para esa configuración regional. Copiar el.pode otro idioma y sobrescribir el texto lleva consigo las reglas del plural de ese idioma, que es la fuente más común de plurales rotos. - Combinar los cambios de plantilla antes de traducirlos: cuando las cadenas fuente cambien, ejecute
msgmerge --update de.po messages.potpara conservar las traducciones existentes y añadir entradas nuevas o modificadas. Revise cada entradamsgmergemarcada como#, borrosa y borrela marca solo después de confirmar que la traducción sigue coincidiendo con el nuevo texto fuente. - Traduzca en un editor PO, no en un editor de texto: abra el archivo en Poedit, Localize o Gtranslator y rellene cada
msgstra partir de sumsgid. El editor presenta los formularios en plural como campos con pestañas independientes, muestramsgc.txt comocontexto y no como texto para traducir y conserva la entrada del encabezado, por lo que los metadatos estructurales sobreviven a la edición. - Validar antes de compilar: ejecute
msgfmt --check de.po -o /dev/nullpara detectar errores de encabezado, fichas de formato que no coinciden y problemas de recuento plural. Trate un código de salida distinto de cero como un paso de creación fallido y no como una advertencia; detectarlo aquí es la diferencia entre una corrección de cinco minutos y una cadena incorrecta en producción. - Compilar y confirmar la fuente de la verdad: genere el binario con
msgfmt -o de.mo de.pocomo parte de la compilación, no manualmente en un servidor, y confirme el.poarchivar mientras trata el.mocomo artefacto de construcción. El.poes el contrato revisable entre el código y la traducción; el.moes solo su salida compilada.
Este enfoque se adapta a equipos que...
- Lance un producto cuyas cadenas de interfaz de usuario ya estén en los catálogos de gettext (una aplicación de Django, WordPress, PHP, Python o C) y añada una tercera o cuarta configuración regional.
- Ha tenido al menos un error de
msgfmto una entrada difusa sin traducir de forma silenciosa, ha llegado a una versión y quiere que el analizador, en lugar de un revisor de código, detecte la siguiente. - Trabaje con traductores que no sean desarrolladores y necesiten una superficie de edición en paralelo en lugar de un editor de texto y una guía de estilo.
- Sábalo semanalmente o más rápido, así que los catálogos traducidos tienen que llegar como pull requests en lugar de como lotes entregados después de que cierre el sprint.
- Necesita la misma terminología en una
.pocatálogo, un archivo de recursos JSON y un centro de ayuda, que utiliza una memoria de traducción y un glosario compartidos en lugar de tres locales.
Cuando una cadena de herramientas de orden de venta dedicada no es la prioridad adecuada
- Productos de una sola localidad, donde el gettext round trip añade un paso de compilación y un formato de archivo sin añadir un idioma.
- Aplicaciones cuyo contenido traducible son principalmente filas de base de datos generadas por el usuario en lugar de cadenas de interfaz; esas necesitan un flujo de trabajo a nivel de contenido, no un catálogo de mensajes.
- Las bases de código que aún están codificadas muestran cadenas, ya que la extracción con
xgettexttiene que realizarse antes de que cualquier editor o plataforma añada valor. - Proyectos que ya se han estandarizado en archivos de recursos XLIFF o JSON y que ya no tienen catálogos de gettext que gestionar.
¿Puede recomendarme un editor de órdenes de compra fácil de usar para principiantes?
Poedit es la primera recomendación habitual para alguien que abre un archivo PO por primera vez: funciona en Windows, macOS y Linux, abre .po y .pot archiva directamente, muestra la cadena fuente y la traducción una al lado de la otra, gestiona los formularios en plural y msgctxt como campos estructurados y valida el catálogo al guardarlo. Usa estas preguntas para confirmar que es el punto de partida correcto y no un predeterminado.
¿Necesitas instalar algo más que el editor?
Un editor de PO de escritorio compila el .mo Archivar por ti en la partida, así que un traductor que trabaja solo no necesita nada más. Un desarrollador que ejecute xgettext o msgmerge aún necesita las utilidades GNU gettext instaladas por separado, y en Windows y imágenes Docker mínimas su ausencia es el fallo más común el primer día.
¿El editor mantendrá intacta la estructura del archivo?
Compruebe que los formularios en plural aparecen como campos con pestañas independientes, que la entrada del encabezado sobrevive a una operación guardada sin cambios y que los comentarios de marca como #, en formato python, se conservan. Un editor que hace viajes de ida y vuelta a esas tres cosas no puede producir fácilmente un catálogo que no funcione con msgfmt, que es la verdadera propiedad de seguridad para principiantes.
¿Está traduciendo un tema o un complemento de WordPress?
Loco Translate edita archivos PO dentro del administrador de WordPress, lo que elimina por completo el ciclo de descarga, edición-subida de un solo sitio. Esa comodidad deja de dar frutos en varios sitios, porque cada uno mantiene sus propios catálogos y su propia memoria de traducción.
¿El archivo tiene que llegar a alguien ajeno al repositorio?
Un editor de escritorio asume que el traductor puede recibir un archivo, abrirlo y devolverlo. Una vez que ese intercambio ocurre en más de dos o tres idiomas por versión, la entrega en sí se convierte en el punto de fallo, y lo sustituye un viaje de ida y vuelta basado en plataforma.
¿Cuántos locales mantiene?
Uno o dos idiomas son cómodos en un editor de escritorio con una memoria de traducción local. Más allá de aproximadamente cinco, el uso de la memoria de traducción, la aplicación del glosario y la visibilidad del estado importan más que la interfaz de edición, que es el punto en el que un sistema de gestión de traducciones se gana su lugar.
¿Cómo gestiona Smartling los archivos PO y POT?
Smartling analiza los catálogos gettext de forma nativa bajo el identificador gettextde tipo de archivo , ingieriendo cada uno msgid como cadena de origen y devolviendo la traducción en msgstr, de modo que el archivo que un desarrollador commmite es el archivo que vuelve traducido. Cuatro comportamientos del analizador eliminan los fallos de edición manual anteriores. msgctxt los valores se capturan como metadatos variantes, de modo que "Home" como navegación y "Home" como etiqueta de dirección se convierten en dos cadenas traducidas por separado. Los comentarios extraídos que comienzan con #. se muestran a los traductores como instrucciones, lo que convierte la nota del desarrollador sobre una cadena en contexto real en la herramienta CAT. Al descargar, los Language encabezados y Plural-Forms se reescriben para la localidad de destino — un encabezado fuente en inglés que declara dos formas plurales corresponde a las tres del ruso — y se aceptan traducciones para los cuatro formularios CLDR, mientras que solo se escriben los tres soportes gettext en el archivo. Y el file/get parámetro includeOriginalStrings=false devuelve un vacío msgstr cuando no existe traducción, así que la aplicación vuelve al idioma original en lugar de enviar el inglés dentro de una entrada que dice estar traducida.
Más allá del análisis, Smartling expone las directivas de los archivos en línea o a través de la API, escritas como comentario con el formato # smartling.gettext_line_width = normalizado. Esa directiva refleja el envoltorio de 79 caracteres de la herramienta gettext para que las diferencias sean legibles; placeholder_format y placeholder_format_custom protegen los estilos de los símbolos que los indicadores nativos no cubren; pseudo_inflation establece cuánto tiempo más duran las pseudotraducciones que el origen, por defecto en el 30 por ciento; entity_escaping controla si los caracteres XML base se escapan al entregarlos; whitespace_trim rige los espacios en blanco iniciales y finales; y gettext_parsing_mode = con llave cambia a basado en claves análisis de catálogos que utilizan msgid como clave de recurso abstracta y mantienen el texto fuente en msgstr. Los traductores ven cada cadena de la herramienta Smartling CAT con Visual Context, por lo que la etiqueta de un botón truncada se captura mientras se escribe la cadena y no después del .mo barcos de archivo. Para el viaje de ida y vuelta en sí, el conector GitHub observa un repositorio y devuelve los catálogos traducidos como una solicitud de extracción, y la CLI de Smartling y los SDK de Java, Python y Node.js impulsan las mismas cargas y descargas desde un trabajo de CI que, a continuación, ejecuta msgfmt.
Preguntas relacionadas
- ¿Cómo se implementa la traducción en un proyecto de Django?
- ¿Cuáles son las mejores herramientas para editar archivos ResX?
- ¿Cuáles son las mejores herramientas de localización en GitHub para traducir repositorios de código?
- ¿Cuáles son las mejores herramientas para convertir archivos CSV para localización?
¿Listo para ver a Smartling en acción?
Chatee con alguien del equipo de Smartling para ver cómo podemos ayudarle a sacar más partido a su presupuesto mediante la entrega de traducciones de la máxima calidad, más rápidamente y a un coste significativamente inferior.