QT 国际化和本地化,附上实际案例以及一些使用心得和注意点
2014-07-11 17:32
267 查看
最近在做一个国际化和本地化的工作,对QT的国际化本地化有了一些了解。
转载请注明出处: http://blog.csdn.net/elfprincexu
先简单介绍下主要逻辑
1. 首先要有一个translator
2.把要国际化的地方都放在一个函数里面便于调动(便于我们选择语言切换时候哪些需要翻译的组件):
3. 链接好信号和翻译slot (这里是一个qcombox的选择引起的动作)
4 语言自动切换函数
5. 好了, 现在开始准备 翻译的文件吧,
5.1 使用lupdate 来自动分析所需文件
5.2 使用linguist 来编辑翻译文件
![](http://img.blog.csdn.net/20140711171350468?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWxmcHJpbmNleHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
5. 3. lrelease 来生成ts的二进制文件 (en.ts 可以不编辑如果源码是用英语写的)
会生成相应的 *.qm文件
5.4 建立resource文件(translator.qrc)把上述文件装入我们最后的 APP内
打开 我们的工程文件 (.pro工程文件)
加上两行
同时新建一个qrc (qt 资源性文件) (见下图,注意上面我们load的时候那个路径 :/qm/en.qm 的原因了)
![](http://img.blog.csdn.net/20140711171826843?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZWxmcHJpbmNleHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最后编译通过,运行程序就可以了。
注意点:
1. 有时候会出现QT designer编辑的ui 可以转换语言,而程序中动态加入的元件没有成功,试下
QApplication::translate ()
不要使用 tr(),在我尝试过程中,发现了QT designer设计的ui可以转换,但是tr()内的内容却没有转换,原因在于 ui文件QT会通过UIC编译器转换为 ui_uiname.h文件,其中关于组件的国际化已经自动帮我们实现,使用的正是 QApplication::translate()函数进行的。
2. 一旦上述的翻译文件 *.ts文件发生变化,需要clean 后再次complete build 才能把新的东西集成到APP中
转载请注明出处: http://blog.csdn.net/elfprincexu
先简单介绍下主要逻辑
1. 首先要有一个translator
QTranslator* translator = new QTranslator(); qApp->installTranslator(translator) // install this translator, qApp is a macro from QCoreApplication.
2.把要国际化的地方都放在一个函数里面便于调动(便于我们选择语言切换时候哪些需要翻译的组件):
void Myclass::translatorLanguage() { _ui._reasonCombo->setItemText(0, QApplication::translate("Myclass","Periodic-Reboot",0,QApplication::UnicodeUTF8)); _ui._reasonCombo->setItemText(1, QApplication::translate("Myclass","Periodic-Reboot",0,QApplication::UnicodeUTF8)); _ui._reasonCombo->setItemText(2, QApplication::translate("Myclass","Periodic-Reboot",0,QApplication::UnicodeUTF8)); _ui._reasonCombo->setItemText(3, QApplication::translate("Myclass","Periodic-Reboot",0,QApplication::UnicodeUTF8)); /* other compoments translation */ }
3. 链接好信号和翻译slot (这里是一个qcombox的选择引起的动作)
connect (_ui._languageCBox, SIGNAL(currentIndexChanged(int)), this, SLOT(languageCBoxChanged() );
4 语言自动切换函数
void Myclass::languageCBoxChanged() { if (_ui._languageCBox->currentIndex() == 0) // English { translator->load(":/qm/en.qm");// Attention, here, we use resource file , so we use : to indicate its location. this->translateLanguage();//after loading, translate these places we want to internationalizer } else if (_ui._languageCBox->currentIndex() == 1) // chinese { translator->load(":/qm/cn.qm");// Attention, here, we use resource file , so we use : to indicate its location. this->translateLanguage();//after loading, translate these places we want to internationalizer } else if (_ui._languageCBox->currentIndex() == 2) // korean { translator->load(":/qm/kor.qm"); // Attention, here, we use resource file , so we use : to indicate its location. this->translateLanguage();//after loading, translate these places we want to internationalizer } else if (_ui._languageCBox->currentIndex() == 3) // jpn { translator->load(":/qm/jpn.qm");// Attention, here, we use resource file , so we use : to indicate its location. this->translateLanguage();//after loading, translate these places we want to internationalizer } else //default { translator->load(":/qm/en.qm");// Attention, here, we use resource file , so we use : to indicate its location. this->translateLanguage();//after loading, translate these places we want to internationalizer } }
5. 好了, 现在开始准备 翻译的文件吧,
5.1 使用lupdate 来自动分析所需文件
lupdate -recursive ../../GuiElements/* -ts en.ts cn.ts kor.ts jpn.ts // 指定生成那些ts文件,并且指定扫描那些文件
5.2 使用linguist 来编辑翻译文件
linguist cn.ts
5. 3. lrelease 来生成ts的二进制文件 (en.ts 可以不编辑如果源码是用英语写的)
lrelease cn.ts kor.ts en.ts jpn.ts
会生成相应的 *.qm文件
5.4 建立resource文件(translator.qrc)把上述文件装入我们最后的 APP内
打开 我们的工程文件 (.pro工程文件)
加上两行
RESOURCE = translation.qrc TRANSLATIONS = cn.ts en.ts jpn.ts kor.ts
同时新建一个qrc (qt 资源性文件) (见下图,注意上面我们load的时候那个路径 :/qm/en.qm 的原因了)
最后编译通过,运行程序就可以了。
注意点:
1. 有时候会出现QT designer编辑的ui 可以转换语言,而程序中动态加入的元件没有成功,试下
QApplication::translate ()
不要使用 tr(),在我尝试过程中,发现了QT designer设计的ui可以转换,但是tr()内的内容却没有转换,原因在于 ui文件QT会通过UIC编译器转换为 ui_uiname.h文件,其中关于组件的国际化已经自动帮我们实现,使用的正是 QApplication::translate()函数进行的。
2. 一旦上述的翻译文件 *.ts文件发生变化,需要clean 后再次complete build 才能把新的东西集成到APP中
相关文章推荐
- 一些控件的使用以及本地化的操作和注意事项
- 财富500强的前10个公司里有8个公司在使用Qt(Qt自己认为的优点是:直觉主义、跨平台、节省时间),以及一些商业案例
- 关于使用存储过程的一些好处以及注意事项[转]
- Java写的手机计费系统(作为学习参考的实例:关键是Java类库里面的date和Calendar的使用和相互转换,以及一些日期的实际问题)
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- 使用SVPullToRefresh 报错 需要注意 以及一些刷新方法
- Qt中如何使用样式表QPalette以及相关注意事项
- qt国际化与本地化中一个需要注意的地方
- 关于使用存储过程的一些好处以及注意事项
- 关于使用存储过程的一些好处以及注意事项
- Qt中如何使用样式表QPalette以及相关注意事项(转)
- 声明方法java实际开发中泛型使用需要注意的一些问题
- 关于使用存储过程的一些好处以及注意事项
- Qt中如何使用样式表QPalette以及相关注意事项
- ibatis的一些错误码解释以及解决方法、一些使用心得
- 检测Qt for symbian前后台切换 以及 信号槽使用的注意事项
- Qt中如何使用样式表QPalette以及相关注意事项
- 最近使用QT开发的一些心得,技巧
- java实际开发中泛型使用需要注意的一些问题
- SolrCloud 译文以及一些使用注意细节