2009-10-14 2 views
2

내 응용 프로그램에 Zend_Navigation, Zend_Translate를 구현했습니다. 라우팅은 Bootstrap.php에서 다음과 같이 설정됩니다. 내가젠드 프레임 워크 : Zend_translate 및 라우팅 관련 문제

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { 
     $this->createLangUrl($request); 
     $this->_language = $request->getParam('lang'); 
     if ((!isset($this->_language)) || !in_array($this->_language, $this->_languagesArray)) { 
      $this->_language = 'en_US'; 
      $request->setParam('lang', 'en_US'); 
     } 
     $file = APPLICATION_PATH.$this->_directory.$this->_language.'.csv'; 
     $translate = new Zend_Translate('csv', $file, $this->_language); 
     Zend_Registry::set('Zend_Translate', $translate); 
     $zl = Zend_Registry::get('Zend_Locale'); 
     $zl->setLocale($this->_language); 
     Zend_Registry::set('Zend_Locale', $zl); 


//  $fc = Zend_Controller_Front::getInstance(); 
//  $router = $fc->getRouter(); 
//  $route = new Zend_Controller_Router_Route(':lang/:module/:controller/:action/*', array(
//   'lang'=>$this->_language, 'module'=>'default', 'controller'=>'index', 'action'=>'index' 
//  )); 
//  $router->addRoute('default', $route); 
//  $fc->setRouter($router); 

    } 

는 무엇 일 언어 PARAM의 검사를 수행 할 dispatchLoopStartup 방법을 정의 LaunguageSetup 플러그인에

$fc = Zend_Controller_Front::getInstance(); 
     $zl=new Zend_Locale(); 
     Zend_Registry::set('Zend_Locale',$zl); 
     $lang=$zl->getLanguage().'_'.$zl->getRegion(); 
     $router = $fc->getRouter(); 
     $route = new Zend_Controller_Router_Route(':lang/:module/:controller/:action/*', 
     array(
    'lang'=>$lang, 'module'=>'default', 'controller'=>'index', 'action'=>'index' 
)); 
$router->addRoute('default', $route); 
$fc->setRouter($router); 
$fc->registerPlugin(new Plugin_LanguageSetup()); 

언어는 항상 기본 값이되면, '랭'PARAM 랭 기본 없다 값을 직접 입력 할 수 있습니다. ie/en_US/module/controller/action/항상 기본 Zend_locale();

내가 고칠 수있는 유일한 방법은 플러그인에서 경로를 다시 설정하고 올바른 언어 값을 기본값으로 삽입하는 것입니다. 어떤 아이디어?

답변

0

시도하고이 행하기 전에이 개 바르 (_language, _languagesArray)의 위해서 var_dump을

if ((!isset($this->_language)) || !in_array($this->_language, $this->_languagesArray)) { 

난 당신이 다음 PARAMS을 dispatchLoopStartup에을 yor 플러그인을 넣고 있기 때문에 거기가 문제가 될 것을 의심 채워지지 않을 수도 있습니다. 내 플러그인을 routeShutdown에 올려 놓습니다. 내 implementation of the languange plugin을 참조하십시오.

+0

나는 어떤 이유로 든 print_r 경로가 고정되어 있다고 생각했다. 하지만 내 Zend_Navigation은 여전히 ​​기본 'lang'을 사용합니다. 당신의 샘플을 살펴 보았습니다.이 설정으로 Zend_Navigation을 사용 했습니까? 어떤 트릭이 있는지 궁금합니다. $ view-> navigation() -> Menu()를 사용하면 항상 기본 'lang'이 출력됩니다. 내비게이션 데이터를 저장하기 위해 xml 파일을 사용하고 있습니다. – Dan

0

부분 솔루션의 정렬.

dispatchLoopStartup

에 재정의하고 기본 'LANG'값을 변경하여 다시 '가짜'언어 PARAM 경로를 덮어보다

$fc = Zend_Controller_Front::getInstance(); 
$router = $fc->getRouter(); 
$router->setGlobalParam('lang',$this->_language); 

더 추가합니다.

완벽하지 않습니다. Zend_router가 'lang'매개 변수를 선택하여 Zend_navigation-> menu();