【问题标题】:setLocale not working with any language, correct local is installedsetLocale 不能使用任何语言,安装了正确的本地语言
【发布时间】:2017-05-14 18:29:22
【问题描述】:

我想设置正确的语言环境以接收正确的日期和时间翻译。

我试过了:

$locale = setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');

但这行不通。我已经用谷歌搜索了,我发现对我的情况没有帮助。我尝试将LC_ALL 更改为LC_TIME,但没有任何效果。

如果我在 shell 中执行locale -a,我会收到:

C C.UTF-8 POSIX de_DE.utf8

我也看了/etc/default/locale

LANG="de_DE.UTF-8"

在 php.ini 中,时区也设置为 Europe/Berlin
那么我到底做错了什么?在我的本地机器上使用 EasyPhp 可以正常工作。

为了下个月的本地化,我使用strftime

 $nextMonth = explode(" ", strftime( '%m %B %Y', strtotime( '+1 month', $date ) ));

代替

朱尼

我总是收到

六月

我也尝试了其他语言,但没有区别。

如果重要,我会使用 php7.1。

编辑: 我已经找到了这个帖子PHP setlocale has no effect,但对我没有任何帮助。

【问题讨论】:

  • 只是重申一下:您确实尝试过setlocale(LC_ALL, "de_DE.utf8"); 吗?它的返回值是多少?
  • 另外:您是否刚刚安装了该语言环境?如果是这样:您这样做后是否重新启动了 httpd?
  • 我试过了,是的。我也多次重启了nginx和php。但没有任何变化。我刚刚重新启动服务器以防万一,现在它正在工作。奇怪的行为。

标签: php utf-8 setlocale


【解决方案1】:

不要被语言环境的“.utf8”部分所迷惑。 Setlocale 仅适用于单字节函数,它们不适用于 Unicode。 此外,您使用哪种操作系统也很重要,根据操作系统的不同,您使用 PHP 的 TS 还是 NTS 版本也很重要。

对于国际化/Unicode,我建议使用 Intl 扩展,它具有完整的 Unicode 支持和非常完整的日历 IntlCalendar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2019-05-14
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多