Переводы PHP gettext не получаются - PullRequest
0 голосов
/ 07 октября 2019

Итак, я просмотрел stackoverflow с похожими проблемами и проверил все. Я просто не могу заставить переводы работать с gettext.

У меня следующая файловая структура

locale/
    en_US/
        LC_MESSAGES/
            messages.mo
            messages.po
test.php

messages.po содержит несколько сообщений, но переведено только одно. Я запустил msgfmt, чтобы сгенерировать файл .mo из .po файла.

#: test.php:43
msgid "Olen omena"
msgstr "I am an apple"

Пытался запустить test.php со следующим кодом:

<?php

$locale = "en_US";

$results = putenv("LANG=" . $locale);

if (!$results) {
    exit ('putenv LANG failed');
}

$results = putenv("LANGUAGE=" . $locale);

if (!$results) {
    exit ('putenv LANGUAGE failed');
}
$results = setlocale(LC_MESSAGES, $locale);

if (!$results) {
    exit ('setlocale failed');
}
echo "Locale set to: $locale<br>";

$domain = 'localhost';

$results = bindtextdomain($domain, "locale/");

if (!$results) {
    exit ('bindtextdomain failed');
}

$results = bind_textdomain_codeset($domain, "ISO-8859-1");

if (!$results) {
    exit ('bind_textdomain_codeset failed');
}

$results = textdomain($domain);

if (!$results) {
    exit ('textdomain failed');
}

echo _("Olen omena");

И он печатает

Locale set to: en_US
Olen omena

Apache и PHP работают внутри контейнера Docker, и я с помощью locale -a проверил, существует ли en_US.

...
en_US
en_US.iso885915
en_US.utf8

Перепробовал все опции en_US. Пробовал LC_ALL и LC_MESSAGES. Пробовал разные домены ... В убыток тут. Что именно не так?

1 Ответ

0 голосов
/ 07 октября 2019

Хорошо! Я понял это, посмотрев на пример PHP.net! Домен должен совпадать с именем файла! Если для домена установлено значение «localhost», файл должен иметь имя «localhost.mo»!

Edit Однако я наблюдал странное поведение. По какой-то причине PHP продолжает сбрасывать перевод при каждом седьмом обновлении, и всплывает оригинальный текст. Наблюдая за вкладкой сети в chrome, начальная загрузка страницы превышает 400 B, секунда - 399, пока 7-е не станет 395:

enter image description here

PHP сбрасывает некоторый кэшкаждая седьмая перезагрузка?

...