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

时间:2018-01-16 13:08:28

标签: c++ qt qt5 translation

我知道Qt小部件应用程序通常在编译时和运行时都被翻译成多种语言。有很多信息可以通过标记提取字符串来实现,包括official example

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

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

  • 准备文件,比方说,英文,
  • 将字符串导出到应用程序使用的 ts 文件
  • 发布翻译,最后
  • 能够使用已安装的翻译器翻译文件中的输入。

我找到了一些信息,例如herehere,但我仍然缺少一种直截了当的方法来实现这一目标。

1 个答案:

答案 0 :(得分:1)

以下是一种以相对方便的方式实现此目的的方法:

  1. 创建 *。tri (翻译包含)文件并将其添加到 * .pro 文件的 HEADERS 部分
  2. 使用对应于外部文件中可翻译字符串的QT_TRANSLATE_NOOP条目填充 *。tri 文件。作为上下文,将使用这些srtings的类的名称,例如, MainWindow。如果在多个类中使用字符串,请为每个类添加一个条目
  3. 阅读外部文件的内容后,使用QStringconst char *变量转换为<varname>.toUtf8().data(),以便用作QObject::tr()的参数
  4. 现在,您可以按照通常的工作流程来翻译Qt小部件应用程序。

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

    您可以从here下载示例。将 data.json 中的语言更改为 en de es pl 或者在每次编译之前 ru 并查看结果。