Cómo traducir las etiquetas en symfony2 formularios con mensajes.es.yml?

Estoy tratando de conseguir la traducción de los campos del formulario para el trabajo. He messages.en.yml en mi Paquete de Recursos a la carpeta.

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

Quiero crear un formulario en un EntityType que se traduce en las etiquetas de los campos de formulario en consecuencia.

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

Sin embargo, sólo la cadena literal 'form.description' se muestra, no a la espera de la traducción de Add a description.

El servicio de traducción y la messages.en.yml se cargan correctamente, como puedo llamar a

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

en un controlador y obtener la traducción de un resultado.

Lo que me estoy perdiendo cuando quiero tratar la cadena de 'form.description' como algo que debe ser traducido?

Supongo que tengo que llamar a la función de trans en ellos de todos modos, sin embargo, ¿cómo puedo hacer esto en una forma automática?

  • OK, raro. Ahora simplemente funciona. Yo no se como todavía sé lo que ha cambiado, pero voy a mirar en él. Sospecho que un extraño problema con la caché que persistió incluso después de cache:clear
  • En la actualidad teniendo el mismo problema. Alguna idea de qué lo causó?
  • Para mí, tengo la sospecha de que era un almacenamiento en caché de error. Si clear:cache no funciona, intenta purgar el dev caché de forma manual a través de rm -rf app/cache/dev/*. También, compruebe si tiene un error tipográfico en el yml-nombre. También podría ser un menor-vs-mayúsculas problema.
  • Fue el upvote de usted y lo hizo para solucionar el problema que se enfrenta? Si es así, he de añadir una respuesta.
  • Un fácil caer en esta trampa no es también de activarlo en la configuración: symfony.com/doc/current/book/translation.html#configuration
InformationsquelleAutor k0pernikus | 2014-01-20

4 Kommentare

  1. 38

    tenía que establecer explícitamente el dominio de traducción

    e.g

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

    en caso de

    fooo.de.xlf
    • para mí, por desgracia, este enfoque no funciona, pero la traducción se ha cargado. He comprobado esto con el trans función de la traducción ayudante El problema podría ser la forma en que uso la forma en la rama de la plantilla. {{ – form_label(el niño) – }}
  2. 6

    En symfony 3.1 Usted no necesita pasar traductor para formar el tipo de constructor. Será traducida automáticamente por el nombre del campo de formulario como este:

    Acción de controlador:

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

    FormType clase:

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

    Y su archivo de traducciones (yml):

    username: Your translation for username field

    Espero que ayude a alguien:)

    • Es una forma específica para imprimir el formulario requerido para hacer esto?
  3. 4

    Añadir la traducción en forma de es la mejor idea – porque si en la ramita mucho más fácil

    {% trans_default_domain 'YourNameBundle' %}
    
    {{'shot.tag.for.transle'|trans }}

    también debe recordar acerca de la traducción de archivos en el paquete,
    si usted extender el paquete de otro (por ejemplo, – que se extiende FosUserBundle)
    usted puede tomar el traducir de esta bundle o uso func trans con parámetros

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

    Tener una buena localización.

    • Esto funcionó muy bien para mí. Gracias!
  4. 1

    Vamos a decir que queremos traducir en francés. Entonces usted tiene nombre de archivo.es.xlf y nombre de archivo.fr.xlf.

    ahora para el siguiente elemento de formulario que desea hacer descripción traducible.

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

    por lo que en el nombre de archivo.es.xlf

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

    y para el francés, por lo que en el nombre de archivo.fr.xlf de la siguiente

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

    espero que esto ayude a alguien

    • No mostrar cómo traducir la etiqueta de formulario. Mostrar una etiqueta que se utiliza y los archivos de traducción se ha establecido, pero el complemento no se traduce de forma predeterminada y, especialmente, no se si tu mensaje de códigos en especial de archivos de dominio.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea