2009-07-28 4 views
5

필자는 항상 gettext에 대해 들었습니다. 제공된 문자열 인수를 기반으로 번역을 조회하는 일종의 유닉스 명령 인 것을 알고 있고 .pot 파일을 생성하지만 누군가가 평신도의 관점에서이 사실을 어떻게 설명 할 수 있습니까? 웹 프레임 워크에서?gettext를 사용하여 PHP에서 i18n에 대한 지원을 추가 하시겠습니까?

몇 가지 기존 프레임 워크에서 해왔 던 방법을 살펴볼 수는 있지만 평신도의 설명은 도움이 될 것입니다. 사실 내 솔루션을 제공하기 위해 실제로 조사하기 전에 그림을 조금 더 명확하게 할 수 있기 때문입니다.

답변

12

gettext 시스템은 동일한 문장에 대해 다른 언어로 번역 된 소스 텍스트 파일에서 생성 된 2 진 파일 세트에서 문자열을 반향 출력합니다.

조회 키는 "기본"언어의 문장입니다. 소스 코드에서

당신이 키와 번역 된 버전과 해당 텍스트 파일이 각 언어에 대해

echo _("Hello, world!"); 

뭔가를해야합니다 (printf와 기능을 사용할 수 있습니다 % s을 (를) 참고)

french 
msgid "Hello, world!" 
msgstr "Salut, monde!" 
msgid "My name is %s" 
msgstr "Mon nom est %s" 

italian 
msgid "Hello, world!" 
msgstr "Ciao, mondo!" 
msgid "My name is %s" 
msgstr "Il mio nome è %s" 

당신이 당신의 현지화를 만들기 위해 통과해야하는 주요 단계입니다

  • 모든 텍스트 출력은 gettext를 기능 사용 (gettext에()를 ngettext() _())
  • 사용에서 xgettext (* nix에서 스크립트) 당신의 PHP 파일을 구문 분석하고베이스와 .po 텍스트 파일
  • 사용 poedit에를 만들어야합니다 와 .po 파일
  • 사용 msgfmt에서 (* nix에서 스크립트)에와 .po 파일에서 바이너리 .mo 파일을 만들려면을 번역 텍스트를 추가
  • 같은 디렉토리 구조에 .mo 파일을 넣어

로케일/de_DE/LC_MESSAGES/myPHPApp.mo

로케일/en_EN/LC_MESSAGES/myPHPApp.mo

로케일/it_IT/LC_MESSAGES/myPHPApp.mo

다음은 PHP에서

예를 사용할 필요가 로케일을 설정해야합니다 PHP 스크립트 설명서는 PHP 매뉴얼에서 항상

<?php 
// Set language to German 
setlocale(LC_ALL, 'de_DE'); 

// Specify location of translation tables 
bindtextdomain("myPHPApp", "./locale"); 

// Choose domain 
textdomain("myPHPApp"); 

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now 

// Print a test message 
echo gettext("Welcome to My PHP Application"); 

// Or use the alias _() for gettext() 
echo _("Have a nice day"); 
?> 

좋은 튜토리얼

+0

그러나 위의 대한 here을 찾아 그 부분에 대해 매우 분명하다 PHP 매뉴얼 예제는 주어진 문자열을 번역하지 않는 것 같습니다. 이 예제를 가지고 할 일이 있습니까? –

관련 문제