您好我有一个用例,我想将表单翻译成自定义语言环境,然后在请求中设置一个
我尝试做类似
的事情$tmpLocale = $request->getLocale();
$request->setLocale('es');
$form = $this->createForm(new DataType());
$formView = $form->renderView();
$request->setLocale($tmpLocale);
return $this->render('AppBundle:Data:edit.html.twig', array(
'data' => $data,
'form' => $formView,
));
但它不起作用,我怎么能让它工作呢? 我需要将表单标签翻译为此自定义区域设置。
答案 0 :(得分:1)
表单标签转换是在表单呈现中进行的。如果它是您应用程序中的常见用例,那么您可以考虑通过翻译标签来覆盖行为:
Create a new form type extension并将locale
变量传递给模板布局:
class FormTypeExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['locale'] = $options['locale'];
}
public function configureOptions(OptionsResolver $resolver)
{
// define locale option for each form field.
// if null the labels are translates to current locale.
$resolver->setDefaults(array('locale' => null));
}
public function getExtendedType()
{
return 'form';
}
}
服务:
services:
app.form.extension.locale:
class: AppBundle\Form\Extension\FormTypeExtension
tags:
- { name: form.type_extension, alias: form }
接下来,overrides all form blocks包含trans()
功能并添加locale
作为第三个参数:
{{ label|trans({}, translation_domain, locale) }}
{%- block form_label -%}
{% if label is not same as(false) -%}
{# ... #}
<label ... >{{ translation_domain is same as(false) ? label : label|trans({}, translation_domain, locale) }}</label>
{%- endif -%}
{%- endblock form_label -%}
稍后,您可以为每个表单字段使用locale
选项:
$form->add('name', null, array('locale' => 'es'));
答案 1 :(得分:0)
查看TranslatorInterface,其第四个参数是locale
,您可以直接使用它来翻译邮件。
您需要将表单类型注册为服务,将translator(以及可能的自定义语言环境)注入其中,并使用此语言环境翻译所有内部消息。
答案 2 :(得分:-1)
我是通过翻译服务的简单更改区域设置来完成的。
$tmpLocale = $this->get('translator')->getLocale();
$this->get('translator')->setLocale('es');
$form = $this->createForm(new DataType());
$formView = $form->createView();
$this->get('translator')->setLocale($tmpLocale);
这很好用。无需先进的解决方案。