현지화된 패키지 관리는 Yocto 프로젝트에서 시스템을 다양한 언어와 지역 설정에 맞게 조정하는 데 중요한 역할을 한다. 이 과정은 한 국가나 지역에 특화된 날짜, 시간, 숫자 형식, 통화 등을 포함하는 사용자의 언어로 패키지를 지원하는 것을 목표로 한다. 현지화를 올바르게 수행하려면 다음 업데이트 및 설정이 필요하다:
1. 현지화된 패키지의 정의
- 현지화된 패키지(L10N): 소프트웨어의 사용자 인터페이스(UI)를 다양한 언어로 번역 및 조정하는 작업이다.
- 국제화(I18N): 소프트웨어 구조를 다국어 입력 및 출력에 대해 자동으로 적응할 수 있도록 만드는 작업이다.
2. 패키지 관리 설정
Yocto에서 현지화를 관리하기 위해서는 몇 가지 기본 구성이 필요하다. 그것은 local.conf
파일과 관련된 설정을 포함한다.
IMAGE_LINGUAS_append = " de-de en-gb fr-fr"
LINGUAS_PREMINED = "de-de en-gb fr-fr"
3. 디렉토리 구조
현지화된 파일은 일반적으로 /usr/share/locale
디렉토리에 저장된다. 이 디렉토리에는 각 언어별 하위 디렉토리와 그 안에 있는 번역 파일들이 포함되어 있다.
/usr/share/locale/
├── de_DE
│ └── LC_MESSAGES
│ └── example.mo
├── en_GB
│ └── LC_MESSAGES
│ └── example.mo
└── fr_FR
└── LC_MESSAGES
└── example.mo
4. 현지화 패키지 생성
번역 파일들은 GNU gettext
를 사용하여 생성된다. gettext
는 문자열을 추출하고, 번역하고, 적용하는 도구이다. 다음은 패키지 생성 과정이다:
-
문자열 추출:
- 소스 코드에서 번역할 문자열을 추출하여
.pot
파일을 생성한다.bash xgettext -o example.pot example.c
- 소스 코드에서 번역할 문자열을 추출하여
-
번역:
.pot
파일을 기반으로 각 언어에 대한.po
파일을 생성하고 번역을 수행한다.bash msginit -i example.pot -o de_DE.po --locale=de_DE msginit -i example.pot -o fr_FR.po --locale=fr_FR
-
컴파일:
.po
파일을.mo
파일로 컴파일하여 소프트웨어가 사용할 수 있도록 한다.bash msgfmt de_DE.po -o de_DE/LC_MESSAGES/example.mo msgfmt fr_FR.po -o fr_FR/LC_MESSAGES/example.mo
5. 패키지 설치 및 테스트
현지화된 패키지는 타겟 시스템에 설치되어 사용자에게 제공된다. 각 언어에 대해 설치된 .mo
파일을 확인할 수 있어야 한다. 예제와 같이 패키지를 테스트할 수 있다:
export LANG=de_DE.UTF-8
./example
위 명령어를 통해 애플리케이션이 독일어로 번역된 UI를 사용하는지 확인할 수 있다.
6. 현지화 작업 자동화
패키지 현지화는 종종 많은 시간과 노력이 소요된다. 이를 효율적으로 관리하기 위해 자동화된 스크립트나 CI/CD 파이프라인을 활용할 수 있다. 예를 들어, bitbake
태스크를 사용하여 현지화 작업의 일부를 자동화할 수 있다.
do_install_append() {
install -d ${D}${datadir}/locale/de/LC_MESSAGES
install -m 0644 ${S}/locale/de/LC_MESSAGES/*.mo${D}${datadir}/locale/de/LC_MESSAGES
install -d ${D}${datadir}/locale/fr/LC_MESSAGES
install -m 0644 ${S}/locale/fr/LC_MESSAGES/*.mo${D}${datadir}/locale/fr/LC_MESSAGES
}
이 스크립트는 빌드 과정에서 자동으로 번역 파일을 설치한다.
7. 변수와 기능
Yocto 프로젝트에서는 현지화 작업에 사용되는 여러 변수와 기능이 있다. 주로 사용되는 변수는 다음과 같다:
IMAGE_LINGUAS
:- 빌드할 이미지에 포함할 언어 집합을 지정하는 데 사용된다.
LINGUAS_preferred
:- 시스템이 선호하는 언어를 지정한다.
8. 데모 프로젝트
다음은 현지화 기능을 포함한 간단한 Yocto 프로젝트의 예시이다.
-
local.conf
설정bash IMAGE_LINGUAS = "en-us fr-fr"
-
example.bb
레시피 파일 ```bash SUMMARY = "Example application with i18n support" LICENSE = "MIT"SRC_URI = "file://example.c \ file://locale/en/LC_MESSAGES/example.mo \ file://locale/fr/LC_MESSAGES/example.mo"
inherit autotools
do_install_append () { install -d {D}{datadir}/locale/en/LC_MESSAGES install -m 0644 {WORKDIR}/locale/en/LC_MESSAGES/example.mo{D}${datadir}/locale/en/LC_MESSAGES/
install -d ${D}${datadir}/locale/fr/LC_MESSAGES install -m 0644 ${WORKDIR}/locale/fr/LC_MESSAGES/example.mo${D}${datadir}/locale/fr/LC_MESSAGES/
} ```
-
example.c
소스 파일 ```c #include#include #include define _(STRING) gettext(STRING)
int main() { setlocale(LC_ALL, ""); bindtextdomain("example", "/usr/share/locale"); textdomain("example");
printf(_("Hello, World!\n")); return 0;
} ```
-
번역 파일 생성 위에서 설명한 대로
gettext
를 사용하여 번역 작업을 수행한다.
국제화를 위한 도구들
- gettext:
- GNU 프로젝트에서 제공하는 국제화 지원 툴킷이다. 소스 코드로부터 번역 가능한 문자열을 추출하고 번역 파일을 관리한다.
- intltool:
- XML, desktop 파일 등 다양한 파일 형식을 지원하며,
gettext
와 함께 사용하기 좋은 도구이다.
Yocto 프로젝트를 통한 소프트웨어의 현지화 및 국제화는 글로벌 시장에서 중요한 요소이다. 이를 통해 다양한 언어와 문화권의 사용자들이 소프트웨어를 편리하게 사용할 수 있다. 이 과정에서 Yocto 프로젝트의 설정과 변수를 적절히 사용하고, 자동화된 방법을 통해 번역 작업을 효율적으로 관리하는 것이 필요하다.