• 8286阅读
  • 6回复

[提问]关于Qt国际化的机制的问题 [复制链接]

上一主题 下一主题
离线318065268
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-23
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
Qt国际化,我们通常都知道,字符串包上tr,然后翻译源文件,然后加载一个翻译文件即可实现翻译。
但是大家仍然会很疑问,我这样做了:
QTranslator translator;
qApp.installTranslator(&translator);
translator.load("myChinese.qm");
但是为什么我的界面上的文字不变呢?

加载是应该的,没有显示也是正常的,关键在于,这时候我们需要重新给我们的界面设置一下文本。
比如,我们接着上面的代码:
button->setText(tr("Hello"));
这时候我们发现,我们的button是能够在重新加载翻译文件之后改变其显示内容为加载的翻译文件的语言的。

所以说,仅仅加载翻译文件是不够的,还需要对我们所有控件上显示的文字重新set一下。加载了新的翻译文件之后再set的界面上的文字,采用的才是我们翻译文件中对应的文本内容。

从本质上讲,Qt的国际化,或者所谓的“动态翻译”,也没有什么高深的地方,不过就是以文件的形式提供了两种语言的unicode码的映射关系。它不会在你加载了新的翻译文件后让所有的控件都能获知这件事情的发生,当然也不会在你加载了新的翻译文件后主动变换你显示的内容,只会在你重新调用相关的函数设置你的控件的文本的时候才会选择去从你的翻译文件中查找对应的翻译过的字符串。

当然,如果我们按照比较标准的设计手段,使用设计器设计界面,代码中实现逻辑功能,那么这个动态翻译工作还是比较简单的,因为ui生成的文件自动就有一个retranslate函数,我们在加载完新的翻译文件之后,再次调用该函数,就能够实现界面语言的切换了。当然,如果那些没有在设计器中设计的控件,我们就需要另外再去调用它的设置文本函数了。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线yangfanxing
只看该作者 1楼 发表于: 2009-12-23
LZ一直在研究很深奥的问题~呵呵。。。
帮顶~
PHPWind好恶心。。。不想看这种界面。。。
离线luexon
只看该作者 2楼 发表于: 2009-12-31
是不是没有把qm文件跟可执行文件放在同一个目录里呢?
离线午小夜

只看该作者 3楼 发表于: 2009-12-31
This method is reentrant only if all translators are installed before calling this method. Installing or removing translators while performing translations is not supported. Doing so will probably result in crashes or other undesirable behavior.
[操作系统版本]  Windows XP;Linux Ubuntu;Linux Fedora;
[Qt SDK版本]    4.7.0
[SDK 发布日期]  2010.05
[IDE(集成开发环境)] QtCreator
个人网页:http://hi.baidu.com/午小夜
學歷:Royal Jalidon
离线sunday1118
只看该作者 4楼 发表于: 2009-12-31
谢谢楼主分享心得 帮顶
离线wangxinus

只看该作者 5楼 发表于: 2009-12-31
Qt4.5多国语界面动态切换的实现

http://blog.chinaunix.net/u3/103355/showart_2090421.html

我的一些理解。
http://www.wangxinus.com
自己刚刚开的博客,欢迎来访!征友链!

网心幽思 - WangXinus' Home
不积跬步,无以致千里;不积小流,无以成江海。
离线yanyuan0818
只看该作者 6楼 发表于: 2012-12-06
  

一直困惑于在代码中添加的字串不能国际化的问题。

看了楼主“当然,如果那些没有在设计器中设计的控件,我们就需要另外再去调用它的设置文本函数了。 ”这句话后就明白了。

现在问题已解决。
快速回复
限100 字节
 
上一个 下一个