簡體   English   中英

HTTPURLResponse.localizedString(forStatusCode :)不在開發語言中

[英]HTTPURLResponse.localizedString(forStatusCode:) not in development language

我正在制作一個iOS應用,但是我遇到了這個問題。

  • 我的應用程序大多數都是西班牙語的,所以我更改了開發語言(以困難的方式,更改了project.pbxproj內的developmentRegion = es;並更改了Info.plistCFBundleDevelopmentRegion=es
  • 我還向我的唯一語言中添加了Localizable.strings ,以使所有Strings在一個文檔中。 而且我所有的NSLocalizedStrings可以正常工作

當我使用函數HTTPURLResponse.localizedString(forStatusCode:)時,問題就出來了,它只會給我英文Strings 以前可以正常工作,但是添加Localizable.string后就不能正常工作了

任何將Strings帶回西班牙語的幫助嗎?

我認為您缺少正確的方法。

您無需將低級網絡錯誤定位為:

  • 通常對最終用戶沒有用
  • 易於開發,無需展示(您最終可以將它們登錄..)
  • 收到代碼后,在可讀的通用消息中進行更改,然后將其本地化。

對於III點:

final private func downloadMyData(){

guard let myURL = URL(string: "__https://ingconti.com/wrongurl") else{

    return
}

let session = URLSession.shared

let task = session.dataTask(with: myURL) { (data: Data?, response: URLResponse?, error: Error?) in

    // session cannot be created...
       if let error = error  {
            self.manageLowLevel(error: error)
            return
        }

    var statusCode: Int = 0
    if let httpResponse : HTTPURLResponse = response as? HTTPURLResponse{
        statusCode = httpResponse.statusCode
    }

    if 200 ... 299 ~= statusCode {
        self.parse(data: data)
    }else{
        self.manageHTTPError(code: statusCode, data: data)
    }
}


task.resume()

}

如果遇到BIG錯誤(例如,在我的代碼中,我使用了錯誤的前綴“ __https”),則您將得到_code = -1022,

您可以通過以下方式進行管理:

 final private func manageLowLevel(error: Error){
        #if DEBUG
        print(error)
        #endif
        var msg = ""
        let code = error._code
        switch code {
        case -1002:
            msg = localized("GENERIC_NETWORK_ERR")
        default:
            msg = localized("GENERIC_NETWORK_ERR")
        }

        // display msg... (on MAIN THREAD...)
    }



    func localized(_ msg: String)->String{
        let s = NSLocalizedString(msg, comment : "")
        return s
    }

您可以在其中向最終用戶屏蔽消息,並使消息更通用(並使用便捷功能“本地化”進行本地化)

對於HTTP錯誤(例如,找不到資源...即“ https://ingconti.com/wrongurl ”),您將在http / s中收到錯誤404。

因此,您可以執行類似的操作:

最后的私有函數manageHTTPError(code:Int,data:Data?){保護let data = data else {return}

    #if DEBUG
    if let s = String(data: data, encoding: .utf8){
        print(s)
    }else{
        if let s = String(data: data, encoding: .ascii){
            print(s)
        }
    }
    #endif

    var msg = ""
    switch code {
    case 404:
        msg = localized("NETWORK_CODE_404")
    default:
        msg = localized("GENERIC_NETWORK_ERR")
    }

    // display msg...
}

甚至合並在一起。

(字符串s在

#if DEBUG if s = .....

將顯示服務器錯誤,並且再次不顯示給用戶...)

總結一下:這樣就不會顯示低級錯誤,請查看提示信息,例如在本地化的字符串中可以有:

“ GENERIC_NETWORK_ERR” =“網絡錯誤”; “NETWORK_CODE_404”。 =“網絡錯誤(無數據)”;

和西班牙語...

“ GENERIC_NETWORK_ERR” =“紅色錯誤”; ...

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM