Почему gettext переводит пустую строку в текст заголовка .po? - PullRequest
1 голос
/ 30 сентября 2011

У меня есть настройка 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).

Что я сделал не так и как я могу это исправить?

Ответы [ 2 ]

7 голосов
/ 05 октября 2011

После поиска по разным запросам я наткнулся на этот сайт: http://framework.zend.com/issues/browse/ZF-2914

Здесь я обнаружил, что перевод пустой строки в метаинформацию фактически находится в спецификациях gettext.

0 голосов
/ 06 июля 2016

Вы можете попробовать создать другую функцию для вызова gettext только тогда, когда в сообщении она отличается от пустой или пустой строки ("").Примерно так в php:

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

    return $ret;

}

Затем на poedit, в настройках каталога, на вкладке ключевых слов установите использование новой функции _tl.Именно так poedit распознает его в вашем коде.

...