Ios 错误。localizedDescription始终返回英语
在Swift/XCode中,我总是将英文错误消息作为输出,而不是设备的翻译本地消息(模拟器或真实设备并不重要)。 我在我的项目的info tap中添加了本地化国家,但我是否必须做其他事情,例如手动将英语错误文件翻译为德语 我知道有类似的老问题,他们的答案听起来都很简单,但不起作用 示例代码: ContentView.swiftIos 错误。localizedDescription始终返回英语,ios,swift,xcode,localization,Ios,Swift,Xcode,Localization,在Swift/XCode中,我总是将英文错误消息作为输出,而不是设备的翻译本地消息(模拟器或真实设备并不重要)。 我在我的项目的info tap中添加了本地化国家,但我是否必须做其他事情,例如手动将英语错误文件翻译为德语 我知道有类似的老问题,他们的答案听起来都很简单,但不起作用 示例代码: ContentView.swift @State var errorText: String = "" var body: some View { VStack { ...
@State var errorText: String = ""
var body: some View {
VStack {
...
logIn()
Text(errorText)
}
}
编辑:
当我把德语作为一种语言加入时,我不确定我应该在这里输入什么。如果这个事实很重要,我使用SwiftUI而不是故事板:
例如,转换状态栏中的“编辑”按钮。但同时出现的错误消息总是英文的
.navigationBarItems(trailing: EditButton())
解决方案是为AuthErrorCode构建一个扩展。 我之所以这样是因为这个答案: Localizable.strings对我来说只适用于文本(“…”) 两种语言的解决方案可能如下所示(波兰语和德语示例):
Locale.current
的值是多少?Locale.current.description告诉我:de_de(current)
.navigationBarItems(trailing: EditButton())
import Foundation
import Firebase
extension AuthErrorCode {
var description: String? {
switch self {
case .emailAlreadyInUse:
if Locale.current.languageCode == "pl" {
return "Adres e-mail jest już w użyciu." } else {
return "Die E-Mailadresse wird bereits verwendet."
}
case .userDisabled:
if Locale.current.languageCode == "pl" {
return "Użytkownik jest obecnie dezaktywowany. Skontaktuj się z poliapp@polipol.de." } else {
return "Der Benutzer ist zur Zeit deaktiviert. Bitte an poliapp@polipol.de wenden."
}
case .operationNotAllowed:
if Locale.current.languageCode == "pl" {
return "Operacja niezatwierdzona." } else {
return "Operation nicht genehmigt."
}
case .invalidEmail:
if Locale.current.languageCode == "pl" {
return "Format adresu e-mail jest nieprawidłowy." } else {
return "Das Format der E-Mailadresse ist ungültig."
}
case .wrongPassword:
if Locale.current.languageCode == "pl" {
return "Hasło jest nieprawidłowe." } else {
return "Das Passwort ist nicht korrekt."
}
case .userNotFound:
if Locale.current.languageCode == "pl" {
return "Nie znaleziono odpowiedniego konta użytkownika." } else {
return "Kein entsprechendes Benutzerkonto gefunden."
}
case .networkError:
if Locale.current.languageCode == "pl" {
return "Wystąpił błąd sieci. Proszę spróbuj ponownie." } else {
return "Es ist ein Netzwerkfehler aufgetreten. Bitte erneut versuchen."
}
case .weakPassword:
if Locale.current.languageCode == "pl" {
return "Hasło jest za słabe." } else {
return "Das Passwort ist zu schwach."
}
case .missingEmail:
if Locale.current.languageCode == "pl" {
return "Proszę podać adres e-mail." } else {
return "Bitte eine E-Mailadresse angeben."
}
case .internalError:
if Locale.current.languageCode == "pl" {
return "Błąd wewnętrzny Proszę spróbuj ponownie." } else {
return "Interner Fehler. Bitte erneut versuchen."
}
case .invalidCustomToken:
if Locale.current.languageCode == "pl" {
return "Token jest nieprawidłowy." } else {
return "Das Token ist ungültig."
}
case .tooManyRequests:
if Locale.current.languageCode == "pl" {
return "Wysłałeś zbyt wiele żądań do serwera. Proszę chwilę poczekać." } else {
return "Sie haben zu viele Anfragen an den Server gesendet. Bitte etwas warten."
}
default:
return nil
}
}
}
public extension Error {
var localizedDescription: String {
let error = self as NSError
if error.domain == AuthErrorDomain {
if let code = AuthErrorCode(rawValue: error.code) {
if let errorString = code.description {
return errorString
}
}
}
return error.localizedDescription
} }