2016-11-25 198 views
1

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

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

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

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

我如何保存这个结果在一个字符串? 还是有更好的方法来检测操作系统语言? 另一件事,是否有可能检测到键盘语言设置(如果可能,用Qt)?

+1

什么“检测我的操作系统上安装的语言”是什么意思?你能否详细说明一下? – peppe

+0

我想知道我的应用程序正在运行的计算机上安装的语言包列表 – vitor13almeida

+0

什么是“语言包”?在哪个操作系统? – peppe

回答

3

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(); 
+0

QLocale :: system()向我显示3种语言,但我只安装了2个。是否可以用Qt来做我想要的,以显示安装的语言包? – vitor13almeida

+0

@ vitor13almeida你怎么知道你已经安装了哪些语言?什么确切的操作系统和发行版? –

+0

Ubuntu包含ENG和PT lang包。菜单,窗口,应用程序和ENG中的这些东西,键盘是PT或ENG。 我需要保存操作系统,操作系统版本,langs,eyboard layout/langs ....在windows和linux上 – vitor13almeida

0

你可以得到的语言列表,用户优先选择的顺序(例如在系统偏好设置中定义的macOS上),使用QLocale::system().uiLanguages()

一个本地化的用户像样的名字,你可以使用像

QString("%1 (%2)").arg(QLocale::languageToString(locale.language()), 
         QLocale::countryToString(locale.country())); 
+0

QLocale :: system()。uiLanguages()只显示一个。 Qt有可能做到我想要的吗? – vitor13almeida

1

是否有可能做我想做的使用Qt,展现语言包安装?

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

另请注意,“语言包”的概念不可移植。例如。大多数Unix应用程序(包括OS X上的应用程序)都支持所有可支持的语言,并且可以即时切换语言,而无需安装任何软件。

+0

好的。任何建议如何做到这一点的Linux操作系统?检查文件,使用一些C++类,...? – vitor13almeida

+0

@ vitor13almeida在大多数情况下,你没有什么可以做的。任何应用程序都会以当前选定的语言环境语言显示,如果它有翻译的话。如何检查它是否有翻译?你必须检查源代码包或某些类型的翻译文件的二进制文件,或它们的cookie-crumbs等。真的没有简单的全方位的做法。无法以任何便携方式查询应用程序支持哪种语言。你确实意识到,我希望,大多数X桌面环境默认包含所有翻译。 –

+1

@ vitor13almeida你必须回答*为什么*你认为你需要这些信息的根本问题?究竟是什么应用?您可能知道,不同的应用程序将在不同的程度上支持多种语言 - 对于OSS而言,这取决于志愿者是否有空来处理翻译。您可能有一个有15个完整翻译的KDE控制中心,但是只有一个窗口管理器。这个数字只是为了说明问题。 –