2011-05-31 75 views
26

我使用Symfony2的Beta3中的一類形式如下:翻譯選擇選項的Symfony2類形式

namespace Partners\FrontendBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class ConfigForm extends AbstractType 
{ 
    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('no_containers', 'choice', array('choices' => array(1 => 'yes', 0 => 'no'))); 
     ... 

我想翻譯的「是」和「否」的選擇,但我不知道如何在這裏使用翻譯。

回答

80

您可以使用翻譯資源如常。這工作對我來說:

$builder->add('sex', 'choice', array( 
     'choices' => array(
      1 => 'profile.show.sex.male', 
      2 => 'profile.show.sex.female', 
     ), 
     'required' => false, 
     'label'  => 'profile.show.sex.label', 
     'translation_domain' => 'AcmeUserBundle' 
    )); 

然後將您的翻譯添加到您的包的資源 - >翻譯目錄。從@CptSadface

更新:

symfony的2.7,使用CHOICE_LABEL參數,你可以指定翻譯域是這樣的:

'choice_label' => 'typeName', 
'choice_translation_domain' => 'messages', 

如果不指定域,選項沒有被翻譯。

+0

這是真正的答案。 +1 – 2013-06-16 03:07:46

+0

我已經保存了一個帶有複數形式的翻譯信息。是否有可能在一個表單類型代碼中定義(比如@bingen之一)要使用哪一個?例如。 「[...] array(1 =>'profile.show.sex.male {count = 3}',2 =>'profile.show.sex.male')[...]」。因爲我遇到了問題,只是提供消息名稱而不是默認的消息(「{0} Links | {1} Link |] 1,+ Inf [Links」) – Stefan 2013-12-12 10:27:58

+0

我忘記了:無需明確注入容器或翻譯器服務。 – Stefan 2013-12-12 10:28:49

4

我搜索了一段時間找到答案,但最終我發現了Symfony如何翻譯表單內容。在您的案例中,最簡單的方法似乎是通過嚮應用程序添加YAML或XLIFF翻譯文件(例如app/Resources/translations/messages.de.yml)或您的軟件包來添加「是」和「否」的翻譯。這說明如下: http://symfony.com/doc/current/book/translation.html

的問題 - 在我看來 - 是,你似乎並不能夠使用自定義按鍵的翻譯。 FOSUserBundle的傢伙用「Form Themes」(http://symfony.com/doc/2.0/cookbook/form/form_customization.html)解決了這個(或類似的)問題。這裏有兩個代碼顯著線實現表單元素ID的使用爲翻譯關鍵詞:

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/views/Registration/register_content.html.twig#L1/https://github.com/FriendsOfSymfony/FOSUserBundle/blob/50ab4d8fdfd324c1e722cb982e685abdc111be0b/Resources/views/form.html.twig#L4

通過添加表格主題你能修改的形式幾乎一切模板 - 這似乎是這樣做的正確方法。

(對不起,我不得不分割兩個鏈接B/C我沒有足夠的信譽來發布兩個以上的鏈路的。難過。)

+0

我忘了添加所有默認的形式主題的URL - 一個很好的參考:https://github.com/symfony/symfony/blob/master/src/Symfony/Bridge/Twig/Resources/views/ Form/form_div_layout.html.twig – rkallensee 2011-08-18 18:16:46

+1

其中一個鏈接已損壞。 – Mick 2014-01-17 20:26:51

+3

我修復了斷開的鏈接。 – rkallensee 2014-01-20 09:37:34

3

在symfony中2.7,使用CHOICE_LABEL參數,你可以指定這樣的翻譯領域:

'choice_label' => 'typeName', 
'choice_translation_domain' => 'messages', 

如果不指定域,選項沒有被翻譯。

+0

感謝CptSadface和@jxmallett! – bingen 2015-11-19 11:58:38

0

CptSadface的答案是幫助我翻譯我的實體選擇。

$builder 
    ->add(
     'authorizationRoles', 
     null, 
     [ 
      'label' => 'app.user.fields.authorization_roles', 
      'multiple' => true, 
      'choice_label' => 'name', // entity field storing your translation key 
      'choice_translation_domain' => 'messages', 
     ] 
    );