간략한 소개;

간략한 소개;

내가 아는 한, locale-gen유틸리티는 파일의 항목을 /usr/lib/locale/locale-archive기반으로 하는 디렉토리 아래에 기계 객체 형식으로 번역 파일을 저장합니다 . 또한 유틸리티는 번역 파일을 기계 객체 형식으로 저장합니다 . 예를 들어:/etc/locale.gen/usr/share/i18n/locales//usr/share/locale/<locale_dir>/LC_MESSAGES/

# dpkg -L wget | grep nl
/usr/share/locale/nl
/usr/share/locale/nl/LC_MESSAGES
/usr/share/locale/nl/LC_MESSAGES/wget.mo
#

example 을 실행하면 파일 과 파일이 모두 열려 있는 strace -e open wget것을 볼 수 있습니다 ./usr/lib/locale/locale-archive/usr/share/locale/nl/LC_MESSAGES/wget.mo

디렉토리의 파일에는 어떤 현지화 데이터가 저장되어 /usr/share/locale/<locale_dir>/LC_MESSAGES/있으며 어디에 있습니까 /usr/lib/locale/locale-archive?

답변1

Linux에서 지역화가 어떻게 구현되는지 사전에 전혀 몰랐음에도 불구하고 그것에 대해 배우려고 최선을 다했습니다.

간략한 소개;

/usr/lib/locale/locale 아카이브

locale-archivelocale-gen(8)를 호출하여 생성된 메모리 매핑 파일입니다 localedef(1). 메모리 매핑이란 일단 프로그램에 의해 생성되고 호출되면 메모리에 한 번만 로드된다는 의미입니다.
에 정의된 모든 언어 세트는 /etc/locale.gen미리 정의되어 있고 아카이브 자체는 매우 정적이므로 메모리에 여러 번 저장할 필요가 없습니다. 따라서 다른 프로그램에서 호출할 때마다 프로세스는 이미 메모리에 로드된 아카이브를 가리키므로 프로그램 가상 메모리에만 추가됩니다. 이는 프로세스의 물리적 메모리 공간을 줄일 뿐만 아니라 모든 현지화 관련 시스템의 속도도 향상시킵니다. (추가 디스크 I/O가 필요하지 않습니다!)

또한 모든 시스템 전체 언어를 포함하는 충돌 복구 로케일 파일로 작동하는 것으로 보입니다. 또한 이 아카이브는 glibc를 사용하여 작성된 소프트웨어에서 많이 사용됩니다.


/usr/share/locale/$LOCALE_DIR/LC_MESSAGES/$PROGRAM.mo

Linux( )에서 소프트웨어의 국제화는 i18n, 18 chars between 'i' and 'n'GNU-gettext를 사용하여 달성할 수 있습니다.

  1. 프로그램을 작성할 때 각 print 문은 gettext()인쇄해야 하는 문자열을 래핑하기 위해 GNU 함수를 사용하는 데 적합합니다.
  2. 그런 다음 xgettext(1)소스를 반복하여 .pot (Portable Object Template Files)원하는 방식으로 만듭니다.
  3. 그런 다음 인간 번역가는 msginit(1)이를 .po (Portable Object)일반적으로 메시지 카탈로그를 나타내는 파일로 구문 분석할 수 있습니다. 그러면 모든 문자열이 수동으로 번역됩니다.
  4. 이후 편집된 파일을 바이너리 파일로 msgfmt(1)컴파일하는 데 사용됩니다 . 이는 소프트웨어 패키지와 함께 제공될 수 있습니다..po.mo (Message Object)

패키지가 시스템에 설치되면 파일이 /usr/share/locale/<locale_dir>/LC_MESSAGES/채워집니다 $PROGRAM.mo. 예를 들어, wget이 호출되면 LANG환경 변수는 현재 로케일 설정을 사용하도록 지시하며 wget, 이로 인해 wget올바른 사전 컴파일된 번역이 포인터를 통해 읽기에 포함됩니다 .mo binary.

추가 세부정보 및 출처

로캘 아카이브의 경우:

메모리 매핑:CentOS 메일링 리스트
I18N 하도급 방법:다양한 로케일의 아카이브 컴파일에 대한 Fedora 문서

또한 locale(1), localedef(1)및 에 대한 맨페이지를 고려하십시오 locale-gen(8).

파일 의 경우 .mo:

파일 생성 과정 .mo:Gettext의 Wikipedia
GNU MO 파일 형식:해석 및 바이너리 형식

또한 xgettext(1), msginit(1)및 에 대한 맨페이지를 고려하십시오 msgfmt(1).

또한 ENV 변수 LC_MESSAGELOCPATH.


나는 이것이 이 방대한 주제의 표면에 불과하다고 확신합니다. 그럼에도 불구하고 이것이 시작하기에 충분하기를 바랍니다.

관련 정보