【发布时间】:2016-06-23 21:44:15
【问题描述】:
我想用德语在 TWIG 中显示日期。
{{ event.beginnAt |date('l d.m.Y')}}
但输出是“Friday 28.06.2013”。
我应该在哪里使用以德语显示日期的 setlocale 函数?
【问题讨论】:
-
你检查你的parameters.yml了吗?
标签: php symfony twig setlocale
我想用德语在 TWIG 中显示日期。
{{ event.beginnAt |date('l d.m.Y')}}
但输出是“Friday 28.06.2013”。
我应该在哪里使用以德语显示日期的 setlocale 函数?
【问题讨论】:
标签: php symfony twig setlocale
你需要启用twig intl extension(它需要在php中启用intl functions)然后你只需使用:
{{ event.beginAt | localizeddate('full', 'none', locale) }}
已编辑:
如果您只想本地化日期名称,可以创建自己的 Twig 扩展:
src/Acme/Bundle/DemoBundle/Twig/DateExtension.php
namespace Acme\Bundle\DemoBundle\Twig;
class DateExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('intl_day', array($this, 'intlDay')),
);
}
public function intlDay($date, $locale = "de_DE")
{
$fmt = new \IntlDateFormatter( $locale, \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, 'Europe/Berlin', \IntlDateFormatter::GREGORIAN, 'EEEE');
return $fmt->format($date);
}
public function getName()
{
return 'date_extension';
}
}
然后在services.yml中注册
src/Acme/Bundle/DemoBundle/Resources/config/services.yml
parameters:
acme_demo.date_extension.class: Acme\Bundle\DemoBundle\Twig\DateExtension
services:
acme_demo.twig.date_extension:
class: %acme_demo.date_extension.class%
tags:
- { name: twig.extension }
在您的 Twig 模板中,您可以只使用:
{{ event.beginAt|intl_day }} {{ event.beginAt|date('d.m.Y') }}
【讨论】:
beginAt,但你用的是beginnAt
为了实现这一点,我使用了SonataIntlBundle,它公开了一些用 intl 格式化的 twig 函数。
例子:
{{ date_time_object | format_datetime(null, 'fr', 'Europe/Paris',
constant('IntlDateFormatter::LONG'), constant('IntlDateFormatter::SHORT')) }}
会输出
'1 février 2011 19:55'
我使用了一种更简单的方法,因为我强制了 php 执行上下文的本地化,然后将 date 函数替换为 format_datetime。请记住查看支持的模式,因为它们与 strftime 不同。您在 SonataIntlBundle 上有一个链接。
【讨论】:
您可以使用setlocale() 和strftime(),使用特定于 Symfony 的东西可能会产生开销。
【讨论】: