2013-08-07 11 views
17

Voglio tradurre un modulo creato con il formbuilder di symfony. Dato che non voglio un grande file di traduzione, è splitted up in "domini".Symfony2 - Imposta il dominio di traduzione per un intero modulo

Ora devo specificare il translation_domain per ogni campo modulo, altrimenti symfony cercherà nel file sbagliato. Questa opzione deve essere aggiunta a ogni campo e mi chiedo se c'è un modo per impostare questa opzione su un intero modulo?

codice di esempio io non sono felice con:

$builder->add(
    'author_name', 
    'text', 
    array('label' => 'Comment.author_name', 'translation_domain' => 'comment') 
)->add(
    'email', 
    'email', 
    array('label' => 'Comment.email', 'translation_domain' => 'comment') 
)->add(
    'content', 
    'textarea', 
    array('label' => 'Comment.content', 'translation_domain' => 'comment') 
); 

risposta

49

Tu hai quindi impostarla come opzione predefinita del modulo, aggiungere questo:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{  
    $resolver->setDefaults(array(
     'translation_domain' => 'comment' 
    )); 

} 

al tuo setDefaultOptions metodo, nella tua forma.

+0

Grazie. Totalmente dimenticato b/c mai avuto bisogno prima. –

+1

Che dire di un modulo creato senza una classe? – drskullster

+1

Ora è deprecato. Utilizzare invece il metodo configureOptions –

23

Il nome del metodo, in risposta Ahmed s' è ormai deprecato (dal Symfony 2.7), il modo in cui 2.7+ di farlo è:

/** 
* Configures the options for this type. 
* 
* @param OptionsResolver $resolver The resolver for the options. 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefault('translation_domain', 'messages'); 
} 

nello stesso modo di impostare le data_class impostazioni, ecc

Per fare ciò utilizzando solo il generatore di moduli, esiste un argomento options nel generatore di moduli. Dal controller, ad esempio:

$form = $this->createFormBuilder($entity, ['translation_domain' => 'messages'])->add(..)->getForm(); 

Se si utilizza il servizio FormFactory, questo sarebbe

$formFactory->createBuilder('form', $entity, ['translation_domain' => 'messages']); 
2

O nel caso si utilizza namedBuilder della fabbrica che sarebbe:

$formBuilder = $this->get('form.factory')->createNamedBuilder('myForm', 'form', $data, array(
    'translation_domain' => 'forms', 
)); 
0

Symfony 3

/** 
* Configures the options for this type. 
* 
* @param OptionsResolver $resolver The resolver for the options. 
*/ 
public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'translation_domain' => 'forms', 
     // Add more defaults if needed 
    )); 
} 
Problemi correlati