Qt助理多语种

时间:2017-07-20 08:50:53

标签: c++ qt localization

我们正在使用Qt Assistant作为新的帮助文件系统。但由于我们拥有国际客户群,我们希望以不同的语言启动Qt助手。

使用生成的QHC文件启动助手根本不是问题,您可以在下面的代码中看到。

   QProcess a_process;
   QStringList a_args;
   a_args << "-collectionFile";
   a_args << S_HELPFILE_PATH;
   a_args << "-enableRemoteControl";
   QFile a_assistantExe( S_ASSISTANT_PATH );
   if ( a_assistantExe.exists() )
   {
      a_process.start( S_ASSISTANT_PATH, a_args );
      if ( !a_process.waitForStarted() )
         return;
   }

但是我们怎样才能用另一种语言启动Qt助手呢?即使经过长时间的互联网搜索,我也没有办法做到这一点。

1 个答案:

答案 0 :(得分:3)

如果您检查Qt Assistant(main.cpp)的源代码,您会发现它将始终使用系统区域设置:

void setupTranslations()
{
    TRACE_OBJ
    const QString& locale = QLocale::system().name();
    const QString &resourceDir
        = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
    setupTranslation(QLatin1String("assistant_") + locale, resourceDir);
    setupTranslation(QLatin1String("qt_") + locale, resourceDir);
    setupTranslation(QLatin1String("qt_help_") + locale, resourceDir);
}

要覆盖系统区域设置,只需在启动进程之前设置lang环境变量:

if ( a_assistantExe.exists() )
{
   QProcessEnvironment env;
   env.insert("lang", "de"); // replace with your current locale
   a_process.setProcessEnvironment(env);
   a_process.start( S_ASSISTANT_PATH, a_args );
   if ( !a_process.waitForStarted() )
      return;
}

它不仅会更改Qt助手本身的语言,还会使用.qhc文件中的相应翻译版本(<file language="de"></file><text language="de"></text>,...)