我正在尝试将现有的Apache / php站点迁移到docker,并且在站点本地化方面存在问题。 深入研究代码,问题是setLocale在Docker安装上返回false(在现有站点上为true)。 这是一个在现有站点上运行良好的php测试,在Docker安装上失败。
<?php
$locale = "fr_FR";
putenv("LC_ALL=$locale");
$ok = setlocale(LC_ALL, $locale);
if ($ok) {
echo "success";
} else {
echo "failure";
}
?>
这是我的Docker文件:
FROM php:5-apache
RUN apt-get update && apt-get install -y locales && apt-get clean
RUN locale-gen fr_FR && locale-gen zh_TW && locale-gen tr_TR && locale-gen ru_R$
RUN docker-php-ext-install gettext
RUN a2enmod rewrite && a2enmod headers
我做错了什么?
答案 0 :(得分:2)
您需要重新配置您的区域设置:
RUN locale-gen fr_FR.UTF-8 && dpkg-reconfigure locales
您可能需要(但我不确切知道在何种情况下)将LC_ALL
和LANGUAGE
个环境变量添加到/etc/environment
:
LC_ALL=...
LANGUAGE=...
答案 1 :(得分:0)
Docker中的Ubuntu不附带语言环境..我不知道为什么。您必须将其添加到Dockerfile:
RUN locale-gen fr_FR.UTF-8
ENV LANG fr_FR.UTF-8
ENV LANGUAGE fr_FR:en
ENV LC_ALL fr_FR.UTF-8
这应该这样做。
答案 2 :(得分:0)
按照“那个巴西佬”的要求,这是固定泊坞窗文件的答案
FROM php:5-apache
RUN apt-get update && apt-get install -y locales && apt-get clean
RUN sed -i -e 's/# fr_FR ISO-8859-1/fr_FR ISO-8859-1/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales
RUN docker-php-ext-install gettext
RUN a2enmod rewrite && a2enmod headers
If you need more locales, you'll have to look at /etc.locale.gen in your container and add a line
sed -i -e 's/# locale/locale/' /etc/locale.gen && \
针对您需要的每个语言环境(假设#语言环境是/ ec tc / locale.gen中包含所需语言环境的行的内容。
答案 3 :(得分:0)
在我的情况下,我无法仅通过调用string intAsString = "123";
int? nullableInt = null;
nullableInt = !string.IsNullOrEmpty(intAsString) ? (int?)(Convert.ToInt32(intAsString)) : null;
来生成语言环境,我不得不将特定的语言环境添加到RUN locale-gen fr_FR.UTF-8
文件中,然后运行locale-gen:
/etc/locale.gen
以下命令向我展示了系统可用的良好语言环境:
RUN echo 'fr_CA.UTF-8 UTF-8' >> /etc/locale.gen && \
echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen && \
locale-gen
如果问题出在PHP root@df6edda12ef7:/var/www/html# locale -a
C
C.UTF-8
POSIX
en_US.utf8
fr_CA.utf8
上,请不要忘记重启apache2-foreground Docker容器的Web服务器(apache2)以应用语言环境。