2013-06-27 43 views
2

我想用德語在TWIG中顯示一個日期。Symfony 2 setlocale(LC_ALL,'de_DE')

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

但是輸出是「星期五28.06.2013」​​。

我應該在哪裏使用用德語顯示日期的setlocale函數?

+0

你檢查了你的parameters.yml嗎? – cptnk

+0

[如何在Twig模板中渲染DateTime對象]可能的重複(http://stackoverflow.com/questions/8318914/how-to-render-a-datetime-object-in-a-twig-template) –

回答

4

您需要啓用twig intl extension(它需要啓用在PHP intl functions)一個,那麼你只需要使用:

{{ event.beginAt | localizeddate('full', 'none', locale) }} 

編輯
如果你只想本地化天的名字,你可以創建自己的樹枝延伸:

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 } 

註冊它,在你的樹枝模板,你可以使用:

{{ event.beginAt|intl_day }} {{ event.beginAt|date('d.m.Y') }} 
+0

非常感謝你!但是現在我還有其他問題。 event.beginnAt |本地化日期('full','none','de') 給出Freitag,28. Juni 2013. 但我只想要Freitag,28.06.2013 – Vico

+0

過濾器「intl_day」在templatefile中不存在。 – Vico

+0

好的。我不會在PageExtension中註冊yml。現在它工作。但我得到另一個錯誤:「Method」beginAt「for object」Event \ PageBundle \ Entity \ Event「 – Vico

0

爲了達到這個目的,我使用了SonataIntlBundle它公開了一些用intl格式化的小枝函數。

實施例:

{{ 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上有一個鏈接。

+0

對不起,但它不適合我... – Vico

+1

你能告訴我們爲什麼嗎? – saamorim

0

您可以使用setlocale()strftime(),使用的東西Symfony特定的可能是開銷。