将一种印地语语言编号转换为阿拉伯语言编号

时间:2019-02-15 12:41:26

标签: ios swift nsnumberformatter

我遇到了一个问题 Hindi numeric set Integer value in Swift

这是关于如何将印地文转换为英语的任何数字值。

好奇地想知道如何将一种语言编号转换为另一种语言编号

例如示例:尝试将印地语语言编号转换为阿拉伯语

这是我在操场上尝试过的代码:

let string = "४"

let intParse1 = Int(string)

let numberFormat = NumberFormatter()
numberFormat.locale = Locale(identifier: "ar")

if let getOP = numberFormat.number(from: string) {
    print("output is: ", getOP)
}

这是仅以英文显示的输出

enter image description here

我已经搜索了这个问题,但是没有找到这种特定的解决方案,所以发布了一个新的问题。

注意:不需要任何静态转换扩展或此类功能。

编辑: 我不想要这种解决方案

convert arabic String to english number in Swift

编辑2:

我想知道为什么我们必须先将其转换为数字然后再将其转换为阿拉伯语?,这意味着有必要先将其转换为英语吗?

3 个答案:

答案 0 :(得分:6)

说明: NumberFormatter将数字转换为另一种语言编号,而不是将一种语言的字符串转换为另一种语言。因此,我们首先必须将一个语言编号转换为另一个语言编号。

文档说明: Reference

  

NumberFormatter的实例格式化包含NSNumber对象的单元格的文本表示形式,并将数值的文本表示形式转换为NSNumber对象。该表示形式包含整数,浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。 NumberFormatter对象还可以在单​​元格可以接受的数值上施加范围。

直接将此扩展用于 Swift 4

extension String {
    func convertToArbic () -> String? {
        let formatter = NumberFormatter()
        formatter.locale = Locale(identifier: "hi")
        guard let number = formatter.number(from:self ) else{
            return nil
        }
        formatter.locale = Locale(identifier: "ar")
        guard let number2 = formatter.string(from: number) else{
            return nil
        }
        return number2
    }
}

// use
let string = "४"
if let arbNumber = string.convertToArbic() {
    print(arbNumber)
}
else{
    print("Unable to get arabic number")
}

输出:

enter image description here

答案 1 :(得分:2)

尝试以下代码:

let Formatter = NumberFormatter()
Formatter.locale = Locale(identifier: "EN")
if let hindiNumber = Formatter.number(from: "४") {
    Formatter.locale =  Locale(identifier: "ar")
    let formattedNumber = Formatter.string(from: hindiNumber)
    print(formattedNumber!)
}

答案 2 :(得分:2)

更通用的解决方案,可让您在任何语言环境之间进行转换

extension NSNumber {
    static func from(value: String, localeIdentifier: String) -> NSNumber? {
        let numberFormatter = NumberFormatter()
        numberFormatter.locale = Locale(identifier: localeIdentifier)

        return numberFormatter.number(from: value)
    }

    func to(localeIdentifier: String) -> String {
        let numberFormatter = NumberFormatter()
        numberFormatter.locale = Locale(identifier: localeIdentifier)

        return numberFormatter.string(from: self) ?? "<undefined>"
    }
}

print("४ is the number \(NSNumber.from(value: "४", localeIdentifier: "hi")!)")
print("5 is \(NSNumber(value: 5).to(localeIdentifier: "ar")) in arabic")

输出将是:

४ is the number 4
5 is ٥ in arabic

要编辑的答案2:

数字字符串值不过是数字值的表示形式。 NumberFormatter始终使用数字值作为真理,并使用它可以转换为其他语言环境。因此,如果使用此类,必须首先转换为数值。

但是,您可以编写自己的函数,该函数不知道数值,而只是在字符串之间映射以转换数值,例如:

var hindiToArabicMap: [String: String] = ["४": "٥"]
print("४ in arabic is \(hindiToArabicMap["४"]!)")

输出将是:

४ in arabic is ٥