Как прописать турецкое «я» в верхнем регистре? - PullRequest
0 голосов
/ 19 сентября 2018

На турецком есть два i

  • без точки: ı , I
  • Пунктир: i , I

ПРОБЛЕМА: Каждый раз, когда я прописываю i , я получаю I .

Я хочу получить İ (только на турецком языке), когда я прописываю i и I , когда я в верхнем регистре х .

У меня есть функция, чтобы сделать это

@objc public static func uppercaseTurkishString(_ string: String) -> String {
    return String(string.map { (char) -> Character in
        if char == "i" {
            return "İ"
        } else {
            return Character(String(char).uppercased())
        }
    })
}

Но я должен проверять, является ли язык турецким каждый раз, когда я его использую, и делать это для каждой строки в приложении - очень сложная работа.

Есть ли более простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Проблема заключается в том, что функция uppercased() не заботится о Locale с, а маленькая пунктирная i выглядит как обычный английский i .Вы должны использовать localizedUppercase, который будет использовать турецкий Locale для турецких пользователей (или uppercased(with: Locale(identifier: "tr_TR"), если вы хотите, чтобы это было сделано для всех пользователей вашего приложения, независимо от их языковых настроек, но я не рекомендуючто).

Более того, нет необходимости вводить верхний регистр букв за символом, вы можете просто сделать это на полную String.

@objc public static func uppercaseTurkishString(_ string: String) -> String {
    return string.localizedUppercase
}
0 голосов
/ 19 сентября 2018

Foundation разработчики уже подумали об этом, и именно поэтому существует uppercased(with: Locale?):

"i".uppercased(with: Locale(identifier: "tr_TR")) // returns "İ"
"i".uppercased(with: Locale(identifier: "en_US")) // returns "I"
"ı".uppercased(with: Locale(identifier: "tr_TR")) // returns "I"
...