Как скрыть информацию gettext в php - PullRequest
0 голосов
/ 25 февраля 2019

Я пишу простой скрипт, используя функцию PHP gettext.Все работает хорошо, но я пытаюсь контролировать, что изменилось для чего.

Например, когда пользователь меняет 2 поля

Type: (old) Agreement (new) Anex
Notes: (old) #empty field# (new) Agreement ID: 123

Мой генератор editinfo выглядит так

foreach($checkArray as $row => $value)
{
    if ($addData[$row] != $checkArray[$row])
    {
        $editInfo .= ' <b>' . _("FILED") . '</b> ' . _("$row") . ' <b>' . _("CHANGED FROM") . '</b> ' . _($checkArray[$row]) . ' <b>' . _("FOR") . '</b> ' . _($addData[$row]) . '<br />';
    }
}

Но я получил такую ​​информацию

<b>POLE</b> Type <b>ZMIENIONE Z</b> Umowa <b>NA</b> Aneks <br />
<b>POLE</b> Notes <b>ZMIENIONE Z</b> Project-Id-Version: 
POT-Creation-Date: 
PO-Revision-Date: 
Language-Team: 
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Generator: Poedit 2.0.9
Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
Last-Translator: 
Language: pl
 <b>NA</b> Agreement ID: 123<br />

Как видите, все переводы работают хорошо, но когда поле пусто, функция gettext возвращает некоторые сумасшедшие вещи, но я хотел бы получить

<b>Pole</b> Type <b>ZMIENIONE Z</b> Umowa <b>NA</b> Aneks<br>
<b>Pole</b> Notes <b>ZMIENIONE Z</b> <b>NA</b> Agreement ID: 123<br>

Так что мой вопрос в том, что мне следует изменить в PHP илиНастройки PHP на моем сервере, чтобы скрыть эту информацию gettext.Я бы установил «Если gettext не может найти перевод, просто напишите чистый текст», в этом случае ничего.

С уважением

1 Ответ

0 голосов
/ 25 февраля 2019

Как мы можем прочитать в gettext manual :

Это также имеет другое преимущество, так как пустая строка в PO-файле GNU gettext обычно переводится в некоторую системную информацию, прикрепленнуюк этому конкретному файлу MO, и пустая строка обязательно становится первой в исходной и переведенной таблицах, что делает поиск информации о системе очень простым.

Вероятно, ваш .po файл содержит msgid, что является пустой строкой, а его значение является просто системной информацией.

Так что, когда вы вызываете _(""), вы получаете это.Вы можете попробовать передать поле по умолчанию, если оно не найдено:

_($checkArray[$row] ?: "default")
...