2009-03-10 11 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(ex en_US)の言語ストリングに変換され、ルックアップは* nixのように進行します。あなたはあなたの整数IDを返す関数GetUserDefaultLCID()LCIDを取得する必要が要するにhttps://launchpad.net/gettext-py-windows

:あなたがPythonの例を読むことができる場合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辞書を参照してください:Pythonで標準モジュールlocale.pyのマップがありますが、言語コードを持つことになります一度http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

de_DEを) gettextライブラリに直接渡すか、環境変数LANGUAGEを使用して間接的に渡す必要があります。