iOS中的案例不敏感本地化

时间:2018-04-30 11:05:22

标签: ios nslocalizedstring

在实现本地化时,我意识到本地化区分大小写,意味着:

 - "Cookie Selection" = "Sélection de biscuit";

 - "COOKIE SELECTION" = "SÉLECTION DE BISCUIT";

以上两个是不同的实体。如果您像NSLocalizedString("cookie selection", comment: "")那样进行本地化,则不会将其本地化为为" Cookie选择"提供的键值映射。是大写字符串还是大写字符串。

查询: 如果我可以使它不区分大小写,就像我将只添加一对用于本地化

"Cookie Selection" = "Sélection de biscuit";

这适用于以下所有情况

 1. NSLocalizedString("Cookie Selection", comment: "")
 2. NSLocalizedString("COOKIE SELECTION", comment: "")
 3. NSLocalizedString("cookie selection", comment: "")

注意: - >没有任何自定义方法,只使用NSLocalization。

快乐编码

3 个答案:

答案 0 :(得分:1)

没有....更好地使用常量文件,您将存储所有本地化常量及其值,因此错误的本地化常量值不会错误地更改(假设您键入 cookie选择而不是调用时 Cookie选择)。您将使用localizable文件中的then值作为键。

<强> LocalizationConstants.swift

let CookieSelectionKey = "Cookie Selection"

<强> Localizable.strings(英文)

"Cookie Selection" = "Selection Of cookie";

现在称之为

  NSLocalizedString(CookieSelectionKey, comment: "")

由于它返回一个字符串,你可以使用字符串实例方法,例如 uppercased,capitalized(etc。)来相应地改变大小写。

答案 1 :(得分:1)

你总是可以通过制作一个结构来封装你的本地化逻辑等来消除错误的可能性......

enum Strings: String {
    case cookieSelection

    var localized: String {
        return NSLocalizedString(self.rawValue, comment: "Something here")
    }
}

通过这样的方法,您现在可以在一个地方跟踪所有本地化字符串,并消除错误使用它们的可能性。

用于做类似的事情......

label.text = Strings.cookieSelection.localized

如果您想要字符串的默认值,可以将其添加到案例中......

enum Strings: String {
    case cookieSelection = "Cookie Selection"
}

答案 2 :(得分:0)

最简单和最原始的解决方案是始终将密钥大写:

NSLocalizedString("cookie selection".uppercased(), comment: "Comment")

更清晰的方法是在String类上创建一个类别,然后使用该方法:

        extension String {
        public static func LocalizedString(key: String, comment: String) -> String {
            return NSLocalizedString(key.uppercased(), comment: comment)
        }
    }

// Usage

    String.LocalizedString(key: "cookie selection", comment: "")

另一个不错的方法是创建一个常量文件并使用它们而不是使用硬编码字符串。