2009-03-10 5 views
1

저는 주로 GNU/Linux 및 Mac OS X 시스템 용 게임을 만들고 있습니다.하지만 대부분의 코드에서 이식성을 유지하고 있습니다.Win32에서 GNU gettext 사용하기

저는 거의 모든 OS 관련 항목을 Windows에 이식했습니다. 나머지는 i18n뿐입니다.

내 질문은 내가 gettext를 함께 Win32에서의 setlocale() 기능을 사용하기로하고 방법이

입니까?

지금까지는 ISO 638/ISO 3166 코드 (예 :)를 사용했지만 Windows에서는 작동하지 않습니다.

나는 성공적으로 setlocale (LC_ALL, "German")을 시도했지만 gettext는 bindtextdomain을 사용한 후에도 변환 된 문자열을 올바르게 찾을 수 없습니다.

힌트가 있습니까? 나는 코드의 재 작성을 피하기 위해 GNU gettext를 고수하고 싶다.

답변

2

글쎄, 일부 파고 후, 나는 대답을 찾았습니다 : Windows에서 setlocale() gettext에 대한 아무것도하지 않습니다. gettext는 사용자의 환경과 스레드의 로켈을 사용합니다 (GetThreadLocale, SetThreadLocale 참조). 스레드의 로켈이 사용되면 반환 된 LCID는 ISO 639 및 3166 (예 : en_US)의 언어 문자열로 변환되고 조회는 * nix에서 진행됩니다. 당신이 당신에게 정수 ID를 반환하는 기능 GetUserDefaultLCID()LCID을 얻을 필요가 짧은에서 https://launchpad.net/gettext-py-windows

: 파이썬 예를 읽을 수있는 경우 de_DE 같은 언어 코드와 gettext에 창문 로케일 ID를 변환하는 데 도움 내 작은 프로젝트는

+0

언제든지 내 포트를 보낼 수 있습니까? 나는 실제로 동일한 문제를 겪고있다. 단지 구식의 win32 쓰레기통이있다. ( – driAn

+0

Nvm, 그것을 찾았 어. @ http://epicofthalia.net. – driAn

0

있다 . 그런 다음이 값을 문자열 코드에 매핑해야합니다. 파일 http://svn.python.org/view/python/trunk/Lib/locale.py?view=markup

당신이 여기에서 찾을 수있는 Windows 로케일 ID 목록의 하단에 windows_locale 사전을 참조하십시오 : 파이썬의 표준 모듈 locale.py의지도가 당신이 언어 코드를가집니다 일단 http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

(de_DE를) gettext 라이브러리에 직접 전달하거나 환경 변수 LANGUAGE를 사용하여 간접적으로 전달해야합니다.