我想在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?它可以?万岁!怎么样?
答案 0 :(得分:1)
以下是编辑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/about
或site.com/despre
路径正常工作。