poedit показывает ошибки, которые не могут быть исправлены

У меня проблема с PoEdit. Я использовал программное обеспечение под названием PO-Auto-Translator для перевода файла po, и как только это было сделано, я хотел продолжить редактирование файла с помощью poedit, когда я пытаюсь сохранить, я получаю много ошибок...

    04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:46: missing 'msgstr' section
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:46:22: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:51: missing 'msgstr' section
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:51:22: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:52: keyword "$s" unknown
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:795: keyword "Upload" unknown
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:795:55: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:1583: missing 'msgstr' section
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:1583:27: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:1584: keyword "s" unknown
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:1597:28: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:1597: keyword "s" unknown
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4162:14: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4163: end-of-line within string
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4167:14: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4167: keyword "Admin" unknown
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4168: end-of-line within string
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4172:14: syntax error
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4173: end-of-line within string
04/21/14 22:39:12: C:\Users\home\Desktop\translation.po:4176:31: syntax error
04/21/14 22:39:12: C:\Program Files (x86)\Poedit\GettextTools\bin\msgfmt.exe: too many errors, aborting

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

вот первые 50 строчек перевода

# Translation of translation
msgid ""
msgstr ""
"Project-Id-Version: translation\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-05 10:43+0100\n"
"PO-Revision-Date: 2014-04-21 22:39+0200\n"
"Last-Translator: \n"
"Language-Team: AppThemes\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.4\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_nx:1,2;_x:1,2c;_ex:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;_nx_noop:1,2,3c\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-Basepath: .\n"
"X-Poedit-SearchPath-0: .\n"

#: 404.php:22
msgid "Whoops! Page Not Found."
msgstr "אופס! דף לא נמצא."

#: 404.php:24
#: 404.php:44 search.php:77 includes/theme-actions.php:218
msgid "Sponsored Links"
msgstr "קישורים ממומנים"

#: attachment.php:19
#, php-format
msgid "Return to %s"
msgstr "חזור אל% s"

#: attachment.php:20
#, php-format
msgid "← Return to %s"
msgstr "? חזור אל% s"

#: attachment.php:31
#, php-format
msgid "<span class="%1$s">By</span> %2$s"  /line 46
msgstr "ש"

#: attachment.php:44
#, php-format
msgid "<span class="%1$s">Uploaded</span> %2$s"
msgstr "<span class="%1$s">Uploaded</span> %2$s"

#: attachment.php:55
#, php-format
msgid "Full size is %s pixels"
msgstr "גודל מלא הוא פיקסלים% s"

Кто-нибудь может увидеть, в чем проблема моего файла?


person Dani    schedule 21.04.2014    source источник


Ответы (3)


Ваш PO-файл недействителен — он не соответствует синтаксису формата PO-файла и не экранирует кавычки внутри строковых литералов. msgid "foo"bar" недействителен, в отличие от msgid "foo\"bar", аналогично C, PHP или многим другим языкам.

ИМНСХО, вы должны немедленно отказаться от любого инструмента, создавшего такие ужасно поврежденные файлы PO (это определенно не был Poedit, как подразумевает заголовок X-Generator), и заменить его чем-то, что действительно знает свой выходной формат. Например, xgettext, стандартный инструмент для извлечения строк gettext. Он поддерживает PHP просто отлично.

Если это инструмент собственной разработки, вот очень хорошее описание формата PO от Чусслова Ильича из Pology: http://pology.nedohodnik.net/doc/user/en_US/ch-poformat.html (неофициально, но намного лучше, чем собственное руководство GNU gettext). Если вы пишете или читаете файлы PO в любом своем коде, я настоятельно рекомендую это.

person Václav Slavík    schedule 22.04.2014

Я нашел проблему. Мне нужно вручную добавить \ рядом с каждым ", где poedit выдал ошибку... Постепенно я исправил это, и это работает :)

person Dani    schedule 21.04.2014

Для тех, кто читает это и испытывает проблемы с отладкой ошибок, отображаемых в POEdit из ваших po-файлов, вы можете запустить:

msgfmt -v -c mypofile.po

Он покажет каждую ошибку, показанную в вашем файле po, со строкой, связанной с ней.

Кроме того, вы можете использовать Catalogue > Purge Deleted Translations из меню POEdit, что избавит вас от множества проблем и сделает ваш po-файл легче.

person Eric Martin    schedule 29.11.2018