如何大写土耳其语“ i”?

时间:2018-09-19 09:08:08

标签: ios swift localization turkish

在土耳其语中,有两个 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 :(得分: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"