Обнаружение ошибок в .po файлах - PullRequest
10 голосов
/ 27 марта 2012

Я использую набор .po файлов, сгенерированных системой перевода компании (с Pootle, если это актуально). У меня проблемы с преобразованием этих файлов в .mo (двоичный аналог .po файлов) с помощью утилиты msgfmt (с оператором -C, который проверяет формат файла), я получаю следующую ошибку :

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

Я довольно много гуглил, чтобы получить больше информации о том, что именно вызывает msgfmt эту ошибку.

Я также попытался удалить первые пару строк файла (которые не были частью каталога, а были только комментариями или пустыми строками перевода).

Я склонен думать, что это проблема с кодировкой файлов, но я не особо разбирался с подобными вещами, поэтому я более чем готов признать, что это ошибка пользователя.

Кто-нибудь знает, как я могу более конкретно диагностировать ошибку с этими файлами? Кроме того, одинаковое поведение проявляется во всех локализованных файлах, а не только в одном конкретном файле.

Ответы [ 3 ]

8 голосов
/ 13 сентября 2012

Это звучит почти наверняка как проблема с BOM, PO-файлы не должны содержать их.Альтернативой может быть запуск pocompile из набора инструментов для перевода, поскольку вы уже используете Pootle pocompile должен быть уже установлен в вашей системе.

7 голосов
/ 03 апреля 2012

Я думаю также, что это проблема с кодировкой. Поскольку ошибка уже появляется в первых нескольких символах файла, виновником, вероятно, является метка порядка байтов , которая в utf-8 кодируется как последовательность байтов 0xEF, 0xBB, 0xBF. Лучший способ проверить это - посмотреть на файл с помощью шестнадцатеричного редактора или использовать редактор, который может сообщить вам, содержит ли файл метку порядка байтов.

Например, в vim вы можете использовать set bomb?, и он сообщит вам либо bomb, либо nobomb.

Редактировать: Здесь - это запись в блоге того, у кого точно такое же сообщение об ошибке, вызванное файлом в кодировке utf-8, начиная с метки порядка байтов.

0 голосов
/ 05 марта 2019

Откройте ваш файл в vim и наберите : set bomb? и продолжайте вводить все строки, подверженные ошибкам, одну за другой.

...