如何获取特定语言环境的 NSLocalizedString,或如何获取非本地化字符串

How to obtain NSLocalizedString for specific locale, or how to get non-localized string

有没有办法获取特定区域设置的本地化字符串,不同于当前区域设置

类似于反向查找,即我有本地化值,我想获取基本本地化版本甚至密钥。

myLocalizedString.getLocalizedString( locale : NSLocale )

我很清楚这不是超级干净的事实,但我不需要解释为什么这不是一个好主意。我只是处在一个看起来最不坏的情况下。

您只需发送语言代码和密钥字符串即可调用此方法。

func localizestring(for languageCode : String , keyString : String) -> String {
    //language code like --> en/ef/da
    let path = Bundle.main.path(forResource: languageCode, ofType: "lproj")
    let bundle = Bundle(path: path!)
    return NSLocalizedString(keyString , tableName: nil, bundle: bundle!, value: "", comment: "")
}

我通过在 Swift 中使用此方法扩展 String 解决了这个问题。您可以通过这种方式为应用程序中的任何语言环境获取本地化字符串。

extension String {
    func localized(forLanguageCode lanCode: String) -> String {
        guard
            let bundlePath = Bundle.main.path(forResource: lanCode, ofType: "lproj"),
            let bundle = Bundle(path: bundlePath)
        else { return "" }
        
        return NSLocalizedString(
            self,
            bundle: bundle,
            value: " ",
            comment: ""
        )
    }
}

示例(当系统语言为英语时获取乌克兰语的本地化字符串):

"settings_choose_language".localized(forLanguageCode: "uk")