最近比较懒,公司的事情忙完后,在家也就是看看《Game Engine Architecture》,好久没有写博客了,总算遭到报应了,昨晚腹泻,发烧,冷汗,今天一天班都没上,于是,闲话少说,还是写篇博客吧.......
在不久以前,软件还是由一帮根本不知道世界上存在其他语言的美国人制作的,那时候他们只用ASCII编码去写软件。然后当他们发现世界上还有其他语种的人也需要使用软件,并且也有很大市场以后,出现了多字节的解决方案来解决字符串的国际化问题,但是那是段相当恐怖的日子。再然后,我们有了Unicode,一切就简单了很多。
假如一个软件只支持中文,那么简单的使用unicode的中文去表示UI中的所有字符串就好了,但是要支持多国语言呢?具体说来怎么样才能方便的在不同语言中进行切换呢?
Qt的强大程度在很多方面都远超一个framework应该呆的范围,基本上是一个强大的跨平台解决方案,其中,对于多国语言,Qt的解决方案也是我见过的最好的。
对于Qt的字符串来说,分成两种情况:
1.在Qt Designer中拖放控件时,控件上的字符串。比如,我摆一个label上去,叫做hello world。注意的是需要在translatable属性上打勾(默认就是打勾的),表示可以翻译。
2.在代码里面直接指定的字符串,需要用tr()包含该字符串。比如手动创建一个label,显示Hello World Again!
QLabel *label = new QLabel(this);
label->setText(tr("Hello World Again!"));
label->setGeometry(100, 100, 200, 25);
此时整体程序的显示内容如下:
此时,通过Qt菜单中的(用了qt的Qt Visual Studio Add-in)的Create New Tranlation File,
比如,这里我建了一个中文的文件,叫做qt_linguist_test_zh.ts,在VS中双击此程序,会用Qt Linguist打开此文件,接下来的就简单了:
分别在左边选择字符串所在的context,然后在Strings里面会列出所有可以进行翻译的字符串,在Sources and Forms中甚至还能显示出上下文,帮助你进行翻译。
在下面的translation中写上你想翻译的内容,保存好。
在VS中,用lrelease解析(编译?)此文件
此时,可以在工程目录下看到一个叫做qt_linguist_test_zh.qm的文件,就是刚刚生成的文件。在代码中使用该多国语言的文件实在是简单了,只需要下面几行代码:
QApplication app(argc, argv);
QTranslator translator;
translator.load("qt_linguist_test_zh.qm");
app.installTranslator(&translator);
从此以后,所有的字符串都会按照你翻译过的来显示:
小结:
Qt的多国语言支持主要来源于Qt Linguist这个翻译程序,按照Qt本身的设计,这个程序甚至是交由翻译人员去使用的,和程序员无关,程序方面只需要记得在代码里面的字符串加tr()就行,然后通过lupdate(在上面的例子中用Qt Visual Studio Add-in来完成了)去提取代码中所有可以翻译的字符串,生成ts文件,然后把ts文件交给翻译人员使用即可。其方便性在于不仅是程序员使用方便,还从软件开发流程上让各个环节都有合适易用的工具去高效的完成各自工作......作为程序员,开发一个Qt的多国语言支持的软件几乎没有任何额外的负担..............
分享到:
相关推荐
vc多国语言动态切换的一种实现Stringtable加载实现。
Qt 格式化字符串 - Avatarx - 博客园博客园首页新随笔联系管理订阅随笔- 1695 文章- 0 评论- 3Qt 格式化字符串Qt字符串格式化性能比较
程序实现多国语言的动态切换解决方案 实现思想:传统的做法是把所有的资源都放到动态库中,一种语言一个动态库,程序运行的时候通过加载不同的动态库来实现多语言功能。这样做的缺点是不能动态切换语言,如果更换...
QT中字符串的比较、查找、替换等操作 - 大存的博客QT中字符串的比较、查找、替换等操作转载一千零一夜_阅读数 8077收藏发布于2018-03-06 23:3
QT字符串设置固定宽度,前位补0.7zQT字符串设置固定宽度,前位补0.7z
QT 收到下位机16进制数转换字符串显示,绝对可靠 简单易懂。
解决方案1: length := len(str) array := make([]string , length) for i , v := range str{ array[i] = string(v) } for i := 0 ; i < length/2 ; i++ { array[i], array[length -i - 1] = array[le
创建多国语言中英文界面类,支持MFC各种资源字符串,不同语言配置不同的本地ini文件即可
多国语言字库Windows模拟器使用文档,可以支持全部字模显示,也可以支持字符串的的特效显示,所显示的效果和在嵌入式系统中使用效果完全一样。
获取一个字符串中的数字组 /*输入一个字符串,内有数字和非数字字符,如a123x456_17960? 302tab5876,将其中连续的数字作为一个整数,请统计出一共有多少个整数,输出这些整数,并求出最长的整数的位数。*/
把所有用到的字符串都放到文件中,一种语言一个文件,根据选择的语言到对应的文件中去加载字符串。这样不但可以动态切换语言,而且用户可以根据需要自己添加新的语言。 动态切换对话框上的文字并不需要单独去设置...
新手一枚,最近项目需要十六进制字符串到浮点数的转换,查找参考一些相关资料,顺带整理了一下,就分享出来了。
VC 为程序窗口添加多国... 本源码所演示的方法是把所有用到的字符串都放到文件中,一种语言一个文件,根据选择的语言到对应的文件中去加载字符串。这样不但可以动态切换语言,而且用户可以根据需要自己添加新的语言。
多国语言点阵生成软件FontMaker 1、支持所有 windows 字符集 2、支持 BIN(*.bin), TXT(*.txt), BMP(*.bmp) 文件输出 3、支持unicode字库输出 4、支持单个字符编辑 5、支持字库文件和输出路径记忆功能 6、支持从bdf...
汇编语言开发,实现两个字符串的输入,然后进行字符串的比较,是否在第二个字符串中还有第一个字符串
可以在语言描述文件中使用带参数的字符串,方便的组合出字符串,(用法类似于Format函数)。 所有窗口,与使用了多国语言基类的其它类,都可以在应用程序改变当前语言时,立刻更新为新的语言。 方便的从已有程序...
易语言字符串操作源码,字符串操作,字符串_取长度,字符串_取中间,字符串_取左边,字符串_取右边,字符串_替换,到宽字符,到多字节,取文本数据地址,取字节集数据地址,MultiByteToWideChar,WideCharToMultiByte
C#字符串删除指定字符串|C#字符串删除子字符串
用VC纯资源DLL解决国际化问题_多国语言版.zip
纯C语言实现字符串拆分操作,把字符串拆分成字符串数组,然后再输出。 使用sstream方法,作为底层驱动操作实现非常方便。