Java 中的本地化序数

lap*_*tou 5 java formatting android numbers

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

\n

Ste*_*ann 7

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

implementation 'com.ibm.icu:icu4j:xx.xx'
Run Code Online (Sandbox Code Playgroud)

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

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

//ordinalNumber = "1st"
String ordinalNumber = formatter.format(1);
Run Code Online (Sandbox Code Playgroud)


Wes*_*y92 5

这是一个特定于 Android 的示例,应尊重区域设置。请注意,它是用 Kotlin 编写的。\n这需要 Android 7.0 或更高版本。

\n
import android.icu.text.MessageFormat // Don't use java.text.MessageFormat!\n\nval value = 123\nval formatter = MessageFormat("{0,ordinal}", Locale("es", "ES")) // Locale.US for English\nval ordinalValue = formatter.format(arrayOf(value)) // "123.\xc2\xba"\n
Run Code Online (Sandbox Code Playgroud)\n