Перевод сегментов маршрута с помощью адаптера gettext ZF - PullRequest
2 голосов
/ 23 сентября 2011

Я хочу попробовать переводы маршрутов в 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? Оно может? Ура! Как?

1 Ответ

1 голос
/ 24 сентября 2011

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

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

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

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

2. Видите, что '@ about' string? Это путь, который скоро будет переведен. Так как же вам перевести строку, чтобы 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 пути работают.

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

...