在ios swift中本地化。如何在运行时更改应用程序语言

时间:2016-02-16 06:58:18

标签: ios swift localization internationalization ios9

我在ios swift中创建应用程序。现在我想用双语制作应用程序所以从编辑菜单我只是导出和导入本地化。它为我创建了两个文件。enter image description here

现在我想在我的应用的第一页上放两个按钮。当用户按下按钮1我想加载英语。如果用户按下按钮2我想加载土耳其语。那我怎么能在swift中做到这一点?

2 个答案:

答案 0 :(得分:3)

不使用NSLocalizedString方法本地化您的应用,而是根据所选语言加载可本地化的字符串,并在代码中使用它。

从数据包中加载数据:

// Exemple with english language
if let path = NSBundle(forClass:object_getClass(self)).URLForResource("Localizable", withExtension: "strings", subdirectory: nil, localization: "en")?.path {
    if NSFileManager.defaultManager().fileExistsAtPath(path)     {
        // Keep a reference to this dictionary
        dicoLocalisation = NSDictionary(contentsOfFile: path)
    }
}

替换NSLocalizedString:

func localizedStringForKey(key:String) -> String { 
    // First we check if the dictionary exists       
    if let dico = dicoLocalisation {

        if let localizedString = dico[key] as? String {
            // If the localization exists, return it
            return localizedString
        }  else {
            // Returns the key if no String was found
            return key
        }
    } else {
        // If not, we can use the NSLocalizedString function
        return NSLocalizedString(key, comment: key)
    }
}

如果你想快速处理这个问题,我已经在Github上提供了一个自定义本地化课程,它允许你从应用程序的任何地方切换语言,甚至可以保存,以便进一步启动应用程序。实施与我所解释的几乎相同。

答案 1 :(得分:2)

请不要这样做。这会导致非常混乱的用户体验;人们希望他们的应用程序能够以他们选择的系统语言运行。

当涉及到您无法控制的UI和字符串时,您也会遇到问题,例如系统视图控制器(例如共享文件)和日期,数字,数量等的格式化程序。

如果每个应用程序默认都有语言切换器,那么为每个应用程序选择它都会非常麻烦。这就是本地化API按照它的方式构建的原因;如果你使用系统语言回退,那么一切都将以它应该的方式工作。