我需要经常测试我的应用程序翻译到非英语语言,这是非常不舒服的改变整个操作系统语言只是为了做这个简单的检查。例如,如何使用环境变量更改Qt检测的系统语言?或者使用命令行参数。
我试图更改LANG、LANGUAGE环境变量,但它没有任何影响。然而,在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。
发布于 2014-01-28 18:18:11
为了进行测试,您可以使用类似的内容(只需更正主函数):
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。有关可能的值,请参见QLocale文档。
编辑:我发现了更好的方法,有一个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);发布于 2014-01-28 14:00:11
始终可以通过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();
}
}发布于 2020-07-26 17:45:06
使用LANGUAGE (而不是LANG)环境变量肯定会更改QLocale::system().name()返回的值,因为该环境变量优先于定义应用程序消息区域设置(详细信息)的所有其他方法。
我用QT5.12在Lubuntu19.10(即,使用LXQt桌面)下测试了它,它可以工作。该命令是:
LANGUAGE=de ./application如果这在Kubuntu下真的不起作用,那么应该将其报告为bug,因为Kubuntu正在干扰应用程序如何告诉它的地区。
https://stackoverflow.com/questions/21407377
复制相似问题