2017-08-01 47 views
0

Java Locale.getDefault()即使系統語言環境設置爲不同語言(通過區域和語言控制面板),也總是在Windows上返回en-US。 在Java Runtime.exec()內部運行腳本(如systeminfo | findstr /C:\"System Locale\)需要很長時間。在java中檢測Windows系統語言環境

有沒有更快的方法來檢測(java)應用程序啓動時的系統區域設置?運行上面的cmd並寫入屬性文件以供後續讀取可能是一種解決方案。但是如果系統區域設置改變並且系統重新啓動會怎樣?在jdk中查找系統區域設置的更可靠的方法是什麼?

+1

可能的重複https://stackoverflow.com/questions/2469435/how-to-detect-operating-system-language-locale-from-java-code – Beginner

+1

https://stackoverflow.com/questions/7107972/ java-7-default-locale/8319889#8319889注意到同樣的問題 –

回答

-1
Locale.getDefault();   // 
locale.getDisplayLanguage(); // Return current language 
locale.getDisplayCountry(); // Return current country 
+0

,locale.getdefault總是返回en-US。其他兩個做相同或返回空字符串。 – svk

+1

@SuprajaJayakumar它不必返回en-US。但是它將返回en-US,除非另一個區域設置已被先前調用Locale.setDefault(Locale)設置爲默認值。 – jwenting

2

Locale.getDefault()返回當前JVM的默認語言環境,而不是操作系統。 對於大多數JVM,JVM默認的語言環境默認爲en-US(可能有本地化的,我從來沒有見過)。

可以使用Locale.setDefault(Locale newDefault)將其設置爲其他值,之後Locale.getDefault()將返回該Locale。

因此,對於你問題的一個解決辦法是使用你一次,設定爲新的JVM的默認啓動應用程序時使用Locale.setDefault(),然後再使用Locale.getDefault()檢索命令來獲取默認的系統區域設置。

+0

表示同意,這就是我們目前所做的。但是如前所述,Runtime exec()需要很多時間來執行。有沒有辦法縮短jvm中外部處理運行的執行時間?如果應用程序應在顯示主頁之前進行本地化,則異步執行此操作似乎不是一種選擇。是對的嗎 ? – svk