应用程序不同部分的不同语言

时间:2013-05-02 09:20:04

标签: c++ qt multilingual

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

  1. 应翻译大部分用户界面以匹配系统区域设置的语言
  2. 该应用程序还可以打印各种表格。这些表格的语言应该可以从UI语言中独立选择(表格将交给那些通常不会说当地语言的人)。
  3. 如果可能的话,对于应用程序中的对话框而言,拥有与前一点相同的功能会很不错。
  4. 我能以什么方式实现这一目标?我发现的所有示例都涉及翻译整个应用程序,但在我的情况下,我需要两个独立的翻译(尽管可能使用相同的语言)。

    我是否需要自己复制QApplication::translate的后备机制并直接使用QTranslator::translate,还是有更方便的方式?

3 个答案:

答案 0 :(得分:5)

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

我想你知道如何动态地改变翻译。

从评论中更新

要创建单独的qm文件,您可以将所有主要源放在一个目录中,将所有对话源放到另一个目录中,然后调用lupdate -no-obsolete -recursive ../src/Form -ts Form_ru.ts,其中../src/Form是对话框目录。甚至可以在文件上调用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

答案 1 :(得分:1)

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

然后在创建打印页面之前将标志设置为要使用的区域设置,然后将其设置回来。

答案 2 :(得分:0)

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

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

这样,可以单独设置语言并翻译两个应用程序。