当前位置:编程学习 > wap >>

Qt之多语化详解(附源码)

    对于绝大多数的应用程序,在main()中检测首选语言并进行加载是非常必要的!但在一些情况下,用户也需要动态的切换语言的功能,如果能够做到不重启应用程序而实现语言的动态切换,那么软件至少在切换语言方面的易用性可以说是接近完美的。
    总结一下:
(1)动态切换语言,即:当需要改变语言的时候,不需要重启软件就可以实现不同语言之间的切换。
(2)在应用程序首次启动的时候,加载用户最后一次选择的语言。

    要进行多语化的切换,比加载一个单一的翻译文件要稍微复杂一些,但也并不困难,需要做以下几件事:
(1)对用户可见的文本信息全部使用tr()进行封装
(2)提供用户可以用来切换语言的一种方法
(3)对于每一个窗口部件或者对话框,把它所有可翻译的字符串放在一个单独的函数中,当语言发生改变的时候调用此函数即可。
    如果细心的朋友可以发现,我博客分享的代码中通常都会有一个公用的方法translateLanguage(),此函数就只用来切换语言的。
    
    现在开始手把手教你动态切换!
(1)创建主界面、设置界面(切换语言一般是属于设置部分)
(2)每一个窗口部件或者对话框,把它所有可翻译的字符串放在一个单独的函数中,此处使用translateLanguage()。

    实现方式:根据选择不同下拉语言选项实现语言的动态切换!

博客讲解地址:http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html
源码地址:http://download.csdn.net/detail/u011012932/5995043

截图:

Qt 多语化 Qt多语化 --------------------编程问答-------------------- 学习了,谢谢分享 --------------------编程问答--------------------
引用 1 楼 heksn 的回复:
学习了,谢谢分享

呵呵,不客气。。。 --------------------编程问答-------------------- 厉害啊 --------------------编程问答-------------------- 好文章!调理清楚,代码清晰! --------------------编程问答--------------------
引用 4 楼 commonusers 的回复:
好文章!调理清楚,代码清晰!

--------------------编程问答-------------------- 我的问题是多个模块都涉及到翻译,也就是有多个.ts文件,怎么只生成一个语言文件呢,也就是一个.qm? --------------------编程问答-------------------- 为什么要创建多个ts呢?只创建一个就好了!也方便。
如果多个ts就会生成多个qm,就得分别进行加载!
你好好看看我的博客,ts、qm都是怎么用的!
http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html --------------------编程问答--------------------
引用 7 楼 u011012932 的回复:
为什么要创建多个ts呢?只创建一个就好了!也方便。
如果多个ts就会生成多个qm,就得分别进行加载!
你好好看看我的博客,ts、qm都是怎么用的!
http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html


是因为多个模块(exe,dll)都有需要翻译的字符串,不就得多个ts吗?难道可以只生成一个ts?你的blog介绍着一点了吗,我得看看 --------------------编程问答--------------------
引用 8 楼 accsoar 的回复:
Quote: 引用 7 楼 u011012932 的回复:

为什么要创建多个ts呢?只创建一个就好了!也方便。
如果多个ts就会生成多个qm,就得分别进行加载!
你好好看看我的博客,ts、qm都是怎么用的!
http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html


是因为多个模块(exe,dll)都有需要翻译的字符串,不就得多个ts吗?难道可以只生成一个ts?你的blog介绍着一点了吗,我得看看

多个模块(exe,dll),如果是多个exe,那就多个ts了,但软件一般都是一个exe,只不过可以调用多个dll而已,你说的那种情况我没做过! --------------------编程问答--------------------
引用 9 楼 u011012932 的回复:
Quote: 引用 8 楼 accsoar 的回复:

Quote: 引用 7 楼 u011012932 的回复:

为什么要创建多个ts呢?只创建一个就好了!也方便。
如果多个ts就会生成多个qm,就得分别进行加载!
你好好看看我的博客,ts、qm都是怎么用的!
http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html


是因为多个模块(exe,dll)都有需要翻译的字符串,不就得多个ts吗?难道可以只生成一个ts?你的blog介绍着一点了吗,我得看看

多个模块(exe,dll),如果是多个exe,那就多个ts了,但软件一般都是一个exe,只不过可以调用多个dll而已,你说的那种情况我没做过!


是我没说清楚,其实就是一个exe,多个dll而已,在这个exe和其他几个dll中都有需要翻译的字符串,我不知道怎么让它们只生成一个ts…… --------------------编程问答--------------------
引用 10 楼 accsoar 的回复:
Quote: 引用 9 楼 u011012932 的回复:

Quote: 引用 8 楼 accsoar 的回复:

Quote: 引用 7 楼 u011012932 的回复:

为什么要创建多个ts呢?只创建一个就好了!也方便。
如果多个ts就会生成多个qm,就得分别进行加载!
你好好看看我的博客,ts、qm都是怎么用的!
http://blog.sina.com.cn/s/blog_a6fb6cc90101f89v.html


是因为多个模块(exe,dll)都有需要翻译的字符串,不就得多个ts吗?难道可以只生成一个ts?你的blog介绍着一点了吗,我得看看

多个模块(exe,dll),如果是多个exe,那就多个ts了,但软件一般都是一个exe,只不过可以调用多个dll而已,你说的那种情况我没做过!


是我没说清楚,其实就是一个exe,多个dll而已,在这个exe和其他几个dll中都有需要翻译的字符串,我不知道怎么让它们只生成一个ts……

那是一样的道理,翻译的时候,先加载所有的qm,然后,调用相应dll的翻译程序就好了!

qm加载的位置就是红线圈的地方,然后调用dll进行翻译!
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,