firebase authentication error in other languages

2020-06-30 03:07发布

问题:

I am currently developing an app in Swift and I have linked firebase in order for users to signup and login. The app is supposed to be in Spanish but I can't find a way to translate the authentication errors to Spanish. Is there an option in the firebase console to enable other languages or in the plist. Any help is appreciated.

回答1:

Firebase errors are not localized. You could request a feature for this via Firebase support.

What you could do instead is create your own localized messages based on the error codes provided. This is what FirebaseUI does:

  • FirebaseUI-ios

  • FirebaseUI-web

Or you could just simply use FirebaseUI-ios. It would save you a lot of time and effort.



回答2:

Here is an example, how you can make custom error descriptions for any kind of Error Type

import Foundation 
import Firebase

extension AuthErrorCode {
    var description: String? {
        switch self {
        case .emailAlreadyInUse:
            return "Este correo ya está siendo usado por otro usuario"
        case .userDisabled:
            return "Este usuario ha sido deshabilitado"
        case .operationNotAllowed:
            return "Operación no permitida"
        case .invalidEmail:
            return "Correo electrónico no valido"
        case .wrongPassword:
            return "Contraseña incorrecta"
        case .userNotFound:
            return "No se encontró cuenta del usuario con el correo especificado"
        case .networkError:
            return "Promblema al intentar conectar al servidor"
        case .weakPassword:
            return "Contraseña muy debil o no válida"
        case .missingEmail:
            return "Hace falta registrar un correo electrónico"
        case .internalError:
            return "Error interno"
        case .invalidCustomToken:
            return "Token personalizado invalido"
        case .tooManyRequests:
            return "Ya se han enviado muchas solicitudes al servidor"
        default:
            return nil
        }
    }
}

    extension FirestoreErrorCode {
        var description: String? {
            switch self {
            case .cancelled:
                return "Operación cancelada"
            case .unknown:
                return "Error desconocido"
            case .invalidArgument:
                return "Argumento no valido"
            case .notFound:
                return "No se encotró el documento"
            case .alreadyExists:
                return "El documento que se pretende crear, ya existe"
            case .permissionDenied:
                return "No tienes permisos para realizar esta operación"
            case .aborted:
                return "Operación abortada"
            case .outOfRange:
                return "Rango invalido"
            case .unimplemented:
                return "Esta operación no ha sido implementada o no es soportada aún"
            case .internal:
                return "Error interno"
            case .unavailable:
                return "Por el momento el servicio no está disponible, intenta más tarde"
            case .unauthenticated:
                return "Usuario no autenticado"
            default:
                return nil
            }
        } }

extension StorageErrorCode {
    var description: String? {
        switch self {
        case .unknown:
            return "Error desconocido"
        case .quotaExceeded:
            return "El espacio para guardar archivos ha sido sobrepasado"
        case .unauthenticated:
            return "Usuario no autenticado"
        case .unauthorized:
            return "Usuario no autorizado para realizar esta operación"
        case .retryLimitExceeded:
            return "Tiempo de espera excedido. Favor de intentar de nuevo"
        case .downloadSizeExceeded:
            return "El tamaño de descarga excede el espacio en memoria"
        case .cancelled:
            return "Operación cancelada"
        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
                }
            }
        }else if error.domain == FirestoreErrorDomain {
            if let code = FirestoreErrorCode(rawValue: error.code) {
                if let errorString = code.description {
                   return errorString
                }
            }
        }else if error.domain == StorageErrorDomain {
            if let code = StorageErrorCode(rawValue: error.code) {
                if let errorString = code.description {
                    return errorString
                }
            }
        }
        return error.localizedDescription
    } }