ReSet ORIGINAL
[PHP] PHP에서 gettext를 이용한 다국어 처리 목록
  • 글쓴이 : IN-BEST 작성일 : 13-09-16 13:34 조회 : 8,099
\\ Source Explanation
PHP에서 gettext를 이용한 다국어 처리
Source Code

PHP를 처음 시작하는 입장에서 로컬라이징 업무를 하게 되어 어떻게 하면 가장 효율적으로 이 부분을 해결할 수 있을까 하고 찾아보던 차에 워드프레스에도 사용하고 PHP에서도 기본 익스텐션으로 제공하는 gettext를 이용해 다국어 처리를 하게 되었다. 다른것도 그렇겠지만 막상 적용하고 나면 별것아닌데 그 과정을 넘어가는건 삽질의 연속인지라 정리해 본다.

1. php.ini에서 'extension=php_gettext.dll' 를 검색하고 앞에 세미콜론이 있다면 제거한다. 리눅스에서 운영할 때는 gettext 모듈을 설치해야 한다.(안해봤다...)

2. 다국어 관련한 부분의 디렉토리는 \locale\ko-KR\LC_MESSAGES 형태로 배열한다. 일본어라면 \locale\ja-JP\LC_MESSAGES 가 된다. 언어에 따른 문자열은 브라우저의 언어 설정에 있는 문자열을 사용하면 된다.

3. LC_MESSAGES 아래에는 gettext가 사용할 .mo 파일이 위치한다. 편의상 .po파일도 같이 둔다. po/mo 파일을 생성하는 과정은 다음 글을 참고 [poedit를 통한 po/mo 파일 생성(gettext)]

4. PHP 파일에서는 다음처럼 코딩한다.


<?php
header("Content-Type: text/html; charset=UTF-8");

$language = "ko-KR";
putenv("LANG=$language");
setlocale(LC_ALL, $language);

$domain = "messages";
$str = bindtextdomain($domain, "c:\\Apache2.2\\htdocs\\i18n\\locale");
textdomain($domain);

echo gettext("よろしくお願いします");
echo gettext("こんにちは");
echo gettext("攻撃を受けました。");
?>


다국어 리소스는 일반적으로 UTF-8로 사용하므로 UTF-8 헤더 설정을 해준다. 그 다음 언어 로캐일 설정을 해준다. 도메인 설정($domain)은 파일 이름이 된다.(여기에서는 c:\Apache2.2\htdocs\i18n\locale\ko-KR\LC_MESSAGES\messages.mo 파일을 읽게 된다.)

bindtextdomain() 함수는 처리 후 반환값으로 바인딩한 경로의 값을 문자열로 반환하므로 정상적인 작동이 아닐때는 위에서 $str 변수를 echo로 찍어보아 정상적인 경로가 나오는지 확인한다. 여기에서는 일본어 -> 한국어 번역의 경우를 생각했다.

번역 내용을 po파일에 설정하였고 mo 파일이 정상적으로 로딩 되었다면 gettext() 함수의 결과물로 한글 내용이 출력될 것이다.(물론 위의 링크로 걸어준 부분에서 번역 내용을 추가한 후 mo 파일을 생성하여야 한다.)

5. gettext가 잘 동작하지 않을때는 phpinfo로 gettext 모듈이 정상 작동하는지, bindtextdomain() 함수의 결과로 정상적인 경로가 반환되는지를 확인한다.
· 출처 : http://preludeb.egloos.com/4738168
0.00 (0명)
평가해주세요. 비회원 가능!