【问题标题】:Set locale for Symfony 2.5 application (force locale)为 Symfony 2.5 应用程序设置区域设置(强制区域设置)
【发布时间】:2014-08-13 15:31:53
【问题描述】:

我想将我的 Symfony 2.5 应用程序的区域设置强制为 ru_RU.UTF-8。我希望将此语言环境用于strftime() 函数。

我的app/config.yml 中有以下配置:

framework:
    default_locale: "ru_RU.UTF-8"

我在我的一个控制器中使用以下代码进行调试:

//setlocale(LC_TIME, 'ru_RU.UTF-8');
var_dump(setlocale(LC_TIME, 0));
var_dump(strftime('%B', time()));
die();

这样执行时,显示:string(1) "C" string(6) "August"

但是,当第一行被取消注释时,它显示:string(11) "ru_RU.UTF-8" string(12) "Август",因此语言环境已安装在系统中并且可以正常工作。

如何让 Symfony 始终使用配置中指定的语言环境?


$ locale -a

C
C.UTF-8
en_US.utf8
POSIX
ru_RU
ru_RU.iso88595
ru_RU.utf8

【问题讨论】:

标签: php date symfony locale


【解决方案1】:

Symfony 的区域设置不影响 PHP 设置,它只是一个 Symfony 设置。

您必须使用setlocale() 来配置PHP 的语言环境。你可以把它放在前端控制器(web/app.phpweb/app_dev.php)或者为 kernel.request 创建一个监听器。

【讨论】:

  • 谢谢,我已将setlocale 添加到我的前端控制器作为解决方法。我想我现在会保持这种状态。但是,有没有办法配置 PHP (FPM) 以使用某些特定的语言环境?
  • @SlavaFominII 您需要在您正在运行的实际环境中设置语言环境。在您的 shell(我假设您正在运行 unix/linux)中,如果值没有,请执行 locale -a t 匹配您想要的然后找到您的语言环境配置文件并将其添加到您的 /etc/default/locale export LANG=en_US.UTF-8 用您想要的语言环境替换 en_US.UTF-8 。
【解决方案2】:

任何基于setlocale()(如@Wouter J's answer)的解决方案迟早会让您头疼,因为它依赖于当前机器的区域设置。因此,每当您切换服务器时,它可能会停止工作。您的开发服务器和生产服务器之间可能会有所不同。

更好的方法是放弃strftime() 以支持IntlDateFormatter::formatObject

\IntlDateFormatter::formatObject($entity->getTimestamp(), \IntlDateFormatter::FULL, 'de_AT');

这只需要您安装 PHP intl 扩展。还有一个Symfony replacement for PHP's native \IntlDateFormatter,但我想只有在没有intl 扩展可用的情况下才有必要这样做。

对于 Twig,您可以使用 localizeddate 过滤器。安装说明:https://stackoverflow.com/a/24390635/1668200

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多