密钥未翻译时使用默认语言回退

Use default language fallback when key is untranslated

我可以对其他语言 Localizable.strings 文件中的未翻译键使用默认语言(例如英语)吗?

为此,您可以使用英文单词作为 Localizable.strings 文件中的键。

另一种方法是检查 NSLocalizedString 的结果和 return 默认英文版本(使用 'forced' 包)以防结果与密钥相同。

它可能看起来像这样

extension NSString {
    class func NSLocalizedStringWithDefault (key:String, comment:String)->String {
        let message = NSLocalizedString(key, comment: comment)
        if message != key {
            return message
        }
        let language = "en"
        let path = NSBundle.mainBundle().pathForResource(language, ofType: "lproj")
        let bundle = NSBundle(path: path!)
        if let forcedString = bundle?.localizedStringForKey(key, value: nil, table: nil){
            return forcedString
        }else {
            return key
        }
    }
}

Localized.string(英语)

"test-key-1" = "Test 1";
"test-key-2" = "Test 2";

Localized.string (esp)

"test-key-1" = "El Test 1";

然后你可以像这样使用它(假设语言环境设置为 'es'):

println(NSString.NSLocalizedStringWithDefault("test-key-1", comment: "")) // El Test 1
println(NSString.NSLocalizedStringWithDefault("test-key-2", comment: "")) // Test 2 (from eng file)

这不是最简洁的实施方式,但您明白了。