如何翻译 Symfony 3 表格?
How to translate Symfony 3 forms?
翻译 twig 模板中的内容似乎简单明了:我 运行 bin/console translation:update
填充翻译文件。问题是它似乎忽略了表格。
创建实体、存储库和 forms/types 后,我在 twig 模板中使用 {{ form_row(form.field) }}
来绘制表单元素。
是否有关于如何自定义和翻译表单标签、占位符和错误消息的成熟实践?
我必须使用 form_label
和 form_widget
而不是 form_row
来自定义标签吗?
例如,您可以在此处创建一个名为 forms.es.yml
的文件,您可以将您的译文放入西班牙语中,并且在您的表格中,您可以像这样链接它:
//LoginType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email',
EmailType::class,
[
'translation_domain' => 'forms', //It's translate the label
'constraints' => [
new Email([
'message' => 'email'
])
]
]
)
->add('password',
RepeatedType::class,
[
'type' => PasswordType::class,
'invalid_message' => 'cliente.password_not_equal',
'first_options' => ['label' => 'cliente.password'],
'second_options' => ['label' => 'cliente.repeat_password'],
'translation_domain' => 'forms', //Here is again
'constraints' => [
new NotBlank([
'message' => 'not_blank'
])
]
]
)
->add('current_uri', HiddenType::class);
}
它从 symfony 2 开始工作。
另一种方法是在你的树枝中,只打印小部件并翻译标签:
//index.html.twig
<label>
{{'form.email'|trans({})}}
{{ form_widget('form.email') }} //It only prints the input tag
</label>
是一种简单的方法,但可重用性较差。
按照文档中的说明翻译表单错误 https://symfony.com/doc/current/validation/translations.html
您需要 validators.lang_used.format 个文件,文件 key/value 个。然后通过消息密钥的断言验证传递密钥。
在实体上
// src/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
class Author
{
/**
* @Assert\NotBlank(message="author.name.not_blank")
*/
public $name;
}
关于表单创建
$form = $this->createFormBuilder()
->setMethod('GET')
->add('email', TextType::class, [
'constraints' => [
new NotBlank(['message' => 'error.not_blank']),
],
'label' => 'label.email-domain'
])
->getForm();
要翻译 Label,只需将键传递给 'label',键需要以 label 为前缀,并在 messages.* 文件中显示。
在视图中翻译纯文本(key/value 在消息中定义。* 文件)
{{ 'save_button'|trans }}
有关翻译示例,请参阅 https://github.com/symfony/demo 查找实体定义、视图文件和表单类型
翻译 twig 模板中的内容似乎简单明了:我 运行 bin/console translation:update
填充翻译文件。问题是它似乎忽略了表格。
创建实体、存储库和 forms/types 后,我在 twig 模板中使用 {{ form_row(form.field) }}
来绘制表单元素。
是否有关于如何自定义和翻译表单标签、占位符和错误消息的成熟实践?
我必须使用 form_label
和 form_widget
而不是 form_row
来自定义标签吗?
例如,您可以在此处创建一个名为 forms.es.yml
的文件,您可以将您的译文放入西班牙语中,并且在您的表格中,您可以像这样链接它:
//LoginType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email',
EmailType::class,
[
'translation_domain' => 'forms', //It's translate the label
'constraints' => [
new Email([
'message' => 'email'
])
]
]
)
->add('password',
RepeatedType::class,
[
'type' => PasswordType::class,
'invalid_message' => 'cliente.password_not_equal',
'first_options' => ['label' => 'cliente.password'],
'second_options' => ['label' => 'cliente.repeat_password'],
'translation_domain' => 'forms', //Here is again
'constraints' => [
new NotBlank([
'message' => 'not_blank'
])
]
]
)
->add('current_uri', HiddenType::class);
}
它从 symfony 2 开始工作。
另一种方法是在你的树枝中,只打印小部件并翻译标签:
//index.html.twig
<label>
{{'form.email'|trans({})}}
{{ form_widget('form.email') }} //It only prints the input tag
</label>
是一种简单的方法,但可重用性较差。
按照文档中的说明翻译表单错误 https://symfony.com/doc/current/validation/translations.html
您需要 validators.lang_used.format 个文件,文件 key/value 个。然后通过消息密钥的断言验证传递密钥。
在实体上
// src/Entity/Author.php
use Symfony\Component\Validator\Constraints as Assert;
class Author
{
/**
* @Assert\NotBlank(message="author.name.not_blank")
*/
public $name;
}
关于表单创建
$form = $this->createFormBuilder()
->setMethod('GET')
->add('email', TextType::class, [
'constraints' => [
new NotBlank(['message' => 'error.not_blank']),
],
'label' => 'label.email-domain'
])
->getForm();
要翻译 Label,只需将键传递给 'label',键需要以 label 为前缀,并在 messages.* 文件中显示。
在视图中翻译纯文本(key/value 在消息中定义。* 文件)
{{ 'save_button'|trans }}
有关翻译示例,请参阅 https://github.com/symfony/demo 查找实体定义、视图文件和表单类型