如何更改Java中的默认语言环境设置以使它们保持一致?

时间:2010-09-18 12:15:21

标签: java internationalization properties

我正在寻找一组命令行参数,这些参数允许我强制为java应用程序设置一组特定的语言环境设置。

假设我无法修改应用程序,因此我必须使用java -Dmy.prop="value"设置属性。

我正在寻找更改日期/时间格式以使其符合ISO-8601标准(军事时间),但我无法找到适当的属性。

3 个答案:

答案 0 :(得分:3)

我怀疑此问题的正确解决方案是提供新的Locale变体,例如en_US_mil

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

这可以通过java.util.spijava.text.spi服务机制实现类来完成。

mentioned上的此主题为ICU website

答案 1 :(得分:2)

设置默认Java语言环境设置的推荐方法是通过shell /操作系统语言环境设置来完成此操作。例如,在UNIX / LINUX上,默认语言环境由环境变量确定。

以下信息来自Java Internationalization FAQ

  

我可以在应用程序外设置默认语言环境吗?

     

这取决于实施   您正在使用的Java平台。该   初始默认语言环境通常是   由主机运营确定   系统的语言环境。版本1.4和   更高的Sun的JRE让你覆盖   这通过设置user.language,   user.country和user.variant系统   命令行中的属性。对于   例如,选择Locale(“th”,“TH”,   “TH”)作为初始默认语言环境,   你会用:

     

java -Duser.language = th   -Duser.country = TH -Duser.variant = TH MainClass

     

由于并非所有运行时环境   提供此功能,它应该只   用于测试。

修改

问题是:

  

我正在寻找改变日期时间格式以使其符合ISO-8601标准(军事时间),但我无法为此找到合适的礼节。

您似乎希望有选择地覆盖当前区域设置的某些方面,而不是完全更改它。这样做的简单方法是让应用程序完成工作;即使用指定的日期格式而不是当前语言环境给出的默认格式。但如果应用程序是封闭源代码,您可能无法更改它。

可能可以使用以下方法解决此问题:

  • 弄清楚Java如何实现区域设置三元组(国家/语言/变体)到区域设置对象的解析。
  • 对于您需要支持的每个区域设置,将现有区域设置类(等)子类化以实现使用ISO日期/时间格式的新变体。
  • 创建包含自定义类或资源的JAR,并将其添加到类路径中。 (您可能需要将JAR添加到bootclasspath等,以使其工作)

最后,如果应用程序未使用区域设置机制来决定使用哪种日期格式,则基于更改区域设置的任何更改都将无效。

答案 2 :(得分:1)

很好,我对同样的事情感兴趣,但到目前为止我只有部分解决方案

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

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