如何大写土耳其语 "i"?

How to uppercase Turkish "i"?

在土耳其语中,有两个 i

问题: 每次我大写 i,我得到一个

当我将 大写时,我想得到 İ(仅限土耳其语) iI 当我大写 ı .

我有一个函数可以做到

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

但我每次使用它时都必须检查语言是否为土耳其语,并且对应用程序中的每个字符串都进行检查是一项非常艰巨的工作。

有更简单的方法吗?

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"

问题出在uppercased()函数不关心Locales和小点i看起来像正常英文。您应该使用 localizedUppercase,这将为土耳其用户使用土耳其语 Locale(或者 uppercased(with: Locale(identifier: "tr_TR"),如果您希望对您应用的所有用户执行此操作,而不管他们的区域设置如何,但我不建议这样做)。

而且大写字母也没有必要一个一个字符的写,完全可以String.

@objc public static func uppercaseTurkishString(_ string: String) -> String {
    return string.localizedUppercase
}