我正在制作一个iOS应用,但是我遇到了这个问题。
developmentRegion = es;
内更改了project.pbxproj
,并在{{ 1}})CFBundleDevelopmentRegion=es
,以将所有Info.plist
包含在一个文档中。而且我所有的Localizable.strings
都正常工作当我使用功能Strings
时问题就出现了
它只会用英语还给我NSLocalizedStrings
。以前可以正常运行,但是添加了HTTPURLResponse.localizedString(forStatusCode:)
后就无法正常运行了
有什么帮助将Strings
带回西班牙语吗?
答案 0 :(得分:1)
我认为您缺少正确的方法。
您无需将低级网络错误定位为:
对于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。
因此您可以执行类似操作:
final private func manageHTTPError(代码:整数,数据:数据?){ 保护数据=其他数据{ 返回 }
#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 in
#if调试 如果让s = .....
将显示服务器错误,再次不显示给用户...)
总结一下: 这样就不会显示低级错误,请查看温和的消息,例如在本地化的字符串中可以有:
“ GENERIC_NETWORK_ERR” =“网络错误”; “ NETWORK_CODE_404”。 =“网络错误(无数据)”;
和西班牙语...
“ GENERIC_NETWORK_ERR” =“红色错误”; ...
希望它可以提供帮助。