说到国际化 - 使用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()
还是有更适合的方法?
答案 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)