Я занимаюсь разработкой многоязычного приложения. В некоторых случаях мне нужно посчитать английские и арабские буквы, чтобы решить,

nameLabel.textAlignment = .right

Или

nameLabel.textAlignment = .left

Например, какой-нибудь текст вроде этого:

بازی разгневанных птиц بسیار بازی جذابی است

Нужно .right выравнивание текста и

Angry bird - захватывающая игра

Нужно .left выравнивание текста! Я хочу судить об этом, считая английские и неанглийские символы с сервера.

Какова лучшая практика здесь?

2
shaibow 28 Май 2017 в 15:21

2 ответа

Лучший ответ

Вы можете просто просмотреть все символы, а затем посчитать количество английских и неанглийских. После этого вы можете сравнить эти значения и решить, какое выравнивание вы хотите:

let characterset = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") //add whatever characters you find English
var amountOfEnglishChars = 0
var amountOfNonEnglishChars = 0

for char in string.unicodeScalars {
    if characterset.contains(char) {
        amountOfEnglishChars += 1
    }
    else {
        amountOfNonEnglishChars += 1
    }
}

nameLabel.textAlignment = amountOfEnglishChars > amountOfNonEnglishChars ? .left : .right
3
Eric 28 Май 2017 в 12:33

Вы можете создать CharacterSet используя диапазон

CharacterSet(charactersIn: "A"..."Z").union(CharacterSet(charactersIn: "a"..."z"))
0
AlKozin 16 Ноя 2018 в 10:03