2010-09-18 113 views
4

我正在尋找一組命令行參數,這些命令行參數將允許我爲java應用程序強制一組特定的區域設置。如何更改Java中的默認語言環境設置以使其一致?

假設我無法修改應用程序,所以我必須使用java -Dmy.prop="value"來設置屬性。

我正在專門尋找更改日期/時間格式以使其符合ISO-8601(軍事時間),但我無法找到適當的屬性。

+0

如果您擁有該代碼,則只需在main()方法中調用Locale.setDefault()即可。但我認爲你正在攻擊不正確的問題。應用程序應顯示根據用戶的區域設置格式化的時間,數字和其他與文化相關的信息。如果不是,這個問題應該修復。 BTW。有些類不是區域敏感的,所以它們會從toString()方法打印不變的值。更改區域設置不會改變這種行爲。 – 2010-09-18 12:45:03

+0

即使您無法修改應用程序,仍然可以創建一個啓動器類,將默認設置設置爲您需要的任何類型,然後調用應用程序的主類。 – 2010-09-18 13:03:11

回答

1

不錯,我很感興趣的是同一件事,但到目前爲止我只有一個部分解決

user.timezone=UTC 
user.country=CA 
user.variant= 
user.language=en 
file.encoding=utf8 

您可以使用加拿大,因爲它使用ISO 8601格式的國家之一。

+0

你寫了「部分」 - 這個問題的哪部分*不解決? – 2010-09-18 12:45:30

+0

它不強制執行格式的日期/時間 – 2010-09-18 12:51:53

+0

它應該,但我試過它在哈德遜,它並沒有改變它。現在取決於應用程序如何進行格式化,如果開發人員使用硬編碼格式,則不會期望出現奇蹟。 – sorin 2010-09-18 13:54:17

3

我懷疑這個問題的正確解決方案是提供一個新的Locale變體,如(例如)en_US_mil

<language code>[_<country code>[_<variant code>]] 

這可以通過java.util.spijava.text.spi服務機制,實現類來完成。

此主題是mentionedICU website

2

設置默認Java語言環境設置的推薦方法是通過shell /操作系統語言環境設置進行設置。例如,在UNIX/LINUX上,默認語言環境由環境變量確定。

以下信息是從Java Internationalization FAQ

我可以設置默認語言環境的應用程序之外?

這取決於您正在使用的Java平臺的實現 。 初始默認語言環境通常是 ,由主機操作 系統的語言環境確定。版本1.4和 Sun的JRE的更高版本允許您通過從命令行設置user.language, user.country和user.variant系統 屬性來覆蓋 。對於 例如,要選擇區域設置( 「日」, 「TH」, 「TH」)作爲初始默認語言環境, 可以使用:

的java -Duser.language =第 -Duser.country = TH -Duser.variant = TH MainClass

由於並非所有運行時環境 都提供此功能,因此應僅使用 進行測試。

編輯

問題問這樣的:

我期待特意更改日期時間格式,使之ISO-8601標準(軍用時間),但我不能夠爲此找到適當的禮節。

你似乎是要選擇性地忽略某些方面當前的區域設置的,而不是完全改變它。這樣做的簡單方法是讓應用程序完成工作;即使用指定的日期格式而不是當前語言環境給出的默認格式。但是,如果應用程序是封閉源代碼,則可能無法更改它。

可能有可能解決這個有以下方法:

  • 圖的Java應用如何實現區域三元組(國家/語言/變體),以語言環境的對象的分辨率。
  • 對於您需要支持的每個語言環境,子類化現有語言環境類(等)以實現使用ISO日期/時間格式的新變體。
  • 創建一個包含您的自定義類或資源的JAR,並將其添加到類路徑中。 (您可能需要將JAR添加到啓動類路徑,等得到這個工作)

最後,如果應用程序沒有使用locale機制來決定使用什麼日期格式,基於改變的任何變化區域設置將不起作用。

+0

這仍然需要JVM支持語言環境:http: //download.oracle.com/javase/6/docs/technotes/guides/intl/locale.doc.html#util-text – McDowell 2010-09-18 15:59:44

+0

以上鍊接已過時。 – 2013-03-07 15:43:55

相關問題