Qt多国语言的实现与切换(国际化)

1、创建语言文件

  打开.pro文件,加入以下:

TRANSLATIONS+=cn.ts

  工具->外部->Qt语言家->更新翻译,将生成翻译文件cn.ts

2、编辑翻译文件

  启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存

3、部署翻译文件

  工具->外部->Qt语言家->部署翻译,将生成语言文件qm

4、加载翻译文件

QTranslator translator;
bool  b = false ;
b = translator.load( "cn.qm" );
a.installTranslator(&translator);

注:随时可以重复“2”~“3”步骤以便更新翻译

5、切换不同多国语言

void  MainWindow::Refresh()
{
     ui->listWidget->addItem(tr( "item1" ));
     ui->listWidget->addItem(tr( "item2" ));
     ui->listWidget->addItem(tr( "item3" ));
}
 
void  MainWindow::on_pushButton_clicked()
{
 
    QTranslator *translator = new QTranslator(qApp);
    bool b = false;
    b = translator->load(QString(":/res/%1.qm").arg("en"));
    qApp->installTranslator(translator);
     this ->Refresh();
}
 
void  MainWindow::on_pushButton_2_clicked()
{
 
    QTranslator *translator = new QTranslator(qApp);
    bool b = false;
    b = translator->load(QString(":/res/%1.qm").arg("cn"));
    qApp->installTranslator(translator);
     this ->Refresh();
}

在帮助文档中,关于 QTranslator::load有这样一句话。

The data is not copied. The caller must be able to guarantee that data will not be deleted or modifiled.

这段话明确的说明了,QTranslator在load以后,并没有把qm文件中的数据拷贝一份,而是在需要的时候去查询字符串。如果qm在这期间被删除或修改,对程序都是有影响的。扩展开来,QTranslator必须保证要一直有效,如果在函数中定义的局部变量,函数结束后就自动释放掉了,那么翻译工作就不能正常进行。所以建议在private中定义个成员变量 QTranslator* app_translator;来确保整个翻译工作的正确性。


你可能感兴趣的:(Qt知识点)