在 Swift 3 中添加本地化后加载 JSON 失败

Posted

技术标签:

【中文标题】在 Swift 3 中添加本地化后加载 JSON 失败【英文标题】:Loading JSON failed after adding localization to it Swift 3 【发布时间】:2017-06-11 12:59:09 【问题描述】:

嘿,我的应用中有一个用于预设数据的 JSON。通常我是这样加载数据的:

        if let path = Bundle.main.path(forResource: "document", ofType: "json")

    

        let jsonData = try NSData(contentsOfFile: path, options: NSData.ReadingOptions.mappedIfSafe)
  ... 

但是在我像这样本地化 document.json 文件之后:

不会加载任何数据。 有人知道如何获取本地化数据吗?

【问题讨论】:

【参考方案1】:

由于本地化,本地化文件位于 lproj 文件夹中,而不是位于 mein Resources 文件夹中。

一种解决方案是使用支持的语言创建一个数组,并从当前语言环境中获取当前语言。如果当前语言与其中一种支持的语言不匹配,请回退到默认语言。

let supportedLocalizations = ["en", "de"]

let currentLanguage : String
if let locale = Locale.current.languageCode, supportedLocalizations.contains(locale) 
    currentLanguage = locale
 else 
    currentLanguage = Bundle.main.object(forInfoDictionaryKey: "CFBundleDevelopmentRegion") as! String

let url = Bundle.main.url(forResource: "document", withExtension: "json", subdirectory: nil, localization: currentLanguage)!
let jsonData = try! Data(contentsOf: url)

如果强制展开的部件崩溃,则表明存在设计错误。所有文件都应该在运行时存在。

【讨论】:

以上是关于在 Swift 3 中添加本地化后加载 JSON 失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 登录 Facebook 后加载另一个 ViewController

更新应用程序后加载错误的 xib

iOS 14 上的 WKWebView 仅在显着延迟后加载内容

如何在 Xcode 中加载本地 json 文件以进行单元测试?

如何在 Swift 中加载远程 JSON 文件?

打开通知警报后加载网络视图?