티스토리 뷰

최근 워드프레스 커스터마이징을 하다보니
_(); 요런 함수에 'text' 값을 할당하면
_('text'); 함수가 "텍스트"를 리턴해주는 식의 localization 방식을 사용하길래
구글링 조회 후
간단한 구현을 해 보았다.

워드프레스에서 언어 관련하여 자주 보이는 주요 파일은

en_US.po
en_US.mo

들인데 저 파일 중 텍스트에디터로 .po 파일을 열어보면 규칙성있는 내용이 나타난다.

# 이것은 주석
msgid "text"
msgstr "텍스트"

의 규칙을 가진 쌍으로 입력을 이어가면 된다는것을 알 수 있다.

그러면 워드프레스 환경이 아닌 순수한 PHP 에서는 어떻게 구현할 수 있는지 보자.

PHP Extention 중 gettext 는 미리 탑재시켜야한다.

간단한 지역화 프로젝트를 아래와 같이 구성한다.
단, 한글 번역파일을 만들기위해 en_US 폴더명은 ko_KR 로 지정!

Poedit 다운로드 및 설치, 실행

언어는 한국어로

카탈로그 속성을 들어가서

프로젝트 이름을 지정(하지 않으면 번역된 텍스트가 보이지 않으니 꼭 지정하도록) 한다.

저장!
메뉴를 이용하거나 단축키를 이용하거나

또는 메뉴바의 버튼을 클릭

다음과 같은 경로에 이 예제에서는 messages 라는 파일명으로 지정하여 저장한다.

텍스트편집기로 위에서 생성한 messages.po 파일을 열고
아래 이미지와 같이 추가해준다.

Poedit에서 message.mo 파일을 다시 열면 아래와 같이 나타나면 맞다

파일 > 기본설정에서
아래와같이 체크되어 있어야 한다.

저장!

아래와같이 .mo (컴파일한 번역) 파일이 생성되었으면 잘 된것

프로젝트 / 루트 경로에 index.php 파일 생성하고
아래와같이 코딩

// i18N support infomation
$locale = "ko_KR";
$charset = "UTF-8";
if (isset($_GET["locale"])) $locale = $_GET["locale"];
// putenv("LANG={$locale}");
setlocale(LC_ALL, "{$locale}.{$charset}");

// Set the text domain as "messages"
$domain = "messages";
bindtextdomain($domain, "./locale");
textdomain($domain);
// bind_textdomain_codeset($domain, $charset);

echo gettext("Hello world")."!\n";
echo _("Nice to meet you")."~\n";
echo _("This is")."...\n";

echo() 함수에 할당된 텍스트들은
messages.po 에서 msgid 로 지정한 문장들이며
위 소스상에서는 영어이다.

참고로 gettext(); 와 _(); 함수는 동일한 역할을 한다. alias 되어있는...

웹서버에서 위 경로로 접근해보면
아래와 같이 번역되어(msgstr 할당 문장으로 대체되어) 보인다.


# 참고

https://www.udemy.com/blog/php-gettext/

댓글