如何强制QLocale ::系统更改 [英] How to force QLocale::system to change

查看:2142
本文介绍了如何强制QLocale ::系统更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我尝试更改 LANG LANGUAGE 环境变量,但它没有效果。
然而,在GNOME它有!



UPD:代码我使用这样的代码来确定系统语言环境和加载适当的翻译:

  QTranslator app_translator; 
if(!app_translator.load(app_+ QLocale :: system().name(),app_tr_dir))
qWarning(无法从%s加载语言环境%s的应用程序翻译文件,qPrintable(QLocale :: system().name()),app_tr_dir.toLocal8Bit()。data());
else
app.installTranslator(& app_translator);

我的操作系统是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;
}
}
... //您的正常代码

然后当你运行你的应用程序,你可以运行它与额外的参数: ./ yourAppName -locale:nl 。有关可能的值,请参见 QLocale的文档。 / p>



编辑:我发现更好的方法,有一个方法 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(无法从%s加载语言环境%s的应用程序翻译文件,qPrintable (QLocale()。name()),app_tr_dir.toLocal8Bit()。data());
else
app.installTranslator(& app_translator);


I need to test my application translation to non-English language very often, and this is very uncomfortable to change the whole operating system language just to do this simple check. How can i change Qt-detected system language using environment variables for example? or with command-line parameter.

I try to change LANG, LANGUAGE environment variables, but it has no effect. However, under GNOME it has!

UPD: code i'm using such code to determine the system locale and load appropriate translation:

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. My OS is Kubuntu 13.10, Qt version is 4.8.

解决方案

For testing you can use something like that (just correct main function):

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

Then when you run you app you can just run it with extra parameter: ./yourAppName -locale:nl. See documentation of QLocale for possible values.


Edit: I've found even better approach, there is a method QLocale::setDefault, so this should work even better:

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);

这篇关于如何强制QLocale ::系统更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆