有人能告诉我如何在Symfony2中切换语言环境日期格式吗?
无论我在config(framework.session.default_locale)中设置什么,这总是以英语返回工作日(我需要工作日用德语):
$start->format("D d.m.Y");
当我输出默认语言环境时,它总是返回“de”BTW,无论我在config.yml中设置什么
echo \Locale::getDefault()
其他信息:
我希望能够在我的本地系统和实时服务器上正确输出日期(意味着正确的德语工作日)格式化日期。尝试使用strftime,它使用系统安装的语言环境并且遇到了麻烦,因为语言环境包在live和dev机器上有不同的命名方案。 这里还有另外一个问题: PHP: why is my date formated on the server differently?
答案 0 :(得分:8)
Symfony2在其核心中没有提供任何日期格式化程序。
所有这一切都是通过嗅探会话和请求来配置\Locale::getDefault()
值。
您必须提供一些额外的服务来处理每个区域设置格式,例如SonataIntlBundle。
此捆绑包在扩展中添加了一些树枝过滤器,并提供了一些可以在任何地方使用的帮助程序。
激活后,您可以在模板中使用它们,例如:
{{ my_date|format_datetime }}
此处有更多信息:https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst
答案 1 :(得分:4)
我使用这样的代码来格式化我的项目中的日期(你需要打开php的intl扩展名):
<?php
class DefaultController extends Controller {
public function indexAction() {
$date = new \DateTime("now");
$formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE);
$formatter->setPattern("EEEE Y-M-d");
return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date));
}
它对我来说很好。如何创建您可以找到的格式模式 http://userguide.icu-project.org/formatparse/datetime
但是我找不到树枝的助手,所以你可以创建自己的
答案 2 :(得分:2)
更简单的方法是将格式存储在翻译文件中,如下所示:
在“messages。 en .yml”文件中:
date.format: m/d/Y
time.format: g:i A
在“messages。 fr .yml”文件中:
date.format: d/m/Y
time.format: H:i
然后,在twig文件中,您可以这样做:
{{ my_date|date('date.format'|trans) }}
因此,使用当前区域设置,日期将自动采用正确的格式。
答案 3 :(得分:2)
只需在config.yml中添加twig扩展名
services:
twig.extension.intl:
class: Twig_Extensions_Extension_Intl
tags:
- { name: twig.extension }
在你的模板树枝上 语法:{{myDate | localizeddate('sizeDate','sizeHour','locale'}} myDate:必须是DateTime对象 sizeDate:可以是none / short / medium / long / full sizeHour:可以是none / short / medium / long / full locale:默认情况下是可选的会话语言,但您可以强制使用一个不同的语言环境值
{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }})
<!--
locale "fr" : vendredi 21 décembre 2012 (13:37)
locale "en : Friday, December 21, 2012 (13:37 PM)
-->
如果您收到错误“请安装'intl'扩展程序以获得完全本地化功能”
安装php5-intl包 例如。在Debian服务器上,命令将是: apt-get install php5-intl
别忘了清除缓存;)
答案 4 :(得分:0)
为此目的有一个包:https://github.com/michelsalib/BCCExtraToolsBundle 比奏鸣曲项目更容易使用。 :)