Файл Wordpress .po не распознает французские акценты

Я написал файл .po для своей темы WordPress. Кодировка — unicode, так как я не могу определить ее как «utf-8», иначе она не откроется в Poedit (программа, которую я сейчас использую для каталогизации своих строк). К сожалению, строки, содержащие диакритические знаки (французские строки, так как мой базовый язык — французский), не будут корректно отображаться ни Peoedit (и, следовательно, компиляцией .mo), ни обработкой gettext __() и _e(). Мои файлы .php для моего веб-сайта в настоящее время имеют кодировку utf-8 для обработки французского акцента.

Может ли быть причиной несоответствие кодировки между .mo и веб-файлами? Если да, то как мне отобразить файлы .po и .mo в кодировке utf-8 и заставить их работать? Вот заголовок моего файла .po (включая кодировку utf-8, которая не работает):

msgid ""
msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Patrick <[email protected]>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"

person Prusprus    schedule 11.11.2011    source источник
comment
Вы пробовали более новую версию Poedit? Это редкость, когда он отклоняет действительный UTF-8. И если ваши файлы .po не в этой кодировке, что еще вы указали? (Показать код инициализации gettext.)   -  person mario    schedule 12.11.2011
comment
Да, я использую версию 1.4.6, самую новую версию. Возможно, проблема в том, что я не могу запустить Poedit с кодировкой utf-8, что мешает мне перекомпилировать файл .mo (поскольку я не могу его открыть). Есть ли программа, которая компилирует исключительно файлы .mo из файлов .po?   -  person Prusprus    schedule 12.11.2011
comment
Я обнаружил, что использование кодировки iso-8859-1 работает с Poeditor, но, к сожалению, все еще не работает с французским акцентом.   -  person Prusprus    schedule 12.11.2011
comment
Другая программа: msgfmt - Вы не можете ожидать много помощи, не показывая код. Это все слишком расплывчато и очень локальный вопрос.   -  person mario    schedule 12.11.2011
comment
Я не уверен, какой код вы хотели бы видеть. я предполагаю, что это будет скорее проблема конфигурации моих файлов, чем фактический код.   -  person Prusprus    schedule 13.11.2011


Ответы (2)


Вместо любых подробностей кода инициализации или шестнадцатеричных дампов ваших реальных файлов .po или .mo единственное, на что стоит обратить внимание, это bind_textdomain_codeset. (Также setlocale или добавление кодировки в LANG= или LC_ALL=.)

msgfmt и php2po (через Pootle) ​​являются альтернативой Poedit, если вам не удается заставить работать UTF-8. (Что вам и нужно сделать.)

person mario    schedule 12.11.2011
comment
Таким образом, кажется, что, заменив все французские акценты их эквивалентом ASCII, он не вызовет никакой ошибки юникода. Я предполагаю, что это связано с тем, что PoEdit работает с кодировкой Unicode для компиляции файла .mo, msgfmt или php2po могут работать по-другому. Я посмотрел на оба, но кажется, что они гораздо менее привязаны к интерфейсу, чем PoEdit, и больше основаны на консоли, что для меня очень громоздко. Я, скорее всего, останусь с PoEdit и просто заменю акценты кодами ASCII, когда это необходимо, так как на данный момент переведенные строки очень статичны и малы. - person Prusprus; 14.11.2011
comment
Исправьте кодировку страницы. И попробуйте другую версию Poedit. Нет веской причины, по которой он не должен работать с UTF-8. - person mario; 14.11.2011
comment
Попытаюсь это исправить, но если PoEdit использует кодировку юникода, то делать особо нечего... - person Prusprus; 14.11.2011

Вам нужно определить «Content-Type: text/plain; charset=utf-8\n», как вы сказали, но вам также необходимо преобразовать файл в UTF-8 (без спецификации) (это делает блокнот ++).

Когда вы снова откроете его в poedit, акценты должны показать «ОК». Сохраните и загрузите в папку темы WP.

person Et voilà le travail    schedule 01.12.2011