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

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

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

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

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

    最佳答案

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

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

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

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

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

    关于c++ - 如何从 Qt 小部件应用程序中的外部文件转换字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48282029/

    10-11 22:55
    查看更多