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

问题描述 投票:0回答:3

我遇到过一个问题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:

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

ios swift nsnumberformatter
3个回答
6
投票

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

Doc说明: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


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
投票

一种更通用的解决方案,允许您从任何语言环境转换

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 ٥
© www.soinside.com 2019 - 2024. All rights reserved.