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

localization in ios swift. how can i change application language at run time

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

现在我想在我的应用程序的第一页上放置两个按钮。当用户按下按钮 1 时,我想加载英语。如果用户按下按钮 2,我想加载土耳其语。那么我如何在 swift 中执行此操作?

不要使用 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 上制作了一个自定义本地化器 class,它允许您从应用程序的任何位置切换语言,甚至可以保存以供进一步使用应用程序的启动。实现与我所解释的几乎相同。

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

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

如果每个应用程序默认都有一个语言切换器,那么select每个应用程序都会有一个非常麻烦的体验。这就是为什么本地化 API 的结构是这样的;如果您使用系统语言回退,那么一切都会按应有的方式工作。