我知道 Qt 小部件应用程序通常在编译时和运行时被翻译成多种语言。有很多信息如何通过标记要提取的字符串来做到这一点,包括 official example .
但在这种情况下,没有字符串,而是来自外部(比方说配置)文件的输入,并且 GUI 是在运行时根据其内容构建的。虽然外部文件的内容在运行时是已知的,但是在源代码中没有对应的字符,因此没有任何东西可以被标记为提取。
解决该问题的一种方法是准备与支持的语言一样多的配置文件。然而,遵循通常的工作流程会好得多,即
- 用英语准备文件,
- 将字符串导出到应用程序使用的 ts 文件,
- 发布翻译,最后
- 能够使用安装的翻译器翻译文件中的输入内容。
最佳答案
这里有一个比较方便的实现方式:
- 创建一个*.tri(翻译包括)文件并将其添加到您的*.pro 文件的HEADERS 部分
- 用 QT_TRANSLATE_NOOP 填充 *.tri 文件与外部文件中的可翻译字符串相对应的条目。作为上下文,放置将使用这些 srting 的类的名称,例如
MainWindow
.如果一个字符串在多个类中使用,则为每个类添加一个条目 - 读取外部文件的内容后转换
QString
变量到const 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/