3

国際化に関しては-python2とPyQt4を使用して-翻訳された文字列をフォーマットする「提案された方法」は、QString.arg()メソッドを使用することです:

from PyQt4.QtGui import QDialog
#somewhere in a QDialog:
    self.tr("string %1 %2").arg(arg1).arg(arg2)

しかしQString()、python3-PyQt4 には存在しません。

だから私の質問は、python3で翻訳された文字列をフォーマットする最良の方法は何ですか? 標準のpythonメソッドを使用する必要str.format()がありますか、それとももっと適切なものがありますか?

4

2 に答える 2

3

このメソッドは、C++ の限定的な文字列フォーマット サポートの回避策として実際に存在します。これは、必要なすべての問題 (異なる言語で異なる順序のプレースホルダーを処理しない、バッファー オーバーランなど) をQString::arg使用しないようにするためです。sprintfPython にはそのような問題がないため、Python を使用する正当な理由はありません。

QString実際、明示的に使用する理由はほとんどありません。PyQt4 では完全に廃止されませんでしたが、PyQt5 では完全に廃止されました。(技術的には、PyQt4 は Python 2.x と 3.x の両方で「文字列 API v2」をサポートしますが、3.x でのみデフォルトで有効にします。PyQt4 は両方でデフォルトで v2 を有効にし、v1 に戻す機能を非表示にします。 )追加情報については、ドキュメントのPython 文字列、Qt 文字列、および Unicodeを参照してください。


珍しいが、影響がある場合は重大な例外が 1 つあります。一部が Qt/C++ で一部が PyQt であるアプリを作成している場合、それらの一部が"string %1 %2"形式と他は"string {1} {2}"形式です。(ファイルの 1 つを外注の翻訳会社に最初に出荷した場合、間違いなく間違ったものになることが保証されています。)

于 2013-09-10T01:02:24.097 に答える
2

はい、標準の python 文字列フォーマットを使用してください。

QStringPython の Unicode 文字列 ( strpython3 と python2 にありunicodeます) とほとんど交換可能であるため、PyQt は必要に応じて一方を他方に変換します。

QString無効になっているのは python3 に限定されているわけではなく、デフォルトの設定です。から何かをインポートする前にこれを行うことで、python2でも同じことができますPyQt4

import sip
sip.setapi('QString', 2)
于 2013-09-10T01:02:01.250 に答える