2014-01-20 6 views
22

Ich versuche, die Übersetzung von Formularfeldern in Arbeit zu bekommen. Ich habe messages.en.yml in meinem Bundle Ressource Ordner.Wie übersetzt man Etiketten in Symfony2-Formularen mit messages.en.yml?

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

Ich möchte ein Formular in einem EntityType bauen, die entsprechend die Etiketten der Formularfelder übersetzt.

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

Doch nur die Zeichenkette 'form.description' wird, nicht die erwartete Übersetzung von Add a description.

Der Übersetzungsdienst und die messages.en.yml geladen werden korrekt angezeigt, wie ich

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

in einem anrufen Controller und erhalten Sie das übersetzte Ergebnis.

Was fehlt mir, wenn ich die Zeichenfolge 'form.description' als etwas behandeln möchte, das übersetzt werden soll?

Ich nehme an, ich muss die trans-Funktion trotzdem aufrufen, aber wie kann ich es automatisch machen?

+1

OK, komisch. Jetzt funktioniert es einfach. Ich weiß noch nicht, was sich geändert hat, aber ich werde mich darum kümmern. Ich vermute ein seltsames Cache-Problem, das auch nach dem Cache bestehen bleibt: clear – k0pernikus

+0

Derzeit das gleiche Problem. Irgendeine Idee, was es verursacht hat? – ferdynator

+1

@ferdynator Für mich vermute ich, dass es sich um einen Caching-Fehler handelte. Wenn 'clear: cache' nicht funktioniert, versuchen Sie, den dev-Cache manuell über' rm -rf app/cache/dev/* 'zu löschen. Überprüfen Sie auch, ob Sie einen Tippfehler im Yml-Name haben. Es könnte auch ein niedrigeres versus ein großes Problem sein. – k0pernikus

Antwort

33

ich hatte ausdrücklich die Übersetzung Domain

zB auf

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

bei

fooo.de.xlf 
+0

für mich leider hat dieser Ansatz nicht funktioniert, aber die Übersetzung wurde geladen . Ich habe dies mit der Trans-Funktion des Übersetzungshelfers überprüft. Das Problem könnte die Art sein, wie ich das Formular in der Zweigvorlage verwende. {{- form_label (Kind) -}} –

3

Übersetzung hinzufügen in Form für ist beste Idee - weil viel, wenn in Zweig gefunden mehr einfach

{% trans_default_domain 'YourNameBundle' %} 

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

Sie müssen auch über Übersetzungsdatei in Ihrem Bündel erinnern, wenn Sie Bündel von einem anderen erweitern (Beispiel - Sie erstreckt FosUserBundle) Sie können trans mit params aus diesem Bündel oder Verwendung func nehmen übersetzen

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

Haben eine schöne Lokalisierung.

+0

Das hat gut für mich funktioniert. Vielen Dank! –

0

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

jetzt für das folgende Formularelement, das Sie machen möchten Beschreibung übersetzbar.

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

so im filename.en.xlf

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

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

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

Hoffnung dies für jemand helfen

+0

Sie zeigen nicht, wie Sie das Formularlabel tatsächlich übersetzen. Sie zeigen ein verwendetes Label und die zu setzenden Übersetzungsdateien an, aber das Add wird standardmäßig nicht übersetzt, insbesondere dann nicht, wenn sich Ihre Nachrichtencodes in speziellen Domain-Dateien befinden. – RichieHH

5

In symfony 3.1 Sie brauchen keine Übersetzer passieren Typkonstruktor zu bilden.

Aktion

Controller::

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

Formtype Klasse: Es wird automatisch durch Formularfeldname wie folgt übersetzt

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

Und Ihre Übersetzungen Datei (yml):

username: Your translation for username field 

Hoffe, es wird jemandem helfen :)

+0

Gibt es eine spezielle Methode zum Drucken des dafür erforderlichen Formulars? –