如何使用 messages.en.yml 翻译 symfony2 形式的标签?
Posted
技术标签:
【中文标题】如何使用 messages.en.yml 翻译 symfony2 形式的标签?【英文标题】:How to translate labels in symfony2 forms with messages.en.yml? 【发布时间】:2014-02-09 18:38:13 【问题描述】:我正在尝试翻译表单字段。我的 Bundle 的资源文件夹中有 messages.en.yml
。
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 函数,但我怎样才能自动完成呢?
【问题讨论】:
好的,很奇怪。现在它只是工作。我还不知道发生了什么变化,但我会调查一下。我怀疑即使在缓存之后仍然存在一些奇怪的缓存问题:清除 目前有同样的问题。知道是什么原因造成的吗? @ferdynator 对我来说,我怀疑这是一个缓存错误。如果clear:cache
不起作用,请尝试通过rm -rf app/cache/dev/*
手动清除开发缓存。另外,请检查 yml 名称中是否有拼写错误。这也可能是小写与大写的问题。
@ferdynator 是否得到了您的支持,是否解决了您面临的问题?如果是这样,我将其添加为答案。
一个容易掉入的陷阱是也没有在配置中激活它:symfony.com/doc/current/book/translation.html#configuration
【参考方案1】:
我必须明确设置翻译域
例如
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
如果是
fooo.de.xlf
【讨论】:
对我来说不幸的是这种方法不起作用,但翻译已加载。我用翻译助手的 trans 函数检查了这个问题可能是我在树枝模板中使用表单的方式。 - form_label(child) -【参考方案2】:在 symfony 3.1 中,你不需要传递翻译器来形成类型构造函数。它将通过表单字段名称自动翻译,如下所示:
控制器动作:
$form = $this->createForm(LoginType::class);
FormType 类:
public function buildForm(FormBuilderInterface $builder, array $options)
$builder
->add('username',
TextType::class, ['label_format' => '%name%',]
);
还有你的翻译文件(yml):
username: Your translation for username field
希望对某人有所帮助:)
【讨论】:
是否有特定的方式来打印所需的表格?【参考方案3】:在表格中添加翻译是最好的主意 - 因为如果在树枝中找到更容易
% trans_default_domain 'YourNameBundle' %
'shot.tag.for.transle'|trans
您还必须记住捆绑包中的翻译文件, 如果您从另一个扩展包(例如 - 您扩展 FosUserBundle) 你可以从这个包中翻译或使用 func trans 和参数
'shot.tag.for.transle'|trans(, 'TranslationNameBundle')
有一个很好的本地化。
【讨论】:
【参考方案4】:假设您想翻译成法语。然后你有 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>
希望这对某人有所帮助
【讨论】:
您没有展示如何实际翻译表单标签。您显示正在使用的标签和正在设置的翻译文件,但默认情况下添加不会翻译,尤其是如果您的消息代码位于特殊域文件中。以上是关于如何使用 messages.en.yml 翻译 symfony2 形式的标签?的主要内容,如果未能解决你的问题,请参考以下文章
Scala Slick 如何将 Scala 代码翻译成 JDBC?
[翻译]The Neophyte's Guide to Scala Part 12: Type Classes