Я разрабатываю приложение Zend Framework 2, и у меня проблемы с переводами. На самом деле в сценариях представления можно использовать помощник представления Translate
. Поскольку я определил «перевести» как исходное ключевое слово в Poedit ([Poedit menu] -> Catalogue -> Properties... -> Source keywords
), строки идентифицируются инструментом и добавляются в список перевода.
Но есть также некоторые строки в других местах, где я не могу использовать помощник представления/a, например. в классах формы или в навигации. Как этим управлять?
Некоторые идеи:
Создайте файл со списком таких строк. Пример: мы создаем файлы
navigation.i18n
,forms.i18n
и т. д. (или только один файл), определяем там все необходимые нам строки в общем синтаксисе Poedit, который мы добавили в списокSource keywords
(например, сtranslate
:translate('my label foo'), translate('my label bar')
и т. д.), и, наконец, добавляемi18n
в качестве исходный путь ([Poedit menu] -> Catalogue -> Properties... -> Source paths
). Мы также можем использовать расширение, которое уже определено как «Исходные пути».Класс, предоставляющий один (статический) метод
translate(...)
без какой-либо функциональности. Пример: Вместо'label' => 'foo'
мы используем'label' => \MyNamespace\Util\Translator::translate('foo')
Думаю, второй подход чище, и мне больше нравится. Мне не нужно дважды писать свой key sring и держать в голове то, что уже переведено/обновлено. Но может есть идеи получше?
Expression
:$select->columns(array('title' => new Expression('IFNULL(sports.title, "' . 'unassigned')));
- person automatix   schedule 13.04.2013$this->translate($sport->title)
. Но это будет возможно только в том случае, если ключевая строка уже добавлена в файл.po
. Это означает, что мне нужен доступ к Service Locator из моего класса таблицы. Ну, я могу передать его как аргумент конструктора, когда я создаю его объект в классеModule
, и использовать его непосредственно в классе Table. Но тогда мне нужно каждый раз заботиться о нем. - person automatix   schedule 13.04.2013