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

标签 c++ qt qt5 translation

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

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

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

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

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

最佳答案

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

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

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

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

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

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

相关文章:

c++ - 如何在 QStyledItemDelegate 中绘制整行的背景?

python - PySide 在工作线程中等待来自主线程的信号

qt - 如何旋转位图图像

c++ - 错误: 'make_array' 不是 'boost::serialization 的成员

c++ - 在 C++ 中,有两个结构引用彼此的变量

qt - 如何将 QImage 裁剪到其不透明区域?

visual-studio-2010 - Visual Studio 2010、QT 和智能感知/突出显示错误

c++ - 如何在QTreeWidget子项上正确显示QIcon?

c++ - -fno-strict-aliasing 作为函数属性

C++:为什么可以在没有类实例的情况下调用非静态类方法?