2010-12-09 6 views
1

Ich benutze Zend Framework für eine mehrsprachige Website. Das Übersetzen erfolgt mit Zend_Translate_Adapter_Gettext. Ich bereite die .mo Dateien mit poedit vor.Zend translate() Funktionsproblem

Das Problem ist, wenn ich zwei msgids eingerichtet und man hat ein msgstr identisch mit dem anderen msgid:

#: application/modules/foobar/views/scripts/index.phtml:1 
msgid "foo" 
msgstr "bar" 
#: application/modules/foobar/views/scripts/index.phtml:2 
msgid "bar" 
msgstr "baz" 

Wenn ich diesen Code verwenden:

<?php echo $this->translate('foo'); ?> 
<?php echo $this->translate('bar'); ?> 

der Ausgang dieses ist:

Ich denke, wenn die msgstr mit einer anderen msgid zusammenfällt, wird es verwendet, als wäre es eine msgid und t hus wird erneut übersetzt. Bitte korrigieren Sie mich, wenn meine Argumentation falsch ist.

Nun würde ich gerne wissen, ob Sie ein ähnliches Problem hatten und wie man es schmerzfrei umgehen kann.

Meine aktuelle Lösung beinhaltet eine Änderung der msgids:

#: application/modules/foobar/views/scripts/index.phtml:1 
msgid "KEY_FOO" 
msgstr "bar" 
#: application/modules/foobar/views/scripts/index.phtml:2 
msgid "KEY_BAR" 
msgstr "baz" 

und dann:

<?php echo $this->translate('KEY_FOO'); ?> 
<?php echo $this->translate('KEY_BAZ'); ?> 

Dies ist keine befriedigende Lösung, da ich auf einem Community-Portal mit ~ 10k-Dateien und ich arbeite kann nicht wirklich alles für Konflikte überprüfen.

Wenn es irgend:

  • Zend Framework Version: 1.10.8
  • poedit Version: 1.4.6
  • Website läuft auf Apache 2.2.11 mit PHP 5,3

[EDIT]

Dank Gordon kann ich ein weiteres Stück Daten einbeziehen: einen Test mit PHP . Ich verwendete die gleiche Test-.mo-Datei, einschließlich "foo" -> "bar" und "bar" -> "baz" Schlüssel-Wert-Paare. Der PHP-Code war:

<?php 
    putenv('LC_ALL=pl_PL'); 
    setlocale(LC_ALL, 'pl_PL'); 
    bindtextdomain("pl", "."); 
    textdomain("pl"); 

    echo gettext("foo"); 
    echo gettext("bar"); 
?> 

Und das Ergebnis:

barbaz 

es nicht gettext ‚Schuld So ist auf jeden Fall.

+0

dies http://framework.zend.com/issues/browse/ZF-10418 in Zusammenhang stehen könnten – Gordon

+0

können Sie einen Test mit PHP zu tun [ 'gettext'] (http : //de3.php.net/manual/en/function.gettext.php) um auszuschließen, dass dies normales Verhalten ist. – Gordon

+0

@Gordon, vielen Dank für Ihren Kommentar, ich werde meinen Beitrag in einer Minute bearbeiten, um die Gettext-Testergebnisse einzubeziehen. – mingos

Antwort

0

Änderung der Reihenfolge

#: application/modules/foobar/views/scripts/index.phtml:2 
msgid "bar" 
msgstr "baz" 

#: application/modules/foobar/views/scripts/index.phtml:1 
msgid "foo" 
msgstr "bar"