在python3中正确替换QString()。arg方法

时间:2013-09-10 00:45:10

标签: python python-3.x internationalization pyqt4 qstring

说到国际化 - 使用python2和PyQt4 - 格式化翻译字符串的“建议方法”是使用QString.arg()方法:

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

但是python3-PyQt4中不存在QString()

所以我的问题是,在python3中格式化任何翻译字符串的最佳方法是什么?我应该使用标准的python方法str.format()还是有更适合的方法?

2 个答案:

答案 0 :(得分:3)

QString::arg方法实际上是C ++有限字符串格式支持的解决方法,以确保您不会使用sprintf解决所有问题需要(不处理不同语言的不同顺序的占位符,缓冲区溢出等)。因为Python没有任何这样的问题,所以没有充分的理由使用它。

事实上,明确使用QString的理由很少。在PyQt4中,它没有被完全淘汰,但是通过PyQt5,它是。 (从技术上讲,PyQt4支持"字符串API v2"在Python 2.x和3.x中,但默认情况下仅在3.x中启用它; PyQt4默认启用v2,并且隐藏了切换回v1。)有关更多信息,请参阅文档中的Python Strings, Qt Strings and Unicode


有一个不常见的,但如果影响你的话很重要,例外:如果您正在编写部分使用Qt / C ++且部分使用PyQt的应用,那么您将遇到问题共享I18N数据时,其中一些数据为"string %1 %2"格式而其他数据为"string {1} {2}"格式。 (第一次将您的一个文件发送给外包翻译公司时,他们会错误地保证。)

答案 1 :(得分:2)

是的,只需使用标准的python字符串格式。

QString已经消失,因为它与python的unicode字符串(python3中的str和python2中的unicode)几乎可以互换,所以PyQt负责将一个字符串转换为另一个字符串。需要的。

被禁用的

QString不仅限于python3,它只是默认值。您可以在python2上进行相同的操作,这样做可以从PyQt4导入任何内容:

import sip
sip.setapi('QString', 2)