在某些情况下,我们使用QT开发的界面需要完成多国语言的翻译工作。QT在这方面其实已经给出了支持,本文主要讲述在使用QML编写界面的情况下如何实现多国语言的翻译。

若要实现QT多国语言翻译,必须要搞清楚两个文件: xx.ts和xx.qm文件。xx.ts是翻译的源文件,这个文件其实是一个xml文件,里面写的是源语言和对应的翻译语言。xx.qm文件是最终的发布文件,也是应用程序运行时需要加载的外部文件。下面看一下两种文件的内容:

xx.ts可以使用ultraEdit打开,注意不要转换为DOC格式....,可以看到如下:

xx.ts格式

其中,每一对<context></context>之间为一个.qml或.cpp所包含的所有字符串。两个messag之间为一个翻译区,包含源语言文字和翻译后语言文字。<source>为源语言(此处为英语),<translation type="vanished"> 为要翻译的语言(此处为西班牙语)。若需要增加新的翻译语句,只需要在增加一对<message>xxxx</message>,最简单的方法是复制一对<message>xxxx</message>之间的内容,然后修改源字符串内容和修改后字符串内容。

xx.qm文件为二进制文件,此处不再展示。

下面重点讲一下使用QT完成翻译工作的步骤:

1. QML中所有要翻译的字符串地方需要使用qsTr(字符串),Widget中应该使用tr(字符串)。只要这样才能被QT的翻译工具所识别。

2. 使用命令lupdate生成.ts文件。lupdate会扫描程序中用qsTr()和tr()所指定的字符串,并写入到相应的.ts文件中。此处需注意:使用QTCreator自带的工具-外部-QT语言家-更新翻译功能可能不好用,无法正确的生成完备的.ts文件。(可以下载最新的QT版本试试)。建议使用命令行lupdate命令来实现。windows下的lupdate命令一般位于mingw下(使用QTCreator自带的工具-外部-QT语言家-更新翻译可以找到lupdate所在的路径)。命令使用方式如下:

Linux下: 使用./lupdate test.pro -ts cn.ts, 则会扫描整个工程,并把对应的字符串写入cn.ts文件中。

windows下,使用lupdate test1.qml test2.qml test3.qml -ts cn.ts,则会扫描test1.qml,test2.qml,test3.qml,将三个源文件中的字符串写入cn.ts文件中。windows下对pro文件可能不识别,此时需要对每一个.qml文件单独操作,lupdate默认可以追加填写cn.ts文件。

lupdate, test.pro 与 test1.qml的路径必须要正确,否则找不到对应的命令或文件。

3. 手动进行翻译。第2步操作只是将程序中待翻译的字符串全部汇集到一个xx.ts文件中。还需要对xx.ts中的每一个字符串进行手动翻译。毕竟自动翻译的功能太过强大,目前尚不具备条件。此处有两种方法:

(1)  使用QT的自带的工具进行翻译。使用QT的工具:Linguist。此工具可以打开ts文件,进行逐一翻译。如下图所示:源文是程序中扫描到的字符串,译文是需要自己手动翻译后填写翻译的结果。此处需逐一将待翻译的内容翻译完成并填写至译文处并进行保存。

(2) 使用ultraEdit打开xx.ts文件(注意不要转换格式),填写所有的<translation type="vanished"></translation>之间的内容。

4. 生成qm文件:使用命令行 lrelease cn.ts -qm cn.qm。或者直接使用QTCreator的工具-QT语言家-lrease进行发布生成。会自动在当前程序路径下生成cn.qm文件。

5. 在QT工程的Pro文件中增加TRANSLATIONS += cn.ts。 cn.ts只是示例,你可以改成你自己的.ts文件名。

6. 在main函数中使用如下语句进行加载,注意此时加载的是外部cn.qm文件,如下所示:

           QTranslator tsor;tsor.load("cn.qm");app.installTranslator(&tsor);

注意事项:

必须在main函数中的load qml文件之前加载翻译文件cn.qm,否则无法进行翻译。如果qml界面已经运行起来,然后需要翻译。除了重新加载翻译文件外,需重新加载qml文件,否则无法完成翻译。

7. 发布可执行程序时,记得将xx.ts与xx.qm一并与可执行程序发布,否则程序找不到对应的文件,无法完成翻译工作。另外,建议使用绝对路径查找xx.qm文件,因为你设置自启动程序时,依靠当前路径是找不到cn.qm的。

QT在QML下实现多国语言翻译相关推荐

  1. Qt / Qml 中支持多国语言

    [缘起] 最近找到一个看起来比较好用的开源工具( 然鹅不太会用 ),但整个界面都是英文的. 不过由于是 Qt 写的,所以就尝试自己做些汉化. 然后了解到不少实现多国语言相关的技术( 以及一些坑 (‾◡ ...

  2. Office内嵌12国语言翻译功能----翻译好助手(转)

    Office内嵌12国语言翻译功能----翻译好助手(转)[@more@] 这是Office XP/2003之后才有的超好用功能,但可能很多人都不知道,所以,每次遇到不会念或看不懂的英文.日文,往往束 ...

  3. 在你的项目中使用Crowdin处理多国语言翻译

    在你的项目中使用Crowdin处理多国语言翻译 前言 一.Crowdin平台操作 1.创建仓库 2.翻译文件 二.本地项目操作 1.安装脚手架 2.上传源码 3.下载翻译文件 可能用得到的 前言 Cr ...

  4. (2)esp8266多国语言翻译系统

    http://bbs.mydigit.cn/simple/?t2649513.html 这个想法不错 原来只是想用esp8266搞一个百度的多国语言翻译系统出来的,只是为了尝试如何调用各种web ap ...

  5. 借助Bing Translate API翻译API实现网站多国语言翻译功能

    前几天发了篇<借助Google Translate API实现网站多国语言翻译功能>,但好心人告诉我,谷歌即将关闭一些API,其中就包括谷歌翻译的API,以下是原文: 最近Google宣布 ...

  6. Android多国语言翻译 字符串目录详解

    Android多国语言翻译 国际化 命名规则 values-[ 语言简称]-r[地区] 常用语言 values #默认语言 找不到对应语言就会使用这里 values-ar # 拉伯语 Arabic v ...

  7. android多国语言翻译包命名,android多国语言翻译工具,一键生成28国家翻译6666翻车了...

    最近把软件发到google play苦于多国语言,手动翻译数量太多太蛋疼,因而用百度翻译api进行多国语言翻译.java 很少说直接上代码:json ""; api 匹配的是app ...

  8. 多国语言翻译-多国翻译语言软件免费

    多国语言翻译,今天给大家分享一款免费多国语言翻译,我们为什么要选择这款好用的翻译软件,因为汇集了世界最好的几个翻译平台(百度/谷歌/有道),第一点翻译质量高,选择性多.第二点支持各种语言互译,第三点可 ...

  9. mtk 多国语言翻译工具_多国语言文档工具

    mtk 多国语言翻译工具 With the excellent article by David Hecker on documentation running on SitePoint, it se ...

最新文章

  1. ubuntu 进入 recovery mode
  2. python小游戏代码大全-20行python代码的入门级小游戏的详解
  3. springboot配置文件加载顺序
  4. IDEA如何生成get和set方法
  5. mysql有没有类似merge_有关于Mysql的MERGE表类型
  6. Android代码删除通知,Android:从通知中删除通知b
  7. birt报表的行隐藏和列隐藏以及分组显示
  8. Reachability
  9. 帝国后台报错:out of memory
  10. 报表性能优化方案之善用参数注入
  11. 博客园app for xamarin android
  12. 数字经济时代,达尔文平台助力广告投放走向数智化
  13. packet tracer 学习ARP报文请求
  14. 智能坐便器雷达感应技术,微波雷达感应模组应用,雷达传感器方案
  15. 一些可以参考的文档集合4
  16. Maven压缩资源导致文件损坏的解决
  17. 你的引流话术都不如骗子,你靠什么引流?
  18. java毕业设计‘大学生心理健康咨询管理系统mybatis+源码+调试部署+系统+数据库+lw
  19. Ubuntu18 04安装QQ
  20. 1.2 第一个Windows应用程序实例

热门文章

  1. 使用高德sdk时,提供SHA1
  2. 计算机系统u盘判断,如何在电脑上检测U盘是否是缩水盘
  3. Linux之xinetd安装及实践
  4. 随机数函数rand()和srand()的区别
  5. c 语言友元函数重载,C++友元函数重载++和--运算符
  6. sharedpreferences存不进去_搞笑:主人买了一个钢铁侠模型,小猫咪直接就坐进去了...
  7. windows任务栏透明_如何使Windows 10任务栏完全透明
  8. 2019 Revit二次开发企业
  9. 黑马程序员---网络编程
  10. NUC972触摸屏驱动移植过程分析(三)