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

**URL:** <https://forum.openinfra-kr.org/t/openstack-weblate-migration/267>\
**Category:** i18n-국제화프로젝트\
**Created:** [9월 29, 2025, 11:52오전 UTC](https://forum.openinfra-kr.org/t/openstack-weblate-migration/267 "2025-09-29T11:52:21Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![sookju](https://forum.openinfra-kr.org/letter_avatar_proxy/v4/letter/s/77aa72/32.png) [@sookju](https://forum.openinfra-kr.org/u/sookju)\
**Post date:** [9월 29, 2025, 11:52오전 UTC](https://forum.openinfra-kr.org/t/openstack-weblate-migration/267/1 "2025-09-29T11:52:21Z")

</div>

## 국제화(internationalization)란?

* * *

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

## 국제화 도구 - gettext

* * *

[GNU gettext](https://www.gnu.org/software/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\]

 ![출처 - https://en.wikipedia.org/wiki/Gettext](https://forum.openinfra-kr.org/uploads/default/original/1X/8c97117c8b79a369a05c8fc4c3b48c0b8a2058b3.png)

### PO vs POT

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

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

 ![PO vs POT](https://forum.openinfra-kr.org/uploads/default/original/1X/c1e41221b34e606bdc363c0bb1db9b2597b16590.png)

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

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

> 외부 사례: [mattermost](https://translate.mattermost.com/projects/playbooks/server/#information)의 경우 `.json` 형식을 채택했습니다.

 ![출처 - https://www.gridly.com/blog/software-localization-workflow/](https://forum.openinfra-kr.org/uploads/default/original/1X/d8c96a39b144f2d4f61af9317be9bc0da3839c66.jpeg)

* * *

1. [Internationalization and localization - Wikipedia](https://en.wikipedia.org/wiki/Internationalization_and_localization) 

2. [GNU gettext À¯Æ¿¸®Æ¼ - PO ÆÄÀÏ°ú PO ¸ðµåÀÇ ±âº»](http://korea.gnu.org/manual/release/gettext/gettext-ko_2.html)
