qt 多语化

    最近项目使用的qt版本升级,导致了界面乱码问题,因此最后决定利用qt的多语化机制,来解决乱码问题,首先感谢这两篇文字的帮助,在此加上作者链接:Qt之多语化Qt多国语言的实现与切换(国际化)
    在项目多语化的文章开始编写之前,我说下qt多语化的思路,很简单,就3步,首先,从项目中获取字符串,然后编辑*.ts文件,填写需要翻译的字符串和对应的翻译后字符串,最后就是更新到项目中
    接下来,我详细介绍vs2013+qt5多语化的每一个步骤

1、创建语言文件,如下图,然后translate_zh.hs文件执行lupdate操作,获取工程字符串到该ts文件

  qt <wbr>多语化

qt <wbr>多语化

2、编辑翻译文件

  启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存

3、部署翻译文件

  工具->外部->Qt语言家->部署翻译,将生成语言文件qm

注:随时可以重复“2”~“3”步骤以便更新翻译

下面是qt多语化的一个简单事例,效果如下:

qt <wbr>多语化qt <wbr>多语化

qt <wbr>多语化

qt <wbr>多语化
qt <wbr>多语化

qt <wbr>多语化
qt <wbr>多语化
上图中英文显示的时候,有部分中文的原因是,qm文件在配置英文ts文件时的原因,为了演示,故意设置了部分翻译,部分没有翻译,下面贴上程序代码.

main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator translator;
    bool b = false;
    b = translator.load(":/translate/translate_zh.qm");
    a.installTranslator(&translator);
   
    translate w;
    w.SetCurrentTranslate(&translator);
    w.show();

    return a.exec();
}

translate .h

 1 class translate : public QWidget
 2 {
 3     Q_OBJECT
 4 
 5 public:
 6     translate(QWidget *parent = 0);
 7     ~translate();
 8 
 9 public:
10     void SetCurrentTranslate(QTranslator * translator);
11 
12 private slots:
13     void CurrentLanguageChanged(int);
14 
15 private:
16     void Translate();
17 
18 private:
19     Ui::translateClass ui;
20     QTranslator * translator;
21 };
View Code
translate.cpp
 1 translate::translate(QWidget *parent)
 2     : QWidget(parent)
 3 {
 4     ui.setupUi(this);
 5 
 6     ui.comboBox_langugeType->addItem(tr("chinese"));
 7     ui.comboBox_langugeType->addItem(tr("english"));
 8 
 9     connect(ui.comboBox_langugeType, static_cast(&QComboBox::currentIndexChanged)
10             , this, &translate::CurrentLanguageChanged);
11 }
12 
13 translate::~translate()
14 {
15 
16 }
17 
18 void translate::SetCurrentTranslate(QTranslator * translator)
19 {
20     this->translator = translator;
21     this->Translate();
22 }
23 
24 void translate::CurrentLanguageChanged(int index)
25 {
26     switch (index)
27     {
28     case 0:
29     {
30               translator->load(":/translate/translate_zh.qm");
31     }
32         break;
33     case 1:
34     {
35               translator->load(":/translate/translate_en.qm");
36     }
37         break;
38     }
39     this->Translate();
40 }
41 
42 void translate::Translate()
43 {
44     ui.comboBox_langugeType->setItemText(0, tr("chinese"));
45     ui.comboBox_langugeType->setItemText(1, tr("english"));
46     ui.label_tip->setText(tr("label"));
47     ui.label->setText(tr("language:"));
48     ui.pushButton_ok->setText(tr("ok"));
49     ui.pushButton_quit->setText(tr("quit"));
50 }
View Code
  

     经此一用,中文到控件上乱码的问题也顺带完美解决了,享受了一次轻松多国语实现的过程qt <wbr>多语化qt <wbr>多语化


原文地址:https://www.cnblogs.com/swarmbees/p/5621413.html