2013-04-12 5 views
7

Ich bekomme nicht it! .. Kann bitte jemand erklären, wie man Formularetiketten übersetzt? Ein einfaches Beispiel wäre großartig.Wie übersetzt man Formular-Etiketten in Zend Framework 2?

Vielen Dank im Voraus!


Klasse Search \ Formular \ 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', 
      ), 
     )); 
     ... 
    } 
} 

View Skript /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. --> 

Die module/Application/config/module.config.php konfiguriert ist:

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' => ... 
); 

I edited auch meine Ansicht und verwenden Sie die FormLabel View Helfer:

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

Außerdem gedebuggt ich die FormLabel an der Stelle, wo die tranlator (Linien 116-120) verwendet wird - - scheint ok zu sein.

Aber es funktioniert immer noch nicht.


EDIT

Die (Test) Artikel für Etiketten, ich in die de_DE.po Datei manuell hinzugefügt werden tranlated. Das ZF2-Seitenproblem war eigentlich, dass ich $form->get('city')->getLabel() anstelle von $this->formlabel($form->get('city')) in diesem Skript verwendete.

Das Problem ist jetzt, dass die Etiketten nicht zur Datei de_DE.po hinzugefügt werden. Aber es ist kein ZF2-Problem mehr, also habe ich Rubens Antwort akzeptiert und eine neue Poedit-Frage eröffnet.

+1

Bitte fügen Sie einen Code von dem, was Sie im Moment haben. Es wird Ihnen leichter helfen und sehen, was das Problem ist. – Ruben

+0

Vielen Dank für eine schnelle Antwort! Ich habe jetzt den entsprechenden Code hinzugefügt. – automatix

Antwort

8

Statt mit:

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

Sie sollten die Formlabel View Helfer verwenden. Dieser Helfer verwendet Ihren Übersetzer automatisch beim Rendern, wenn Sie ihn in Ihren ServiceManager eingefügt haben. Wahrscheinlich haben Sie es in Ihrer Anwendung Modul module.config.php:

'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', 
      ), 
     ), 
    ), 

Sobald Sie die Formlabel View Helfer tun verwenden:

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

Und natürlich sicherstellen, dass Ihre Übersetzungen in Ihrem sind. Po-Datei.

+0

Die 'module.config.php' ist konfiguriert und jetzt habe ich auch meine Ansicht bearbeitet und benutze den' FormLabel' View Helper. Ich habe das 'FormLabel' an der Stelle, an der der Umsetzer verwendet wird, bereinigt (Zeilen [116-120] (https://github.com/zendframework/zf2/blob/master/library/Zend/Form/View/Helper) /FormLabel.php#L116)) - scheint in Ordnung zu sein. Aber es funktioniert immer noch nicht. – automatix

+0

Und Sie sind sicher, dass die Übersetzungen in Ihrer .po-Datei enthalten sind? Haben Sie überprüft, ob PoEdit die Werte für die Labels analysiert, und haben Sie sie in dem von Ihnen verwendeten Gebietsschema übersetzt? – Ruben

+0

Genau, es war das Problem. Siehe aktualisierte Antwort oben und meine andere Antwort [hier] (http://stackoverflow.com/questions/15969607/what-is-the-recomended-way-best-practice-to-poedit-translate-strings-without-a) . – automatix

1

@Ruben sagt richtig!

Me I PoEdit verwende meine * .mo-Dateien zu generieren und um sicherzustellen, dass alle Übersetzungen in der Datei erhalten, erstelle ich irgendwo (im Hinblick auf beispielsweise) eine Datei _lan benannt.phtml mit allen Text übersetzt werden:

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

Natürlich Poedit meine Keywords konfiguriert werden muss, finden. check this to how to configure it

+0

Schöne einfache Abhilfe. Vielen Dank! Gute Idee für den Fall, wenn ich es nicht funktioniere. – automatix

+1

mir etwas ähnliche Poedit verwenden, aber es gibt keine Notwendigkeit für eine zusätzliche Datei: https://coderwall.com/p/atvtbw – aimfeld

4

Ich denke, Ihr Problem ist, dass Sie kein Etikett von poedit (oder einem ähnlichen Werkzeug) erkannt werden, so müssen Sie sie manuell hinzufügen, um Ihre poedit Kataloge (.po)

zu Ihrem Label Saiten zu machen detektiert durch Tools wie poedit, müssen die Saiten in einem translate() Funktion oder _() verwendet werden (andere Funktion finden Sie im Katalog/Eigenschaften/Quellen Schlüsselwort hinzugefügt werden)

als _() Funktion ist nicht Benutzer in ZF2 (heute) so ein kleiner Hack ist, af hinzuzufügen Salbung wie dies in Ihrem index.php (keine Notwendigkeit, etwas zu ändern, auf diese Weise, in poedit params):

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

und in Ihrem Code, verwenden Sie es nur, wenn die Saiten außerhalb einer Funktion übersetzen sind

//... 
    $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', 
     ), 
    )); 
//... 

oder wie diese, wenn Sie es vorziehen,

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

HALLO @aromatix i Sprache Übersetzungen verwenden in zend 2 Lernprojekt, wenn ich verwende $ this-> add (array ( 'name' => "benutzername", 'typ' => 'Zend \ Form \ Element \ Text', 'optionen' => array ( 'label' => _ ('Ihr Benutzername'), // ich habe an dieser Stelle einen fatalen Fehler gefunden ), )); fataler Fehler: Aufruf zu undefinierter Funktion Incuser \ Form \ _() _() für übersetzen ein Formularbeschriftung geben Sie mir fatalen Fehler Ich benutze PHP 5.3.1 jetzt. Bitte helfen Sie mir, ich bin nicht in der Lage, dieses Problem zu lösen. –