基本上,我试图在Qt中制作一个多语言的应用程序。为此,我在hindi.ts cmd终端中使用lupdate和lrelease命令创建了lupdate文件和lrelease文件。我有一个,其中有一个组合框,根据所选语言,我将该值加载到注册表中。如下图所示,图1是我的程序的结构,fig2是语言设置的UI
代码:
void Form_LanguageSettings::on_pbtn_Submit_clicked()
{
QSettings settings("HKEY_CURRENT_USER\\MyProject\\Employee", QSettings::NativeFormat);
settings.setValue("language", ui->cmb_Language->currentText());
}因此,在更新时没有问题。但是,当我想将它从注册表检索到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的多语种很陌生。拜托,有什么帮助吗?
发布于 2018-03-20 13:12:01
试着使用:
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变量没有分配。
发布于 2018-03-20 13:13:18
可能的话,您应该使用简短的文件名和QDir加载翻译。
QTranslator * translation =new QTranslator();
QString dir ("C:/MyProject/LanguagePack/ObjectFiles");
translation->load ("HindiDevanagari", dir);
app->installTranslator (translation);https://stackoverflow.com/questions/49383692
复制相似问题