2014-01-20 36 views
22

我試圖讓表單域的翻譯工作。我的Bundle的Ressource文件夾中有messages.en.yml如何使用messages.en.yml翻譯symfony2格式中的標籤?

test: it works 
form: 
    description: Add a description. 

我想在EntityType相應地轉換表單域的標籤,以建立一個形式。

$builder->add(
    'description', 
    null, 
    array('label' => 'form.description', 'required' => false) 
); 

然而,只有文字串'form.description'得到展示,不能Add a description.

翻譯服務的預期翻譯和messages.en.yml正確加載,我可以叫

var_dump($this->get('translator')->trans('test'));

控制器並獲得翻譯結果。

我缺少的是當我想要把字符串'form.description'的東西應該翻譯的?

我想我必須對它們調用trans函數,但是我怎樣才能自動完成呢?

+1

好,很奇怪。現在它運作正常。我還不知道發生了什麼變化,但我會研究它。我懷疑即使在緩存後仍然存在一些奇怪的緩存問題:清除 – k0pernikus

+0

目前存在相同的問題。任何想法是什麼造成的? – ferdynator

+1

@ferdynator對我來說,我懷疑這是一個緩存錯誤。如果'clear:cache'不起作用,請嘗試通過'rm -rf app/cache/dev/*'手動清除設備緩存。另外,請檢查您是否在yml-name中有拼寫錯誤。它也可能是一個較低的大寫問題。 – k0pernikus

回答

33

我不得不明確地設置轉換域

->add('description','hidden', 
array(
    "label"=>"form.description", 
    "required"=>true, 
    'translation_domain' => 'fooo' 
) 
); 

fooo.de.xlf 
+0

對我來說,不幸的是,這種方法沒有奏效,但翻譯加載。我用翻譯助手的trans函數檢查了這個問題 這個問題可能是我在樹枝模板中使用表單的方式。 {{ - form_label(child) - }} –

3

添加翻譯形式的情況下是最好的主意 - 因爲發現如果在樹枝更易

{% trans_default_domain 'YourNameBundle' %} 

{{'shot.tag.for.transle'|trans }} 

還必須記住的翻譯文件在你的包, 如果你從另一個擴展包(例如 - 你伸出FosUserBundle) 你可以從這種捆綁或使用FUNC翻譯反式使用參數

{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }} 

有一個好的本地化。

+0

這對我來說很好。謝謝! –

0

假設你想翻譯成法語。然後你有filename.en.xlffilename.fr.xlf

現在下面的表單元素你想描述翻譯。

$builder->add(
    'description', 
    null, 
    array('label' => 'form.description', 'required' => false) 
); 

所以在filename.en.xlf

<trans-unit id="17"> 
    <source>description</source> 
    <target>description</target> 
</trans-unit> 

和法語,所以在filename.fr。XLF如下

<trans-unit id="17"> 
    <source>description</source> 
    <target>fr descrip</target> 
</trans-unit> 

希望這將有助於有人

+0

你不顯示如何實際翻譯表單標籤。您顯示正在使用的標籤和正在設置的翻譯文件,但添加不會默認翻譯,尤其是在您的消息代碼位於特殊域文件中時。 – RichieHH

5

在symfony中3.1你並不需要通過翻譯成類型構造。它會自動通過表單字段名稱翻譯如下:

控制器動作:

$form = $this->createForm(LoginType::class); 

FormType類:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
     ->add('username', 
      TextType::class, ['label_format' => '%name%',] 
     ); 
} 

而且你的翻譯文件(陽明):

username: Your translation for username field 

希望它能幫助別人:)

+0

是否需要打印所需的表單才能執行此操作? –