Skip to content

Instantly share code, notes, and snippets.

@Albejr
Last active March 7, 2024 19:26
Show Gist options
  • Star 37 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save Albejr/a38cdeac247ef177986c99629680afb4 to your computer and use it in GitHub Desktop.
Save Albejr/a38cdeac247ef177986c99629680afb4 to your computer and use it in GitHub Desktop.
Localize Firebase error messages in PT-BR
catchError(err => {
const errorCode = err.code;
let errorMessage = this.VerifyErroCode(errorCode);
if (errorMessage == null) {
errorMessage = err.message;
}
console.log(errorMessage);
})
VerifyErroCode(errorCode: string): string {
// fonte: https://firebase.google.com/docs/reference/js/firebase.auth.Auth
// fonte: https://firebase.google.com/docs/auth/admin/errors?hl=pt-br
switch (errorCode) {
case 'auth/app-deleted':
return 'O banco de dados não foi localizado.';
case 'auth/expired-action-code':
return 'O código da ação o ou link expirou.';
case 'auth/invalid-action-code':
return 'O código da ação é inválido. Isso pode acontecer se o código estiver malformado ou já tiver sido usado.';
case 'auth/user-disabled':
return 'O usuário correspondente à credencial fornecida foi desativado.';
case 'auth/user-not-found':
return 'O usuário não correponde à nenhuma credencial.';
case 'auth/weak-password':
return 'A senha é muito fraca.';
case 'auth/email-already-in-use':
return 'Já existi uma conta com o endereço de email fornecido.';
case 'auth/invalid-email':
return 'O endereço de e-mail não é válido.';
case 'auth/operation-not-allowed':
return 'O tipo de conta correspondente à esta credencial, ainda não encontra-se ativada.';
case 'auth/account-exists-with-different-credential':
return 'E-mail já associado a outra conta.';
case 'auth/auth-domain-config-required':
return 'A configuração para autenticação não foi fornecida.';
case 'auth/credential-already-in-use':
return 'Já existe uma conta para esta credencial.';
case 'auth/operation-not-supported-in-this-environment':
return 'Esta operação não é suportada no ambiente que está sendo executada. Verifique se deve ser http ou https.';
case 'auth/timeout':
return 'Excedido o tempo de resposta. O domínio pode não estar autorizado para realizar operações.';
case 'auth/missing-android-pkg-name':
return 'Deve ser fornecido um nome de pacote para instalação do aplicativo Android.';
case 'auth/missing-continue-uri':
return 'A próxima URL deve ser fornecida na solicitação.';
case 'auth/missing-ios-bundle-id':
return 'Deve ser fornecido um nome de pacote para instalação do aplicativo iOS.';
case 'auth/invalid-continue-uri':
return 'A próxima URL fornecida na solicitação é inválida.';
case 'auth/unauthorized-continue-uri':
return 'O domínio da próxima URL não está na lista de autorizações.';
case 'auth/invalid-dynamic-link-domain':
return 'O domínio de link dinâmico fornecido, não está autorizado ou configurado no projeto atual.';
case 'auth/argument-error':
return 'Verifique a configuração de link para o aplicativo.';
case 'auth/invalid-persistence-type':
return 'O tipo especificado para a persistência dos dados é inválido.';
case 'auth/unsupported-persistence-type':
return 'O ambiente atual não suportar o tipo especificado para persistência dos dados.';
case 'auth/invalid-credential':
return 'A credencial expirou ou está mal formada.';
case 'auth/wrong-password':
return 'Senha incorreta.';
case 'auth/invalid-verification-code':
return 'O código de verificação da credencial não é válido.';
case 'auth/invalid-verification-id':
return 'O ID de verificação da credencial não é válido.';
case 'auth/custom-token-mismatch':
return 'O token está diferente do padrão solicitado.';
case 'auth/invalid-custom-token':
return 'O token fornecido não é válido.';
case 'auth/captcha-check-failed':
return 'O token de resposta do reCAPTCHA não é válido, expirou ou o domínio não é permitido.';
case 'auth/invalid-phone-number':
return 'O número de telefone está em um formato inválido (padrão E.164).';
case 'auth/missing-phone-number':
return 'O número de telefone é requerido.';
case 'auth/quota-exceeded':
return 'A cota de SMS foi excedida.';
case 'auth/cancelled-popup-request':
return 'Somente uma solicitação de janela pop-up é permitida de uma só vez.';
case 'auth/popup-blocked':
return 'A janela pop-up foi bloqueado pelo navegador.';
case 'auth/popup-closed-by-user':
return 'A janela pop-up foi fechada pelo usuário sem concluir o login no provedor.';
case 'auth/unauthorized-domain':
return 'O domínio do aplicativo não está autorizado para realizar operações.';
case 'auth/invalid-user-token':
return 'O usuário atual não foi identificado.';
case 'auth/user-token-expired':
return 'O token do usuário atual expirou.';
case 'auth/null-user':
return 'O usuário atual é nulo.';
case 'auth/app-not-authorized':
return 'Aplicação não autorizada para autenticar com a chave informada.';
case 'auth/invalid-api-key':
return 'A chave da API fornecida é inválida.';
case 'auth/network-request-failed':
return 'Falha de conexão com a rede.';
case 'auth/requires-recent-login':
return 'O último horário de acesso do usuário não atende ao limite de segurança.';
case 'auth/too-many-requests':
return 'As solicitações foram bloqueadas devido a atividades incomuns. Tente novamente depois que algum tempo.';
case 'auth/web-storage-unsupported':
return 'O navegador não suporta armazenamento ou se o usuário desativou este recurso.';
case 'auth/invalid-claims':
return 'Os atributos de cadastro personalizado são inválidos.';
case 'auth/claims-too-large':
return 'O tamanho da requisição excede o tamanho máximo permitido de 1 Megabyte.';
case 'auth/id-token-expired':
return 'O token informado expirou.';
case 'auth/id-token-revoked':
return 'O token informado perdeu a validade.';
case 'auth/invalid-argument':
return 'Um argumento inválido foi fornecido a um método.';
case 'auth/invalid-creation-time':
return 'O horário da criação precisa ser uma data UTC válida.';
case 'auth/invalid-disabled-field':
return 'A propriedade para usuário desabilitado é inválida.';
case 'auth/invalid-display-name':
return 'O nome do usuário é inválido.';
case 'auth/invalid-email-verified':
return 'O e-mail é inválido.';
case 'auth/invalid-hash-algorithm':
return 'O algoritmo de HASH não é uma criptografia compatível.';
case 'auth/invalid-hash-block-size':
return 'O tamanho do bloco de HASH não é válido.';
case 'auth/invalid-hash-derived-key-length':
return 'O tamanho da chave derivada do HASH não é válido.';
case 'auth/invalid-hash-key':
return 'A chave de HASH precisa ter um buffer de byte válido.';
case 'auth/invalid-hash-memory-cost':
return 'O custo da memória HASH não é válido.';
case 'auth/invalid-hash-parallelization':
return 'O carregamento em paralelo do HASH não é válido.';
case 'auth/invalid-hash-rounds':
return 'O arredondamento de HASH não é válido.';
case 'auth/invalid-hash-salt-separator':
return 'O campo do separador de SALT do algoritmo de geração de HASH precisa ser um buffer de byte válido.';
case 'auth/invalid-id-token':
return 'O código do token informado não é válido.';
case 'auth/invalid-last-sign-in-time':
return 'O último horário de login precisa ser uma data UTC válida.';
case 'auth/invalid-page-token':
return 'A próxima URL fornecida na solicitação é inválida.';
case 'auth/invalid-password':
return 'A senha é inválida, precisa ter pelo menos 6 caracteres.';
case 'auth/invalid-password-hash':
return 'O HASH da senha não é válida.';
case 'auth/invalid-password-salt':
return 'O SALT da senha não é válido.';
case 'auth/invalid-photo-url':
return 'A URL da foto de usuário é inválido.';
case 'auth/invalid-provider-id':
return 'O identificador de provedor não é compatível.';
case 'auth/invalid-session-cookie-duration':
return 'A duração do COOKIE da sessão precisa ser um número válido em milissegundos, entre 5 minutos e 2 semanas.';
case 'auth/invalid-uid':
return 'O identificador fornecido deve ter no máximo 128 caracteres.';
case 'auth/invalid-user-import':
return 'O registro do usuário a ser importado não é válido.';
case 'auth/invalid-provider-data':
return 'O provedor de dados não é válido.';
case 'auth/maximum-user-count-exceeded':
return 'O número máximo permitido de usuários a serem importados foi excedido.';
case 'auth/missing-hash-algorithm':
return 'É necessário fornecer o algoritmo de geração de HASH e seus parâmetros para importar usuários.';
case 'auth/missing-uid':
return 'Um identificador é necessário para a operação atual.';
case 'auth/reserved-claims':
return 'Uma ou mais propriedades personalizadas fornecidas usaram palavras reservadas.';
case 'auth/session-cookie-revoked':
return 'O COOKIE da sessão perdeu a validade.';
case 'auth/uid-alread-exists':
return 'O indentificador fornecido já está em uso.';
case 'auth/email-already-exists':
return 'O e-mail fornecido já está em uso.';
case 'auth/phone-number-already-exists':
return 'O telefone fornecido já está em uso.';
case 'auth/project-not-found':
return 'Nenhum projeto foi encontrado.';
case 'auth/insufficient-permission':
return 'A credencial utilizada não tem permissão para acessar o recurso solicitado.';
case 'auth/internal-error':
return 'O servidor de autenticação encontrou um erro inesperado ao tentar processar a solicitação.';
default:
return null;
}
}
@guiseek
Copy link

guiseek commented Feb 1, 2020

Opa!

valeu! eu havia traduzido algumas, mas agora completou!

Aí vai uma dica.
se temos um mapa chave / valor, pq não montar um json e usarmos o código do erro como índice e cair onde queremos?! heheh

tinha uma linha duplicada, marquei com comentário pra tu ver..

Valeeu, abraço

.pipe(
  catchError(({ code, message }) => throwError(!!errors[code] ? errors[code] : message)))

const errors = {
  'auth/app-deleted': 'O banco de dados não foi localizado.',
  'auth/expired-action-code': 'O código da ação o ou link expirou.',
  'auth/invalid-action-code': 'O código da ação é inválido. Isso pode acontecer se o código estiver malformado ou já tiver sido usado.',
  'auth/user-disabled': 'O usuário correspondente à credencial fornecida foi desativado.',
  'auth/user-not-found': 'O usuário não correponde à nenhuma credencial.',
  'auth/weak-password': 'A senha é muito fraca.',
  'auth/email-already-in-use': 'Já existi uma conta com o endereço de email fornecido.',
  'auth/invalid-email': 'O endereço de e-mail não é válido.',
  'auth/operation-not-allowed': 'O tipo de conta correspondente à esta credencial, ainda não encontra-se ativada.',
  'auth/account-exists-with-different-credential': 'E-mail já associado a outra conta.',
  'auth/auth-domain-config-required': 'A configuração para autenticação não foi fornecida.',
  'auth/credential-already-in-use': 'Já existe uma conta para esta credencial.',
  'auth/operation-not-supported-in-this-environment': 'Esta operação não é suportada no ambiente que está sendo executada. Verifique se deve ser http ou https.',
  'auth/timeout': 'Excedido o tempo de resposta. O domínio pode não estar autorizado para realizar operações.',
  'auth/missing-android-pkg-name': 'Deve ser fornecido um nome de pacote para instalação do aplicativo Android.',
  'auth/missing-continue-uri': 'A próxima URL deve ser fornecida na solicitação.',
  'auth/missing-ios-bundle-id': 'Deve ser fornecido um nome de pacote para instalação do aplicativo iOS.',
  'auth/invalid-continue-uri': 'A próxima URL fornecida na solicitação é inválida.',
  'auth/unauthorized-continue-uri': 'O domínio da próxima URL não está na lista de autorizações.',
  'auth/invalid-dynamic-link-domain': 'O domínio de link dinâmico fornecido, não está autorizado ou configurado no projeto atual.',
  'auth/argument-error': 'Verifique a configuração de link para o aplicativo.',
  'auth/invalid-persistence-type': 'O tipo especificado para a persistência dos dados é inválido.',
  'auth/unsupported-persistence-type': 'O ambiente atual não suportar o tipo especificado para persistência dos dados.',
  'auth/invalid-credential': 'A credencial expirou ou está mal formada.',
  'auth/wrong-password': 'Senha incorreta.',
  'auth/invalid-verification-code': 'O código de verificação da credencial não é válido.',
  'auth/invalid-verification-id': 'O ID de verificação da credencial não é válido.',
  'auth/custom-token-mismatch': 'O token está diferente do padrão solicitado.',
  'auth/invalid-custom-token': 'O token fornecido não é válido.',

  // 'auth/invalid-email': 'O endereço de e-mail não é válido.',

  'auth/captcha-check-failed': 'O token de resposta do reCAPTCHA não é válido, expirou ou o domínio não é permitido.',
  'auth/invalid-phone-number': 'O número de telefone está em um formato inválido (padrão E.164).',
  'auth/missing-phone-number': 'O número de telefone é requerido.',
  'auth/quota-exceeded': 'A cota de SMS foi excedida.',
  'auth/cancelled-popup-request': 'Somente uma solicitação de janela pop-up é permitida de uma só vez.',
  'auth/popup-blocked': 'A janela pop-up foi bloqueado pelo navegador.',
  'auth/popup-closed-by-user': 'A janela pop-up foi fechada pelo usuário sem concluir o login no provedor.',
  'auth/unauthorized-domain': 'O domínio do aplicativo não está autorizado para realizar operações.',
  'auth/invalid-user-token': 'O usuário atual não foi identificado.',
  'auth/user-token-expired': 'O token do usuário atual expirou.',
  'auth/null-user': 'O usuário atual é nulo.',
  'auth/app-not-authorized': 'Aplicação não autorizada para autenticar com a chave informada.',
  'auth/invalid-api-key': 'A chave da API fornecida é inválida.',
  'auth/network-request-failed': 'Falha de conexão com a rede.',
  'auth/requires-recent-login': 'O último horário de acesso do usuário não atende ao limite de segurança.',
  'auth/too-many-requests': 'As solicitações foram bloqueadas devido a atividades incomuns. Tente novamente depois que algum tempo.',
  'auth/web-storage-unsupported': 'O navegador não suporta armazenamento ou se o usuário desativou este recurso.',
  'auth/invalid-claims': 'Os atributos de cadastro personalizado são inválidos.',
  'auth/claims-too-large': 'O tamanho da requisição excede o tamanho máximo permitido de 1 Megabyte.',
  'auth/id-token-expired': 'O token informado expirou.',
  'auth/id-token-revoked': 'O token informado perdeu a validade.',
  'auth/invalid-argument': 'Um argumento inválido foi fornecido a um método.',
  'auth/invalid-creation-time': 'O horário da criação precisa ser uma data UTC válida.',
  'auth/invalid-disabled-field': 'A propriedade para usuário desabilitado é inválida.',
  'auth/invalid-display-name': 'O nome do usuário é inválido.',
  'auth/invalid-email-verified': 'O e-mail é inválido.',
  'auth/invalid-hash-algorithm': 'O algoritmo de HASH não é uma criptografia compatível.',
  'auth/invalid-hash-block-size': 'O tamanho do bloco de HASH não é válido.',
  'auth/invalid-hash-derived-key-length': 'O tamanho da chave derivada do HASH não é válido.',
  'auth/invalid-hash-key': 'A chave de HASH precisa ter um buffer de byte válido.',
  'auth/invalid-hash-memory-cost': 'O custo da memória HASH não é válido.',
  'auth/invalid-hash-parallelization': 'O carregamento em paralelo do HASH não é válido.',
  'auth/invalid-hash-rounds': 'O arredondamento de HASH não é válido.',
  'auth/invalid-hash-salt-separator': 'O campo do separador de SALT do algoritmo de geração de HASH precisa ser um buffer de byte válido.',
  'auth/invalid-id-token': 'O código do token informado não é válido.',
  'auth/invalid-last-sign-in-time': 'O último horário de login precisa ser uma data UTC válida.',
  'auth/invalid-page-token': 'A próxima URL fornecida na solicitação é inválida.',
  'auth/invalid-password': 'A senha é inválida, precisa ter pelo menos 6 caracteres.',
  'auth/invalid-password-hash': 'O HASH da senha não é válida.',
  'auth/invalid-password-salt': 'O SALT da senha não é válido.',
  'auth/invalid-photo-url': 'A URL da foto de usuário é inválido.',
  'auth/invalid-provider-id': 'O identificador de provedor não é compatível.',
  'auth/invalid-session-cookie-duration': 'A duração do COOKIE da sessão precisa ser um número válido em milissegundos, entre 5 minutos e 2 semanas.',
  'auth/invalid-uid': 'O identificador fornecido deve ter no máximo 128 caracteres.',
  'auth/invalid-user-import': 'O registro do usuário a ser importado não é válido.',
  'auth/invalid-provider-data': 'O provedor de dados não é válido.',
  'auth/maximum-user-count-exceeded': 'O número máximo permitido de usuários a serem importados foi excedido.',
  'auth/missing-hash-algorithm': 'É necessário fornecer o algoritmo de geração de HASH e seus parâmetros para importar usuários.',
  'auth/missing-uid': 'Um identificador é necessário para a operação atual.',
  'auth/reserved-claims': 'Uma ou mais propriedades personalizadas fornecidas usaram palavras reservadas.',
  'auth/session-cookie-revoked': 'O COOKIE da sessão perdeu a validade.',
  'auth/uid-alread-exists': 'O indentificador fornecido já está em uso.',
  'auth/email-already-exists': 'O e-mail fornecido já está em uso.',
  'auth/phone-number-already-exists': 'O telefone fornecido já está em uso.',
  'auth/project-not-found': 'Nenhum projeto foi encontrado.',
  'auth/insufficient-permission': 'A credencial utilizada não tem permissão para acessar o recurso solicitado.',
  'auth/internal-error': 'O servidor de autenticação encontrou um erro inesperado ao tentar processar a solicitação.'
}```

@Albejr
Copy link
Author

Albejr commented Feb 2, 2020

Verdade.. Obrigado!

@msvargas
Copy link

Spanish

map example:

export function localizeErrorMap(e?: Error & { code?: string }) {
  if (typeof e === 'object' && typeof e.code === 'string' && e.code in firebaseErrors)
    e.message = (firebaseErrors as any)[e.code];
}

firebase-errors.json

{
  "auth/app-deleted": "No se encontró la base de datos",
  "auth/expired-action-code": "El código de acción o el enlace ha caducado",
  "auth/invalid-action-code": "El código de acción no es válido. Esto puede suceder si el código está mal formado o ya se ha utilizado",
  "auth/user-disabled": "El usuario correspondiente a la credencial proporcionada ha sido deshabilitado",
  "auth/user-not-found": "El usuario no coincide con ninguna credencial",
  "auth/weak-password": "La contraseña es demasiado débil",
  "auth/email-already-in-use": "Ya tenía una cuenta con la dirección de correo electrónico proporcionada",
  "auth/invalid-email": "La dirección de correo electrónico no es válida",
  "auth/operation-not-allowed": "El tipo de cuenta correspondiente a esta credencial aún no está activado",
  "auth/account-exists-with-different-credential": "Correo electrónico ya asociado con otra cuenta",
  "auth/auth-domain-config-required": "No se ha proporcionado la configuración para la autenticación",
  "auth/credential-already-in-use": "Ya existe una cuenta para esta credencial",
  "auth/operation-not-supported-in-this-environment": "Esta operación no se admite en el entorno que se realiza. Asegúrese de que debe ser http o https",
  "auth/timeout": "Tiempo de respuesta excedido. Es posible que el dominio no esté autorizado para realizar operaciones",
  "auth/missing-android-pkg-name": "Se debe proporcionar un nombre de paquete para instalar la aplicación de Android",
  "auth/missing-continue-uri": "La siguiente URL debe proporcionarse en la solicitud",
  "auth/missing-ios-bundle-id": "Se debe proporcionar un nombre de paquete para instalar la aplicación iOS",
  "auth/invalid-continue-uri": "La siguiente URL proporcionada en la solicitud no es válida",
  "auth/unauthorized-continue-uri": "El dominio de la siguiente URL no está en la lista blanca",
  "auth/invalid-dynamic-link-domain": "El dominio de enlace dinámico proporcionado, no está autorizado o configurado en el proyecto actual",
  "auth/argument-error": "Verifique la configuración del enlace para la aplicación",
  "auth/invalid-persistence-type": "El tipo especificado para la persistencia de datos no es válido",
  "auth/unsupported-persistence-type": "El entorno actual no admite el tipo especificado para la persistencia de datos",
  "auth/invalid-credential": "La credencial ha caducado o está mal formada",
  "auth/wrong-password": "Contraseña incorrecta",
  "auth/invalid-verification-code": "El código de verificación de credencial no es válido",
  "auth/invalid-verification-id": "El ID de verificación de credencial no es válido",
  "auth/custom-token-mismatch": "El token es diferente del estándar solicitado",
  "auth/invalid-custom-token": "El token proporcionado no es válido",
  "auth/captcha-check-failed": "El token de respuesta reCAPTCHA no es válido, ha caducado o el dominio no está permitido",
  "auth/invalid-phone-number": "El número de teléfono está en un formato no válido (estándar E.164)",
  "auth/missing-phone-number": "El número de teléfono es obligatorio",
  "auth/quota-exceeded": "Se ha excedido la cuota de SMS",
  "auth/cancelled-popup-request": "Solo se permite una solicitud de ventana emergente a la vez",
  "auth/popup-blocked": "El navegador ha bloqueado la ventana emergente",
  "auth/popup-closed-by-user": "El usuario cerró la ventana emergente sin completar el inicio de sesión en el proveedor",
  "auth/unauthorized-domain": "El dominio de la aplicación no está autorizado para realizar operaciones",
  "auth/invalid-user-token": "El usuario actual no fue identificado",
  "auth/user-token-expired": "El token del usuario actual ha caducado",
  "auth/null-user": "El usuario actual es nulo",
  "auth/app-not-authorized": "Aplicación no autorizada para autenticarse con la clave dada",
  "auth/invalid-api-key": "La clave API proporcionada no es válida",
  "auth/network-request-failed": "Error al conectarse a la red",
  "auth/requires-recent-login": "El último tiempo de acceso del usuario no cumple con el límite de seguridad",
  "auth/too-many-requests": "Las solicitudes se bloquearon debido a una actividad inusual. Vuelva a intentarlo después de un tiempo",
  "auth/web-storage-unsupported": "El navegador no es compatible con el almacenamiento o si el usuario ha deshabilitado esta función",
  "auth/invalid-claims": "Los atributos de registro personalizados no son válidos",
  "auth/claims-too-large": "El tamaño de la solicitud excede el tamaño máximo permitido de 1 Megabyte",
  "auth/id-token-expired": "El token informado ha caducado",
  "auth/id-token-revoked": "El token informado ha caducado",
  "auth/invalid-argument": "Se proporcionó un argumento no válido a un método",
  "auth/invalid-creation-time": "La hora de creación debe ser una fecha UTC válida",
  "auth/invalid-disabled-field": "La propiedad para el usuario deshabilitado no es válida",
  "auth/invalid-display-name": "El nombre de usuario no es válido",
  "auth/invalid-email-verified": "El correo electrónico no es válido",
  "auth/invalid-hash-algorithm": "El algoritmo HASH no es compatible con la criptografía",
  "auth/invalid-hash-block-size": " El tamaño del bloque HASH no es válido ",
  "auth/invalid-hash-derived-key-length": "El tamaño de la clave derivada de HASH no es válido",
  "auth/invalid-hash-key": "La clave HASH debe tener un búfer de bytes válido",
  "auth/invalid-hash-memory-cost": "El costo de la memoria HASH no es válido",
  "auth/invalid-hash-parallelization": "La carga paralela HASH no es válida",
  "auth/invalid-hash-rounds": "El redondeo HASH no es válido",
  "auth/invalid-hash-salt-separator": "El campo separador SALT del algoritmo de generación HASH debe ser un búfer de bytes válido",
  "auth/invalid-id-token": "El código de token ingresado no es válido",
  "auth/invalid-last-sign-in-time": "La última hora de inicio de sesión debe ser una fecha UTC válida",
  "auth/invalid-page-token": "La siguiente URL proporcionada en la solicitud no es válida",
  "auth/invalid-password": "La contraseña no es válida, debe tener al menos 6 caracteres de longitud",
  "auth/invalid-password-hash": "La contraseña HASH no es válida",
  "auth/invalid-password-salt": "La contraseña SALT no es válida",
  "auth/invalid-photo-url": "La URL de la foto del usuario no es válida",
  "auth/invalid-provider-id": "El identificador del proveedor no es compatible",
  "auth/invalid-session-cookie-duration": "La duración de la COOKIE de la sesión debe ser un número válido en milisegundos, entre 5 minutos y 2 semanas",
  "auth/invalid-uid": "El identificador proporcionado debe tener un máximo de 128 caracteres",
  "auth/invalid-user-import": "El registro de usuario a importar no es válido",
  "auth/invalid-provider-data": "El proveedor de datos no es válido",
  "auth/maximum-user-count-exceeded": "Se ha excedido el número máximo permitido de usuarios a importar",
  "auth/missing-hash-algorithm": "Es necesario proporcionar el algoritmo de generación HASH y sus parámetros para importar usuarios",
  "auth/missing-uid": "Se requiere un identificador para la operación actual",
  "auth/reserved-claims": "Una o más propiedades personalizadas proporcionaron palabras reservadas usadas",
  "auth/session-cookie-revoked": "La sesión COOKIE ha expirado",
  "auth/uid-alread-exists": "El identificador proporcionado ya está en uso",
  "auth/email-already-exists": "El correo electrónico proporcionado ya está en uso",
  "auth/phone-number-already-exists": "El teléfono proporcionado ya está en uso",
  "auth/project-not-found": "No se encontraron proyectos",
  "auth/insufficient-permission": "La credencial utilizada no tiene acceso al recurso solicitado",
  "auth/internal-error": "El servidor de autenticación encontró un error inesperado al intentar procesar la solicitud"
}

@marquimneto
Copy link

Onde eu incluo esse arquivo pra traduzir as mensagens?

Valeu

@guiseek
Copy link

guiseek commented Sep 3, 2021

Onde eu incluo esse arquivo pra traduzir as mensagens?

Valeu

Fala @marquimneto, cara, onde você quiser. O lance é o seguinte, perceba que essas mensagens são compostars por um hashmap, ou seja, umm objeto { chave: valor }. onde a chave é o código de erro e o valor a mensagem do mesmo.

O Firebase sempre retorna um código de erro, então pra mostrar a mensagem traduzida, basta você pegar o código de erro que retornou e colocar no lugar daa chave, como eu mostrei ali em cima mesmo...

.pipe(
  catchError(({ code, message }) => throwError(!!errors[code] ? errors[code] : message)))

@Albejr
Copy link
Author

Albejr commented Sep 3, 2021

@marquimneto, esta não é uma tradução automática.
Após adicionar o arquivo ao seu projeto, você deverá fazer o "import" para referenciando-o.

@Albejr
Copy link
Author

Albejr commented Sep 30, 2021

Estava demorando alguém criar uma biblioteca para isso:
(Apesar de que, já deveria vir nativo do Firebase)
https://github.com/JebBarbas/firebase-error-translator

@EuHigorBarbosa
Copy link

Código do erro Etapas de resolução e descrição - Direto do site do Firebase -
https://firebase.google.com/docs/auth/admin/errors

static const Map<String?, String> errorsMap = {
null: 'Erro desconhecido.',
'auth/claims-too-large' : 'O payload de declarações fornecido para setCustomUserClaims() excede o tamanho máximo permitido de 1.000 bytes.'
'auth/email-already-exists' : 'O e-mail fornecido já está em uso por outro usuário. Cada usuário precisa ter um e-mail exclusivo.'
'auth/id-token-expired' : 'O token de código do Firebase provisionado expirou.'
'auth/id-token-revoked' : 'O token de ID do Firebase foi revogado.'
'auth/insufficient-permission' : 'A credencial usada para inicializar o SDK Admin não tem permissão para acessar o recurso solicitado do Authentication. Consulte Configurar um projeto do Firebase para ver a documentação sobre como gerar uma credencial com as permissões apropriadas e usá-la na autenticação dos SDKs Admin.'
'auth/internal-error' : 'O servidor do Authentication encontrou um erro inesperado ao tentar processar a solicitação. A mensagem de erro incluirá a resposta do servidor de autenticação com informações adicionais. Se o erro persistir, informe o problema ao nosso canal de suporte de Relatório do bug.'
'auth/invalid-argument' : 'Um argumento inválido foi fornecido a um método do Authentication. A mensagem de erro precisa conter informações adicionais.'
'auth/invalid-claims' : 'Os atributos de declaração personalizados fornecidos para setCustomUserClaims() são inválidos.'
'auth/invalid-continue-uri' : 'O URL de confirmação precisa ser uma string de URL válida.'
'auth/invalid-creation-time' : 'O horário da criação precisa ser um string de data UTC válido.'
'auth/invalid-credential' : 'A credencial usada para autenticar os SDKs Admin não pode ser usada para executar a ação desejada. Determinados métodos de autenticação, como createCustomToken() e verifyIdToken(), requerem que o SDK seja inicializado com uma credencial de certificado em oposição a um token de atualização ou uma credencial padrão do aplicativo. Consulte Inicializar o SDK para ver a documentação sobre como autenticar os Admin SDKs com uma credencial de certificado.'
'auth/invalid-disabled-field' : 'O valor fornecido para a propriedade do usuário disabled é inválido. Precisa ser um valor booleano.'
'auth/invalid-display-name' : 'O valor fornecido para a propriedade do usuário displayName é inválido. Precisa ser uma string não vazia.'
'auth/invalid-dynamic-link-domain' : 'O domínio de link dinâmico fornecido não está configurado ou autorizado para o projeto atual.'
'auth/invalid-email' : 'O valor fornecido para a propriedade do usuário email é inválido. Precisa ser um endereço de e-mail de string.'
'auth/invalid-email-verified' : 'O valor fornecido para a propriedade do usuário emailVerified é inválido. Precisa ser um valor booleano.'
'auth/invalid-hash-algorithm' : 'O algoritmo de hash precisa corresponder a uma das strings na lista de algoritmos compatíveis.'
'auth/invalid-hash-block-size' : 'O tamanho do bloco de hash precisa ser um número válido.'
'auth/invalid-hash-derived-key-length' : 'O tamanho da chave derivada do hash precisa ser um número válido.'
'auth/invalid-hash-key' : 'A chave de hash precisa ter um buffer de byte válido.'
'auth/invalid-hash-memory-cost' : 'O custo da memória hash precisa ser um número válido.'
'auth/invalid-hash-parallelization' : 'O carregamento em paralelo do hash precisa ser um número válido.'
'auth/invalid-hash-rounds' : 'O arredondamento de hash precisa ser um número válido.'
'auth/invalid-hash-salt-separator' : 'O campo do separador de "salt" do algoritmo de geração de hash precisa ser um buffer de byte válido.'
'auth/invalid-id-token' : 'O token de código informado não é um token de código do Firebase válido.'
'auth/invalid-last-sign-in-time' : 'O último horário de login precisa ser um string de data UTC válido.'
'auth/invalid-page-token' : 'O token de próxima página fornecido em listUsers() é inválido. Precisa ser uma string não vazia válida.'
'auth/invalid-password' : 'O valor fornecido para a propriedade do usuário password é inválido. Precisa ser uma string com pelo menos seis caracteres.'
'auth/invalid-password-hash' : 'O hash da senha precisa ser um buffer de byte válido.'
'auth/invalid-password-salt' : 'O "salt" da senha precisa ser um buffer de byte válido'
'auth/invalid-phone-number' : 'O valor fornecido para phoneNumber é inválido. Ele precisa ser uma string de identificador compatível com o padrão E.164 não vazio.'
'auth/invalid-photo-url' : 'O valor fornecido para a propriedade do usuário photoURL é inválido. Precisa ser um URL de string.'
'auth/invalid-provider-data' : 'O providerData precisa ser uma matriz válida de objetos UserInfo.'
'auth/invalid-provider-id' : 'O providerId precisa ser um string de identificador de provedor compatível válido.'
'auth/invalid-oauth-responsetype' : 'Apenas um responseType do OAuth deve ser definido como verdadeiro.'
'auth/invalid-session-cookie-duration' : 'A duração do cookie da sessão precisa ser um número válido em milissegundos entre 5 minutos e 2 semanas.'
'auth/invalid-uid' : 'O uid fornecido precisa ser uma string não vazia com no máximo 128 caracteres.'
'auth/invalid-user-import' : 'O registro do usuário a ser importado é inválido.'
'auth/maximum-user-count-exceeded' : 'O número máximo permitido de usuários a serem importados foi excedido.'
'auth/missing-android-pkg-name' : 'Um nome de pacote Android precisa ser fornecido para a instalação do app Android.'
'auth/missing-continue-uri' : 'Um URL de confirmação válido precisa ser fornecido na solicitação.'
'auth/missing-hash-algorithm' : 'É necessário fornecer o algoritmo de geração de hash e seus parâmetros para importar usuários com hashes de senha.'
'auth/missing-ios-bundle-id' : 'A solicitação está sem o ID do pacote do iOS.'
'auth/missing-uid' : 'Um identificador uid é necessário para a operação atual.'
'auth/missing-oauth-client-secret' : 'A chave secreta do cliente de configuração do OAuth é necessária para ativar o fluxo de código do OIDC.'
'auth/operation-not-allowed' : 'O provedor de login fornecido está desativado para o projeto do Firebase. Ative-o na seção Método de login do Console do Firebase.'
'auth/phone-number-already-exists' : 'O phoneNumber fornecido já está sendo usado por um usuário existente. É necessário que cada usuário tenha um phoneNumber exclusivo.'
'auth/project-not-found' : 'Nenhum projeto do Firebase foi encontrado com a credencial usada para inicializar os Admin SDKs. Consulte Configurar um projeto do Firebase para ver a documentação sobre como gerar uma credencial para seu projeto e usá-la na autenticação dos Admin SDKs.'
'auth/reserved-claims' : 'Uma ou mais declarações de usuário personalizadas fornecidas para setCustomUserClaims() são reservadas. Por exemplo, não use as declarações específicas do OIDC, como sub, iat, iss, exp, aud, auth_time etc., como chaves para declarações personalizadas.'
'auth/session-cookie-expired' : 'O cookie da sessão do Firebase fornecido expirou.'
'auth/session-cookie-revoked' : 'O cookie da sessão do Firebase foi revogado.'
'auth/uid-already-exists' : 'O uid fornecido já está sendo usado por um usuário existente. É necessário que cada usuário tenha um uid exclusivo.'
'auth/unauthorized-continue-uri' : 'O domínio da URL de confirmação não está na lista de permissões. Acesse o Console do Firebase para colocar o domínio na lista de permissões.'
'auth/user-not-found' : 'Não há registro de usuário existente correspondente ao identificador fornecido.'
};

@fatecitu
Copy link

fatecitu commented Nov 11, 2022

Exemplo de uma função utilizando os dados da const Errors:

function loginFirebase(email, senha){
  firebase.auth().signInWithEmailAndPassword(email, senha)
    .then(result => {
     //Faça algo
    })
    .catch(error => {
      console.error(error.code)
      alert(`Não foi possível efetuar o login \n Erro: ${errors[error.code]}`)
    })
}

@Tsugami
Copy link

Tsugami commented Mar 7, 2024

Vlw pessoal!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment