【问题标题】:PHP setlocale doesn't workPHP setlocale 不起作用
【发布时间】:2013-07-10 09:34:40
【问题描述】:

我尝试在我的树莓派上使用 nginX 在 PHP (php-fpm) 中将语言环境从 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”可能不会显示任何内容。
  • 向前迈出了一大步:用var_dump 代替echosetlocale 返回bool(false)。现在的问题是为什么setlocale 返回false

标签: nginx raspberry-pi locale php


【解决方案1】:

在使用 php5-fpm 在运行 nginx 的 debian 机器上安装其他语言环境后,我遇到了同样的问题

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

【讨论】:

    【解决方案2】:

    在我跑步后为我工作:

    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');
    

    【讨论】:

      【解决方案3】:

      来自文档(注意 在 Windows 上):

      在 Windows 上,setlocale(LC_ALL, '') 从 系统的区域/语言设置(可通过控制面板访问)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-28
        • 2012-03-18
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        相关资源
        最近更新 更多