【问题标题】:Which standard/format does Locale class in Java return?Java 中的 Locale 类返回哪种标准/格式?
【发布时间】:2013-05-08 14:35:28
【问题描述】:

如果您有以下代码 sn-p 并在区域设置中设置格式,您有时会在下划线前得到两个字母,有时会在下划线前得到三个字母。在 ISO 639-1 中,您只有两个字母,所以不可能是那个?

System.out.println(Locale.getDefault());

【问题讨论】:

    标签: java iso


    【解决方案1】:

    根据Java 7 docs

    1. 语言 - ISO 639 alpha-2 或 alpha-3 语言代码,或最多 8 个字母的注册语言子标签
    2. 脚本 - ISO 15924 alpha-4 脚本代码
    3. 国家(地区) ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区域代码。

    【讨论】:

      【解决方案2】:

      它似乎不是 ISO 标准,而是以下字段的串联:

      语言+“”+国家+“”+(变体+“_#”|“#”)+脚本+“-”+扩展名

      根据the documentation,这可以返回以下内容:

      语言总是小写,国家总是大写,脚本是 总是大写,扩展总是小写。扩展 和私人使用的子标签将按照规范顺序,如中所述 toLanguageTag()。当语言环境既没有脚本也没有扩展名时, 结果与 Java 6 及之前的版本相同。

      如果缺少语言和国家字段,则此函数 将返回空字符串,即使变体、脚本或 extensions 字段存在(你不能有一个只有一个 变体,变体必须伴随格式良好的语言或国家 代码)。

      如果存在脚本或扩展并且缺少变体,则没有 在“#”之前添加下划线。

      此行为旨在支持调试并兼容 与之前使用 toString 预期的语言、国家和 仅限变体字段。将语言环境表示为字符串以进行交换 目的,使用 toLanguageTag()。

      例子:

      zh_DE _GB en_US_WIN de__POSIX zh_CN_#Hans zh_TW_#Hant-x-java th_TH_TH_#u-nu-thai

      【讨论】:

      • 为什么区域设置中的某些语言返回xxx_XX?我的意思是控制面板中的区域设置遵循什么样的标准?或者它是Java中的某种转换?我不明白它如何在下划线前返回 2 和 3 个字母。
      • 你能分辨出哪些语言返回 xxx_XX 吗?
      • 顺便说一句,文档说:ISO 639 alpha-2 或 alpha-3 语言代码,或最多 8 个字母字母的注册语言子标签(用于将来的增强)。所以似乎也支持 alpha-3。
      • 为什么不一直返回 ISO 639-3?那么它会与三个字母一致?
      • 再次,根据文档:当一种语言同时具有 alpha-2 代码和 alpha-3 代码时,必须使用 alpha-2 代码。所以我猜它没有 alpha-2 代码?根据维基百科,这似乎是真的:en.wikipedia.org/wiki/Sami_languages
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2021-11-27
      • 2011-08-21
      • 2018-10-07
      • 1970-01-01
      相关资源
      最近更新 更多