Защо gettext преобразува празен низ в заглавния текст на .po?

Имам настройка на gettext в PHP5. След известна борба с наборите от символи и други подобни, успях да преведа някои основни низове. Сега се натъкнах на проблем. Когато превеждам празен низ, очаквам да получа обратно непреведения (празен) низ (поправете ме, ако греша ;)).

Но вместо да върна входния низ, получавам заглавката на .PO файла като превод:

Project-Id-Version: PACKAGE VERSION Report-Msgid-Bugs-To: POT-Creation-Date: 2011-09-22 15:03+0200 PO-Revision-Date: 2011-09-22 15:37+0200 Last-Translator: timo Language-Team: English Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=ASCII Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 

Когато гледам във файла .mo с текстов редактор, виждам, че заглавката изглежда е поставена на произволно място във файла. Бих искал да ви покажа, но не мога да поставя файла. Изглежда, че има списък с моите msgid, след това заглавката и след това списък с моите msgstr

Използвах следната команда за генериране на .mo файла:

msgfmt -c -v -o en/LC_MESSAGES/messages.mo messages_en.po

След тази команда рестартирах моя уеб сървър (lighttpd).

Какво направих погрешно и как мога да го поправя?


person Timo    schedule 30.09.2011    source източник


Отговори (2)


След търсене наоколо с различни заявки попаднах на този сайт: http://framework.zend.com/issues/browse/ZF-2914

Тук открих, че преводът на празния низ към мета информация всъщност е в спецификации на gettext:

Това също има друго предимство, тъй като празният низ в PO файл GNU gettext обикновено се превежда в някаква системна информация, прикачена към този конкретен MO файл, и празният низ непременно става първи както в оригиналната, така и в преведената таблица, което прави системната информация много лесен за намиране.

person Timo    schedule 05.10.2011

Можете да опитате да създадете друга функция за извикване на gettext само когато съобщението е различно от празен или празен низ (""). Нещо като това в php:

function _tl($msg)
{
    $ret = "";
    if($msg != "")
    {
        $ret = _($msg);
    }    

    return $ret;

}

След това в poedit, във вашите предпочитания за каталог, в раздела ключови думи задайте използването на новата функция _tl. Това е начинът, по който poedit ще го разпознае във вашия код.

person Fernando    schedule 06.07.2016