【问题标题】:How to get styled language/country code from the Java Locale如何从 Java 语言环境中获取风格化的语言/国家代码
【发布时间】:2012-03-26 17:44:25
【问题描述】:

我想知道是否有人知道如何从 Locale 类中获取格式化或样式代码。我想看到的是美国英语的“en_US”。例如,如果我从 Firefox 中检测到一种语言,它会返回为“en-us,en;q=0.5”。稍后当我想输出它(使用 getLanguage() 或 toString())时,它会返回为“en-us,en;q=0.5”而不是“en_US”。我尝试了各种函数,但它们似乎都返回了最初用于生成语言环境的字符串。

这些值会进入各种 UI 元素和配置文件,因此无论是谁或如何生成它们,让它们看起来都一样会更好,而且当它们转换为字符串时比较不容易(必须) .

干杯,谢谢!

注意:我问这个是因为我们有遗留代码,当数据是字符串/xml 格式时,我们有很多(我的意思是大多数)事情,所以格式化是至关重要的。

【问题讨论】:

    标签: java locale


    【解决方案1】:

    Locale#toString() 返回你想要的。

    事情是这样的:您从 Firefox 检测到的语言使用 the format specified in RFC 2616,这是 HTTP 规范。这与您在 Java Locale 中看到的任何格式都不同,因为该格式非常特定于 HTTP。

    【讨论】:

    • 不,返回 "en-us,en;q=0.5" :(
    • 那么您没有使用java.util.Locale 实例。这个类的 FQCN 是什么?
    • java.util.Locale.Locale :(.toString() 根据我所知返回用于初始化 Locale 类的任何字符串。
    • Locale 实例从何而来?如果您正在执行类似new Locale("en-us,en;q=0.5") 的操作,这根本不是有效的语言代码,which is what that constructor expects
    • 这正是我正在做的 :(。我只是在 http 标头中查找 Accepted-Language 并使用该字符串来初始化类。这样做的正确方法是什么?
    【解决方案2】:

    问题在于您要打印的内容的含义。

    zh-cn,zh;q=0.5

    表示英语语言的偏好质量为50%,可以识别为en-us或en。

    如果你收到一个 http 请求

    接受语言:da, en-gb;q=0.8, en;q=0.7

    意思是:“我更喜欢丹麦语,但会接受英式英语和其他类型的英语”

    所以首先您必须根据规范解码您的 http 请求,然后获取语言环境

    【讨论】:

    • 嗯,HttpServletRequest 上有一个名为 getLocale() 的函数。它为你做这一切! :) 我把事情弄得太复杂了。我这样做;)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多