2010-05-02 3 views
1

i38n이 gettext에 의해 처리되는 프로그램이 있습니다. 프로그램은 잘 작동하지만, win32에서 런타임시 gettext ('fr_FR'과 같은)에서 사용되는 로케일 이름을 알아야합니다.Windows에서 gettext가 사용하는 로케일에 액세스하는 방법이 있습니까?

gettext 소스를 조사한 결과, 모든 플랫폼 (gl_locale_name, "localename.h/c"라는 C 파일)에서이를 계산하는 아주 무서운 기능이 있습니다. 그러나이 파일은 gettext 또는 libintl과 함께 설치되지 않으므로이 함수를 호출 할 수 없습니다. 이 값을 얻기 위해 gettext가 제공하는 다른 함수가 있습니까? 또는 다른 패키지 (boost, glib, anything?)

(관련 메모에는 C++ 표준 라이브러리에서 std :: locale) 잘못 입력하지 않으면 시스템의 설정으로 로케일을 만들어야합니다 ...하지만 이름이 'C'입니다. 로케일 이름을 가져올 수있는 실행 가능한 방법입니까? 내가 잘못하고있는 것은 무엇입니까?)

답변

1

의 정보를 기반으로 매핑 할 필요는 "gl_locale_name"기능은 오히려 gnulib의 일부를 직접 gettext를의 일부가 아니었지만, 밝혀졌습니다. 방금 패키지를 발견했습니다.

그래서 내 프로젝트에서 악명 높은 localename.h 헤더를 점점

gnulib-tool --import localename 

의 문제였다 그런 다음 gl_locale_name 기능이 때 크로스 컴파일 잘 작동합니다.

답변 해 주셔서 감사합니다.

0

setlocale (NULL)을 사용하여 CRT에서 로켈을 가져올 수 있습니다. 그러나 Windows에서, 나는 전혀 모른다. 또한 gettext는 매우 일반적인 함수이므로 gettext에 대해 좀 더 구체적으로 설명해야합니다.

+0

잘 모르겠다 ... gettext 패키지의 gettext() 함수를 사용하여 문자열을 변환하고있다 ... 런타임에 GNU/Linux와 내가 가지고있는 두 로케일의 윈도우를 모두 잘 해석한다. 번역 된 문자열. 그러나 나는 런타임에 사용자의 로케일을 알아야합니다. 나는 gettext (또는 아마도 libintl?)이 이것을 처리하기 때문에 그것을 얻는 방법이 있어야한다고 생각했다. – phtrivier

+0

그래서 이것을 시도 : setlocale (LC_MESSAGES, ""); char * l = setlocale (LC_MESSAGES, NULL); printf ("로캘 : % s \ n", l); (내 뉴런 중 몇 개가 튀긴 후 로케일을 얻으려고하면, 에헴을 불러야합니다.) 리눅스에서는 적절한 로케일을 얻을 수 있습니다 (mingw로 크로스 컴파일 한 후). -cross-env, 깔끔한 패키지, 체크 아웃), 그냥 "(null)"을 출력합니다. 가끔은 잠자리에들 때가 될 때가 있습니다. – phtrivier

1

Windows에서는 일반적으로 로케일 식별자의 정수 값을 반환하는 함수 GetUserDefaultLCID을 사용합니다. http://www.gnu.org/software/gnulib - LCID에서 'fr_FR의'와 같은 문자열로 변환하려면이 http://msdn.microsoft.com/en-us/library/ms776260

+0

예, 멀티 헤드 하이 드라에서 gettext의 내부에서 "gl_locale_name"으로 언급 된 함수를 보았습니다. 논리와 매핑도 거기에서 수행되었습니다. 저는 메시지를 변환하기 위해 계산되어야하기 때문에 함수를 호출하고 값을 얻을 수 있다고 비공식적으로 기대했습니다. 내 희망은 너무 높아. 그리고 자러 갈 시간입니다. – phtrivier

+0

@phtrivier 또한 LANGUAGE 환경 변수가 gettext에 영향을 미치고 windows 설정을 덮어 씁니다. – bialix