2

私は主にGNU/LinuxおよびMacOSXシステムを対象としたゲームを書いていますが、ほとんどのコードでかなり移植性を維持しています。

私はOS固有のもののほぼすべてをWindowsに移植しました。残っているのはi18nだけです。

私の質問はこれです

Win32のsetlocale()関数をgettextと一緒に使用するにはどうすればよいですか?

これまで、ISO 638 / ISO 3166コード(例)を使用してきましたde_DE.utf8が、これらはWindowsでは機能しないようです。

setlocale(LC_ALL、 "German")を試しましたが、成功しましたが、bindtextdomainを使用した後でも、gettextは翻訳された文字列を正しく見つけることができません。

ヒントはありますか?コードのヒープを書き直さないように、GNUgettextを使い続けたいと思います。

4

2 に答える 2

3

まあ、掘り下げた後、私は答えを見つけました: Windows の setlocale() は gettext に対して何もしません。gettext は、ユーザーの環境とスレッドのロケールを使用します (GetThreadLocale、SetThreadLocale を参照)。スレッドのロケールが使用されている場合、返された LCID は ISO 639 および 3166 の言語文字列 (例: en_US) に変換され、ルックアップは *nix のように続行されます。

于 2009-03-12T04:53:52.913 に答える
0

Python の例を読むことができる場合は、Windows ロケール ID を次のような gettext 言語コードに変換するのに役立つ私の小さなプロジェクトがありますde_DE: https://launchpad.net/gettext-py-windows

つまり、整数 ID を返すLCID関数を使用して取得する必要があります。GetUserDefaultLCID()次に、この値を文字列コードにマップする必要があります。Python では、標準モジュールにマップがあります:ファイルの下部にある辞書locale.pyを参照してください http://svn.python.org/view/python/trunk/Lib/locale.py?view=markupwindows_locale

ここで見つけることができる Windows ロケール ID のリスト: http://msdn.microsoft.com/en-us/library/dd318693%28VS.85%29.aspx

言語コード ( de_DE) を取得したら、gettext ライブラリに直接渡すか、環境変数 LANGUAGE を使用して間接的に渡す必要があります。

于 2010-02-03T09:33:27.870 に答える