2009-07-03 3 views
2

Wikipedia entry for GNU gettext은 로캘이 단지 "lanuage"라는 예제를 보여줍니다. i18n gettext() “hello world” example에는 언어와 국가가 모두 로케일 값이 있지만 "es_MX"입니다. "es_MX"예제를 "lanuage"만 사용하도록 수정했지만 예상 스페인어 대신 영어 텍스트를 생성합니다. Controlling your locale with environment variables 따르면로켈 es_MX가 작동하지만 es가 작동하지 않는 이유는 무엇입니까?

cat >hellogt.cxx <<EOF 
// hellogt.cxx 
#include <libintl.h> 
#include <locale.h> 
#include <iostream> 
int main(){ 
    setlocale(LC_ALL, ""); 
    bindtextdomain("hellogt", "."); 
    textdomain("hellogt"); 
    std::cout << gettext("hello, world!") << std::endl; 
} 
EOF 
g++ -o hellogt hellogt.cxx 
xgettext --package-name hellogt --package-version 1.2 --default-domain hellogt --output hellogt.pot hellogt.cxx 
msginit --no-translator --locale es --output-file hellogt_spanish.po --input hellogt.pot 
sed --in-place hellogt_spanish.po --expression='/"hello, world!"/,/#:/s/""/"hola mundo"/' 
mkdir --parents ./es.utf8/LC_MESSAGES 
msgfmt --check --verbose --output-file ./es.utf8/LC_MESSAGES/hellogt.mo hellogt_spanish.po 
LANG=es.utf8 ./hellogt 

: 정의한 경우

환경 변수 LANGUAGE 만 GNU gettext에 의해 사용되는 는 ... LANGUAGE는 LC_ALL, LC_MESSAGES 및 LANG 우선 걸린다.

LANGUAGE=es.utf8 ./hellogt 

영어보다는 예상 스페인어 텍스트를 생산하고 있습니다.

그러나 "LANG = es"가 작동하지 않는 이유에 대해서는 설명하지 않습니다.

답변

3

음 ... 플랫폼 문제 인 것 같습니다. 나는 Mac OSX에서 똑같은 일을했고 기대했던 결과를 얻었다. 나는 당신의 리눅스 버전이 LANG=es.utf8을 좋아하지 않는다고 생각한다. 후자가 지원되는 경우 setlocale(3) 또는 xlocale(3)과 같은 항목을 둘러싼 로컬 시스템 설명서를 확인하십시오.

IIRC의 경우 ISO-639 언어 코드 인 기본 식별자 만 포함 된 로캘 식별자에 기본 언어 국가의 ISO-3166 국가 코드가 추가되었습니다. 그런 다음 결과 로케일 조회는 /usr/share/locale을보고 수행되었습니다. 내 MacBook의 로케일 디렉토리를 살펴본 결과 es_ES과 마찬가지로 es 디렉토리가 있습니다. 간단한 시스템 구성 문제 일 수 있습니다.

상업용 응용 프로그램을 개발하는 경우 gettext 및 표준 라이브러리에서 제공하는 로케일 대신에 ICU을 사용하는 것이 좋습니다. Gettext는 간단한 메시지 검색을 위해 작동하지만 실제로 완전히 국제화 된 응용 프로그램을 수행하는 데 필요한 것을 거의 제공하지 않습니다.

관련 문제