【问题标题】:symfony form type translation_domain not working?symfony 表单类型 translation_domain 不起作用?
【发布时间】:2021-02-26 03:45:51
【问题描述】:

我的表单类型如下:

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' 添加到每个表单类型?

【问题讨论】:

  • 尝试将此表单中的name 字段更改为项目中其他任何地方都找不到的键。例如,使用name123 而不是name。再次运行命令,查看name123 键是否进入 xlf 文件。我很确定,它不会到达那里。
  • @xtx 我把它改成 name123 或者我添加 'label'=>'name1234',也不起作用

标签: forms symfony dns translation


【解决方案1】:

问题是translation:update命令,根据docs, 仅从 2 个位置提取要翻译的字符串:

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

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

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

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

所有被定义为选项的表单标签 ->add() 方法 表单生成器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多