Symfony - 覆盖entity_widget

时间:2017-11-10 05:36:56

标签: symfony

我有一个包含类别的表,而不是每种语言都有名称列,我存储翻译所以它看起来像这样:

1   2   category.macbook_12.name    img-12  category.macbook_12.title   category.macbook_12.title   macbook-12.jpg  0
2       category.macbook.name   macbook category.macbook.title  category.macbook.description    macbook.jpg 0
3   2   category.macbook_air.name   macbook-air category.macbook_air.title  category.macbook_air.description    macbook-air.jpg 0
4   3   category.macbook_air_11.name    macbook-air-11  category.macbook_air_11.title   category.macbook_air_11.description macbook-air-11.jpg  0
5   3   category.macbook_air_13.name    macbook-air-13  category.macbook_air_13.title   category.macbook_air_13.description macbook-air-13.jpg  0
6   2   category.macbook_pro.name   macbook-pro category.macbook_pro.title  category.macbook_pro.description    macbook-pro.jpg 0
7   6   category.macbook_pro_13.name    macbook-pro-13  category.macbook_pro_13.title   category.macbook_pro_13.description macbook-pro-13.jpg  0
....

我尝试使用实体字段创建表单。像这样:

->add('categories', EntityType::class, [
                'class' => Category::class,
                'choice_label' => 'name',
                'placeholder' => 'form.product.category.placeholder'
            ])

它没有翻译名称类别,但没有翻译它们。

我认为,我应该自定义entity_widget并添加| trans,但我找不到原始的,所以我可以编辑它,因为我不知道如何从实体中获取数据。

我在哪里可以找到原始的entity_widget? 或者还有另一种强制翻译的方法吗?

由于

1 个答案:

答案 0 :(得分:1)

如果您想翻译表单中的选项,可以设置

choice_translation_domain => 'messages'

您的翻译必须在目录

  
      
  • app/Resources/translations目录;
  •   
  • app/Resources/<bundle_name>/translations目录;
  •   
  • 任何捆绑包内的Resources/translations/目录。
  •   

via Docs

并存储在文件messages.{NEEDED_LANGUAGE}.yml中,如@DOZ所说。

NEEDED_LANGUAGE可以是短(en,de,ru,pl)或长(en_US,en_AU,en_GB)。

您也可以根据需要为翻译命名,但使用NEEDED_LANGUAGE表示法。因此,您的category.yml文件必须命名为category.en.yml,并且必须存储在翻译目录中。

要使用自定义文件中的翻译,您必须在每个字段或全局的twig文件中手动设置translation_domain和choice_translation_domain。

# src/{BUNDLE_NAME}/Resources/translations/messages.en.yml (based on symfony version)
category:
    macbook_12.name: "Macbook 12"
    macbook_12.title: "Macbook 12` laptop"
    macbook.name: "Macbook"
    macbook.title: "Macbook laptop"
form.product.category.placeholder: "Awesome macbooks here!"
# ... and yet