2016-11-25 233 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控制中心,但是隻有一個窗口管理器。這個數字只是爲了說明問題。 –