我有一些不需要的表单类型。表单标签应该是本地化的,这很容易。
但是,当您将某个表单类型配置为'required'=>'false'
时,单词"(可选)"出现在类型标签之后。
翻译"可选"或禁用它的正确方法是什么?
顺便说一下。我现在根本没有看到任何方式。
谢谢
"require": {
"php": ">=5.3.3",
"symfony/symfony": "v2.3.0",
"doctrine/orm": ">=2.2.3,<2.4-dev",
"doctrine/doctrine-bundle": "1.2.*",
"twig/extensions": "1.0.*",
"symfony/assetic-bundle": "2.1.*",
"symfony/swiftmailer-bundle": "2.3.*",
"symfony/monolog-bundle": "2.3.*",
"sensio/distribution-bundle": "2.3.*",
"sensio/framework-extra-bundle": "2.3.*",
"sensio/generator-bundle": "2.3.*",
"jms/security-extra-bundle": "1.4.*@dev",
"jms/di-extra-bundle": "1.3.*@dev",
"twitter/bootstrap" : "dev-master",
"cg/kint-bundle": "dev-master",
"raveren/kint": "dev-master",
"mopa/bootstrap-bundle": "dev-master",
"sonata-project/intl-bundle": "dev-master",
"egeloen/ckeditor-bundle": "2.*"
},
答案 0 :(得分:10)
mopa / bootstrap-bundle 引入了“可选”字符串呈现。
可以在捆绑包中找到Resources/views/Form/fields.html.twig。
块 form_label_asterisk 中添加了“可选”字符串:
{% block label_asterisk %}
{% if required %}
{% if render_required_asterisk %}
<span>*</span>
{% endif %}
{% else %}
{% if render_optional_text %}
<span>{{ "(optional)"|trans({}, translation_domain) }}</span>
{% endif %}
{% endif %}
{% endblock label_asterisk %}
如您所见,渲染要求您为要翻译的可选字符串设置translation_domain。正确的实施将使用“回复”的回退
...
<span>{{ "(optional)"|trans({}, translation_domain|default('messages')) }}</span>
...
通过添加到config.yml完全删除可选渲染:
# app/config/config.yml
parameters:
mopa_bootstrap.form.render_optional_text: false
...或将render_optional_text => false
添加到表单选项中。
可以找到BootstrapBundle覆盖默认表单类型here。
或者,您可以通过以单一形式覆盖块来删除可选字符串
{% form_theme form _self %}
{% block label_asterisk %}
{% if required %}
{% if render_required_asterisk %}
<span>*</span>
{% endif %}
{% endif %}
{% endblock label_asterisk %}
有关覆盖表单元素的更多信息,请参阅my answer here。
答案 1 :(得分:0)
请参阅bundle的存储库中的Allow translation of (optional) #277问题。自从这个问题的接受答案以来,这段代码发生了很大的变化。
现在正在使用translation_domain
这样:
{%- if render_optional_text %} <span>{{ "(optional)"|trans({}, translation_domain) }}</span>{% endif %}
我个人正在使用JMSTranslationBundle
所以为了提取这个,我做了一个像这样的快速哑课:
<?php
namespace ACME\Bundle\ACMEBundle\Tools;
use Symfony\Bundle\FrameworkBundle\Translation\Translator;
class TranlsationsOverrides {
/**
* @param Translator $translator
*/
function __construct(Translator $translator) {
$this->translator = $translator;
/**
* @see vendor/mopa/bootstrap-bundle/Mopa/Bundle/BootstrapBundle/Resources/views/Form/fields.html.twig:653
* https://github.com/phiamo/MopaBootstrapBundle/pull/277
*/
/** @desc("(optional)") */
$translator->trans('(optional)');
}
}
因此,当运行php app/console translation:extract my_local
时,它会被提取并可以翻译:)