iOS поддерживает не все цифры.Вы можете увидеть, как цифры представлены во всех поддерживаемых локальных системах, используя следующее:
Locale.availableIdentifiers.forEach {
formatter.locale = Locale(identifier: $0)
print($0, ":", formatter.string(for: 1234567890)!)
}
Имейте в виду, что даже если некоторые локали дают определенную систему счисления, фактические пользователи приложения предпочитают использовать другую систему.
Вот способ использования числового стиля spellOut
для языков Восточной Азии:
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "zh-Hans")
formatter.locale.regionCode
let spellOutLocales: Set = ["zh-Hant-TW",
"zh-Hant-MO",
"zh-Hant-HK",
"zh-Hant",
"zh-Hans-SG",
"zh-Hans-MO",
"zh-Hans",
"zh_Hant_HK",
"zh_Hans_CN",
"ja-JP",
"ko-KR",
"ko_KP",]
if spellOutLocales.contains(formatter.locale.identifier) {
formatter.numberStyle = .spellOut
} else {
formatter.numberStyle = .decimal
}
spellOutLocales
не является исчерпывающим.
И используйте его так:
let n = 1234567890
formatter.string(for: n) //"十二亿三千四百五十六万七千八百九十"
Здесь хорошее объяснение форматирования чисел и интернационализации.
Вот примервыражения чисел с использованием тайских цифр:
let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "th_TH")
formatter.numberStyle = .decimal
let n = 1234567890
var str = formatter.string(for: n)! //"1,234,567,890" This is what the default formatter gives
let arabicNumerals = (0...9).map { String($0) }
let thaiNumerals = ["๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙",]
let zipped = zip(arabicNumerals, thaiNumerals)
let range = NSRange(location: 0, length: (str as NSString).length)
zipped.forEach { (arabic, thai) in
let regex = try! NSRegularExpression(pattern: arabic, options: .caseInsensitive)
str = regex.stringByReplacingMatches(in: str,
options: .reportCompletion,
range: range,
withTemplate: thai)
}
print(str) //๑,๒๓๔,๕๖๗,๘๙๐
То, что мы сделали в приведенном выше коде, это заменили вхождения арабских цифр на соответствующие тайские.Если в указанном регионе следует избегать разделителя группировки, установите для formatter.usesGroupingSeparator
значение false
.