error.localizedDescription всегда возвращает английский - PullRequest
0 голосов
/ 22 февраля 2020

В Swift / XCode я всегда получаю сообщения об ошибках Engli sh в качестве вывода, а не переведенное локальное сообщение моего устройства (симулятор или реальное устройство не имеет значения). Я добавил страны локализации в информационном канале моего проекта, но нужно ли мне что-то делать, например, переводить файл ошибок Engli sh вручную, например, на немецкий?

Я знаю, что есть похожие старые вопросы по ТАК, и все их ответы звучат очень просто, но не работают.

Пример кода:

ContentView.swift

@State var errorText: String = ""

var body: some View {
    VStack {
       ...
       logIn()
       Text(errorText)
    }
}

.. ...

    func logIn() {

        session.logIn(email: email, password: password) { (user, error) in

            if let error = error
                {
                self.errorText = error.localizedDescription
                    self.shouldAnimate = false

                return
                }
        ....

XCode Info-Frame

Редактировать:

Я не был уверен, что я должен ввести здесь при добавлении немецкого языка как языка. Я использую SwiftUI, а не раскадровку, если этот факт имеет значение:

Adding a language

Например, работает перевод кнопки «Редактировать» в строке состояния. Но сообщения об ошибках при этом всегда Engli sh.

.navigationBarItems(trailing: EditButton())

1 Ответ

0 голосов
/ 16 марта 2020

Решением было создание расширения для AuthErrorCode. Я пришел на это из-за этого ответа: { ссылка }

Localizable.strings работал только на текст ("...") для меня.

Решение для 2 языков может выглядеть следующим образом (Poli sh и немецкий пример):

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
    } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...