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

Ale*_*eto 5 python translation pyqt

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

message = QCoreApplication.translate('Multipart split',"No multipart features selected.")
Run Code Online (Sandbox Code Playgroud)

如何准备动态字符串,如下所示,

message = "Splited " + str(n_of_splitted_features) + " multipart feature(s)" 
Run Code Online (Sandbox Code Playgroud)

翻译,而不需要打破每个子字符串,像这样

message = QCoreApplication.translate('Multipart split','Splited ') + str(n_of_splitted_features) + QCoreApplication.translate('Multipart split', 'multipart feature(s)')
Run Code Online (Sandbox Code Playgroud)

这似乎不是最好的选择。

我发现在 C++ 中使用tr()with .arg(),可以这样做:

statusBar()->showMessage(tr("Host %1 found").arg(hostName))
Run Code Online (Sandbox Code Playgroud)

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

Fro*_*don 5

format对方法的结果尝试命令tr

statusBar().showMessage(tr("Host {0} found").format(hostName))
Run Code Online (Sandbox Code Playgroud)

文件中的翻译ts也应包含该{0}字符串。

编辑:使用Python 2.7(显然还有Python 3),如果你看起来只有一个参数,你可以简单地键入{}而不需要。0正如塞西尔提到的,保留数字以{}应对国际化。

  • “...您只需输入不带 0 的 `{}` 即可。” **不。切勿这样做。** 用于国际化的参数应该“始终”明确编号(例如“{0}”而不是“{}”)。为什么?因为非英语语言可能会以不同的顺序插入参数,在这种情况下,隐式编号的“{}”样式参数将“不可”翻译。有关演示两个英语和挪威语句子之间差异的真实示例,请参阅 [*"使用编号参数。"*](https://doc.qt.io/qt-5/i18n-source-translation.html#使用编号参数) (4认同)