2

英語とハンガリー語のシンプルなアプリがあります。すべてのローカライズ可能なものは、個別の modul -localizable.py にあります。例:

#!/usr/bin/python
# -*- coding: utf-8 -*-
...
...
if language == "hun":
    LOGIN_LABEL_USERNAME_STR                    = 'Felhasználó'
    LOGIN_LABEL_PASSWORD_STR                    = 'Jelszó'
elif language == "eng":    
    LOGIN_LABEL_USERNAME_STR                    = 'Username'
    LOGIN_LABEL_PASSWORD_STR                    = 'Password'

しかし、loginDialog.py でハンガリー語を使用すると、次のようになります。

import localizable
...
...
loginLayout.addRow(localizable.LOGIN_LABEL_USERNAME_STR, QtGui.QLineEdit())
loginLayout.addRow(localizable.LOGIN_LABEL_PASSWORD_STR, QtGui.QLineEdit())
...

代わりにandFelhasználóを 取得 します。どんな助けでも大歓迎です。JelszóFelhasználóJelszó

4

2 に答える 2

4

エンコーディングのないバイト文字列の代わりにunicode、モジュールでオブジェクトを使用しないのはなぜですか?localizable

if language == "hun":
    LOGIN_LABEL_USERNAME_STR                    = u'Felhasználó'
    LOGIN_LABEL_PASSWORD_STR                    = u'Jelszó'

これは私にとって意図した効果があります。

また、Qt が提供する組み込み関数の使用を検討することもできます。

于 2013-01-09T14:11:51.870 に答える
2

このバイト配列を LATIN-1 エンコーディングであるかのように出力すると、.Felhasználó46 65 6c 68 61 73 7a 6e c3 a1 6c c3 b3Felhasználó

さらに、これらの UTF-8 でエンコードされたバイトをプレーンな文字列として Qt に渡します。これは、LATIN-1 エンコードであると想定しているようです。これは、バイトc3 b3( ó) がóUTF8 の場合のようにコードであると想定する代わりに、c3プレーンÃb3あると想定し³、LATIN1 の場合であることを意味します。

frb の答えはこれを行う正しい方法です。unicode代わりに文字列を送信することで、すべての解釈を行い、Qt にあいまいさを残さないためです。

于 2013-01-09T14:37:34.460 に答える