Невозможно заставить gettext работать в контейнере Docker php:fpm-8.2.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Невозможно заставить gettext работать в контейнере Docker php:fpm-8.2.

Сообщение Anonymous »

Я проверил вопросы, касающиеся этой проблемы, они не помогли (см. то, что я пробовал ниже).
Я настраиваю многоконтейнерное приложение в Docker с контейнером httpd:2.4 (apache), который действует как запросы обратного прокси-сервера, пересылающие запросы к php-файлам в мой контейнер php-fpm.
Все в этой настройке работает отлично, за исключением переводов gettext. Я просто не могу заставить контейнер Docker возвращать перевод gettext в локали en_GB.
Настройка:
  • Файлы .mo присутствуют в папке, успешно смонтированной в моем контейнере php-fpm, в /var/www/php/translations, с структура:
en_GB.utf8
LC_MESSAGES
first.mo
second.mo
  • В моем PHP-коде, скопированном в контейнер, я вызываю это перед попыткой получить перевод gettext через _() или dgettext():
bindtextdomain('first', '/var/www/php/translations');
bindtextdomain('second', '/var/www/php/translations');

Что я пробовал:
  • Запуск locale -a в работающем контейнере php-fpm возвращает результат:
C
C.utf8
POSIX
en_GB.utf8
  • Я пытался изменить языковые папки, например, на en_GB.UTF-8
  • Я попробовал дополнительно позвонить:
bind_textdomain_codeset('first', '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') > второй
Тем не менее, он не работает (я также дважды проверил, что msgid правильно настроен и переведен, и даже снова и снова создавал файлы .mo).
Примечание: в контейнере 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»