如何使用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函数,但是我怎样才能自动完成呢?
我不得不明确地设置转换域
如
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
在
fooo.de.xlf
对我来说,不幸的是,这种方法没有奏效,但翻译加载。我用翻译助手的trans函数检查了这个问题 这个问题可能是我在树枝模板中使用表单的方式。 {{ - form_label(child) - }} –
添加翻译形式的情况下是最好的主意 - 因为发现如果在树枝更易
{% trans_default_domain 'YourNameBundle' %}
{{'shot.tag.for.transle'|trans }}
还必须记住的翻译文件在你的包, 如果你从另一个扩展包(例如 - 你伸出FosUserBundle) 你可以从这种捆绑或使用FUNC翻译反式使用参数
{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}
有一个好的本地化。
这对我来说很好。谢谢! –
假设你想翻译成法语。然后你有filename.en.xlf和filename.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>
希望这将有助于有人
你不显示如何实际翻译表单标签。您显示正在使用的标签和正在设置的翻译文件,但添加不会默认翻译,尤其是在您的消息代码位于特殊域文件中时。 – 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
希望它能帮助别人:)
是否需要打印所需的表单才能执行此操作? –
好,很奇怪。现在它运作正常。我还不知道发生了什么变化,但我会研究它。我怀疑即使在缓存后仍然存在一些奇怪的缓存问题:清除 – k0pernikus
目前存在相同的问题。任何想法是什么造成的? – ferdynator
@ferdynator对我来说,我怀疑这是一个缓存错误。如果'clear:cache'不起作用,请尝试通过'rm -rf app/cache/dev/*'手动清除设备缓存。另外,请检查您是否在yml-name中有拼写错误。它也可能是一个较低的大写问题。 – k0pernikus