7


5

Python:Windowsでgettextが翻訳をロードしない

この特定のコードはLinuxでは非常にうまく機能しますが、Windowsでは機能しません。

locale.setlocale(locale.LC_ALL, '')
gettext.bindtextdomain('exposong', LOCALE_PATH)
gettext.textdomain('exposong')

`locale.setlocale`でロケールを指定しても(さまざまな形式を試しました)、動作しません。 問題の1つは、ロケールが環境変数に設定されていないことです(ただし、XPとVistaでテスト済みのドイツ語版Windowsを使用しています)。 コマンドラインで `" Set Lang = de_DE "`を実行すると、すべてが期待どおりに機能します。

何か案は?

2 Answer


8


Pythonの標準のgettextモジュールは、Windows設定の*標準の言語設定を使用しません*が、代わりに環境変数 LANGUAGE、` LC_MESSAGES`、 LC_ALL`または LANG`の存在に依存します。 (これはUnix / LinuxライブラリのWindowsへの_slack_移植の例だと思います。)

OS Windowsおよびネイティブアプリケーションは代わりにレジストリの設定を使用するため、上記の環境変数は一般的なWindowsマシンには存在しません。 したがって、Windowsレジストリから言語設定を取得し、プロセス環境に入れる必要があります。

これには私のヘルパーモジュールを使用できます:https://launchpad.net/gettext-py-windows

このヘルパーは、Windows設定から言語設定を取得し、現在のプロセスのLANG変数を設定するため、gettextはこの設定を使用できます。

そのため、問題のアプリケーションが自分のものでない場合は、次のことができます。 `python setup.py install`を使用して、通常どおりgettextヘルパーをインストールします。 次に、これらの行を `locale.setlocale(locale.LC_ALL、 '')`の前に追加します。

import gettext_windows
gettext_windows.setup_env()

それで全部です。


6


ユーザーbialixからの説明は正しいです。 しかし、別のモジュールを使用する代わりに、これは私のために働いた:

if sys.platform.startswith('win'):
    import locale
    if os.getenv('LANG') is None:
        lang, enc = locale.getdefaultlocale()
        os.environ['LANG'] = lang

つまり、ロケールモジュールからロケールを取得し、環境変数を設定します。

Windows 7でのみテストされているため、使用する前に他のバージョンで確認してください。