我想将我的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
答案 0 :(得分:1)
Symfony的语言环境设置不会影响PHP设置,它只是一个Symfony设置。
您必须使用setlocale()
来配置PHP的语言环境。您可以将它放在前端控制器(web/app.php
和web/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