如何使用messages.en.yml翻译symfony2表单中的标签?

k0p*_*kus 25 php forms translation formbuilder symfony

我试图让表单字段的翻译工作.我有messages.en.yml我的Bundle的Ressource文件夹.

test: it works
form:
    description: Add a description.
Run Code Online (Sandbox Code Playgroud)

我想构建一个表单EntityType,相应地转换表单字段的标签.

$builder->add(
    'description',
    null,
    array('label' => 'form.description', 'required' => false)
);
Run Code Online (Sandbox Code Playgroud)

然而,只显示了文字字符串'form.description',而不是预期的翻译Add a description.

messages.en.yml我可以调用正确加载翻译服务

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

在控制器中获取翻译结果.

当我想将字符串'form.description'视为应翻译的内容时,我错过了什么?

我想我无论如何都必须在它们上调用trans功能,但是如何自动完成它呢?

joh*_*ith 38

我必须明确设置翻译域

例如

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

的情况下

fooo.de.xlf
Run Code Online (Sandbox Code Playgroud)


小智 6

在symfony 3.1中,您不需要将转换器传递给表单类型构造函数.它将由表单字段名称自动翻译,如下所示:

控制器动作:

$form = $this->createForm(LoginType::class);
Run Code Online (Sandbox Code Playgroud)

FormType类:

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

和你的翻译文件(yml):

username: Your translation for username field
Run Code Online (Sandbox Code Playgroud)

希望它会帮助别人:)


小智 5

在表单中添加翻译是最好的主意 - 因为在树枝中找到更容易

{% trans_default_domain 'YourNameBundle' %}

{{'shot.tag.for.transle'|trans }}
Run Code Online (Sandbox Code Playgroud)

你还必须记住你的包中的翻译文件,如果你从另一个扩展包(例如 - 你扩展了 FosUserBundle),你可以从这个包中进行翻译或使用 func trans和 params

{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}
Run Code Online (Sandbox Code Playgroud)

有一个很好的本地化。