4

必須ではないフォームタイプがいくつかあります。フォームのラベルはローカライズする必要がありますが、それは簡単です。

ただし、特定のフォーム タイプを として構成すると'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.*"
},
4

2 に答える 2

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 を設定する必要があります。正しい実装では、'messages' へのフォールバックを使用していました。

...
<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 によるデフォルトのフォーム タイプのオーバーライドは、こちらで確認できます。

または、単一のフォームでブロックをオーバーライドすることにより、オプションの文字列を削除できます

{% form_theme form _self %}

{% block label_asterisk %}
    {% if required %}
        {% if render_required_asterisk %}
             <span>*</span>
        {% endif %}
    {% endif %}
{% endblock label_asterisk %}

フォーム要素のオーバーライドの詳細については、こちらの回答を参照してください。

于 2013-06-14T07:23:37.393 に答える
0

バンドルのリポジトリで (オプション) #277 の問題の翻訳を許可するを参照してください。このコードは、この質問の回答が受け入れられてから大幅に変更されました。

現在、次のtranslation_domainように使用しています。

{%- if render_optional_text %}&nbsp;<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と、抽出されて翻訳できます:)

于 2015-08-11T23:15:16.800 に答える