如何为ios应用程序设置默认语言

时间:2018-02-08 05:41:39

标签: ios swift xcode localization

我的应用包含4种不同的语言。现在开发语言是英语我想设置一些其他语言(俄语)作为默认语言(应用程序语言必须是俄语,当应用程序第一次安装时)我该如何实现?

在我的app delegate中:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {  
     NSBundle.setLanguage(defaultLanguage)  
}   

extension NSBundle {
    class func setLanguage(language: String) {
        defer {
            object_setClass(NSBundle.mainBundle(), Language.self)
        }

        objc_setAssociatedObject(NSBundle.mainBundle(), &bundleKey, NSBundle.mainBundle().pathForResource(language, ofType: "lproj"), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)

    }
}

我添加了此代码,但语言没有改变。

2 个答案:

答案 0 :(得分:0)

您可以使用UserDefaults存储当前语言。如果未设置,请使用默认语言。

这是中文例如:

var bundle: Bundle? = nil

func setLanguage(_ index: Int) {
    switch index {
    case 0:    
        print("Set language to En.")
        let path = Bundle.main.path(forResource: "Base", ofType: "lproj")
        self.bundle = Bundle.init(path: path!)
    case 1:     
        print("Set language to Zh.")
        let path = Bundle.main.path(forResource: "zh-Hant", ofType: "lproj")
        self.bundle = Bundle.init(path: path!)
    case 2:     
        print("Set language to Ch.")
        let path = Bundle.main.path(forResource: "zh-Hans", ofType: "lproj")
        self.bundle = Bundle.init(path: path!)
    default:
        let path = Bundle.main.path(forResource: "zh-Hant", ofType: "lproj")
        self.bundle = Bundle.init(path: path!)
        break
    }

}

func get(_ key: String) -> String {
    if self.bundle != nil {
        return NSLocalizedString(key, tableName: "Localizable", bundle: bundle!, value: "", comment: "")
    }
    return ""
}

答案 1 :(得分:0)

您可以将当前语言保存在NSUserDefaults中。创建不同的文本文件以将不同的语言特定数据保存为读取和放大的键值对。写。每个文件只能包含该语言的键值。例如密钥字符串home, english.txt包含值home,其中bangla.txt包含নীড়等。

然后为getter和setter方法为UniversalLanguageProvider创建一个类。只需创建一个字典,并根据您在NSUserDefaults中设置的语言将文本文件中的所有文本数据保存到此。

首次启动应用时,当前语言为nil。然后你可以像这样明确地设置为俄语

NSString* language = [[NSUserDefaults standardUserDefaults] objectForKey:@"language"];
if(!language)
    [[NSUserDefaults standardUserDefaults] setObject:@"russian" 
forKey:@"language"];