현지화된 패키지 관리는 Yocto 프로젝트에서 시스템을 다양한 언어와 지역 설정에 맞게 조정하는 데 중요한 역할을 한다. 이 과정은 한 국가나 지역에 특화된 날짜, 시간, 숫자 형식, 통화 등을 포함하는 사용자의 언어로 패키지를 지원하는 것을 목표로 한다. 현지화를 올바르게 수행하려면 다음 업데이트 및 설정이 필요하다:

1. 현지화된 패키지의 정의

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는 문자열을 추출하고, 번역하고, 적용하는 도구이다. 다음은 패키지 생성 과정이다:

  1. 문자열 추출:

    • 소스 코드에서 번역할 문자열을 추출하여 .pot 파일을 생성한다. bash xgettext -o example.pot example.c
  2. 번역:

    • .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
  3. 컴파일:

    • .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 프로젝트에서는 현지화 작업에 사용되는 여러 변수와 기능이 있다. 주로 사용되는 변수는 다음과 같다:

8. 데모 프로젝트

다음은 현지화 기능을 포함한 간단한 Yocto 프로젝트의 예시이다.

  1. local.conf 설정 bash IMAGE_LINGUAS = "en-us fr-fr"

  2. 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/
    

    } ```

  3. 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;
    

    } ```

  4. 번역 파일 생성 위에서 설명한 대로 gettext를 사용하여 번역 작업을 수행한다.

국제화를 위한 도구들


Yocto 프로젝트를 통한 소프트웨어의 현지화 및 국제화는 글로벌 시장에서 중요한 요소이다. 이를 통해 다양한 언어와 문화권의 사용자들이 소프트웨어를 편리하게 사용할 수 있다. 이 과정에서 Yocto 프로젝트의 설정과 변수를 적절히 사용하고, 자동화된 방법을 통해 번역 작업을 효율적으로 관리하는 것이 필요하다.