Symfony 2 setlocale(LC_ALL,' de_DE')

时间:2013-06-27 14:48:56

标签: php symfony twig setlocale

我想用TWIG在德语中显示日期。

{{ event.beginnAt |date('l d.m.Y')}}

但输出是“星期五28.06.2013”​​。

我应该在哪里使用以德语显示日期的setlocale函数?

3 个答案:

答案 0 :(得分:4)

您需要启用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') }}

答案 1 :(得分:0)

为了实现我使用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执行上下文的本地,之后,只需用format_datetime替换日期函数。请记住查看支持的模式,因为它们与strftime不同。你有一个关于SonataIntlBundle的链接。

答案 2 :(得分:0)

您可以使用setlocale()strftime(),使用特定于Symfony的内容。