【问题标题】:Localized Ordinal Numbers in JavaJava中的本地化序数
【发布时间】:2018-09-19 02:49:02
【问题描述】:

在您将我的问题标记为重复问题之前,我已经看到了this questionthis question 的答案。正如这些答案所证明的那样,英语中的序数后缀规则很简单,但我希望有一种支持本地化的方法。例如,10 的序数格式在英语中是 10th,但在西班牙语中是 10.º。是否有一个库或任何东西可以让我避免必须为每种语言自己实现这个?

【问题讨论】:

  • 要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。您可能softwarereqs 试试运气 - 但首先研究相应的帮助中心,让自己了解该社区的政策。请考虑删除 this 问题!谢谢!
  • @GhostCat StackOverflow 上有数百个问题的答案都链接到 API 函数或 Apache Commons 等库。这就是我正在寻找的东西,我会像接受第 3 方库一样容易地接受一种技术或一段代码。
  • 所以有数百个问题不符合这个社区的标准。因此,这突然把你的问题变成了话题?!这些规则不是我编的。我只是让你意识到这一点。然后我给了你一个替代选择。当然,总是有类似 reddit 的东西。

标签: java android formatting numbers


【解决方案1】:

将 icu 依赖项添加到您的 gradle 中:

implementation 'com.ibm.icu:icu4j:xx.xx'

现在您有了RuleBasedNumberFormat,您可以在其中编写类似的内容来实现本地化序数:

RuleBasedNumberFormat formatter = new RuleBasedNumberFormat(Locale.UK, RuleBasedNumberFormat.ORDINAL);

//ordinalNumber = "1st"
String ordinalNumber = formatter.format(1);

【讨论】:

    【解决方案2】:

    这是一个应遵循语言环境的特定于 Android 的示例。请注意,它是用 Kotlin 编写的。 这需要 Android 7.0 或更高版本。

    import android.icu.text.MessageFormat // Don't use java.text.MessageFormat!
    
    val value = 123
    val formatter = MessageFormat("{0,ordinal}", Locale("es", "ES")) // Locale.US for English
    val ordinalValue = formatter.format(arrayOf(value)) // "123.º"
    

    【讨论】:

    • 请注意这需要 Android >= 7.0 并且您必须小心使用 android.icu.text.MessageFormat,而不是 java.text.MessageFormat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多