Перевод сегментов маршрута с помощью адаптера ZF gettext

Я хочу опробовать переводы маршрутов в Zend Framework, но я использую адаптер gettext, и в большинстве руководств есть адаптер перевода PHP, поэтому у меня проблемы с его работой.

В основном Bootstrap.php у меня есть метод, в котором я задаю маршруты:

$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();

$translator = Zend_Registry::get('Zend_Translate');
Zend_Controller_Router_Route::setDefaultTranslator($translator);

$routerRoute = new Zend_Controller_Router_Route('@about',
     array(
      'module'     => 'default',
      'controller' => 'index',
      'action'     => 'about'
    )
);
$router->addRoute('about', $routerRoute);

Это работает для пути /about. Я вставлю код, в котором я установил Zend_Translate, но он в основном загружает файл *.mo в зависимости от языка текущего сеанса:

$langParam = $this->getSessionLang();

$localeString = $languages[$langParam];
$locale       = new Zend_Locale($localeString);

$moFilePath = $langFolder . $langParam . '.mo';
if (!file_exists($moFilePath)) {
    throw new Zend_Exception('File does not exist: ' . $moFilePath);
}

$translate = new Zend_Translate(
        array(
            'adapter'        => 'gettext',
            'content'        => $moFilePath,
            'locale'         => $locale,
            'ignore'         => array('.'), // ignore SVN folders
            'disableNotices' => ('production' === APPLICATION_ENV) // disable notices in Production
            )
        );

Zend_Registry::set('Zend_Translate', $translate);
Zend_Registry::set('Zend_Locale'   , $locale); 

Это, конечно, называется prior маршрутизацией.

Мой вопрос: можно ли использовать gettext в качестве адаптера перевода для маршрута, потому что я не могу понять, как я могу поймать строку @about, скажем, с помощью poEdit? Оно может? Ура! Как?


person nevvermind    schedule 23.09.2011    source источник


Ответы (1)


Ну, у меня все испортилось. Так что с кодом проблем нет.

Вот как вы редактируете свои файлы mo, чтобы маршрут мог их переводить (я предполагаю, что у вас работает ZF i18n - Translate, Locale и тому подобное):

1. Помните это?

$routerRoute = new Zend_Controller_Router_Route('@about',
     array(
      'module'     => 'default',
      'controller' => 'index',
      'action'     => 'about'
    )
);

2. Видите эту строку '@about'? Это путь, который скоро будет переведен. Так как же перевести строку, чтобы poEdit ее уловил? Что ж, вы этого не сделаете; во всяком случае, не с помощью poEdit. Вы вручную редактируете .po file:

#ro.po
msgid  "about"
msgstr "despre"

#en.po
msgid  "about"
msgstr "about"

Msgid должен соответствовать строке вашего пути (за вычетом строки '@' ofc).

3. Теперь откройте свой po-файл с помощью poEdit. Вы увидите новую строку (удивлен, а?). Скомпилируйте этот po, чтобы получить новый блестящий mo файл, который может использовать ZF.

4. Теперь мои site.com/about или site.com/despre пути работают.

Подробнее здесь .

person nevvermind    schedule 24.09.2011