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

问题描述:

我试图让表单域的翻译工作。我的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

我不得不明确地设置转换域

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

fooo.de.xlf 
+0

对我来说,不幸的是,这种方法没有奏效,但翻译加载。我用翻译助手的trans函数检查了这个问题 这个问题可能是我在树枝模板中使用表单的方式。 {{ - form_label(child) - }} –

添加翻译形式的情况下是最好的主意 - 因为发现如果在树枝更易

{% trans_default_domain 'YourNameBundle' %} 

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

还必须记住的翻译文件在你的包, 如果你从另一个扩展包(例如 - 你伸出FosUserBundle) 你可以从这种捆绑或使用FUNC翻译反式使用参数

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

有一个好的本地化。

+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

在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

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