Проблема с функцией Zend translate () - PullRequest
1 голос
/ 09 декабря 2010

Я использую Zend Framework для многоязычного сайта.Перевод осуществляется с помощью Zend_Translate_Adapter_Gettext.Я готовлю файлы .mo с помощью poedit.

Проблема в том, что я установил два msgid, и у одного из них msgstr, идентичный другому 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"

Когда я использую этокод:

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

вывод такой:

bazbaz

Я полагаю, что если msgstr совпадает с другим msgid, он используется, как если бы он был msgid и, следовательно, переводитсяснова.Пожалуйста, исправьте меня, если мои рассуждения неверны.

Теперь я хотел бы знать, была ли у вас похожая проблема и как ее можно безболезненно обойти.

Мое текущее решение включает в себя изменение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"

и затем:

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

Это не является удовлетворительным решением, так как я работаю над порталом сообщества с ~ 10k файлами и не могу проверить всеиз-за конфликтов.

Если это пригодится:

  • Версия Zend Framework: 1.10.8
  • Версия poedit: 1.4.6
  • сайт работает на Apache 2.2.11 с PHP 5.3

[EDIT]

Благодаря Гордону я могу включить еще один фрагмент данных: тест с участием PHP gettext.Я использовал тот же тестовый файл .mo, включая пары ключ-значение «foo» -> «bar» и «bar» -> «baz».Код PHP был таким:

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

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

И результат:

barbaz

Так что это определенно не ошибка gettext.

1 Ответ

0 голосов
/ 07 февраля 2011

изменить порядок

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

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