不使用 NSLocalizedStrings 访问本地化文件

Accessing localized files without using NSLocalizedStrings

如何在不使用 NSLocalizedStrings 的情况下访问 "Localized.strings" 或任何其他本地化文件(使用 Xcode 中的 "Localize" 功能创建)。

我的主要目标是在应用 运行 时即时切换本地化。我知道 hack 可以手动覆盖 NSUserDefaults 设置,但它对我来说真的没用……

var inputLocale:NSLocale = … //locale to use for translation
var inputLocaleLanguage = inputLocale.objectForKey(NSLocaleLanguageCode) as String             
NSUserDefaults.standardUserDefaults().setObject([inputLocaleLanguage], forKey: "AppleLanguages")
NSUserDefaults.standardUserDefaults().synchronize()

虽然它确实更改了默认值,但 NSLocalizedStrings 仍然提供 错误的 字符串 :-/ 理想情况下,我想为我设置的特定语言环境获取本地化字符串(手动).

如何在不使用 NSLocalizedStrings 的情况下访问本地化文件?

使用NSBundle#localizedStringForKey怎么样?

func getLocalizedString(key: String, lang: String, table: String? = nil) -> String? {
    return NSBundle(path: NSBundle.mainBundle().pathForResource(lang, ofType: "lproj")!)?
        .localizedStringForKey(key, value: nil, table: table)
}

println(getLocalizedString("foo", "ja", table: "Localized"))
println(getLocalizedString("foo", "en", table: "Localized"))

您可以这样找到它们:

let b = NSBundle.mainBundle()
let file = b.pathForResource("Localizeable", ofType: "strings", inDirectory: nil, forLocalization: "en")

假设您已将它们放置在默认位置。