首页 > 解决方案 > Date.toLocaleString() 返回无效的语言标签:en_GB 但 Java.util.Locale 类返回英国的 en_GB 语言环境

问题描述

Java.util.Locale 返回英国的“en_GB”语言环境格式。当我在返回 Invalid language tag: en_GB 的 Date.toLocaleString() 函数中使用相同的语言环境时。我只想知道为什么 java 和 javascript 的行为不同,什么是最好的解决方案

标签: javascriptjava

解决方案


我只想知道为什么 java 和 javascript 的行为不同

因为它们是不同的语言,各自做出自己的决定。

诚然,有标准的 BCP 47 来识别语言,遗憾的是 Java 选择不使用它。

但是,java.util.Locale 是一个类,因此它不会自行“返回”任何内容。您正在观察的是让某些东西自动将 java.util.Locale 类的对象转换为 String 的结果。这是通过调用类的 toString() 方法完成的,该方法给出结果 en_GB。

再次遗憾的是,toString() 方法将被实施以产生除 BCP 47 标准之外的任何东西,但 BCP 47 于 2009 年发布,Java 的 java.util.Locale 于 1997 年发布。一些程序被制作为使用它自从它存在以来,没有人希望这些程序通过任意改变方法的行为来破坏。

总之,尽管期望尽最大努力实现最小意外原则是有价值的,但在期望特定格式时盲目依赖默认自动选择的转换仍然是一种相当糟糕的做法。(毕竟,这个讨论是关于指定一种语言,以便使用这种语言正确格式化日期。)

什么是最好的解决方案

称呼toLanguageTag()


推荐阅读