フォームフィールドの翻訳を機能させようとしています。バンドルの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'
_を翻訳すべきものとして扱いたい場合、何が欠けていますか?
とにかくトランス関数を呼び出す必要があると思いますが、どうすれば自動的に一度にそれを行うことができますか?
翻訳ドメインを明示的に設定する必要がありました
例えば
->add('description','hidden',
array(
"label"=>"form.description",
"required"=>true,
'translation_domain' => 'fooo'
)
);
の場合には
fooo.de.xlf
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') }}
素敵なローカライズを行います。
フランス語に翻訳したいとしましょう。次に、filename.en.xlfとfilename.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>
これが誰かに役立つことを願っています