2012-06-02 94 views
7

我在這裏遇到了一種問題。在java中獲取操作系統語言

我是法國人,正在研究英文版的Windows XP。因此,我將區域選項設置爲法語,但仍具有英文界面。

我正在研究一個小的Java SE應用程序,並決定使用資源包對其進行國際化。

要顯示正確的語言,我創建了捆綁使用此項功能:

private static ResourceBundle bundle = ResourceBundle 
      .getBundle("locale.Strings", Locale.getDefault()); 

但Locale.getDefault()函數返回的區域設置(意思是:法國),而不是系統UI語言。因此,我的用戶界面在英語環境中默認爲法語。嗯,這不是我所期望的...

有誰知道一個平臺無關的方式來恢復系統的UI語言? 在此先感謝!

編輯:固定本地語言環境,謝謝。

+1

嗯,在我看來,Java做的是正確的事情。如果您使用法語偏好來配置您的操作系統,並且操作系統繼續以英文顯示所有內容,但不顯示Java,則操作系統不正確,但Java是,不是嗎?如果你想要英文的一切,爲什麼不用英文的偏好配置呢? –

+0

不應該是'Locale.getDefault()'而不是'Local.getDefault()'? –

+7

@JBNizet這不是一個不尋常的要求。我是荷蘭人,和OP一樣,我更喜歡我的GUI語言是英語,但仍然有數字格式和日期格式顯示我習慣於從我自己的語言環境中的方式(例如,美國的月份優先日期相當對我感到困惑,需要額外的解析時間在我的大腦中)。軟件翻譯往往是糟糕透頂的,在諸如術語爲英語的編程領域中翻譯更是如此。 – Barend

回答

7

這是Windows中的錯誤配置。 Locale#getDefault()返回系統區域設置,而不是日期/時間格式區域或位置。

在Windows XP下具體的截圖,你可以只設置區域選項語言法國或任何你喜歡。 高級版菜單中的下拉菜單實際上會設置系統區域設置,並且應該在您的情況下設置爲英語。

enter image description here

誠然,這是在Windows XP中解釋不清時,Windows 7確實是有所好轉:

enter image description here

+1

這並不明顯。 Java 7和以前的版本有所不同。此外,Windows的本地化和MUI版本可能有所不同,但在這種情況下,我期望英文而不是法文。這很複雜 :) –

3

我也沒辦法嘗試一下(因爲我傾向於避免任何由微軟),但是看看這些:

Java 7的要求:

Locale uiLocale = Locale.getDefault(Locale.Category.DISPLAY); 

無論如何,這就是應該用於獲取翻譯(從Java 7開始)。

如果這是不是非常有幫助,我會嘗試:

System.out.println(System.getenv("LC_MESSAGES"));  
System.out.println(System.getenv("LANG")); 
System.out.println(System.getenv("LANGUAGE")); 

然而,在這種情況下,我希望一些相似之處默認語言環境......

0

我嘗試了一些東西感謝您的建議,這裏是我的觀察:

  • 如果您使用的是Java 6,而不是Java 7,那麼您已經完成了。
  • 如果您使用的是Java 7,則應該按照BalusC的說法操作:更改區域和語言設置中的設置。之後,Locale.getDefault()將默認返回顯示語言,如果將其設置爲英語,則表示英語。爲了確保它,您可以通過調用Locale.getDefault(Locale.Category。)來創建語言環境。DISPLAY)