en_US或en-US,哪一个应该使用?

94
5个回答

110

3
是的,"-"是标准,即使我使用Java,我也会遵循这个标准。(http://www.w3.org/TR/html401/struct/dirlang.html) - Howard
8
每次实例化Locale对象时,你需要以en_US格式提供所需的区域设置名称(用于货币格式、日期格式等)。虽然将数据存储在en-US格式中,并在每次需要使用存储的数据时用下划线替换破折号绝对会起作用,但更明智(而且肯定更简单)的做法是将区域设置名称存储在你的应用程序实际使用的格式中... - dkarp
16
使用Locale#toLanguageTag()和Locale#forLanguageTag()会达到效果(在JDK 1.7中)。 - viphe
在我的基于Spring的Web应用程序中,开发人员正在使用en_US,正如dkarp在他的帖子中提到的那样。 - Lucky
我在Python中使用{% set currency = "USD" %}{% set format = "en_US" %},尝试查找它是否正确。 - Niklas Rosencrantz
程序员400看起来像有趣的Python。更像是Jinja2而不是Python。这完全取决于你使用什么来判断它是否正确。 - dalore

35
如果你正在使用Java,最好使用Java本地化格式en_US)。 BCP 47文档实际上指定了en-US格式,它和Java风格的本地化名称一样常见,甚至更常见。但是在实践中,你会经常看到带有下划线的形式。例如,Java大多数POSIX类型平台都使用下划线作为它们的语言/区域分隔符。
因此,你选择哪个都不会错。但是考虑到你正在使用Java并且可能针对Unix平台,en_US可能更合适。

1
是的,但他在他的问题上有一个“java”标签。如果您愿意,请查看我的答案中的链接... - dkarp
呃,嗯,至少你对*nix平台是正确的。忘记了那些。 - Matti Virkkunen
@Matti,你完全正确关于BCP 47文档(我已经注意到),但对于提问者的需求,Java风格的区域设置格式可能更合适。 - dkarp
1
Java不支持解析该格式,只能将其转储出来,而javadoc将其描述为仅用于调试目的,而不是符合标准的存储。 - Charlie
消息包文件名称:在新的Java中使用下划线或破折号格式?那Java 11呢? - eastwater
显示剩余2条评论

17
在Java 7中,有一个新的方法Locale.forLanguageTag(String),假设连字符作为分隔符。我认为这是规范的。请查看Locale文档获取更多信息。

3

3
抱歉,由于文章已经消失,我会将此帖子点为踩。 - ebruchez
5
与其给我点踩,您可以留下评论,我可以更新链接或删除答案。这是一个两年半的旧答案。感谢您发现了这个问题。 - CoolBeans
9
链接已经失效,应该会被点踩吧?毕竟没有保证你会回来编辑它。现在已经点了赞。 - ebruchez
6
澄清一下:我给你的回答点踩并不是对你最初的评论或能力的批评,而是针对当时回答价值的问题。如果不立即点踩,我要么得 1. 添加评论,要么得 2. 给自己设个提醒,以便在未被解决的情况下稍后点踩回答。而且已经有一条评论指出链接是错误的了。 - ebruchez
4
https://web.archive.org/web/20150604051040/http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html - Benjamin
显示剩余5条评论

0

我不认为en-US是Java的任何标准。(如果您在某个地方看到了,请添加链接)。

所以只需要使用en_US


如图所示,有许多变体,但官方标准是使用下划线。当调用不同惯例的框架时,程序员需要知道转换是必需的,这可能会导致错误。建议使用您正在调用的框架的惯例。当您调用另一个框架时,请提供执行转换的“代理”。为什么?这样可以消除需要知道被调用框架使用不同惯例的需求。贡献者将仅“看到”一个惯例,使用该惯例将避免错误。 - DaBlick
2
en-US 是实际标准,而 en_US 是不正确的。我今天处理了这个确切的问题,Nimbus 在 OIDC 配置中发现了 en_GB 而不是 en-GB,导致抛出了异常。 - SeverityOne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接