2012-06-19 109 views
3

使用翻譯我試圖用翻譯在自定義過濾器樹枝像這樣Symfony2的:在一根樹枝過濾器擴展

public function formatTime($timestamp) 
{ 
    $str = date('j %\m%',$timestamp); 
    $str = str_replace($str, '%m%', $this->get('translator')->trans('month'.date('m', $timestamp))); 
    return $str; 
} 

offcourse得到的是未知的功能。 我應該讓自己的擴展程序知道環境還是簡單地請求翻譯類來使其可用?

回答

11

你可以注入一個translator服務到類:

<service id="acme.extension" class="Acme\Twig\Extensions\FormatterExtension"> 
    <tag name="twig.extension"/> 
    <argument type="service" id="translator"/> 
</service> 

,然後存儲轉換的實例在受保護的領域,並在以後使用它:

public function formatTime($timestamp) 
{ 
    $str = date('j %\m%',$timestamp); 
    $str = str_replace($str, '%m%', $this->translator->trans('month'.date('m', $timestamp))); 
    return $str; 
} 

UPD1:配置YAML服務定義:

acme.extension: 
    class: Acme\Twig\Extensions\FormatterExtension 
    arguments: [@translator] 
    tags: 
     - name: twig.extension 
+0

我的服務是在陽明配置文件中定義的,我想應該是這樣的: twig.extension.rc_extension: 類:ACME \枝杈\擴展\ FormatterExtension 參數: - {類型:服務ID:翻譯} 標籤: - {name:twig.extension} – svassr

+0

添加了YAML格式的更新。 – lisachenko

+3

依賴注入標記是Symfony 2.6的'@ translator.default','@ translator'標記現在引用LoggingTranslator。 – Lashae

3

我將使用服務容器將您的類定義爲服務。然後,您可以在翻譯服務作爲傳遞這樣一個說法:

在services.yml:

services: 
    your.class.identification.key: 
     class: \your\class\name 
     arguments: [@translator] 

之後,譯者將通過你上面提供的代碼中。

+0

依賴注入標籤是Symfony的2.6'@ translator.default'的'@ translator'標籤是指LoggingTranslator現在。 – Lashae

1

控制層$this->get()內部調用翻譯服務的get方法。

爲了模仿這種行爲,可以設置依賴注入並將依賴容器注入到構造函數中。一旦你完成了這個,你可以通過使用這樣的東西來獲得翻譯:$this->container->get('translator')

1

只是爲了更新@Alexander答案。不要忘了把

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