Я разрабатываю приложение Zend Framework 2, имеющее проблему с переводами. На самом деле в сценариях вида a можно использовать помощник вида Translate
. Поскольку я определил «переводить» как ключевое слово source в Poedit ([Poedit menu] -> Catalogue -> Properties... -> Source keywords
), строки идентифицируются инструментом и добавляются в список трансакций.Что такое рекомендуемый способ/передовая практика для перевода строк в Poedit без ключевого слова источника?
Но есть и некоторые строки в других местах, где я не могу использовать помощник/view view, например. в классах классов или в навигации. Как это должно управляться?
Некоторые идеи:
Создайте файл со списком таких строк. Пример: мы создаем файлы
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')
Я думаю, второй appoach чист, и мне нравится больше. Мне не нужно писать мою ключевую строку дважды и держать в голове, что уже переведено/обновлено. Но, может быть, есть идеи?
U может получить доступ к переводчику во всем мире;) Просто введите переводчик или ServiceManager/ServiceLocator;) – Sam
@Sam О, это было бы здорово! Как я могу получить к нему доступ в классе модели/таблицы? Например. wenn используется выражение 'Expression':' $ select-> columns (array ('title' => new Expression ('IFNULL (sports.title, ".' unassigned ')));' – automatix
Я могу перевести строку в например,: $ this-> translate ($ sport-> title) '. Но это будет возможно только в том случае, если ключевая строка уже добавлена в файл' .po'. Это означает, что мне нужен доступ в Service Locator из моего класса таблицы. Ну, я могу передать его как аргумент конструктора, когда я создаю его объект в классе 'Module', и его использование выполняется непосредственно в классе Table. Но тогда мне нужно каждый раз принимать забота об этом. – automatix