检测OS语言

时间:2016-11-25 16:36:23

标签: c++ qt operating-system

我想检测我的操作系统上安装的语言。 要做到这一点我跑:

qDebug() << QLocale::system();
// result = QLocale(English, Latin, UnitedStates)

但是我想将它保存在QString中,但它不可能只做:

QString langs = QLocale::system().toString();

如何将此结果保存在字符串中? 或者有更好的方法来检测操作系统语言吗? 另一件事是,是否可以检测键盘语言设置(如果可能,使用Qt)?

3 个答案:

答案 0 :(得分:4)

documentation for QLocale表示:

  

QLocale支持默认语言环境的概念,该语言环境已确定   从应用程序启动时系统的语言环境设置

因此,为了获得系统默认语言的不同表示,QLocale上的以下一种或多种方法可能会对您有所帮助:

qDebug() << QLocale::system().name();
qDebug() << QLocale::system().nativeCountryName();
qDebug() << QLocale::system().nativeLanguageName();

示例输出:

"en_GB"
"United Kingdom"
"British English"

在GUI应用程序中,您可以获得输入方法的类似详细信息,如下所示:

qDebug() << QGuiApplication::inputMethod()->locale().name();

答案 1 :(得分:1)

  

是否可以使用Qt执行我想要的操作,以显示已安装的语言包?

没有。在Qt中没有这样做的功能。对于您要定位的每个平台,您都需要针对特定​​平台的方法。

还要注意&#34;语言包的概念&#34;不便携。例如。大多数Unix应用程序(包括OS X上的应用程序)都支持他们可以支持的所有语言,并且您可以即时切换语言而无需安装任何内容。

答案 2 :(得分:0)

您可以按照用户偏好的顺序(例如,在“系统偏好设置”中定义的macOS上),使用QLocale::system().uiLanguages()获取语言列表。

对于用户可呈现的区域设置名称,您可以使用类似

的内容
QString("%1 (%2)").arg(QLocale::languageToString(locale.language()),
                       QLocale::countryToString(locale.country()));