Python 翻译“a”的正确方法是什么;“动态”;PyQt中的字符串

Python 翻译“a”的正确方法是什么;“动态”;PyQt中的字符串,python,pyqt,translation,Python,Pyqt,Translation,为了允许的Python插件国际化,我使用QCoreApplication.translate()如下: message=QCoreApplication.translate('Multipart split','No Multipart features selected') 如何准备一个动态字符串,如下所示 message=“Splited”+str(n个分割的特征)+“多部分特征” 要进行翻译,无需中断每个子字符串,如下所示 message=QCoreApplication.transl

为了允许的Python插件国际化,我使用
QCoreApplication.translate()
如下:

message=QCoreApplication.translate('Multipart split','No Multipart features selected')
如何准备一个动态字符串,如下所示

message=“Splited”+str(n个分割的特征)+“多部分特征”
要进行翻译,无需中断每个子字符串,如下所示

message=QCoreApplication.translate('Multipart split','Splited')+str(n个分割的功能)+QCoreApplication.translate('Multipart split','Multipart features'))
这似乎不是最好的选择

我发现,在C++中使用<代码>()(<代码> > <代码> >()(代码)>,可以这样做:

statusBar()->showMessage(tr(“找到主机%1”).arg(主机名))

但是我无法使用Python进行复制。

请尝试对
tr
方法的结果执行
format
命令:

statusBar().showMessage(tr("Host {0} found").format(hostName))
ts
文件中的翻译还应包含
{0}
字符串


编辑:使用Python2.7,您可以简单地键入
{}
,而不使用
0
我自己找到了解决方案,也许它对其他人有用。


谢谢你的回答。不幸的是,tr方法无法识别,这就是我使用QCoreApplication.translate()的原因。我将尝试使用{}并在其中设置格式。“…您只需键入
{}
,而不使用0。”不。永远不要这样做。用于国际化的参数应始终显式编号(例如,
{0}
而不是
{}
)。为什么?因为非英语语言可能以不同的顺序插入参数,在这种情况下,隐式编号的
{}
-样式的参数将不可翻译。关于一个真实世界的例子,展示了两个英语和挪威语句子之间的差异,请看几年后的情况——你的答案几乎是@Frodon建议的,应该被接受。事实上,如果您遵循,您应该使用他的建议,比如:
message=QCoreApplication.translate('Multipart split','Splited{0}多部分功能).format(n个分割的功能)
。许多年后,我的python技能有了一些提高,现在我能够识别您所说的。谢谢正义已经得到伸张。事实上,这个答案可以说是更好的解决方案。为什么?因为
QObject.tr()
被设计破坏,而
QCoreApplication.translate()
则不是。河岸本身使用后者:“PyQt5的行为不令人满意,将来可能会改变。建议使用
translate()
优先于
tr())。这保证可以与PyQT5的当前版本和未来版本一起工作,并且使Python和C++代码之间共享消息文件变得更加容易。
message = QCoreApplication.translate('Multipart split', "Splited %d multipart feature(s)") %(n_of_splitted_features)