안녕하세요.린치핀소프트 한광희입니다.

플러그인 또는 테마를 개발하거나, 이미 개발되어 있는 테마나 플러그인을 구입하여 이용하고자 할때 “번역”은 꽤나 신경쓰이는 부분입니다.

특히나 자신의 플러그인 또는 테마를 개발할때 추후 다국어 웹 페이지등을 염두해 두어야 하는 등의 사항이 있다면 워드프레스에서 테마와 플러그인을 개발하기 전에 “텍스트도메인”을 고려해야 합니다.
워드프레스에서는 텍스트도메인이란 요소를 통해 손쉬운 번역을 지원합니다.

보통의 절차는 다음과 같습니다.(플러그인 예시)
1. 플러그인을 개발하며 플러그인 파일에 텍스트 도메인을 명시한다.
2. __(), _e(), _x() 등과 같은 텍스트도메인을 이용하는 출력 또는 string 반환 PHP함수를 이용해 전체적으로 프로그래밍한다.(단, 이 함수는 이용자페이지와 연관된 부분에서만 이용하는것을 권장한다)
3. poedit과 같은 프로그램을 이용해 플러그인의 전체 소스를 읽고 번역이 필요한 부분만 추출한다.
4. poedit과 같은 프로그램을 이용해 번역할 언어를 선택하여 번역후 .mo / .po 와 같은 파일을 생산한다.
5. 번역파일을 플러그인 내부의 디렉토리에 업로드한다.
6. 플러그인의 action 훅과 load_plugin_textdomain()의 함수를 사용하여 번역파일이 있는 디렉토리를 지정한다.
7. 워드프레스 사이트의 Locale(언어 또는 지역정보)정보에 따라 정상적으로 번역이 이루어지는지 확인한다.

 

전체적인 절차는 위와 같습니다.  아래는 플러그인 소스화면 예시입니다.

 

위의 스크린샷 9번째 줄을 보시면 Text Domain : linchpinPCS 이라고 되어 있는 부분이 있습니다. 플러그인에서 텍스트 도메인은 플러그인 정의를 하는 .php 파일 내에서 위와 같은 양식으로 정의해주어야 합니다 . 이때 지정하는 텍스트 도메인은 자율적으로 선택하시되, 플러그인 이름이나 회사이름등을 차용하여 어느 정도 다른 플러그인/테마의 텍스트도메인명과 충돌되지 않도록 구분하는것이 좋습니다.

screenshot-newtab 2015-12-18 22-45-34

17번째 줄에서 load_plugin_textdomain() 함수를 이용해 현재 플러그인 디렉토리 내에 번역파일들의 위치를 지정하고 있습니다.

아래 스크린샷은 en_US(영문 US 국가식별코드) 의 번역파일을 디렉토리에 업로드한 스크린샷입니다.

screenshot-newtab 2015-12-18 22-25-55

 

여기까지가 기본적으로 텍스트도메인 설정과 번역파일의 위치를 지정해 준 것입니다.

이후부터는 워드프레스에서 제공하는 번역을 위한 텍스트 출력함수들을 이용해서 프로그래밍을 해야 합니다.

기본적으로 자주 사용하는 텍스트 도메인 관련 함수 세가지를 소개합니다.

 

  1. _e(‘텍스트내용’,’텍스트 도메인명’) : 이 함수는 PHP에서 echo와 같이 텍스트 내용을 출력합니다. 이때, 텍스트 도메인을 지정하여 번역파일이 있을경우 해당 번역 내용을 출력합니다.
  2. __(‘텍스트내용’,’텍스트 도메인명’) : 이 함수는 화면에 텍스트를 출력하지 않지만 변수등에 텍스트 내용을 할당할때 사용합니다. 이때도 마찬가지로 번역파일이 있으면, 번역된 내용이 변수에 할당이 됩니다.
  3. _x(‘텍스트내용’,’문맥 텍스트’,’텍스트 도메인명’) : 이 함수는 _()함수와 유사하지만 “문맥 텍스트”를 추가할수 있습니다. 이는 플러그인 / 테마 개발자가 직접 번역하지 않고 따로 번역자가 번역을 할때가 종종 있는데, 단어만으로 정확히 어떻게 번역되어야 할지 감이 안잡힐때 도움을 주기 위하여 추가하는 텍스트라고 보시면 됩니다.

 

이 외에도 텍스트 도메인관련 함수는 몇가지 더 있지만 저같은경우는 위의 세가지를 자주 사용합니다.

텍스트 도메인은 워드프레스에서 i18n(internationalization) 의 하나의 기능으로 제공되므로 워드프레스의 다국어 관리 유료 플러그인인 WPML과도 호환됩니다.

 

자신의 테마/플러그인의 개발뿐만 아닌 고객을 위한 워드프레스를 개발할때 다국어버전을 염두해두시면 텍스트 도메인의 사용은 권장이 아니라 필수라고 생각하시면 됩니다.