如何解决symfony 5.2 gettext 使用来自 php 文件的标签更新 po 文件
我在表单类型中有翻译标签,例如:
$builder->add('island',EntityType::class,[
'class' => Island::class,'choices' => $options['islands'],'choice_attr' => function(Island $choice) {
// TODO move to template
return ['data-content' => $choice->getParent()
? '<span> ' . $choice->getName() . '</span>'
: '<b>' . $choice->getName() . '</b>'
];
},'choice_label' => 'name','attr' => ['class' => 'selectpicker','title' => _('form.cafe.island.title')],'required' => true,'label' => false
])
如您所见,我尝试了传统的 _() 方式,但没有成功。
我尝试在 po 文件中为 poedit 生成新标签,如下所示:
php bin/console translation:update --output-format=po --force hu
任何建议或想法都非常受欢迎。
提前致谢!
解决方法
最佳实践是不要在表单类型类中进行翻译。尝试将未翻译的标签放在那里,并在模板中进行翻译。这不能解决自动生成“.po”文件的问题,而是简化了 Type 类,即。不需要注入翻译器,不需要在每个带有标题属性字段的 FormType 类中进行翻译。否则以后需要在每个Type类中都放translator和translate属性。
在模板中翻译表单字段属性,需要重载内置表单模板,如 Creating your Own Form Theme 中所述。
在这种情况下简化流程:
-
从用于拥有干净模板的内置模板中复制块
widget_attributes
。即:templates/form/my_theme.html.twig
-
将 dthis 模板添加到
config/packages/twig.yaml
标签中的form_themes
,即:twig: form_themes: ['form/my_theme.html.twig']
-
使用
extend
原始模板向此模板添加内容{% extends 'bootstrap_3_horizontal_layout.html.twig' %}
-
和重载块
widget_attributes
{% block widget_attributes -%} {% if attr.title is not empty %} {% set attr = attr|merge({title: attr.title|trans({},translation_domain)}) %} {{ parent() }} {%- endblock widget_attributes %}
通过这种方法,我们需要在一个地方进行更改并获得表单字段中所有标题属性的翻译。
正如我所说,这不会解析自动生成的“.po”文件,因为生成器确实无法从 PHP 类中获取翻译标签。它仅适用于模板文件。
值得注意的是,并非每个表单小部件模板都使用 widget_attribute
来格式化字段属性,因此在某些情况下,它需要重载特定的小部件模板块。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。