2013-11-27 3 views
1

Yii 프레임 워크를 사용하여 다국어 웹 사이트를 개발하고 있습니다. 지금은 영어와 프랑스어 버전이 있습니다. fr 폴더를 만들고 프랑스어 버전과 관련된 뷰 및 컨트롤러를 배치했지만 두 버전 모두 동일한 모델을 사용했습니다. 다국어 오류 메시지 표시

내 데이터베이스 테이블 구조 (기사 테이블)

은 다음과 같습니다

id, title_en, title_fr, title_ru, detail_en, detail_fr, detail_ru and  
so on. 

내가 직면하고 문제는 내가 프랑스에 있어야 프랑스어 버전의 오류 메시지처럼 각각의 언어로 사용자에게 오류 메시지를 표시 할 필요가있다 . 모든 언어에 대해 동일한 모델을 사용하는 동안 어떻게 할 수 있습니까?

어디에서 프랑스어 메시지를 입력해야합니까?

답변

0

당신은 다음과 같이 뭔가 CPhpMessageSource::loadMessages()을 재정의 할 수

protected function loadMessages($category,$language) 
{ 
    if ($category == 'yii') 
     return array(); 
    else 
     return parent::loadMessages($category,$language); 
} 

은 또한 당신은 언어를 변경할 수 있습니다, 적절하게 CApplication::language을 설정합니다. 이 작업은 수정 내가 갖는 경우, 나도 몰라

Yii::app()->language = 'fr'; 
+1

마지막 줄 Yii :: app() -> language = 'fr'; 일했다. 컨트롤러의 액션에서이 라인을 추가하고 마술처럼 작동했습니다. 모든 메시지가 원하는 lannguage에 나타납니다 –

+0

@MazIqbal 둘 다 필요하지 않습니다. 단 하나이면 충분합니다. – Harikrishnan

+0

@Harikrishnan 핵심 프레임 워크에서 번역을 제공하는 경우 왜 불필요한 코드로 기본 클래스를 재정의하겠습니까? OP가 주석에서 말했듯이, 애플리케이션 언어 설정을 제외하고는 귀하의 답변 중 어느 것도 필요하지 않습니다. Yii1 문서에 쓰여 있듯이 적절한 메시지를 제공하고 언어를 설정하기 만하면됩니다. – trejder

0

같이 런타임에 수행 할 수 있습니다,하지만 난 당신의 질문을 이해한다면, 당신의 문제는 이미 핵심 YII 1.x에서 엔진에 의해 해결된다 할 일이별로 없다.

  1. /protected/messages/fr/ 폴더에 (예를 app.php에 대한) 모든 파일을 만듭니다 상세

    , 당신은해야합니다.

  2. 응용 프로그램의 구성 배열에 'coreMessages'=>array('basePath'=>'../protected/messages'),을 입력하십시오. Yii 번역 시스템을 사용자 정의 된 번역본이있는 폴더로 라우트하십시오.

  3. 구성 배열에 'sourceLanguage'=>'en'을 입력하십시오. 응용 프로그램의 핵심 언어가 영어로 설정되어 있는지 확인하십시오.

  4. 번역문 (아래 참조)을 사용하여 파일 app.php을 채우십시오.

  5. 응용 프로그램의 일부를 Yii::t('app', 'string'); (아래 참조)으로 번역하십시오.

번역 파일 형식이어야합니다 :

return array 
(
    //Translations from Google Translate! :> I don't speak French at all! :> 
    'This page is not yet translated into your language.'=>'Cette page n'a pas encore été traduit dans votre langue.', 
    'Language'=>'Langue', 
    'read more'=>'en savoir plus' 
); 

따라서, 예를 들어,하지만 같은 블로그 목록보기 문자열 :

<?php Yii::t('app', 'read more'); ?> 

당신은에 응용 프로그램 언어를 설정하면 코드 (Yii::app()->language = 'fr';)로 강제 입력하거나 응용 프로그램 구성 배열 ('language'=>'fr')로 사전 설정하여가 표시되어야합니다 (코드 번호 Yii::app()->language = 'fr';). fr 10 위 또는 위에있는 read more 대신 10 (또는 번역 파일에 넣은 것)을 입력하십시오.

응용 프로그램의 언어가 영어로 설정되어 있거나 번역 문자열을 찾을 수없는 경우 으로 작성된 텍스트가 표시됩니다.

'Error no {code}:'=>'Erreur n {code}:' 
: (번역 파일)이 방법에서 완전한 영어 문자열을 사용하는 것이 매우 중요 등 'core.app.language'=>'Langue'

주처럼, "패턴"을 피하기 위해 이유는 당신은 또한 파라미터 플레이스 홀더를 사용할 수있는,이다 실제 매개 변수 값으로 대체됩니다

:

Yii::t('app', 'Error no {code}:', array('{code}'=>$code)); 

당신이 변수 값을 달리 일정한 메시지 텍스트를 제공 할 수있는이 방법.

"The Definitive Guide to Yii"에 큰 topic about internationalization이 있습니다. 이 문제에 대한 자세한 내용을 보거나 Yii 번역 메커니즘을 좀 더 고급 방법으로 사용하려는 경우이를 읽어야합니다.