我需要经常测试将我的应用程序翻译成非英语语言,而仅仅为了进行此简单检查而改变整个操作系统的语言,这是非常不舒服的。
例如,如何使用环境变量来更改Qt检测到的系统语言?
或使用命令行参数。

我尝试更改LANGLANGUAGE环境变量,但没有效果。
但是,在GNOME下具有!

UPD:代码我正在使用这样的代码来确定系统区域设置并加载适当的翻译:

QTranslator app_translator;
if (!app_translator.load ("app_" + QLocale::system ().name (), app_tr_dir))
    qWarning ("Can't load app translator file for locale %s from %s", qPrintable (QLocale::system ().name ()), app_tr_dir.toLocal8Bit().data());
else
    app.installTranslator (&app_translator);

P.S.我的操作系统是Kubuntu 13.10,Qt版本是4.8。

最佳答案

为了测试,您可以使用类似的东西(只是正确的主要功能):

int main(int argc, char **argv) {
    QApplication app(argc, argv);

    QLocale localeUsedToDeterminateTranslators = QLocale::system();
    Q_FOREACH(QString a, app.arguments()) {
        const static localeParam = "-locale:";
        if (a.startsWith(localeParam)) {
           localeUsedToDeterminateTranslators = QLocale(a.mid(sizeof(localeParam)-1));
           break;
        }
    }
    ... // your normal code

然后,当您运行应用程序时,您可以使用额外的参数./yourAppName -locale:nl来运行它。有关可能的值,请参见documentation of QLocale

编辑:我发现了更好的方法,有一个method QLocale::setDefault ,所以这应该工作得更好:
int main(int argc, char **argv) {
    QApplication app(argc, argv);

    Q_FOREACH(QString a, app.arguments()) {
        const static localeParam = "-locale:";
        if (a.startsWith(localeParam)) {
           QLocale::setDefault(QLocale(a.mid(sizeof(localeParam)-1)));
           break;
        }
    }
    ...
    QTranslator app_translator;
    if (!app_translator.load ("app_" + QLocale().name (), app_tr_dir))
         qWarning ("Can't load app translator file for locale %s from %s", qPrintable (QLocale().name()), app_tr_dir.toLocal8Bit().data());
    else
         app.installTranslator (&app_translator);

10-05 20:48