在VS中实现QT的多国语言翻译
QT的多国语法翻译非常的实用,可以将开发完成的软件,直接翻译成另外一种语言,而不需要更改代码,也就是说一次开发可以同时发布多个语言版本的软件。
- 翻译过程
- 创建翻译文件:从代码中自动提取出能翻译的文本,生成中间ts文件。
- 翻译元素:编辑ts文件,手动翻译每一项。
- 发布(lrelease)翻译好的ts文件,生成qm文件。
- 使用qm文件,翻译相应的文本。
- 注意:能被翻译得文本需要使用特殊标记
1.使用QObject::tr()
或者QApplication::translate()
修饰。例如
label.setText(tr("label"));
pushButton->setText(QApplication::translate("QtDemo", "pushButton"));
翻译详细过程
- 创建新的翻译文件
右击工程 - > create new translation file
- 选择翻译成什么语言:这里从英文翻译到中文
- 双击打开自动生成ts文件,翻译文本
- 发布翻译好的ts文件,自动生成.qm文件(默认在工程目录下)。
- 使用.qm文件,翻译文本。
QTranslator *translator = NULL;translator = new QTranslator;if (translator->load("qtdemo_zh.qm")){qApp->installTranslator(translator);}
翻译完成之后还需要从新绘制界面
void QtDemo::changeEvent(QEvent *e)
{if(e->type() == QEvent::LanguageChange){ui.retranslateUi(this);//更新显示界面}QMainWindow::changeEvent(e);
}
不需要翻译,也可以卸载翻译:qApp->removeTranslator(translator);
中英文实时切换案例
- 头文件
#include <QtWidgets/QMainWindow>
#include "ui_qtdemo.h"class QtDemo : public QMainWindow
{Q_OBJECT
public:QtDemo(QWidget *parent = 0);~QtDemo();void changeEvent(QEvent *e);signals :void chineseAction_triggered(bool checked);void englishAction_triggered(bool checked);
public slots :void on_pushButton_clicked();
private:Ui::QtDemoClass ui;
};
- cpp源文件
#include "qtdemo.h"
#include <QWidget>
#include <QStandardItemModel>
#include <QTreeView>
#include <QAction>
#include <QLabel>
QtDemo::QtDemo(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//connect(ui.actionChinese, SIGNAL(triggered(bool)), this, SIGNAL((chineseAction_triggered(bool))));connect(ui.actionChinese, &QAction::triggered, this, &QtDemo::chineseAction_triggered);connect(ui.actionEnglish, &QAction::triggered, this, &QtDemo::englishAction_triggered);//connect(ui.actionChinese, &QAction::triggered, [this]() {// printf("action chinese triggered\n");// emit chineseAction_triggered(true);//});
}QtDemo::~QtDemo()
{}void QtDemo::changeEvent(QEvent *e)
{if(e->type() == QEvent::LanguageChange){ui.retranslateUi(this);}QMainWindow::changeEvent(e);
}void QtDemo::on_pushButton_clicked()
{}
//void QtDemo::chineseAction_triggered(bool check)
//{// //qApp->installTranslator();
//}
- main函数
#include "qtdemo.h"
#include <QtWidgets/QApplication>
#include <QTranslator>int main(int argc, char *argv[])
{QApplication app(argc, argv);QTranslator *translator = NULL;QtDemo w;QObject::connect(&w, &QtDemo::chineseAction_triggered, [&]() {printf("app Chinese triggered\n");if (!translator){translator = new QTranslator;if (translator->load("qtdemo_zh.qm")){app.installTranslator(translator);}}});QObject::connect(&w, &QtDemo::englishAction_triggered, [&]() {printf("app English triggered\n");if (translator){app.removeTranslator(translator);delete translator;translator = NULL;}});w.show();return app.exec();
}
- 程序效果
参考资料
Qt 多语言切换——Qt语言家
QT in VS 多语言实现(中英文切换
在VS中实现QT的多国语言翻译相关推荐
- VS中使用QT,多国语言翻译问题
VS版本:VS2010 Qt版本:Qt5.5.1 例 子:英译汉 以下介绍是我站在巨人们的肩膀上,并结合自己在工作中所遇到的问题作出的总结. 在VS中使用Qt编程,VS是不支持中文格式的,所以遇到了语 ...
- 在你的项目中使用Crowdin处理多国语言翻译
在你的项目中使用Crowdin处理多国语言翻译 前言 一.Crowdin平台操作 1.创建仓库 2.翻译文件 二.本地项目操作 1.安装脚手架 2.上传源码 3.下载翻译文件 可能用得到的 前言 Cr ...
- QT在QML下实现多国语言翻译
在某些情况下,我们使用QT开发的界面需要完成多国语言的翻译工作.QT在这方面其实已经给出了支持,本文主要讲述在使用QML编写界面的情况下如何实现多国语言的翻译. 若要实现QT多国语言翻译,必须要搞清楚 ...
- QT实现多国语言的动态切换
摘要:本文论述了如何使用QT实现程序的多语系支持以及多语系的动态切换. 前沿 我们生活中用到的程序大多都是支持单一语言的,比如在中国我们用到的软件大多是汉语的,也有很少部分使用的是英语的,但是很少有软 ...
- 威纶触摸屏中如何组态设置多国语言进行切换?
威纶触摸屏中如何组态设置多国语言进行切换? 如果我们在做一些出口的项目时,需要在触摸屏的画面中显示其他的语言,那么如何进行组态设置呢? 我们举个简单的例子来进行说明: 如下图所示,我们新建一个项目,然 ...
- c 程序多语言,怎样在程序中利用C支持多国语言
怎样在程序中利用C支持多国语言 本文以emule为例,探讨一下多国语言支持的实现.选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换.而且最关键,它是开源的,可以直接通过源码来研究它的 ...
- Office内嵌12国语言翻译功能----翻译好助手(转)
Office内嵌12国语言翻译功能----翻译好助手(转)[@more@] 这是Office XP/2003之后才有的超好用功能,但可能很多人都不知道,所以,每次遇到不会念或看不懂的英文.日文,往往束 ...
- android多国语言翻译包命名,android多国语言翻译工具,一键生成28国家翻译6666翻车了...
最近把软件发到google play苦于多国语言,手动翻译数量太多太蛋疼,因而用百度翻译api进行多国语言翻译.java 很少说直接上代码:json ""; api 匹配的是app ...
- 多国语言翻译-多国翻译语言软件免费
多国语言翻译,今天给大家分享一款免费多国语言翻译,我们为什么要选择这款好用的翻译软件,因为汇集了世界最好的几个翻译平台(百度/谷歌/有道),第一点翻译质量高,选择性多.第二点支持各种语言互译,第三点可 ...
最新文章
- Scala in depth 6 Scala的类型系统 上
- docker之Dockerfile实践
- LeetCode-53. 最大子序和-最简单的动态规划(Python3)
- 关于持续集成,质量管理,工具等
- string容量JAVA_java的StringBuilder类的长度和容量有什么区别呢?
- 《Attention Is All You Need》
- MySQL 5.7 免安装版配置
- Linkedin如何避免封号
- 高手过招 放“码”出击 | 2022 Google 全球编程比赛集结倒计时!
- java mac air_敲代码的Macbook Air2020终于到啦
- 基于模型的软件开发方法综述
- Hashcat密码破解攻略
- 计算机网络——应用层之万维网(WWW)
- [转]100本名著浓缩成了100句话
- o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task
- NB-IOT的背景基础知识
- 常用电子元器件应用要点及识别方法
- python 期权量化交易_两种欧式期权的四种支付方式以代码实现
- Vue小黑记事本案例
- win下bat批量重命名文件