2012-06-07 5 views
1

나는 cakePHP 서적을 따라 내 사이트의 i18n 및 l10n을 설정합니다. 영어, 스페인어, 독일어가 있다고 가정 해 봅시다.CakePHP 현지화 문제

브라우저에는 대개 우선 순위별로 정렬 된 언어 목록이 있습니다. 목록의 첫 번째 위치에 내 사이트에 구성된 언어가 표시되면 정상적으로 작동합니다. 그러나 예를 들어 목록이 다음과 같은 경우 : 프랑스어, 독일어, 스페인어, 영어; 현지화가 실패하고 코드에서 사용한 i18n 식별자가 표시됩니다.

목록에 내 사이트가 제공 할 수있는 언어가 있기 때문에이 경우 페이지가 독일어로 번역되어 나타납니다. 이것은 완벽한 솔루션이 될 것입니다.하지만 적어도 브라우저 목록의 첫 번째 언어가 내 페이지에서 알려지지 않은 경우 기본 언어 (예 : 영어)를 구성 할 수 있기를 바랍니다.

나는 이것을 달성하기 위해 무엇을 할 수 있으며 코드를 어디에 넣어야합니까?

미리 감사드립니다.

+0

i18n 테이블을 살펴보면 다른 언어에 대한 항목이 있습니까? 모든 다른 언어의 값을 저장 했습니까? 또한, CakePHP에는 'localization'을위한 또 다른 방법이 있습니다. 즉, __() 함수를 사용하고 있습니다. 번역 – Katai

+0

번역을 확인하고 URL을 언어로 설정하면 영어가 기본으로 추가됩니다. 라우터 :: connect –

+0

@Katai, noob입니다. 이 점에서, i18n 테이블은 무엇입니까? 번역 할 항목을 정의하기 위해 코드에서 __() 함수를 사용하고 언어별로 .pot 및 .po 파일을 만듭니다. 그런 다음 첫 번째 브라우저 언어가 정의되면 응용 프로그램이 자동으로 l10n을 수행합니다. 내가했던 첫 번째 코드 수정은 몇 분 전에 게시 한 답변에서 설명합니다. – davidgnin

답변

3

글쎄, 나는 app/Config/bootstrap.php에서 다음을했다 :

$browserLangs = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); 
$find = 'eng'; 
foreach($browserLangs as $browserLang) { 
    $lang = substr($browserLang,0,2); 
    var_dump($lang); 
    if ($lang == 'en') { 
     $find = 'eng'; 
     break; 
    } else if ($lang == 'es') { 
     $find = 'spa'; 
     break; 
    } else if ($lang == 'ca') { 
     $find = 'cat'; 
     break; 
    } 
} 
Configure::write('Config.language', $find); 

에서 우리가 브라우저의 모든 언어 목록의 문자열을 가지고 Language 헤더에 동의합니다. 그런 다음 영어를 기본 언어로 정의하고 목록에서 다른 언어를 찾으려고합니다. 그것은 작동하지만, 때문에

나는 대답으로 이것을 넣어 그 더러운 이유는

    이 최선의 방법과 최적의 장소 인 경우 나도 몰라
  1. ,
  2. 이 매우 정적, 당신 언어를 하나씩 추가해야하고 다른 언어를 추가 할 때 알고리즘을 업데이트해야합니다. 가장 좋은 해결책은 케이크 응용 프로그램에 정의 된 로케일을 자동으로 검사 할 것이므로 요청하는 방법을 모르겠습니다.
  3. 아마도이 코드는 플러그인, 구성 요소 또는 이와 유사한 것으로 정의해야합니다.

아마도 누군가가이를 개선하거나 새로운 해결책으로 더 나은 해결책을 게시 할 수 있습니다.

0

작성된 .po 파일을 편집기 (예 :)와 함께 열면 여러 언어 버전을 만들 수 있습니다.

모든 언어에 대해 복수형을 변경하는 것을 잊지 마십시오. 독일어로는 nplurals=2; plural=(n != 1)입니다. 목록은 http://translate.sourceforge.net/wiki/l10n/pluralforms입니다.

그 후, 당신은 당신은 default.mo과 끝에 해당 폴더의 default.po 파일이 있어야합니다 app/Locale/deu/LC_MESSAGES/...

언어 파일을 저장해야합니다.