Java en_US或en-US,您应该使用哪一种?

Java en_US或en-US,您应该使用哪一种?,java,localization,locale,Java,Localization,Locale,假设您希望在数据库中存储用户首选项的区域设置,您将使用哪个值 恩我们还是恩我们 它们是两个标准,但您更喜欢将哪一个作为自己应用程序的一部分 更新:似乎许多网站使用破折号而不是下划线,例如 欢迎您。是一本非常有用的书。我认为en-US根本不是Java的标准。(如果你在某处看到它,你可以添加一个链接) 因此,只要使用en_-US如果您使用的是Java,那么您最好使用(en_-US) 文档实际上指定了en-US格式,它与Java风格的语言环境名称一样常见。但在实践中,你会看到形式与车底相当多。例如,

假设您希望在数据库中存储用户首选项的区域设置,您将使用哪个值

恩我们还是恩我们

它们是两个标准,但您更喜欢将哪一个作为自己应用程序的一部分

更新:似乎许多网站使用破折号而不是下划线,例如


欢迎您。是一本非常有用的书。

我认为
en-US
根本不是Java的标准。(如果你在某处看到它,你可以添加一个链接)


因此,只要使用
en_-US

如果您使用的是Java,那么您最好使用(
en_-US

文档实际上指定了
en-US
格式,它与Java风格的语言环境名称一样常见。但在实践中,你会看到形式与车底相当多。例如,和都使用底栏作为其语言/区域分隔符

所以无论哪种选择,你都不会错得太多。但是考虑到您是用Java编写的,并且可能是针对Unix平台的,
en_US
可能是一条路。

我很确定“-”是标准。如果你在某处看到“u”,它可能是一些人想出的使其成为有效标识符的方法

就我个人而言,我会选择“-”,只是为了正确


在Java 7中,有一个新方法
Locale.forLanguageTag(String)
,它假设连字符作为分隔符。我认为这是规范的。


查看的文档以了解更多信息。

是的,但他的问题上有一个
java
标签。看看我答案中的链接,如果你想…嗯,好吧,你至少对*nix平台是正确的。忘了这些。@Matti和你对BCP 47文档(我注意到)的看法完全正确,但对于提问者的需要,Java风格的语言环境格式可能更合适。如图所示,有很多变体,但官方标准是下划线。当调用具有不同约定的框架时,编码人员需要知道需要进行转换,这是一个“笨拙”的过程。建议使用从中调用的框架的约定。当您调用另一个框架时,请提供执行转换的“代理”。为什么?这样就不需要知道被调用的框架使用了不同的约定。贡献者只会“看到”一个约定,使用该约定将避免Pratfall。是的,“-”是标准,即使我使用Java,我也会遵循标准。()@Howard Um,每次实例化
locale
对象时,都需要
en_US
格式的区域名称。(对于货币格式、日期格式等)以
en US
格式存储数据,并在每次需要使用存储的数据时用下划线替换破折号绝对有效,但可能更明智(当然也更简单)要以应用程序实际使用的格式存储区域名称…@dkarp使用并将实现这一点(尽管是在JDK 1.7中)。仅供参考,我的基于spring的web应用程序en_US正被it开发人员使用,正如dkarp在他的帖子中所述。没有一个标准。例如,Posix使用下划线。这篇文章的更多细节:是的,很抱歉,因为文章已经不存在了。@ebruchez,你可以留下评论,我可以更新链接或删除答案。这是一个2年半的答案。谢谢你抓住了它。由于链接断了,它应该得到否决票,你说呢?不能保证你会回来编辑它。现在重新投票。澄清一下:否决票不是对你最初的评论或你的能力的批评,而是对那一点答案的价值的批评。如果不是马上投反对票,我就得投1票。添加评论2。给自己加上一个提醒,如果答案没有被提及,请稍后投票否决。已经有1条评论指出链接不正确。如图所示,有很多变体,但官方标准是下划线。当调用具有不同约定的框架时,编码人员需要知道需要进行转换,这是一个“笨拙”的过程。建议使用从中调用的框架的约定。当您调用另一个框架时,请提供执行转换的“代理”。为什么?这样就不需要知道被调用的框架使用了不同的约定。贡献者将只“看到”一个约定,使用该约定将避免失败。