2

我见过一些动态更改应用程序中使用的语言的 iOS 应用程序,我的意思是当应用程序启动时,用户可以动态更改语言(法语、英语……);我在互联网上搜索过,我发现了任何关于此的信息。

任何想法 ?谢谢

4

3 回答 3

0

您必须使用本地化。这是一个教程:http ://www.raywenderlich.com/2876/how-to-localize-an-iphone-app-tutorial

于 2012-07-12T09:04:05.610 回答
0

您需要编写自己版本的 NSLocalizedString 宏,它根据用户偏好选择语言包,而不是手机区域设置

于 2012-07-12T09:06:31.550 回答
0

我们正在使用类似下面的东西(受 Localize-Swift 启发)。请注意,您必须以其他方式存储所选语言,而不是UserDefaults.standard使用应用程序扩展。如果需要,应该很容易通过复数支持进行扩展。

在下面添加类和字符串扩展后,您将调用"key_from_string_files".localized()而不是变体NSLocalizedString来获取本地化字符串。

extension String {
    func localized(_ key: String, arguments: [CVarArg] = []) -> String {
        return Localize.localized(key, arguments: arguments)
    }
}

class Localize {
    static var storeKey = "custom_current_language"

    class func localized(_ key: String, arguments: [CVarArg]) -> String {
        let string: String
        let lang = currentLanguage()

        if let path = Bundle.main.path(forResource: lang, ofType: "lproj"), let bundle = Bundle(path: path) {
            string = bundle.localizedString(forKey: key, value: nil, table: nil)
        } else {
            string = key
        }

        return String(format: string, arguments: arguments)
    }

    class func currentLanguage() -> String {
        if let current = UserDefaults.standard.object(forKey: storeKey) as? String, Bundle.main.localizations.contains(current) {
            return current
        } else if let preferred = Bundle.main.preferredLocalizations.first {
            return preferred
        }
        fatalError("Could not determine application localization")
    }

    class func setCurrentLanguage(_ language: String?) {
        UserDefaults.standard.set(language, forKey: storeKey)
        UserDefaults.standard.synchronize()
    }

}
于 2017-12-16T12:58:06.850 回答