首页 > 学院 > 开发设计 > 正文

Qt实现多国语言切换

2019-11-08 01:03:24
字体:
来源:转载
供稿:网友

新建项目

要想进行翻译的文字必须用tr()进行包裹,ui界面中的文字有设置是否进行翻译的选项,默认是选中的 这里写图片描述 这里写图片描述

生成语言包

切换到所在的项目,输入

lupdate test.PRo -ts zh-CN.ts

其中test.pro是项目的名字,en.ts是你想生成的语言包的名字 这里写图片描述 项目中会多了一个ts文件 这里写图片描述 为了对文字进行翻译,你可以直接打开这个文件进行编辑,也可以用Qt安装目录下的linguist.exe打开进行编辑,LZ用linguist.exe编辑,看看文件发生了哪些变化,以后直接修改文件即可 LZ用的是Qt5.7,linguist.exe的位置是,仅供参考

D:/Qt5.7/5.7/mingw53_32/bin

编辑前

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS version="2.1"><context> <name>MainWindow</name> <message> <location filename="mainwindow.ui" line="14"/> <source>MainWindow</source> <translation type="unfinished"></translation> </message> <message> <location filename="mainwindow.ui" line="27"/> <source>this is a demo to show language switch</source> <translation type="unfinished"></translation> </message> <message> <location filename="mainwindow.ui" line="40"/> <source>ok</source> <translation type="unfinished"></translation> </message></context></TS>

编辑后

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS version="2.1" language="zh_CN"><context> <name>MainWindow</name> <message> <location filename="mainwindow.ui" line="14"/> <source>MainWindow</source> <translation type="unfinished">主窗口</translation> </message> <message> <location filename="mainwindow.ui" line="27"/> <source>this is a demo to show language switch</source> <translation type="unfinished">这是一个语言切换的例子</translation> </message> <message> <location filename="mainwindow.ui" line="40"/> <source>ok</source> <translation type="unfinished">确定</translation> </message></context></TS>

所以用软件翻译也只是给XML标签赋值,你可以直接赋值 在test.pro文件最后加上

TRANSLATIONS = zh-CN.ts

如果有多个语言包,中间用/分隔即可

TRANSLATIONS = en.ts / zh-TW.ts

接着就是发布翻译了,输入下面即可

lrelease zh-CN.ts -qm zh-CN.qm

这里写图片描述 文件下多了一个qm文件 这里写图片描述 这里写图片描述 这里写图片描述

源码

mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QTranslator>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); //语言切换的标志位 int type = 1; QTranslator myTranslator;private slots: //点击按钮实现语言切换 void on_okBtn_clicked();private: Ui::MainWindow *ui;};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this);}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_okBtn_clicked(){ if (type) { myTranslator.load("../test/zh-CN.qm"); qApp->installTranslator(&myTranslator); ui->retranslateUi(this); type = 0; } else { qApp->removeTranslator(&myTranslator); ui->retranslateUi(this); type = 1; }}

main.cpp

#include "mainwindow.h"#include <Qapplication>#include <QTranslator>#include <QDebug>int main(int argc, char *argv[]){ QApplication a(argc, argv); //如果想一开始就加载语言包,可以用下面的方法,但没想到卸载语言包的方法 /*QTranslator translator; bool flag; //我这里用的是相对路径,一开始就加载为英文 flag = translator.load("../test/zh-CN.qm"); if (flag) qDebug() << "加载成功"; a.installTranslator(&translator);*/ MainWindow w; w.show(); return a.exec();}

参考文献

[1]http://www.cnblogs.com/oloroso/p/4596740.html [2]http://blog.csdn.net/csf111/article/details/7752839 [3]http://blog.csdn.net/houqd2012/article/details/37660589 [4]http://blog.csdn.net/sinat_35523212/article/details/52348934


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表