14

我有一个多语言 Qt 应用程序,但我遇到以下问题

  1. 大部分 UI 应被翻译以匹配系统区域设置的语言
  2. 该应用程序还可以打印各种表格。这些表单的语言应该可以从 UI 语言中独立选择(这些表单将交给经常不会说当地语言的人)
  3. 如果可能的话,如果应用程序中的对话框也具有与前一点相同的功能,那就太好了。

我可以通过什么方式实现这一目标?我发现的所有示例都涉及翻译整个应用程序,但就我而言,我需要两个独立的翻译(尽管可能翻译成相同的语言)。

QApplication::translate是否需要复制自己的回退机制QTranslator::translate直接使用,还是有更方便的方法?

4

3 回答 3

5

假设您需要对整个应用程序进行一种翻译,而对对话需要另一种翻译。您需要做的是创建两个 qm 文件:一个包含除此对话框之外的所有内容的翻译,另一个包含仅针对此对话框的翻译。现在您可以单独加载/卸载此 qm 文件。

我猜您知道如何动态更改翻译。

从评论更新

要创建单独的 qm 文件,您可以将所有主要源放在一个目录中,将所有对话源放在另一个目录中,然后调用lupdate -no-obsolete -recursive ../src/Form -ts Form_ru.ts,其中../src/Form是 dialogs 目录。甚至调用lupdate -no-obsolete ../src/Form.ui ../src/Form.cpp ../src/Form.h -ts Form_ru.ts文件。

结果脚本将是这样的:

lupdate -no-obsolete -recursive ../test.pro -ts test_ru.ts
lupdate -no-obsolete ../Form.ui ../Form.cpp ../Form.h -ts Form_ru.ts
于 2013-05-05T05:44:14.873 回答
1

由于 QTranslator 类具有用于翻译的虚函数。您可以从 QTranslator 继承并重载 translate 函数以返回所需的每个语言环境的语言字符串,具体取决于您在继承的类中设置的标志。

然后,在创建要打印的页面之前将标志设置为要使用的语言环境,然后再将其设置回来。

于 2013-05-02T12:29:33.673 回答
0

我不确定这是否是一个选项,但您可以将您的应用程序分成两个:

  • 一个应用程序只打印表格
  • 另一个应用程序是带有控件的 GUI

这样,独立设置语言并翻译两个应用程序很简单。

于 2013-05-10T19:57:46.463 回答