Итак, я просмотрел 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. Пробовал разные домены ... В убыток тут. Что именно не так?