先上效果图:
然后说说注意项吧:
1、想实现Qt多语言动态切换,如果通过Qt语言家(Qt Linguist)实现的话(我这里也只说这种方式),最好用Qt Creator5.10版本及以上。不然,qml里面的字体是不支持动态翻译的,必须在加载qml之前就加载好翻译文件(*.qm)。或者说,你每次切换语言后,需要再重新加载一下qml界面。可以通过Loader加载方式实现。我这里用Qt Creator5.9.0和5.12.5版本测试过的。widget界面不影响。
2、如果用VS+QT方式。在VS里编译出来的也不支持qml界面的动态翻译,无关版本问题。这个时候也可以向上面说的,在每次切换语言后,再重新加载一下qml界面就可以了。我这里用VS2015和2017都测过的。widget界面不影响。
3、翻译文件(.ts)和发布文件(.qm)最好放别放在qrc里,放在可执行文件目录下即可。这样方便修改和维护。
4、需要翻译的文本需要用tr或qsTr标记。
再来说说步骤:
1、新建工程,拉个简单点的控件先试试水;
2、如果是用的Qt Creator,则需要在pro文件中添加,例如:
TRANSLATIONS += resources/tr_zh.ts \
resources/tr_en.ts
3、生成翻译文件 (.ts)
(1)如果是用的QC,就点击工具-》外部-》Qt语言家-》更新翻译
然后就会在你的工程文件路径下 resources文件夹中生成 tr_zh.ts 和 tr_en.ts 两个文件。
(2)如果用的VS,点击 Qt VS Tools-》Create New Translation File,
然后选择语言,修改文件名就可以了。翻译文件就自动生成到工程文件路径下了。
4、生成发布文件(.qm)
(1)这里可以用notepad++打开翻译文件。然后做翻译修改。如:
由
<message> <location filename="../MainWindow.cpp" line="15"/> <source>QT动态翻译</source> <translatorcomment></translatorcomment> <translation type="unfinished"></translation> </message>
改为
<message> <location filename="../MainWindow.cpp" line="15"/> <source>QT动态翻译</source> <translatorcomment>QT dynamic translation</translatorcomment> <translation type="unfinished">QT dynamic translation</translation> </message>
修改完后,保存。然后在QC中点击工具-》外部-》Qt语言家-》发布翻译。就可以在相应文件夹下看到生成好的发布文件了。
(2)或者用Qt Linguist打开翻译文件。然后做翻译修改。修改完后,保存。点击文件-》发布,即可。
5、编写接口函数,便于语言包的动态切换。如:
void MainWindow::on_pushButton_clicked()
{
m_bChangeToEn = !m_bChangeToEn;
if(!qApp->removeTranslator(&m_Translator))
{
qDebug()<<"remove error....";
}
if(m_bChangeToEn)
{
if(m_Translator.load(":/resources/tr_en.qm"))
{
qApp->installTranslator(&m_Translator);
ui->retranslateUi(this);
qDebug()<<"load English file succed";
}
else
{
qDebug()<<"load English file error";
}
}
else
{
if(m_Translator.load(":/resources/tr_zh.qm"))
{
qApp->installTranslator(&m_Translator);
ui->retranslateUi(this);
qDebug()<<"load Chinese file succed";
}
else
{
qDebug()<<"load Chinese file error";
}
}
}
||
||
参考:
https://blog.csdn.net/D759378563/article/details/79297971