【问题标题】:Symfony how to translate data value in a formSymfony 如何在表单中翻译数据值
【发布时间】:2016-03-21 21:05:48
【问题描述】:

我在 buildForm 中有以下代码,我想获得 'report_abuse' 的翻译,但我找不到方法。有可能吗?

class AbuseType extends AbstractType
{
    // ...

    $builder->add('subject', TextType::class, array(
        'label' => 'label.subject',
        'data' => 'report_abuse',
        'disabled' => 'true',
    ))

    // ...   
 }

【问题讨论】:

  • 您是否在其中一个翻译文件中添加了report_abuse?我的理解是您想翻译输入字段中显示的值subject?
  • 是的,我已经在 xlf 文件中添加了 report_abuse,是的,我想翻译字段中显示的值,所以我欺骗了在将值注入我的对象之前获得翻译的值。我已经在下面回答了我的问题。

标签: php symfony-forms symfony


【解决方案1】:

尝试显式设置translation_domain:

$builder->add('subject', TextType::class, array(
    // ...
    'translation_domain' => 'messages',
))

您也可以通过将此方法添加到整个FormType

public function setDefaultOptions(OptionsResolverInterface $resolver)
{    
    $resolver->setDefaults(array(
        'translation_domain' => 'messages'
    ));
}

如果它不起作用,请通过注册 as a servicetranslator 注入到您的 FormType 中:

# services.yml
services:
    app.form.type.abuse:
        class: AppBundle\Form\Type\AbuseType
        arguments: [ "@translator" ]
        tags:
            - { name: form.type }

直接致电翻译人员:

use Symfony\Component\Translation\TranslatorInterface;

class AbuseType extends AbstractType
{
    public function __construct(TranslatorInterface $translator)
    {
        $this->translator = $translator;
    }

    // ...

    $builder->add('subject', TextType::class, array(
        'label' => 'label.subject',
        'data' => $this->translator->trans('report_abuse', array(), 'messages'),
        'disabled' => 'true',
    ))
}

【讨论】:

  • 感谢您的回答。前两个都没有工作...我不会使用第三个,因为它对于翻译来说“太多”,所有其他部分都已正确翻译,但我会保留它作为服务示例
  • 我可以理解这对你来说有点矫枉过正,但如果你真的需要翻译这个选项的值......你需要翻译器,所以需要在你的类型中得到它。
  • 这不是“矫枉过正”的问题,但如果 Symfony 没有让/设置将数据转换为标签的可能性,那是因为一个原因(哪一个???)。所以我更喜欢另辟蹊径,包括不需要翻译。但非常感谢您的时间和帮助。
【解决方案2】:

所以这就是我所做的。我已经在 Abuse 类中注入了主题,因为默认情况下将采用它的值来构建表单。我还将该字段设置为只读而不是禁用,这会导致字段未提交。

//FormController.php
    class FormController extends Controller
    {
        //...
        public function abuseAction(Request $request)
        {
            $subject = $this->get('translator')->trans('report_abuse');
            $abuse = new Abuse($subject);
           //...
        }
        //...
    }

//Abuse.php
    class Abuse
    {
        //...

        public function __construct($subject)
        {
            $this->setSubject($subject);
        }

    //...
    }

//AbuseType.php
class AbuseType extends AbstractType
{
    //...

    $builder->add('subject', TextType::class, array(
        'label' => 'label.subject',
        'attr' => array(
            'readonly' => true,
        )))

    //...
}

【讨论】:

    猜你喜欢
    • 2017-11-24
    • 2012-12-20
    • 1970-01-01
    • 2011-11-04
    • 2020-02-10
    • 1970-01-01
    • 2020-09-29
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多