iOS 获取特定语言字符串的本地化版本

标签 ios xcode localization internationalization nslocalizedstring

我正在构建一个适用于 iOS 的应用程序,该应用程序将提供英语和法语两种语言版本。我已经阅读了一些有关国际化的教程,并且了解它的工作原理以及我需要做什么。

我遇到的问题是在特定情况下我想为英语用户加载法语字符串。

我知道可以为整个应用程序设置语言,但它需要重新启动应用程序才能生效。我想避免这种情况,而是能够选择按需加载法语或英语字符串。

是否可以通过编程方式从特定语言的 .strings 文件加载字符串?

最佳答案

是的,这是可能的,但实现起来并不那么容易。

我只是遇到了这样的情况,我应该发送同名(适用于所有语言)的 GAI(适用于 iOS 的 Google Analytics)的 ViewController。

先决条件:

1) 我使用此处的 NSBundle 扩展 https://stackoverflow.com/a/20257557/3883492 - 也许先抬头看看是个好主意。 (老实说,这真是天才)

2) 我正在使用 swift 2

这是一个非常简单的代码示例来说明我的想法:

func getFrenchString(forKey key: String) -> String {
    if let currentLanguage = (NSUserDefaults.standardUserDefaults().arrayForKey(AppleLanguages)?.first as? String) {
        if currentLanguage == "fr" {
            return NSLocalizedString(key, comment: "")
        }
        else {
            //the application is not currently on `fr`
            //change application to `fr`
            NSBundle.setLanguage("fr")

            //get the localized string on `fr`
            let frString = NSLocalizedString(key, comment: "")

            //return the application to the old language
            NSBundle.setLanguage(currentLanguage)

            return frString
        }
    }

    return ""
}

此外,您的项目中还应该有包含本地化字符串的“fr.lproj”文件夹。

关于iOS 获取特定语言字符串的本地化版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28634428/

相关文章:

objective-c - CS193p的作业1

ios - Xamarin 上的 retrofit 更新包

ios - 如何更改 dismissViewController 过渡方向?

iphone - XCode 报告本地化 plist 已损坏

java - ä Java中的字母排序问题

ios - AVAudioPlayer 音量条件未正确返回

iOS/objective-C : Store Decimal as NSNumber in CoreData

ios - '[CLPlacemark] ?' is not convertible to ' [CLPlacemark]' -> swift2

xcode - 接管一个 Xcode iOS 项目 : code sign error

ios - 为iOS项目中的每个目标选择不同的语言