将一种印地语语言数字转换为阿拉伯语语言数字

Convert one Hindi language number to Arabic language number

我遇到了一个问题

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

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

例如:尝试将印地语数字转换为阿拉伯语

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

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)
}

这是它仅以英文显示的输出

我已经搜索过这个问题,但没有找到这种具体的解决方案,因此发布了一个新问题。

注意:不是在寻找任何静态转换扩展或那种功能。

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

编辑 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!)
}

解释: NumberFormatter 将数字转换为另一种语言的数字,而不是将一种语言的字符串转换为另一种语言。所以首先我们要转换一种语言的数字,然后再转换成另一种语言的数字。

文档解释: Reference

Instances of NumberFormatter format the textual representation of cells that contain NSNumber objects and convert textual representations of numeric values into NSNumber objects. The representation encompasses integers, floats, and doubles; floats and doubles can be formatted to a specified decimal position. NumberFormatter objects can also impose ranges on the numeric values cells can accept.

直接使用此扩展名 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")
}

输出:

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

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 始终使用数值作为真实点,并使用它能够转换到不同的语言环境。这就是为什么如果你使用这个 class.

你必须先转换成数值

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

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

输出将是:

४ in arabic is ٥