i18n 在 debian 中无法通过 php-fpm 工作
i18n not working via php-fpm in debian
我这里有一个奇怪的问题。这是代码:
cat ./test.php
<?php
setlocale(LC_ALL,"");
//setlocale(LC_MESSAGES,'ru');
//setlocale(LC_CTYPE,'ru');
putenv("LANG=ru");
putenv("LANGUAGE=ru");
$domain = 'messages';
bindtextdomain($domain, "./locale");
textdomain($domain);
//var_dump($r);
//exit;
echo gettext("Welcome to My PHP Application");
print "\n";
echo gettext("ololo");
这里是本地化文件:
find ./locale/
./locale/
./locale/ru
./locale/ru/LC_MESSAGES
./locale/ru/LC_MESSAGES/messages.mo
./locale/ru/LC_MESSAGES/messages.po
./locale/en
./locale/en/LC_MESSAGES
./locale/en/LC_MESSAGES/messages.mo
./locale/en/LC_MESSAGES/messages.po
当我通过 CLI 执行脚本时,一切正常:
php ./test.php
Добро пожаловать!
452231
但是当我从网络上调用它时,我只得到:
Welcome to My PHP Application
ololo
我错过了什么?我正在使用 Debian 8.6、nginx、php-fpm 5.6.29。在 CLI 和 FPM 配置中都启用了 Gettext 和 Intl 模块。
谢谢!
解决方案作者:
php-fpm.conf clear_env 参数默认设置为 Yes:通过在添加此池配置中指定的环境变量之前清除工作人员中的环境来防止任意环境变量到达 FPM 工作进程 它应该设置为 No
参见手册 http://php.net/manual/en/install.fpm.configuration.php#clear-env
我这里有一个奇怪的问题。这是代码:
cat ./test.php
<?php
setlocale(LC_ALL,"");
//setlocale(LC_MESSAGES,'ru');
//setlocale(LC_CTYPE,'ru');
putenv("LANG=ru");
putenv("LANGUAGE=ru");
$domain = 'messages';
bindtextdomain($domain, "./locale");
textdomain($domain);
//var_dump($r);
//exit;
echo gettext("Welcome to My PHP Application");
print "\n";
echo gettext("ololo");
这里是本地化文件:
find ./locale/
./locale/
./locale/ru
./locale/ru/LC_MESSAGES
./locale/ru/LC_MESSAGES/messages.mo
./locale/ru/LC_MESSAGES/messages.po
./locale/en
./locale/en/LC_MESSAGES
./locale/en/LC_MESSAGES/messages.mo
./locale/en/LC_MESSAGES/messages.po
当我通过 CLI 执行脚本时,一切正常:
php ./test.php
Добро пожаловать!
452231
但是当我从网络上调用它时,我只得到:
Welcome to My PHP Application
ololo
我错过了什么?我正在使用 Debian 8.6、nginx、php-fpm 5.6.29。在 CLI 和 FPM 配置中都启用了 Gettext 和 Intl 模块。
谢谢!
解决方案作者: php-fpm.conf clear_env 参数默认设置为 Yes:通过在添加此池配置中指定的环境变量之前清除工作人员中的环境来防止任意环境变量到达 FPM 工作进程 它应该设置为 No 参见手册 http://php.net/manual/en/install.fpm.configuration.php#clear-env