iOS Base本地化不用于丢失密钥

时间:2015-12-14 09:46:07

标签: ios swift localization

我们说我的项目中有2个字符串文件:

Localizable.strings (Base)
"hello_key" = "Hello";
"bye_key" = "Goodbye";

Localizable.strings (Chinese Traditional)
"hello_key" = "您好";

我使用以下代码来本地化"你好"串

NSLocalizedString("hello_key", comment: "")

它适用于" hello_key",但如果我使用" bye_key"在我的iPhone手机语言设置为传统中文,我得到" bye_key"作为本地化字符串。

换句话说,没有使用Base本地化。是否有可能展示Base English" GoodBye"在这种情况下?

感谢。

1 个答案:

答案 0 :(得分:2)

这是不受支持的词组的情况,因为您没有完全翻译繁体中文。

Apple不会回退到基本语言,只需返回密钥即可。这就是它的行为方式。我在blog中写了更多关于它的内容。

您必须像这样编写自定义NSLocalizedString(该示例使用en作为后备语言):

public func LS(_ key: String) -> String {
    let value = NSLocalizedString(key, comment: "")
    if value != key || NSLocale.preferredLanguages.first == "en" {
        return value
    }

    // Fall back to en
    guard
        let path = Bundle.main.path(forResource: "en", ofType: "lproj"),
        let bundle = Bundle(path: path)
        else { return value }
    return NSLocalizedString(key, bundle: bundle, comment: "")
}