web-dev-qa-db-ja.com

messages.en.ymlでsymfony2フォームのラベルを翻訳する方法は?

フォームフィールドの翻訳を機能させようとしています。バンドルのRessourceフォルダーに_messages.en.yml_があります。

_test: it works
form:
    description: Add a description.
_

フォームフィールドのラベルをそれに応じて変換するEntityTypeでフォームを構築したいです。

_$builder->add(
    'description',
    null,
    array('label' => 'form.description', 'required' => false)
);
_

ただし、リテラル文字列_'form.description'_のみが表示され、予想される_Add a description._の翻訳は表示されません

翻訳サービスと_messages.en.yml_は、呼び出すことができるので正しくロードされます

var_dump($this->get('translator')->trans('test'));

コントローラーで翻訳結果を取得します。

文字列_'form.description'_を翻訳すべきものとして扱いたい場合、何が欠けていますか?

とにかくトランス関数を呼び出す必要があると思いますが、どうすれば自動的に一度にそれを行うことができますか?

25
k0pernikus

翻訳ドメインを明示的に設定する必要がありました

例えば

->add('description','hidden',
 array(
   "label"=>"form.description",
   "required"=>true,
   'translation_domain' => 'fooo'
 )
);

の場合には

fooo.de.xlf
38
john Smith

Symfony 3.1では、フォームタイプコンストラクターにトランスレーターを渡す必要はありません。次のようなフォームフィールド名によって自動的に変換されます。

コントローラーアクション:

$form = $this->createForm(LoginType::class);

FormTypeクラス:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('username',
            TextType::class, ['label_format' => '%name%',]
        );
}

そして、翻訳ファイル(yml):

username: Your translation for username field

それが誰かを助けることを願っています:)

フォームに翻訳を追加するのが最善のアイデアです-twig

{% trans_default_domain 'YourNameBundle' %}

{{'shot.tag.for.transle'|trans }}

バンドル内の翻訳ファイルについても覚えておく必要があります。別のバンドルからバンドルを拡張する場合(例-FosUserBundleを拡張する場合)、このバンドルから翻訳を取得するか、paramsでfunc transを使用できます

{{'shot.tag.for.transle'|trans({}, 'TranslationNameBundle') }}

素敵なローカライズを行います。

4
Moris Finkel

フランス語に翻訳したいとしましょう。次に、filename.en.xlffilename.fr.xlfがあります。

次に、description翻訳可能にする次のフォーム要素について説明します。

$builder->add(
    'description',
    null,
    array('label' => 'form.description', 'required' => false)
);

filename.en.xlf

<trans-unit id="17">
    <source>description</source>
    <target>description</target>
</trans-unit>

そして、フランス語の場合、filename.fr.xlf以下のように

<trans-unit id="17">
    <source>description</source>
    <target>fr descrip</target>
</trans-unit>

これが誰かに役立つことを願っています

1
mapmalith