我需要为不同语言本地化数字整数(如 1、2、3 等)。
就像阿拉伯语 2 看起来像 ٢
我使用数字格式化程序来实现这一点,它似乎适用于某些语言:
var n = 02;
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "ar")
formatter.numberStyle = .decimal
formatter.minimumIntegerDigits = 2
formatter.string(for: n);
这将给出正确的结果为“٠٢”
虽然当我将语言更改为中文或日文时。它不起作用。对于中文、日文和许多其他语言,它只打印 02。
然后我又挖了一点,发现替换这一行会将这些整数转换为中文:
formatter1.numberStyle = .spellOut
所以现在我的代码就像
var n = 120;
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "zh_Hans_CN")
formatter.numberStyle = .spellOut
formatter.minimumIntegerDigits = 2
formatter.string(for: n);
它会打印出“一百二十”,这正是我想要的。
但问题是,当我将这个拼写与英语一起使用时,它会打印一,二,如下代码所示:
var n = 120;
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en")
formatter.numberStyle = .spellOut
formatter.minimumIntegerDigits = 2
formatter.string(for: n);
它将打印“一百二十”而不是 120。
我正在使用此代码将整数格式化为设备中设置的语言。在上面的示例中,我对语言环境进行了硬编码,但我使用的是设备的语言,它工作得非常好。
简而言之,问题是如何将这些整数符号转换为设备当前语言的原生符号。