Qt中,软件多语言国际化翻译的方法与步骤

在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作。虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法和步骤,用以备忘和参考。

我们通常在写程序时,为了正常显示中文,一般会直接用到类QTextCodec和tr()函数,其实这只是一种临时的做法,方便我们快速完成程序、显示效果。当要真正发布一个程序时,最好的方式是在程序中使用英文字符串,再使用国际化工具进行翻译。

1.软件国际化的方法
在Qt中,所有的输入部件和文本绘制方式对对所有支持的语言都提供了内置支持,Qt内置的字体引擎可以在同一时间正确而精细地绘制不同的文本。在Qt项目开发过程中,我们可以使用Qt Linguist工具来完成应用程序的翻译工作。

在Qt中编写代码时,要对需要显示的字符串调用tr()函数,完成代码编辑后,对这个应用程序的翻译主要分三个步骤:

在CMD中运行lupdate工具,从源代码中提取要翻译的文本,这里会生成一个.ts文件,此文件格式是xml格式;
在Qt Linguist中打开.ts文件,并完成翻译工作;
在CMD中运动lrelease工具,从.ts文件中生成一个.qm文件,它是一个二进制文件,用于程序运行时使用。
其中,.ts文件和.qm文件都是平台无关的 。

2.具体实例实现步骤
新建Qt Gui应用,项目名称为myI18N,类名为MainWindow,基类保持QMainWindow不变。
建立完项目后,点击mainwindow.ui文件进入设计模式,先添加一个&File菜单,再为其添加一个&New子菜单并设置快捷键为Ctrl+N,然后往界面上拖入一个Push Button 。
下面我们再使用代码添加几个标签,打开mainwindow.cpp文件,添加头文件#include ,然后在构造函数中添加代码:

label = new QLabel(this);
label->setText(tr(“helllo QT”));
label->move(100,50);
label2 = new QLabel(this);
label2->setText(tr(“password”,“mainwindow”));
label2->move(100,80);
label3 = new QLabel(this);
int id = 123;
QString name = “wusanlang”;
label3->setText(tr(“ID is %1, Name is %2”).arg(id).arg(name));
label3->resize(180,20);
label3->move(100,120);

这里值得注意的是tr()函数是不止一个参数的,其原型为:

QString QObject::tr(const char *sourceText, const char *disambiguation = Q_NULLPTR, int n = -1)
第一个参数sourceText就是要显示的字符串,tr()函数会返回sourceText的译文;第二个参数disambiguation是消除歧义字符串,比如这里的password,如果一个程序中需要输入多个不同的密码,那么在没有上下文的情况下,就很难确定这个password到底指哪个密码。这个参数一般使用类名或者部件名,比如这里使用了mainwindow,就说明这个password是在mainwindow上的;第三个参数n表明是否使用了复数,因为英文单词中复数一般要在单词末尾加“s”,比如“1 message”,复数时为“2 messages”。遇到这种情况,就可以使用这个参数,它可以根据数值来判断是否需要添加“s”。

程序运行结果如下图所示。

源程序编写完成后,我们在.pro文件中指定生成.ts文件的名字,即在文件中添加语句:
TRANSLATIONS = myI18N_zh_CN.ts //文件名可以随意,但要注意区分
在CMD中执行lupdate.exe程序,生成.ts文件。如下图所示:

这时使用Qt Linguist 打开.ts文件进行翻译 ,翻译完成后保存。
翻译完成后,使用lrelease.exe程序,生成.qm文件。如下图所示:

在项目程序中,添加.qm文件来改变程序的语言。
在使用qm文件时,要用到QTranslator类,其使用方法为:

int main(int argc, char *argv[])
{QApplication a(argc, argv);         //全局对象指针是宏qAppQTranslator translator;translator.load("../myI18N_zh_CN.qm");a.installTranslator(&translator);MainWindow w;w.show();return a.exec();
}

本测试项目中,我自己制作了,通过点击按钮来实现中英文的切换,其按钮槽函数为实现如下:

void MainWindow::on_pushButton_clicked()
{QTranslator translator;if(m_bTranslator)    //翻译成中文{translator.load("../myI18N_zh_CN.qm");qApp->installTranslator(&translator);ui->retranslateUi(this);//自己添加非ui控件的动态翻译label->setText(QApplication::translate("MainWindow", "helllo QT", Q_NULLPTR));label2->setText(QApplication::translate("MainWindow", "password", Q_NULLPTR));label3->setText(QApplication::translate("MainWindow", "ID is %1, Name is %2", Q_NULLPTR));}else{qApp->removeTranslator(&translator);ui->retranslateUi(this);//自己添加的非ui控件的动态翻译label->setText(QApplication::translate("MainWindow", "hello QT", Q_NULLPTR));label2->setText(QApplication::translate("MainWindow", "password", Q_NULLPTR));label3->setText(QApplication::translate("MainWindow", "ID is %1, Name is %2", Q_NULLPTR));}m_bTranslator = !m_bTranslator;
}

其具体的项目Demo程序包,我以私信我索取。

Qt国际化翻译并不难,本文主要总结归纳一下,以便备忘和后期参考。

Qt Linguist工具使用

包含:lupdate与lrelease
1.Qt Creator集成开发环境中:工具->外部->Qt语言专家->lupdate

2.Qt Creator集成开发环境中:文件->打开文件->myI18N_zh_CN.ts

编辑进行翻译

3.Qt Creator集成开发环境中:工具->外部->Qt语言专家->release

Qt中,软件多语言国际化翻译的方法与步骤相关推荐

  1. qt 判断路径非英文符号与非英文字符_Qt中,软件多语言国际化翻译的方法与步骤...

    总第23篇 在Qt的项目开发过程中,有时软件要翻译成多语言版本,这就涉及到国际化方面的操作.虽然Qt对这方面集成了很多工具,操作起来比较方便,本文还是总结一下国际化的方法和步骤,用以备忘和参考. 我们 ...

  2. 小结两种在Python中导入C语言扩展库的方法

    小结两种在Python中导入C语言扩展库的方法 分类: Pythoner2009-08-18 20:44 2563人阅读 评论(1) 收藏 举报 python扩展c语言importstring 一种是 ...

  3. php c扩展的方式,php中使用C语言写扩展的方法

    php中使用C语言写扩展的方法 发布时间:2020-08-20 15:49:21 来源:亿速云 阅读:102 作者:小新 小编给大家分享一下php中使用C语言写扩展的方法,相信大部分人都还不怎么了解, ...

  4. Qt中“调试器未设置”的解决方法

    Qt中"调试器未设置"的解决方法 1.问题的提出 QtCreator + Qt5 进行开发.然而,在此过程中,我发现程序按F5可以直接运行.但设置断点进入调试模式时,却弹出&quo ...

  5. 3dmax软件导入图片为背景的方法与步骤

    3dmax软件导入图片为背景的方法与步骤.有需要的小伙伴们快和小编一起来看看吧! 3dmax软件导入图片为背景的方法如下: 步骤一.双击桌面的3dmax软件图标,打开软件.选择一个视图,我们可以选择3 ...

  6. 如何设置Qt程序软件的语言翻译(Qt自带翻译软件)

    文章目录 01 - 目的和说明 02 - 过程步骤 03 - 链接分享 01 - 目的和说明   目的:可以由用户通过互斥按钮选择界面显示语言,中文或英文(如需要其它语言,则需要稍作修改).   说明 ...

  7. Qt中使用html语言对word进行图表操作

    参考文献: http://www.cnblogs.com/softwaretesting/archive/2011/07/29/2121593.html http://www.2cto.com/kf/ ...

  8. 中泰语快速进行在线翻译的方法

    泰国离我国的地理位置较近,加上那里的环境.文化别具特色,所以许多人都想去泰国旅游.但是如何快速将中泰语言在线翻译,这让不少人对旅游这件事产生了退意.毕竟泰国再好玩,你不懂泰语也是徒劳,所以今天小编要教 ...

  9. 在Windows中测试c语言单个函数运行时间方法

    在做单片机项目开发的过程中,在特殊应用中对代码执行的时间有着严格的要求,那么如何准确的测试出每个函数的的运行速度是多快呢?通常用单片机测试的方法就是通过示波器观察. 比如现在要测试使用二分查找法,在数 ...

最新文章

  1. loadrunner中的c函数----从参数列表中取参数并与特定字符进行字符串比较。
  2. zookeeper安装_Linux下安装zookeeper
  3. 分享一些Java开发人员在编程中最容易踩雷的地方!
  4. Python+Django+Nginx+Uwsgi 详细部署过程(爬坑过程,可以了解各个软件的执行流程,看过)
  5. C++ Primer 第五版 第6章 6.7——函数指针阅读笔记
  6. java对日期设置时间和对日期加减周
  7. Java多线程问题之同步器CyclicBarrier
  8. Java环境变量配置
  9. AJAX网页抓取工具 Krabber 0.2.9正式发布
  10. 关于spyder打不开的问题
  11. FORECAST函数预算产品的使用寿命测试值
  12. Windows+GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
  13. 迎接“119”消防宣传日|助力企事业单位实现消防安全,前景互联在行动
  14. 梳理:WPS JS宏之WPS表格单元格读写值
  15. 基于Python的毕业论文怎么写?
  16. TabLayout 设置指示器宽度问题
  17. 基于WebGL架构的3D可视化ThingJS平台—粮仓3D场景
  18. Numpy 100道练习题+常用知识点
  19. 通过自定义csl文件解决Mendeley使用GB/T 7714-2005时出现“等”而不是et al的问题
  20. 10个实用的UX设计作品推销小窍门

热门文章

  1. Windows10神州网信政府版麦克风、摄像头的使用
  2. 3.13 使用画笔工具绘制艺术线条 [Illustrator CC教程]
  3. 荣耀8怎么有个卡显示无服务器,荣耀手机隐藏的这8大逆天功能,如果没用过手机就算白买了...
  4. html5中怎么制作一个盒子,亲手制作一个折纸盒子超有成就感 这个教程超级简单的...
  5. .linux重命名文件命令,Linux rename命令文件重命名的用法汇总
  6. Java探针--javaagent--使用/实例
  7. 对称思维的妙用之从解题到本质(四)——用三个套路秒杀一众问题
  8. 计算机科学与技术这个专业哪个大学最好,计算机科学与技术专业哪个大学好
  9. 基于Android的中小学家校互动平台的设计与实现
  10. 面试:Android补间动画、属性动画的原理