it-swarm.com.de

Wie übersetze ich Labels in symfony2-Formularen mit messages.en.yml?

Ich versuche, die Übersetzung von Formularfeldern zum Laufen zu bringen. Ich habe messages.en.yml Im Ressourcenordner meines Bundles.

test: it works
form:
    description: Add a description.

Ich möchte ein Formular in einem EntityType erstellen, das die Beschriftungen der Formularfelder entsprechend übersetzt.

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

Es wird jedoch nur die Literalzeichenfolge 'form.description' Angezeigt, nicht die erwartete Übersetzung von Add a description..

Der Übersetzungsdienst und der messages.en.yml Werden korrekt geladen, wie ich anrufen kann

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

in einem Controller und das übersetzte Ergebnis erhalten.

Was fehlt mir, wenn ich den String 'form.description' Als etwas behandeln möchte, das übersetzt werden soll?

Ich nehme an, ich muss die Trans-Funktion auf jeden Fall aufrufen, aber wie kann ich es auf einmal automatisch machen?

25
k0pernikus

ich musste die übersetzungsdomäne explizit setzen

z.B

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

im Falle von

fooo.de.xlf
38
john Smith

In Symfony 3.1 müssen Sie den Übersetzer nicht an den Formulartypkonstruktor übergeben. Es wird automatisch mit dem Namen des Formularfelds wie folgt übersetzt:

Controller-Aktion:

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

FormType-Klasse:

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

Und Ihre Übersetzungsdatei (yml):

username: Your translation for username field

Hoffe es wird jemandem helfen :)

Übersetzung in Formular hinzufügen für ist die beste Idee - weil gefunden, wenn in twig viel einfacher

{% trans_default_domain 'YourNameBundle' %}

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

außerdem müssen Sie sich an die Übersetzungsdatei in Ihrem Bundle erinnern. Wenn Sie ein Bundle von einem anderen erweitern (Beispiel - Sie erweitern FosUserBundle), können Sie die Übersetzung von diesem Bundle übernehmen oder func trans mit params verwenden

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

Habe eine nette Lokalisierung.

4
Moris Finkel

Angenommen, Sie möchten ins Französische übersetzen. Dann haben Sie filename.en.xlf und filename.fr.xlf.

nun möchten Sie für das folgende Formularelement description übersetzbar machen.

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

also in der filename.en.xlf

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

und für Französisch, so in der filename.fr.xlf wie unten

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

hoffe, das wird jemandem helfen

1
mapmalith