使用ZF的gettext适配器转换路径段

时间:2011-09-23 06:34:06

标签: zend-framework gettext zend-route zend-translate

我想在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 个答案:

答案 0 :(得分:1)

嗯,我的mo都搞砸了。所以代码没有问题。

以下是编辑mo文件的方法,以便路径可以翻译它(我假设您的ZF i18n正在工作 - 翻译,区域设置等):

<强> 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。现在用poEdit打开你的po文件。你会看到一个新的字符串(很惊讶,嗯?)。编译此po以获取ZF可以使用的新的闪亮mo文件。

<强> 4。现在我的site.com/aboutsite.com/despre路径正常工作。

More info here.