首页 > 解决方案 > symfony 表单类型 translation_domain 不起作用?

问题描述

我的表单类型如下:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', null, [
            'translation_domain' => 'Admin.Global',
        ])
        ->add('isoCode', null, [
            'translation_domain' => 'Admin.Global',
        ])
        ->add('languageCode')
        ->add('flag_image', FileType::class, [
            'mapped' => false,
            'label' => 'flag',
            'constraints' => [
                new Image([
                    'maxSize' => '1024K'
                ])
            ],
            'required' => false,
            'translation_domain' => 'Admin.Global',
        ])
        ->add('active', CheckboxType::class, [
            'label_attr' => [
                'class' => 'switch-custom'
            ]
        ])
        ->add('isDefault', CheckboxType::class, [
            'label_attr' => [
                'class' => 'switch-custom'
            ]
        ]);
}

在我运行命令后:

php bin/console translation:update --force en(or zh_CN)

Admin.Global+intl-icu.en(或 zh_CN).xlf 文件中只有“名称”标签

为什么 isocode 和 flag 不在 xlf 文件上?我是否将“translation_domain”=>“Admin.Global”添加到每个表单类型?

标签: formssymfonydnstranslation

解决方案


问题在于translation:update,根据文档,该命令仅从 2 个位置提取要翻译的字符串:

  • 模板
  • 任何注入或自动连接翻译服务并调用 trans() 方法的 PHP 文件/类。

您的表单类型类不是这两个,所以它没有被处理。

您提到名称标签进入 xlf 文件,而其他标签则没有。显然,名称来自其他地方(例如,来自模板),而不是来自表单类。

要处理表单类型类,您可以安装JMSTranslationBundle。它提供了一个不同的命令,translation:extract其中包括支持从(来自docs的引用)中提取消息:

定义为 FormBuilder 的 ->add() 方法的选项的所有表单标签


推荐阅读