在土耳其语中,有两个 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())
}
})
}
但是我每次使用时都必须检查该语言是否是土耳其语,并且对应用程序中的每个字符串执行此操作都是非常困难的。
有更简单的方法吗?
答案 0 :(得分:3)
问题在于uppercased()
函数并不关心Locale
,而小点的 i 看起来像普通的英语 i < / em>。您应该使用localizedUppercase
,它将为土耳其语用户使用土耳其语Locale
(或uppercased(with: Locale(identifier: "tr_TR")
,以防您希望对应用程序的所有用户(无论其语言环境设置如何)执行此操作,但我不建议这样做。
此外,无需逐个字符地使用大写字母,您只需在完整的String
上执行即可。
@objc public static func uppercaseTurkishString(_ string: String) -> String {
return string.localizedUppercase
}
答案 1 :(得分:1)
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"