Конвертировать один номер языка хинди в номер арабского языка - PullRequest
0 голосов
/ 15 февраля 2019

Я сталкивался с одним вопросом Числовой набор хинди Целочисленное значение в 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

У меня естьискал эту проблему, но не нашел такого рода конкретного решения, поэтому публикуем новый вопрос для него.

Примечание. Не требуется расширение статического преобразования или функция такого типа.

РЕДАКТИРОВАТЬ: Я не хочу такого решения

преобразовать арабскую строку в английский номер в Swift

РЕДАКТИРОВАТЬ 2:

Я хочу знать, почему мы должны сначала преобразовать его в число, а затем преобразовать в арабский? Значит, необходимо сначала преобразовать его в английский?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Объяснение: NumberFormatter преобразует число в число другого языка, а не строку языка в другой язык.Итак, сначала мы должны преобразовать одно числовое число языка, а затем в другое языковое число.

Документ Объяснение: Ссылка

Экземпляры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

0 голосов
/ 15 февраля 2019

Более общее решение, которое позволяет вам конвертировать из и в любую локаль

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 ٥
0 голосов
/ 15 февраля 2019

Попробуйте следующий код:

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