Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 错误。localizedDescription始终返回英语_Ios_Swift_Xcode_Localization - Fatal编程技术网

Ios 错误。localizedDescription始终返回英语

Ios 错误。localizedDescription始终返回英语,ios,swift,xcode,localization,Ios,Swift,Xcode,Localization,在Swift/XCode中,我总是将英文错误消息作为输出,而不是设备的翻译本地消息(模拟器或真实设备并不重要)。 我在我的项目的info tap中添加了本地化国家,但我是否必须做其他事情,例如手动将英语错误文件翻译为德语 我知道有类似的老问题,他们的答案听起来都很简单,但不起作用 示例代码: ContentView.swift @State var errorText: String = "" var body: some View { VStack { ...

在Swift/XCode中,我总是将英文错误消息作为输出,而不是设备的翻译本地消息(模拟器或真实设备并不重要)。 我在我的项目的info tap中添加了本地化国家,但我是否必须做其他事情,例如手动将英语错误文件翻译为德语

我知道有类似的老问题,他们的答案听起来都很简单,但不起作用

示例代码:

ContentView.swift

@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
    } }