摘要:本文论述了如何使用QT实现程序的多语系支持以及多语系的动态切换。
前沿
我们生活中用到的程序大多都是支持单一语言的,比如在中国我们用到的软件大多是汉语的,也有很少部分使用的是英语的,但是很少有软件可以实现两种语 言的动态切换。不过随着近几年我国的发展支持多国语言的软件也越来越多,比如上海地铁售票机,动车组自动售票机等都是支持汉语和英语两种语言的。使用QT 编程可以很容易的编写支持多国语言的软件。
用QT实现多国语言支持有两种情况:
第一种:使用UI编辑器来自动生成界面,这种方式实现多语系的动态切换很容易。
第二种:不使用UI编辑器,自己通过亲自编程来设计应用程序界面,这种方式实现多语系动态切换比较繁琐,注意不是难;
下面先来介绍第一种的实现方法:
void MainWindow::ch_language()
{
if(this->languageState)
{
this->languageState=CHINESE ;
this->translator.load("test_ch") ;
this->pOwner->installTranslator(&(this->translator));
}
else
{
this->languageState=ENGLISH ;
this->translator.load("test_en") ;
this->pOwner->installTranslator(&(this->translator));
}
}
这个函数是实现动态切换的主要程序,其中languageState是用来记录当前语言的状态,pOwner是QApplication对象,我们只需使用QTranslator加载不同的文件就可以实现多语系的动态切换。
第二种方式就不那么简单了,除了要运行上述函数外还要将将要切换的语言重新设置一遍。
void MainWindow::langChang()
{
if(this->langState)
{
this->langState=CHINESE ;
this->translator.load("test_ch") ;
this->pOwner->installTranslator(&(this->translator));
}
else
{
this->langState=ENGLISH ;
this->translator.load("test_en") ;
this->pOwner->installTranslator(&(this->translator));
}
this->setWindowTitle(QObject::tr("hello world"));
this->addFileAction->setText(QObject::tr("New File"));
this->langChAction->setText(QObject::tr("Chinese"));
this->playAction->setText(QObject::tr("Play")); ;
this->stopAction->setText(QObject::tr("Stop"));
this->menuBar()->addMenu(QObject::tr("FIle")) ;
this->menuBar()->addMenu(QObject::tr("Control")) ;
}
因此比较麻烦,特别是界面比较繁琐的时候,将是很麻烦的。
下面来讨论为什么第一种方法为什么不需要重新设置语言了。因为使用Ui时有这个函数
void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);//这里实现语言翻译器的更新。