c++ - 如何强制 QLocale::system 改变

标签 c++ qt localization qt4

我需要经常测试我的应用程序翻译成非英语语言,而为了做这个简单的检查而改变整个操作系统语言是非常不舒服的。 例如,如何使用环境变量更改 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);

附言我的操作系统是 Kubuntu 13.10,Qt 版本是 4.8。

最佳答案

您始终可以通过 QLocale::setDefault() 方法更改语言环境。这是一个项目的示例:

void Language::setCurrentLanguage(Language::Languages language)
{
    if (language == Language::Arabic) {
        QLocale l(QLocale::Arabic, QLocale::SaudiArabia);
        QLocale::setDefault(l);
        dynamic_cast<MangoApp*>(qApp)->setLayoutDirection(Qt::RightToLeft);
        dynamic_cast<MangoApp*>(qApp)->removeAllTranslator();
        dynamic_cast<MangoApp*>(qApp)->loadQtTranslator();
        dynamic_cast<MangoApp*>(qApp)->loadMangoTranslator();

    } else {
        QLocale l(QLocale::English, QLocale::UnitedStates);
        QLocale::setDefault(l);
        dynamic_cast<MangoApp*>(qApp)->setLayoutDirection(Qt::LeftToRight);
        dynamic_cast<MangoApp*>(qApp)->removeAllTranslator();
    }
}

关于c++ - 如何强制 QLocale::system 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21407377/

相关文章:

c++ - 仅当模板参数不是 const 时才定义 C++ 转换运算符

qt - QMessageBox::about 可以根据标题长度调整大小吗?

c++ - 使用 Qt : change StandardPaths used in tested functions 进行单元测试

c# - MVC 如何以显示形式正确显示本地化枚举?

java - 如何本地化 Java Calendar 类?

c++ - 是否有可用于 windows 的自动升级库/框架具有与 Mac OSX 的 Sparkle 提供的功能相似的功能?

c++ - 类与字符串之间的重载操作

c# - 如何强制可本地化的 WinForms 应用程序使用(默认)语言属性

c++ - 为 Linux C++ 构建创建一个干净的隔离编译环境

c++ - Qt5.7 构建和 -no-feature- 选项不存在