设置Symfony 2.5应用程序的语言环境(强制语言环境)

时间:2014-08-13 15:31:53

标签: php date symfony locale

我想将我的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

2 个答案:

答案 0 :(得分:1)

Symfony的语言环境设置不会影响PHP设置,它只是一个Symfony设置。

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

答案 1 :(得分:0)

任何基于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