码头上的Php:使用setLocale

时间:2016-09-03 16:53:19

标签: php docker localization

我正在尝试将现有的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

我做错了什么?

4 个答案:

答案 0 :(得分:2)

您需要重新配置您的区域设置:

RUN locale-gen fr_FR.UTF-8 && dpkg-reconfigure locales

您可能需要(但我不确切知道在何种情况下)将LC_ALLLANGUAGE个环境变量添加到/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)以应用语言环境。