2012-01-03 4 views
0

Я внедрил новое расширение ветки, и у меня есть текст, который нужно было перевести.Symfony2 + Twig: переведите ярлык в новое расширение веточки

К сожалению, когда я использую code label, он отображается в виде образца текста.

Я имею в виду, когда прут делают это следующее расширение, он отображает: 5 entity.years вместо 5 years, например:

class MyExtension extends \Twig_Extension { 
public function getFilters() 
{ 
    return array(
     'myextension' => new \Twig_Filter_Method($this, 'myextension'), 
    ); 
} 

public function myextension ($myId) 
{ 
     // .... 
     // Some operations concerning $myId... 
     // .... 
    if($myId!=0) { 
     $res = $myId. ' '.'entity.year'; 
    } else { 
     $res = ($months == 0 ? $days.'entity.days' : $months.'entity.months'); 
    } 

    return $res; 
} 
} 

Где entity.years, entity.months, entity.days определяется в моей папке переводов.

ответ

1

Injecttranslator сервис в ваше расширение и использовать его. Например:

class MyExtension extends \Twig_Extension 
{ 
    private $translator; 

    public function __construct(Translator $translator) 
    { 
     $this->translator = $translator; 
    } 

    // ... 

    public function myMethod() 
    { 
     return $this->translator->trans('my_string'); 
    } 
} 
+0

спасибо. Но у меня есть ошибка: аргумент 1 передан MySpace \ MyBundle \ Extension \ MyExtension :: __ construct() должен быть экземпляром Translator, не указанным, в 'app/cache/dev/appDevDebugProjectContainer.php' – Sam

+0

Похоже, вы забыли [ (http://symfony.com/doc/current/book/service_container.html#referencing-injecting-services). –

+0

Могу ли я добавить в свою службу: аргументы: - translation.loader вот так? – Sam