Mor*_*en 9 php zend-framework zend-translate zend-navigation zend-route
我在Zend_Navigation,Zend_Translate和所需路由的组合方面遇到了一些困难.
我的站点导航是通过基于XML文件的Zend_Navigation完成的.我现在已经基于Zend_Translate添加了对站点的翻译,并添加到以下更改路由到引导程序:
protected function _initRoutes()
$config = new Zend_Config($this->getOptions());
$languages = array_keys($config->languages->toArray());
$zl = new Zend_Locale();
$lang = in_array($zl->getLanguage(), $languages)
? $zl->getLanguage() : 'en';
$zfc = Zend_Controller_Front::getInstance();
// add language to default route
$route = new Zend_Controller_Router_Route(
':lang/:module/:controller/:action/*',
array('controller'=>'index',
'action' => 'index',
'module'=>'default',
'lang'=>$lang));
$router = $zfc->getRouter();
$router->addRoute('default', $route);
$zfc->setRouter($router);
Run Code Online (Sandbox Code Playgroud)
然后我用preDispatc方法创建了一个View_Helper:
$language = $request->getParam('lang','');
if ($language !== 'en' && $language !== 'da')
$request->setParam('lang','en');
$language = $request->getParam('lang');
if ($language == 'en')
$locale = 'en_EN';
else
$locale = 'da_DK';
$zl = new Zend_Locale();
$zl->setLocale($locale);
Zend_Registry::set('Zend_Locale', $zl);
$translate = new Zend_Translate('csv', APPLICATION_PATH . '/configs/language/'. $language . '.csv' , $language);
Zend_Registry::set('Zend_Translate', $translate);
Run Code Online (Sandbox Code Playgroud)
现在,当我去:"site/en/module/controller/action"时,它运行正常.
当我去:"site/da/module/controller/action"时,翻译工作正常,但我的Zend_Navigation链接指向默认的'en'语言链接"site/en/module2/controller2 /"
我无法弄清楚你的at/da /语言.任何帮助都会得到满足.
亲切的问候,
莫滕
这并不能直接回答你的问题。但是 Zend_View_Helper_Navigation(导航视图助手)有一个 setTranslator() 方法,它将提供您添加到 Zend_Navigation 容器中的导航“页面”的隐式转换。
class MyModule_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initMyModuleNavigation()
{
$langSess = new Zend_Session_Namespace('language');
$translate = $langSess->translate;
$this->getApplication()->bootstrap('navigation');
$view = $this->getApplication()->getResource('view');
$navigationHelper = $view->getHelper('navigation');
$navigation = $navigationHelper->getContainer();
$navigationHelper->setTranslator($translate);
//...
}
Run Code Online (Sandbox Code Playgroud)
这使您不必为每个项目手动调用翻译
$navigation->addPages(array(
new Zend_Navigation_Page_Mvc(array(
'label' => $translate->_('Wiki'), //<-- This can be eliminated
'action' => 'index',
'controller' => 'article',
'module' => 'wiki',
'pages' => //...
Run Code Online (Sandbox Code Playgroud)
因为它会自动完成,因为 setTranslator() 已完成。