Я настраиваю многоконтейнерное приложение в Docker с контейнером httpd:2.4 (apache), который действует как запросы обратного прокси-сервера, пересылающие запросы к php-файлам в мой контейнер php-fpm.
Все в этой настройке работает отлично, за исключением переводов gettext. Я просто не могу заставить контейнер Docker возвращать перевод gettext в локали en_GB.
Настройка:
- Файлы .mo присутствуют в папке, успешно смонтированной в моем контейнере php-fpm, в /var/www/php/translations, с структура:
LC_MESSAGES
first.mo
second.mo
- В моем PHP-коде, скопированном в контейнер, я вызываю это перед попыткой получить перевод gettext через _() или dgettext():
bindtextdomain('second', '/var/www/php/translations');
Что я пробовал:
- Запуск locale -a в работающем контейнере php-fpm возвращает результат:
C.utf8
POSIX
en_GB.utf8
- Я пытался изменить языковые папки, например, на en_GB.UTF-8
- Я попробовал дополнительно позвонить:
bind_textdomain_codeset('second', 'UTF-8');
var_dumps() каждого из следующих методов при запуске в эхо-контейнере:
- setlocale(LC_ALL, "en_GB.UTF-8") > en_GB.UTF-8
- setlocale(LC_ALL, "en_GB.utf8")textdomain('first') > сначала
- textdomain('second') > второй
Примечание: в контейнере Apache ничего не делается в отношении локалей, но это должно быть нормально, поскольку это совершенно отдельный контейнер?
Примечание. Эта точная настройка работает при развертывании на реальной виртуальной машине с Apache в качестве обратного прокси-сервера, а за ним работает PHP как fastcgi. Поэтому я совершенно не понимаю, чего мне не хватает.
Dockerfile моего контейнера php-fpm (соответствующие части):
FROM php:8.2-fpm
RUN /etc/locale.gen && \
echo "de_CH.UTF-8 UTF-8" >> /etc/locale.gen && \
locale-gen
# Set environment variables so PHP uses the locale
ENV LANG=en_GB.utf8
ENV LANGUAGE=en_GB:en
ENV LC_ALL=en_GB.utf8
Подробнее здесь: https://stackoverflow.com/questions/797 ... -container
Мобильная версия