gpt4 book ai didi

ios - HTTPURLResponse.localizedString(forStatusCode :) not in development language

转载 作者:行者123 更新时间:2023-11-28 13:47:42 24 4
gpt4 key购买 nike

我正在制作一个 iOS 应用程序,但遇到了这个问题。

  • 我的应用大部分只有西类牙语,所以我更改了开发语言(以困难的方式,更改 project.pbxproj 中的 developmentRegion = es; 和更改 Info.plist 中的 CFBundleDevelopmentRegion=es)
  • 我还将 Localizable.strings 添加到我唯一的语言 (es) 中,以便在一个文档中包含所有 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()

如果出现大错误(例如在我的代码中我使用了错误的前缀“__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。

所以你可以做类似的事情:

final private func manageHTTPError(code: Int, data : Data?){ 守卫让数据=数据其他{ 返回

    #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调试 如果让 s = .....

将显示服务器错误,并且再次不显示给用户...)

总结:所以不要显示低级错误,请参阅温和的消息,例如在您本地化的字符串中您可以:

"GENERIC_NETWORK_ERR"= "网络错误";“NETWORK_CODE_404”。 = "网络错误(无数据)";

还有西类牙语...

"GENERIC_NETWORK_ERR"= "红色错误";...

希望对您有所帮助。

关于ios - HTTPURLResponse.localizedString(forStatusCode :) not in development language,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55204631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com