Zend_Translate - Zend_Navigation和Routing组合问题!

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 /语言.任何帮助都会得到满足.

亲切的问候,

莫滕

Kur*_*erg 1

这并不能直接回答你的问题。但是 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() 已完成。