OpenStack Weblate Migration - 국제화 도구에 대한 간단한 소개

국제화(internationalization)란?


국제화란 문화, 지역, 언어가 다양한 대상 고객을 위해 쉽게 현지화할 수 있는 제품, 애플리케이션 또는 문서 콘텐츠를 설계하고 개발하는 것입니다.[1] 그러므로 언어, 날짜, 시간 등 국가에 따른 다양한 형식(숫자, 복수형 등)을 지원해야 합니다. 이러한 요구사항을 번역 관리 플랫폼 을 통해 충족할 수 있게 됩니다.

국제화 도구 - gettext


GNU gettext란 적은 리소스만으로 다양한 언어로 번역할 수 있는 리눅스 프로그램입니다. gettext를 통해 pot, po, mo 생성할 수 있으며, 해당 파일을 활용하여 번역 프로세스를 수행할 수 있게 됩니다.

  • PO(portable object)
    • 번역이 포함되어 있는 파일
    • 한개의 po 파일은 한개의 번역할 언어에 사용
  • POT(portable object template)
    • po 파일 형식으로 된 번역 파일의 틀
  • MO(Machine Object)
    • 프로그램이 참조하는 바이너리 데이터
    • 주로 번역 프로그램이 mo 파일형태로 컴파일 되어 UI 상으로 보여줌

번역자는 POT 파일에 각 언어별 PO 파일을 생성합니다. 이후 번역 플랫폼은 PO 파일을 msgfmt 도구를 활용하여 MO 파일로 컴파일합니다.(번역 플랫폼의 종류나 아키텍쳐에 따라 상이할 수 있습니다.) 번역 플랫폼이 로드할때마다 MO 파일을 참조하여 UI 상에 번역본을 출력하게 되는 구조입니다. [2]

PO vs POT

POT 파일을 설명할때 po 파일 형식으로 된 번역 파일의 틀이라고 말씀드렸습니다. 근본적인 차이점은 msgstr 가 비워졌는지 유무입니다.

POT 파일에서는 번역할 대상이 misgid에 저장됩니다. 그러나 번역 결과인 msgstr는 빈 값으로 되어 있습니다. 번역이 수행되면 msgstr에 번역한 문자열이 채워지게 됩니다.

번역 포맷은 무조건 .po를 사용해야 할까?

무조건 번역 포맷은 po일 필요가 없습니다.
그러나 OpenStack 프로젝트는 이전부터 po 파일 형식을 사용했으므로 앞으로 po 형식 위주로 설명하겠습니다.

외부 사례: mattermost의 경우 .json 형식을 채택했습니다.


  1. Internationalization and localization - Wikipedia ↩︎

  2. GNU gettext À¯Æ¿¸®Æ¼ - PO ÆÄÀϰú PO ¸ðµåÀÇ ±âº» ↩︎

2개의 좋아요