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)
有一个很好的本地化。