2012-05-22 2 views
1

내 젠드 프레임 워크 응용 프로그램에서 gedmo translatable 확장 기능을 사용할 수 있습니다. 다음 코드는 ext_translations 테이블을 만들고 번역 된 기사를 테이블에 삽입한다는 의미입니다.교리 확장 (Gedmo) 번역 가능 - 현재 로케일을 기반으로 번역 된 엔티티를 표시하는 방법

$article = new \App\Entity\Article; 
$article->setTitle('my title in en'); 
$article->setContent('my content in en'); 
$this->_em->persist($article); 
$this->_em->flush(); 

//// first load the article 
$article = $this->_em->find('App\Entity\Article', 1 /*article id*/); 
$article->setTitle('my title in de'); 
$article->setContent('my content in de'); 
$article->setTranslatableLocale('de_de'); // change locale 
$this->_em->persist($article); 
$this->_em->flush(); 

// first load the article 
$article = $this->_em->find('App\Entity\Article', 1 /*article id*/); 
$article->setTitle('my title in es'); 
$article->setContent('my content in es'); 
$article->setTranslatableLocale('es_es'); // change locale 
$this->_em->persist($article); 
$this->_em->flush(); 

$article = $this->_em->getRepository('App\Entity\Article')->find(1/* id of article */); 
echo $article->getTitle(); 
// prints: "my title in en" 
echo $article->getContent(); 
// prints: "my content in en" 

위의 내용은 내가 코멘트에 포함 시켰던 것을 인쇄하고 인쇄합니다. 그러나 응용 프로그램 로캘을 es_ES로 변경하면 동일한 출력이 제공되며 로캘의 변경 사항을 알 수없는 것처럼 보입니다. 내가 여기서 무엇을 놓치고

public function _initLocale() { 
     $session = new Zend_Session_Namespace('myswaplocalesession'); 
     if ($session->locale) { 
      $locale = new Zend_Locale($session->locale); 
     } 

     $config = $this->getOptions(); 

     if (!isset($locale) || $locale === null) { 
      try { 
       $locale = new Zend_Locale(Zend_Locale::BROWSER); 
      } catch (Zend_Locale_Exception $e) { 
       $locale = new Zend_Locale($config['resources']['locale']['default']); 
      } 

     } 
     Zend_Registry::set('Zend_Locale', $locale); 

     echo $locale; 

     $translator = new Zend_Translate('gettext', APPLICATION_PATH . '/../data/lang/', 
         null, array('scan' => Zend_Translate::LOCALE_FILENAME, 'disableNotices' => 1)); 


     Zend_Registry::set('Zend_Translate', $translator); 
     Zend_Form::setDefaultTranslator($translator); 
    } 

: 내 부트 스트랩에서

, 그것은 다음과 같이 설정되어 있습니까?

답변

1

Gedmo에게 기본적으로 어떤 로케일을 사용해야하는지 알려줘야합니다.

당신이 사용하는 어떤 로케일 알고있을 때 당신은이 라인을 추가 할 수 있습니다

$listener = $this->getDoctrine()->getEventManager()->getListener(
    'Gedmo\Translatable\TranslatableListener' 
); 

$listener->setTranslatableLocale($locale); 
+0

안녕하세요, 저는이 아이디어를 좋아하지만이 오류를 얻을 : 잘못된 방법 "getDoctrine '메시지'Zend_Application_Bootstrap_Exception : 'catch되지 않은 예외 치명적인 오류' " 'in /var/www/testsite/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 605' – dimbo

+0

상당히 뒤죽박죽으로 난 부트 스트랩에서 이벤트 관리자의 인스턴스를 얻을 수있었습니다 (내 다른 질문 중 하나를 참조하십시오. 세부 사항), 아직 초기화되지 않았으므로 번역 가능한 리스너를 부트 스트랩에서 사용할 수 없습니다. 부트 스트랩에 너무 수렁에 빠지면 안되는 또 다른 방법이 있어야한다고 생각합니다. 나중에 레지스트리에서 로케일 값을 변환 할 수 있습니까? – dimbo