2013-04-12 22 views
7

Non ricevo it! .. Può piacere qualcuno spiegare, come tradurre le etichette dei moduli? Un semplice esempio sarebbe fantastico.Come tradurre le etichette dei moduli in Zend Framework 2?

Grazie in anticipo!


classe Search \ Form \ CourseSearchForm

... 

class CourseSearchForm extends Form { 

    ... 

    public function __construct(array $cities) { 
     parent::__construct('courseSearch'); 
     ... 
     $this->add(array(
      'name' => 'city', 
      'type' => 'Zend\Form\Element\Select', 
      'options' => array(
       'label' => 'Stadt', 
       'value_options' => $this->cities, 
       'id' => 'searchFormCity', 
      ), 
     )); 
     ... 
    } 
} 

vista sceneggiatura /module/Search/view/search/search/search-form.phtml

<?php echo $this->form()->openTag($form); ?> 
<dl> 
    ... 
    <dt><label><?php echo $form->get('city')->getLabel(); ?></label></dt> 
    <dd><?php echo $this->formRow($form->get('city'), null, false, false); ?></dd> 
    ... 
</dl> 
<?php echo $this->form()->closeTag(); ?> 
<!-- The formRow(...) is my MyNamespace\Form\View\Helper (extends Zend\Form\View\Helper\FormRow); the fourth argument of it disables the label. --> 

module/Application/config/module.config.php è configurato:

return array(
    'router' => ... 
    'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 
    'translator' => array(
     'locale' => 'de_DE', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 
    'controllers' => ... 
    'view_manager' => ... 
); 

ho anche modificato il mio visualizzare e utilizzare il FormLabel view helper:

<dt><label><?php echo $this->formLabel($form->get('city')); ?></label></dt> 

Inoltre ho il debug del FormLabel nel luogo, dove viene utilizzato il tranlator (linee 116-120) - - sembra essere OK.

Ma non funziona ancora.


EDIT

L'(test) articoli per le etichette, ho aggiunto al file de_DE.po manualmente, sono tranlated. Il problema di ZF2 era in realtà, che stavo usando $form->get('city')->getLabel() invece di $this->formlabel($form->get('city')) nello script di visualizzazione th.

Il problema è ora che le etichette non vengono aggiunte al file de_DE.po. Ma non è più un problema ZF2, quindi ho accettato la risposta di Ruben e ho aperto una nuova domanda su Poedit.

+1

Si prega di aggiungere del codice di quello che si ha attualmente. Sarà più facile aiutarti e vedere qual è il problema. – Ruben

+0

Grazie per una risposta veloce! Ho aggiunto il codice rilevante ora. – automatix

risposta

8

Invece di usare:

<?php echo $form->get('city')->getLabel(); ?> 

si dovrebbe usare l'helper vista formlabel. Questo helper utilizza automaticamente il tuo traduttore durante il rendering se lo hai inserito nel tuo ServiceManager. Molto probabilmente lo avrete nel modulo module.config.php dell'applicazione:

'service_manager' => array(
     'factories' => array(
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 

    'translator' => array(
     'locale' => 'en_US', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 

Una volta che si utilizza la vista formlabel aiutante:

echo $this->formLabel($form->get('city')); 

E naturalmente assicurarsi che le traduzioni sono nel vostro. file po.

+0

Il 'module.config.php' è configurato e ora ho anche modificato la mia vista e uso l'helper' FormLabel'. Ho eseguito il debug di 'FormLabel' nel posto in cui viene utilizzato il tranlator (righe [116-120] (https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper /FormLabel.php#L116)) - sembra essere OK. Ma non funziona ancora. – automatix

+0

E sei sicuro che le traduzioni siano nel tuo file .po? Hai controllato se PoEdit analizza i valori per le etichette e li hai tradotti nel locale specifico che stai utilizzando? – Ruben

+0

Esattamente, era il problema. Vedi risposta sopra aggiornata e la mia altra risposta [qui] (http://stackoverflow.com/questions/15969607/what-is-the-recomended-way-best-practice-to-poedit-translate-strings-without-a) . – automatix

1

@Ruben dice giusto!

Me Io uso PoEdit per generare i miei file * .mo e per essere sicuri di ottenere tutte le traduzioni nel file, creo qualche parte (in vista per esempio) un file chiamato _lan.phtml con tutto il testo da tradurre:

<?php echo $this->translate("My label"); 
... ?> 

Naturalmente, Poedit deve essere configurato per trovare le mie parole chiave. controllare questo to how to configure it

+0

Una soluzione semplice e semplice. Grazie! Buona idea per il caso, se non lo farò funzionare. – automatix

+1

faccio qualcosa di simile utilizzando Poedit, ma non c'è bisogno di un file in più: https://coderwall.com/p/atvtbw – aimfeld

4

Credo che il problema è che l'etichetta non vengono rilevati dal poedit (o un attrezzo simile), in modo da avere per aggiungerli manualmente ai cataloghi poedit (.po)

per fare le corde etichetta rilevato da strumenti come poEdit, le stringhe devono essere utilizzati all'interno di un translate() funzione o _() (altra funzione può essere aggiunto in catalogo/proprietà/fonti parola chiave)

come _() La funzione non è utente in ZF2 (oggi), quindi un piccolo hack è aggiungere unzione come questo nel tuo index.php (non c'è bisogno di modificare nulla, in questo modo, in poedit params):

// in index.php 
function _($str) 
{ 
    return $str; 
} 

e nel codice, basta usare quando le corde sono al di fuori di una funzione translate

//... 
    $this->add(array(
     'name' => 'city', 
     'type' => 'Zend\Form\Element\Select', 
     'options' => array(
      'label' => _('myLabel') , // <------ will be detected by poedit 
      'value_options' => $this->cities, 
      'id' => 'searchFormCity', 
     ), 
    )); 
//... 

o come questo, se si preferisce

$myLabel = _('any label string'); // <--- added to poedit catalog 
//... 
     'options' => array(
      'label' => $myLabel , 
      'value_options' => $this->cities, 
      'id' => 'searchFormCity', 
     ), 
+0

HI @aromatix sto utilizzando traduzioni in altre lingue in Zend 2 progetto di apprendimento quando sto usando $ this-> add (array ( 'name' => "username", 'type' => 'Zend \ Form \ Element \ Text', 'options' => array ( 'label' => _ ('Il tuo nome utente'), // ho riscontrato un errore fatale in questa posizione ), )); errore fatale: chiamata a funzione non definita Incuser \ Form \ _() _() per tradurre un'etichetta di modulo mi dà errore irreversibile sto usando php 5.3.1 in questo momento. Per favore aiutatemi, non sono in grado di capire questo problema. –

Problemi correlati