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

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

本文关键字:外部 翻译 文件 字符串 应用程序 Qt 小部      更新时间:2023-10-16

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

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

解决此问题的一种方法是准备尽可能多的配置文件,只要有支持的语言。但是,遵循通常的工作流程会好得多,即

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

我找到了一些信息,例如 这里 和 这里,但是我仍然缺少一种很好的直接方法来实现这一目标。

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

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

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

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

您可以从此处下载示例。在每次编译之前将data.json中的语言更改为endeesplru,并查看结果。