PHP setlocale函数无效

6

我想在使用nginX和php-fpm的树莓派上,将PHP中的语言环境从fr_FR设置为us_US。
这是我的代码:

<?php

system('locale -a');
/*
C POSIX en_US.utf8 fr_FR fr_FR.iso88591 fr_FR.iso885915@euro fr_FR.utf8
So the en_US locale is well installed
*/

echo locale_get_default();
/* fr_FR */
echo setlocale(LC_ALL, '0');
/*
LC_CTYPE=fr_FR.UTF-8;LC_NUMERIC=C;LC_TIME=C;LC_COLLATE=C;LC_MONETARY=C;
LC_MESSAGES=C;LC_PAPER=C;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;
LC_MEASUREMENT=C;LC_IDENTIFICATION=C
*/

var_dump(setlocale(LC_ALL, 'en_US.UTF-8', 'en_US.UTF8'));
/* bool(false) */

var_dump(setlocale(LC_ALL, 'fr_FR.UTF8'));
/* string(10) "fr_FR.UTF8"
useless, but it shows that setlocale works with the already set locale */
?>

我不明白为什么setlocale会返回false
似乎有些东西不起作用,但我找不到是什么原因。

那么最终的 setlocale 调用返回什么呢?尝试使用 var_dump() 代替 echo,因为 "echo false" 可能不会显示任何内容。 - zinga
一个重要的进展:使用var_dump代替echosetlocale返回bool(false)。现在的问题是为什么setlocale会返回false - Nicolas
另一种可能性是这个:https://dev59.com/9Wgv5IYBdhLWcg3wBMKg#10910211 - toesslab
3个回答

10

在我的Debian机器上安装了额外的本地化后,我遇到了相同的问题,该机器运行着nginx和php5-fpm。

为了解决这个问题,我不得不重启php5-fpm。


1
"

在我运行之后,对我有用:

"
sudo apt-get -y install language-pack-pt

service php7.1-fpm restart

<?php 
date_default_timezone_set('America/Sao_Paulo');
setlocale(LC_ALL, 'pt_BR', 'pt_BR.iso88591', 'pt_BR.utf8');
echo \Carbon\Carbon::now()->addMonth()->formatLocalized('%d %B %Y');

0

从文档中可以看到(注意在Windows上):

在Windows上,setlocale(LC_ALL, '')会设置区域设置名称,这些名称来自于系统的区域语言设置(可通过控制面板访问)。

http://php.net/manual/en/function.setlocale.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接