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

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

事实上,很少有理由QString明确使用。在 PyQt4 中,它并没有完全淘汰,但在 PyQt5 中,它是。(从技术上讲,PyQt4 在 Python 2.x 和 3.x 中都支持“字符串 API v2”,但仅在 3.x 中默认启用;PyQt4 在两者中都默认启用 v2,并隐藏了切换回 v1 的能力。 ) 请参阅文档中的Python 字符串、Qt 字符串和 Unicode以获取一些附加信息。


有一个不常见但主要影响您的例外:如果您正在编写一个部分使用 Qt/C++ 部分使用 PyQt 的应用程序,那么当其中一些"string %1 %2"格式为 I18N 数据时,您将无法共享 I18N 数据其他是"string {1} {2}"格式。(当您第一次将文件发送给外包翻译公司时,他们肯定会弄错的。)

于 2013-09-10T01:02:24.097 回答
2

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

QString消失了,因为它几乎可以与 python 的 unicode 字符串(str在 python3 和unicodepython2 中)互换,所以 PyQt 会根据需要将一个转换为另一个。

QString被禁用不仅限于python3,它只是那里的默认设置。在从以下位置导入任何内容之前,您可以在 python2 上获得相同的结果PyQt4

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