2012-03-26 17 views
8

Estoy usando un conjunto de archivos .po generados por el sistema de traducción de la compañía (con Pootle, si es relevante). Estoy teniendo problemas para convertir estos archivos a .mo (el equivalente binario a .po archivos) mediante la utilidad msgfmt (con el operador -C, que comprueba el formato del archivo), me sale el siguiente error:Detectando errores en archivos .po

$ msgfmt -v -C default.po 
default.po:1:2: syntax error 
msgfmt: found 1 fatal error 

Busqué bastante en Google para obtener más información sobre qué es exactamente lo que está causando que msgfmt presente este error.

También intenté eliminar las primeras dos líneas del archivo (que no formaban parte del catálogo, solo comentarios o cadenas de traducción vacías).

Me inclino a pensar que es un problema de codificación de archivos, pero no he tratado demasiado con este tipo de cosas, por lo que estoy más que dispuesto a admitir que es un error del usuario.

¿Alguien sabe cómo puedo diagnosticar más específicamente el error con estos archivos? Además, el mismo comportamiento se muestra en todos los archivos localizados, no solo en un archivo específico.

Respuesta

7

Suena casi definitivamente como un problema con BOM, los archivos PO no deberían contenerlos. Una alternativa sería ejecutar pocompile del Translate Toolkit, ya que ya está usando Pootle pocompile ya debe estar instalado en su sistema.

5

Supongo que también se trata de un problema de codificación. Dado que el error ya aparece en los primeros caracteres del archivo, el culpable es probablemente un byte order mark, que en utf-8 se codifica como la secuencia de bytes 0xEF, 0xBB, 0xBF. La mejor manera de comprobar esto sería mirar el archivo con un editor hexadecimal o utilizar un editor que pueda indicarle si el archivo contiene una marca de orden de bytes. Por ejemplo, en vim puede usar set bomb? y le dirá bomb o nobomb.

Editar:Here es una entrada de blog de alguien que tiene el mismo mensaje de error exacto causado por un archivo codificado en UTF-8 a partir de una marca de orden de bytes.

+1

Usuarios de Windows: la sugerencia en el artículo vinculado sugería utilizar la opción de menú de Notepad ++: Codificación> Convertir a UTF-8 sin lista de materiales – plusjeff

Cuestiones relacionadas