QT国际化

本文提及如何使用QT和QT Linguist来实现翻译,如果你对所谓动态翻译感兴趣,请移步到其他文章。笔者也推荐一本叫《精通QT4 GUI 编程》的书,里面第18章有提及动态的(既不用关闭程序实现“一点即换”)翻译。

网上有许多关于QT国际化的文章。这里也简单讲述一次.


1、qm文件和ts文件。

ts文件是程序员是用的翻译文件。你有几种方法可以得到这样的文件。

(1) 针对整个项目:在项目文件中加入TRANSLATION +=  abc.ts(abc是自定的文件名)。那么你可以使用Qt自带的控制台,输入命令lupdate myPro.pro(myPro是自定的项目名称)。Qt就会为你在项目文件的同一目录下生成一个abc.ts文件。输入命令时要么当前目录就是pro文件所在目录,要就在pro文件名前带上绝对或相对路径。

当你lupdate你的pro文件是,Qt会将ui文件中所有的可见字符以及你在程序用使用tr括起来所有字符放入到ts文件中。

(2) 针对单个文件,这只适用于一些特定场景或者个人使用习惯。当你往项目里头添加了新的带有需要翻译文本的文件后,你完全可以直接再次lupdate一次整个项目,Qt不会覆盖你在abc.ts中已经做好的任何翻译。 当然你也可以lupdate单个文件,命令和上一个是一样的 : lupdate  文件的绝对路径或相对路径 -ts 要生成的ts文件名和文件路径,例如:

lupdate ../app/test.cpp  -ts ./testTs.ts

那么Qt就是在你指定的路径下生成你指定的文件名的ts文件。

qm文件是程序能识别的二进制的翻译文件。通过发布一个ts文件来产生。命令很简单:lrelease abc.ts。 那么Qt 会为你在abc.ts的同名目录下生成一个同名的qm文件。qm文件是QTranslator应该读入的文件,关于QTranslator,就移步到Qt的帮助手册吧。

下图是Qt自带的控制台。


2、处理ts文件

处理ts文件当然也有多种方法。你可以使用Qt Linguist打开,也可以使用任何支持XML文本格式的工具打开。个人比较喜欢使用notepad++ 来处理ts文件而不是Qt Linguist(别笑我低端)。

如下是Qt Linguist中打开ts文件的样子 , 黄色的框是你的文件列表,点选文件后会在红色的框内显示所有tr括起来的语句或者是ui中的可见字符串。绿色框是当前翻译中的文本和翻译后的文本。黑色框是文本在代码中的具体位置,帮助你精确翻译,但是这部分常常不可用。那些文件名和源语句前的钩钩只是用来标记完成度的,完成就打成绿色的钩,自己打,但是不影响翻译的。

个人更喜欢用notepad++,顺便一提吧。如下是notepad++打开ts的样子,刚好是一个完整的context。标签是一个文件所有需翻译文本集合的开始标志。标签指明了文件中的类名称。是一条需翻译语句的开始标记。是语句在文件中的行数,因此可能在同一个中出现多次。需翻译的语句,要精确,连空格个数不一样都不能匹配。是翻译后的语句,这个标签一个开始是 ,好像是这样的,表示语句没有翻译好,当你在notepad++中确实完成翻译后记得将type部分删掉,带有这个unfinished标志的语句是即使翻译好也不会被写入qm文件中的。

最后,你需要一个年轻貌美的女同事,既熟悉英文,又温柔体贴。而且不会在你忘得不可开交但剩下30%翻译任务的时候也不肯帮你一把。祝你好运,coder。


3、我的工程使用了Qt的控件,但是Qt的控件中字符都是英文的……

不要紧,到你的Qt安装目录下搜一下.ts文件,你会发现其实Qt已经为我们准备好了非常多的ts文件。刚刚这个问题中,我们就找到qt_zh_CN.ts文件,这是一个有qt控件简体中文翻译的文件。你完全可以把这个文件放到你的工程中去(你不会跟计较那几百k的空间吧!?),然后通过文本工具,往这个文件中添加 , 例如你可以将你的项目的ts文件直接拷贝到qt_zh_CN.ts文件的最后面(为了好找) ,然后lrelease这个qt_zh_CN.ts文件。你就会发现Qt控件中的英文也变成中文了,而且还添加了你自己的部分。


4、我想为我的工程添加繁体翻译

方法同上,不过这次你要找的文件叫qt_ch_TW.ts(Qt在这就做得不对了哈!什么TaiWan 和 China的,都一个地方),这个文件有Qt所有控件的繁体中文翻译。你甚至可以讲qt_zh_CN.ts的内容拷贝到word中,然后简转繁,再覆盖原来的ts文件来完成这个任务。不论怎样,完成繁体翻译吧骚年!


5、关于动态语言切换

个人对这个没有什么认识。但是我只提一个问题:动态翻译是否在你的工程中非有不可? 如果不是,就稍稍偷个懒吧。我的建议有两个,一个比较傻瓜。1.在用户安装你的应用的过程中(安装包),让用户选定一个语言,安装完成后不可以改变。相信这个不会影响用户的使用体验,因为没有人会装B到明明英文不好却是要用英文安装,安装后又作贱地想换回中文的(你?)。 2.在应用中给用户一个设置选项,让用户可以选择语言,但是选择语言后提示需要重启本应用。这个办法比较傻瓜。在用户重启你的应用时,你就有机会让你的QTranslator重新load一个不同的qm文件,这样就可以完成语言切换。个人偏向第一种方法,也稍稍省点心吧,别让自己太容易暴毙吧coder。


6、QTranslator的一些问题

一个QApplication会有一个translator。translator可以remove,也可以install。下面是笔者一个简单的程序来设置语言:

1).先定义我的qm文件的路径先


2).根据系统的QLocale判断应该load哪个qm文件

那个optionManager是用来读注册表的。这个跟应用本身有关。

3). 准备一个接口,然App在启动时load好qm文件。

这样大概就是使用过程了。其他的话聪明的你应该可以理解的了。


7、 哪个QLocale::Language表示中文繁体啊??

这个问题问题得好啊。在Qt的QLocale中的Language枚举中是没有中文繁体的。那怎么办?我这里给有一个不是建议的建议,那就认为,这台机子不是英文和中文的话,就是中文繁体(中文指中文简体)。用一个估计少见的Language表示中文繁体,写注册表时,遇到就这个Language项,就认为是中文繁体。load的时候就用繁体的qm。好了,就说到这个程度,这样的损招再说的话那些老鸟又要表示不屑了。


8、请使用命令行获得.qm文件,而不是QT Linguist的”发布为"或者“另外发布为”~!!

这里很可能是我的机器问题。但是那天工作时遇到的问题确实就在于此。如果你用QT Linguist的发布功能,你可能会和我一样发现很多句子都不能翻译,但是你检查你的ts文件时却没有问题。如果有人看到了这里,并且有机会实践,请帮忙看看情况是不是真的如此。如果可以的话请给我留个言。或者直接向Qt 提BUG。

Enjoy your Qt。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,358评论 0 17
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,587评论 18 399
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 8,144评论 0 17
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,021评论 5 19
  • 我发现“运动”这个项目每隔几年都会被“鸡血”唤醒列入计划,但总是坚持不了几次,哪怕是产后身体酸痛,花了不少钱去上私...
    什么和什么的阅读 248评论 1 2