如何在 Qt 小部件应用程序中翻译来自外部文件的字符串?

How to translate strings from external files in Qt widgets applications?

我知道 Qt 小部件应用程序通常在编译时和运行时被翻译成多种语言。有很多信息如何通过标记要提取的字符串来做到这一点,包括 official example.

但在这种情况下,没有字符串,而是来自外部(比方说配置)文件的输入,并且 GUI 是在运行时根据其内容构建的。虽然外部文件的内容在运行时是已知的,但是在源代码中没有对应的字符,因此没有任何东西可以被标记为提取。

解决该问题的一种方法是准备与支持的语言一样多的配置文件。但是,最好遵循通常的工作流程,即 to

我找到了一些信息,例如here and ,但是我仍然缺少一个很好的直接方法来实现这一点。

这里有一个比较方便的实现方式:

  1. 创建一个 *.tri(包括翻译)文件并将其添加到 * 的 HEADERS 部分.pro 文件
  2. 使用与外部文件中可翻译字符串相对应的 QT_TRANSLATE_NOOP 条目填充 *.tri 文件。作为上下文,将 class 的名称放在将使用这些字符串的位置,例如MainWindow。如果一个字符串在多个 class 中使用,则为每个 class 添加一个条目
  3. 读取外部文件的内容后,使用<varname>.toUtf8().data()QString变量转换为const char *,以便用作QObject::tr()[=43的参数=]

现在您可以按照通常的工作流程来翻译 Qt 小部件应用程序。

当向外部文件添加新字符串时,不要忘记在 *.tri 文件中添加新条目。

您可以从 here 下载示例。将 data.json 中的语言更改为 endees , pl or ru 每次编译前查看结果。