基本上,我正在尝试在Qt中创建一个多语言应用程序。为此,我使用hindi.ts
cmd终端中的hindi.qm
和lupdate
命令创建了lrelease
文件和qt 5.10.0 msvsc(2015)
文件。我有一个语言设置小部件,其中我有一个组合框,并根据所选语言,我将该值加载到注册表中。
如下图所示
图1是我的程序的结构
fig2是语言设置的UI
1. Block Diagram of Widgets in my Project
CODE:
void Form_LanguageSettings::on_pbtn_Submit_clicked()
{
QSettings settings("HKEY_CURRENT_USER\\MyProject\\Employee", QSettings::NativeFormat);
settings.setValue("language", ui->cmb_Language->currentText());
}
因此,更新时没有问题。
但是,当我想从Registry将其检索到ListOfDepartment
Widget时,我会以这种方式检索它:
QSettings settings("HKEY_CURRENT_USER\\MyProject\\Employee", QSettings::NativeFormat);
QApplication *app;
QString SelectedLanguage;
SelectedLanguage=settings.value("language").toString();
if(SelectedLanguage.toLower() != "english")
{
if(SelectedLanguage=="hindi")
{
QTranslator translation;
translation.load("C:/MyProject/LanguagePack/ObjectFiles/HindiDevanagari.qm");
app->installTranslator(&translation);
}
}
这样我无法加载相应的语言。如果我在main.cpp
文件中手动加载特定语言,但是如果我通过我的应用程序中的设置小部件进行加载,则它不起作用。如果要在单独的小部件中完成语言设置,我该如何处理?我是QT多语言的新手。请帮忙吗?
答案 0 :(得分:1)
尝试使用:
QTranslator* translation = new QTranslator();
translation->load("C:/MyProject/LanguagePack/ObjectFiles/HindiDevanagari.qm");
QApplication::instance()->installTranslator(translation);
//or also QApplication::installTranslator(translation), it is static
在您的代码中,QTranslator
实例在if
块末尾被销毁,app
变量未分配
答案 1 :(得分:0)
可能您应该使用简短的文件名和QDir加载翻译,例如
QTranslator * translation =new QTranslator();
QString dir ("C:/MyProject/LanguagePack/ObjectFiles");
translation->load ("HindiDevanagari", dir);
app->installTranslator (translation);