diff --git a/src/locales/pt.json b/src/locales/pt.json
new file mode 100644
index 000000000..790a22eff
--- /dev/null
+++ b/src/locales/pt.json
@@ -0,0 +1,172 @@
+{
+ "consent.action-accept": "Permitir",
+ "consent.action-reject": "Rejeitar",
+ "consent.description": "Conceda permissões somente se confiar neste site ou aplicação. Não precisa aceitar todas as permissões.",
+ "consent.privacy-policy-label": "Política de Privacidade",
+ "consent.remember-label": "Lembrar decisão para a próxima vez. A aplicação não poderá solicitar permissões adicionais sem o seu consentimento.",
+ "consent.remember-tooltip": "lembrar minha decisão",
+ "consent.requested-permissions-label": "A aplicação solicita acesso às seguintes permissões:",
+ "consent.terms-of-service-label": "Termos de Serviço",
+ "error.back-button": "Voltar",
+ "error.description": "Ocorreu um erro com a seguinte mensagem:",
+ "error.support-email-link": "Se o problema persistir, entre em contato com {contactSupportEmail}",
+ "error.title": "Ocorreu um erro",
+ "error.title-internal-server-error": "Erro Interno do Servidor",
+ "error.title-not-found": "404 - Página não encontrada",
+ "identities.messages.1010001": "Entrar",
+ "identities.messages.1010002": "Entrar com {provider}",
+ "identities.messages.1010003": "Confirme esta ação e verifique que é você.",
+ "identities.messages.1010004": "Complete o segundo desafio de autenticação, por favor.",
+ "identities.messages.1010005": "Verificar",
+ "identities.messages.1010006": "Código de Autenticação",
+ "identities.messages.1010007": "Código de Recuperação de Backup",
+ "identities.messages.1010008": "Usar chave de segurança",
+ "identities.messages.1010009": "Usar o Autenticador",
+ "identities.messages.1010010": "Usar código de recuperação de backup",
+ "identities.messages.1010011": "Continuar com a chave de segurança",
+ "identities.messages.1010012": "Prepare o seu dispositivo WebAuthn (por exemplo, chave de segurança, scanner biométrico, ...) e pressione continuar.",
+ "identities.messages.1010013": "Continuar",
+ "identities.messages.1010014": "Um e-mail com um código foi enviado para o endereço de e-mail introduzido. Não recebeu um e-mail? Verifique o endereço introduzido e efetue novamente o login.",
+ "identities.messages.1010015": "Entrar com código",
+ "identities.messages.1040001": "Registar",
+ "identities.messages.1040002": "Registar com {provider}",
+ "identities.messages.1040003": "Continuar",
+ "identities.messages.1040004": "Registar com chave de segurança",
+ "identities.messages.1040005": "Um e-mail com o código foi enviado para o endereço de e-mail introduzido. Não recebeu um e-mail? Verifique a ortografia do endereço e registe-se novamente.",
+ "identities.messages.1040006": "Registar com código",
+ "identities.messages.1050001": "Alterações foram salvas com sucesso!",
+ "identities.messages.1050002": "Vincular {provider}",
+ "identities.messages.1050003": "Desvincular {provider}",
+ "identities.messages.1050004": "Desvincular o Aplicação Autenticador TOTP",
+ "identities.messages.1050005": "Código QR da aplicação Autenticador",
+ "identities.messages.1050006": "{secret}",
+ "identities.messages.1050007": "Revelar códigos de recuperação de backup",
+ "identities.messages.1050008": "Gerar novos códigos de recuperação de backup",
+ "identities.messages.1050009": "{secret}",
+ "identities.messages.1050010": "Os seus códigos de recuperação de backup. Guarde-os num local seguro!",
+ "identities.messages.1050011": "Confirmar códigos de recuperação de backup",
+ "identities.messages.1050012": "Adicionar chave de segurança",
+ "identities.messages.1050013": "Nome da chave de segurança",
+ "identities.messages.1050014": "Usado",
+ "identities.messages.1050015": "{secrets_list}",
+ "identities.messages.1050016": "Desativar este método",
+ "identities.messages.1050017": "Este é o segredo da sua aplicação autenticador. Use-o se não puder ler o código QR.",
+ "identities.messages.1050018": "Remover chave de segurança \"{display_name}\"",
+ "identities.messages.1060001": "Recuperou com sucesso a sua conta. Por favor, altere a sua password ou configure um método de login alternativo (por exemplo, login social) nos próximos {privileged_session_expires_at_unix_until_minutes} minutos.",
+ "identities.messages.1060002": "Um e-mail com um link de recuperação foi enviado para o endereço de e-mail introduzido. Se recebeu um e-mail, verifique a ortografia do endereço e verifique se está usando o endereço com o qual se registou.",
+ "identities.messages.1060003": "Um e-mail com um código de recuperação foi enviado para o endereço de e-mail introduzido. Se recebeu um e-mail, verifique a ortografia do endereço e verifique se está usando o endereço com o qual se registou.",
+ "identities.messages.1070001": "Password",
+ "identities.messages.1070002": "{title}",
+ "identities.messages.1070003": "Salvar",
+ "identities.messages.1070004": "ID",
+ "identities.messages.1070005": "Enviar",
+ "identities.messages.1070006": "Verificar código",
+ "identities.messages.1070007": "E-mail",
+ "identities.messages.1070008": "Reenviar código",
+ "identities.messages.1070009": "Continuar",
+ "identities.messages.1070010": "Código de recuperação",
+ "identities.messages.1070011": "Código de verificação",
+ "identities.messages.1070012": "Código de registo",
+ "identities.messages.1070013": "Código de login",
+ "identities.messages.1080001": "Um e-mail com um link de verificação foi enviado para o endereço de e-mail introduzido. Se recebeu um e-mail, verifique a ortografia do endereço e verifique se está usando o endereço com o qual se registou.",
+ "identities.messages.1080002": "Endereço de e-mail verificado com sucesso.",
+ "identities.messages.1080003": "Um e-mail com um código de verificação foi enviado para o endereço de e-mail introduzido. Se recebeu um e-mail, verifique a ortografia do endereço e verifique se está usando o endereço com o qual se registou.",
+ "identities.messages.4000001": "{reason}",
+ "identities.messages.4000002": "A propriedade {property} não foi encontrada.",
+ "identities.messages.4000003": "O comprimento deve ser >= {min_length}, mas foi {actual_length}",
+ "identities.messages.4000004": "não corresponde ao padrão \"{pattern}\"",
+ "identities.messages.4000005": "A password não pode ser utilizada porque {reason}.",
+ "identities.messages.4000006": "As credenciais fornecidas são inválidas, verifique erros na definição da password ou no nome de usuário, endereço de e-mail ou número de telefone.",
+ "identities.messages.4000007": "Já existe uma conta com o mesmo username (e-mail, telefone, nome de usuário, ...).",
+ "identities.messages.4000008": "O código de autenticação fornecido é inválido, tente novamente.",
+ "identities.messages.4000009": "Não foi possível encontrar nenhum username de login. Esqueceu-se de defini-los? Isso também pode ser causado por uma má configuração do servidor.",
+ "identities.messages.4000010": "Conta ainda não está ativa. Esqueceu-se de verificar o seu endereço de e-mail?",
+ "identities.messages.4000011": "Não tem um dispositivo TOTP configurado.",
+ "identities.messages.4000012": "Este código de recuperação de backup já foi usado.",
+ "identities.messages.4000013": "Não tem um dispositivo WebAuthn configurado.",
+ "identities.messages.4000014": "Não tem códigos de recuperação de backup configurados.",
+ "identities.messages.4000015": "Esta conta não existe ou não tem uma chave de segurança configurada.",
+ "identities.messages.4000016": "O código de recuperação de backup não é válido.",
+ "identities.messages.4000017": "O comprimento deve ser <= {max_length}, mas foi {actual_length}",
+ "identities.messages.4000018": "deve ser >= {minimum} mas foi encontrado {actual}",
+ "identities.messages.4000019": "deve ser > {minimum} mas foi encontrado {actual}",
+ "identities.messages.4000020": "deve ser <= {maximum} mas foi encontrado {actual}",
+ "identities.messages.4000021": "deve ser < {maximum} mas foi encontrado {actual}",
+ "identities.messages.4000022": "{actual} não é múltiplo de {base}",
+ "identities.messages.4000023": "máximo de {max_items} itens permitidos, mas foram encontrados {actual_items} itens",
+ "identities.messages.4000024": "mínimo de {min_items} itens permitidos, mas foram encontrados {actual_items} itens",
+ "identities.messages.4000025": "itens nos índices {index_a} e {index_b} são iguais",
+ "identities.messages.4000026": "esperado {allowed_types_list}, mas foi {actual_type}",
+ "identities.messages.4000027": "Já existe uma conta com o mesmo username (e-mail, telefone, nome de usuário, ...). Faça login na sua conta existente e vincule seu perfil social na página de configurações.",
+ "identities.messages.4000028": "Tentou fazer login com {credential_identifier_hint}, que já está sendo usado por outra conta. Pode fazer login usando {available_credential_types_list}. Pode fazer login usando um dos seguintes provedores de login social: {Available_oidc_providers_list}.",
+ "identities.messages.4000029": "deve ser igual a constante {expected}",
+ "identities.messages.4000030": "constante falhou",
+ "identities.messages.4000031": "A password não pode ser utilizada porque é muito semelhante ao username.",
+ "identities.messages.4000032": "A password deve conter ter pelo menos {min_length} caracteres, mas contém {actual_length}.",
+ "identities.messages.4000033": "A password deve conter ter no máximo {max_length} caracteres, mas contém {actual_length}.",
+ "identities.messages.4000034": "A password foi encontrada em violações de dados e não deve mais ser utilizada.",
+ "identities.messages.4000035": "Esta conta não existe ou não configurou o login com código.",
+ "identities.messages.4000036": "Os traços fornecidos não correspondem aos traços associados anteriormente a este fluxo.",
+ "identities.messages.4010001": "O fluxo de login expirou {expired_at_unix_since_minutes} minutos atrás, tente novamente.",
+ "identities.messages.4010002": "Não foi encontrada uma estratégia para fazer login. Preencheu o formulário corretamente?",
+ "identities.messages.4010003": "Não foi encontrada uma estratégia para Registar. Preencheu o formulário corretamente?",
+ "identities.messages.4010004": "Não foi encontrada uma estratégia para atualizar suas configurações. Preencheu o formulário corretamente?",
+ "identities.messages.4010005": "Não foi encontrada uma estratégia para recuperar sua conta. Preencheu o formulário corretamente?",
+ "identities.messages.4010006": "Não foi encontrada uma estratégia para verificar sua conta. Preencheu o formulário corretamente?",
+ "identities.messages.4010007": "A solicitação já foi concluída com sucesso e não pode ser tentada novamente.",
+ "identities.messages.4010008": "O código de login é inválido ou já foi usado. Tente novamente.",
+ "identities.messages.4040001": "O fluxo de registo expirou {expired_at_unix_since_minutes} minutos atrás, tente novamente.",
+ "identities.messages.4040002": "A solicitação já foi concluída com sucesso e não pode ser tentada novamente.",
+ "identities.messages.4040003": "O código de registo é inválido ou já foi usado. Tente novamente.",
+ "identities.messages.4050001": "O fluxo de configurações expirou {expired_at_unix_since_minutes} minutos atrás, tente novamente.",
+ "identities.messages.4060001": "A solicitação já foi concluída com sucesso e não pode ser tentada novamente.",
+ "identities.messages.4060002": "O fluxo de recuperação atingiu um estado de falha e deve ser tentado novamente.",
+ "identities.messages.4060004": "O token de recuperação é inválido ou já foi usado. Por favor, tente o fluxo novamente.",
+ "identities.messages.4060005": "O fluxo de recuperação expirou {expired_at_unix_since_minutes} minutos atrás, tente novamente.",
+ "identities.messages.4060006": "O código de recuperação é inválido ou já foi usado. Tente novamente.",
+ "identities.messages.4070001": "O token de verificação é inválido ou já foi usado. Tente novamente.",
+ "identities.messages.4070002": "A solicitação já foi concluída com sucesso e não pode ser solicitada novamente.",
+ "identities.messages.4070003": "O fluxo de verificação atingiu um estado de falha e deve ser tentado novamente.",
+ "identities.messages.4070005": "O fluxo de verificação expirou {expired_at_unix_since_minutes} minutos atrás, tente novamente.",
+ "identities.messages.4070006": "O código de verificação é inválido ou já foi usado. Tente novamente.",
+ "identities.messages.5000001": "{reason}",
+ "login.forgot-password": "Esqueceu a password?",
+ "login.logged-in-as-label": "Está conectado como:",
+ "login.logout-button": "Sair",
+ "login.logout-label": "Algo não está a funcionar?",
+ "login.registration-button": "Registar",
+ "login.registration-label": "Não tem uma conta?",
+ "login.subtitle-oauth2": "Para autenticar {clientName}",
+ "login.title": "Entrar",
+ "login.title-aal2": "Autenticação de Dois Fatores",
+ "login.title-refresh": "Confirme que é você",
+ "logout.accept-button": "Sim",
+ "logout.reject-button": "Não",
+ "logout.title": "Deseja sair?",
+ "recovery.login-button": "Entrar",
+ "recovery.login-label": "Lembrar credenciais?",
+ "recovery.title": "Recuperar conta",
+ "registration.login-button": "Entrar",
+ "registration.login-label": "Já tem uma conta?",
+ "registration.subtitle-oauth2": "Para autenticar {clientName}",
+ "registration.title": "Registar uma conta",
+ "settings.navigation-backup-codes": "Códigos de Backup de 2FA",
+ "settings.navigation-logout": "Sair",
+ "settings.navigation-oidc": "login social",
+ "settings.navigation-password": "Password",
+ "settings.navigation-profile": "Perfil",
+ "settings.navigation-totp": "Aplicação Autenticador 2FA",
+ "settings.navigation-webauthn": "Tokens de Hardware",
+ "settings.subtitle-instructions": "Aqui pode gerar configurações relacionadas com a sua conta. Lembre-se de que certas ações exigem que efetue novamente login.",
+ "settings.title": "Configurações da Conta",
+ "settings.title-lookup-secret": "Gerar Códigos de Recuperação de Backup de 2FA",
+ "settings.title-navigation": "Configurações da Conta",
+ "settings.title-oidc": "login social",
+ "settings.title-password": "Alterar password",
+ "settings.title-profile": "Configurações de Perfil",
+ "settings.title-totp": "Gerar Aplicação Autenticador 2FA",
+ "settings.title-webauthn": "Gerar Tokens de Hardware",
+ "verification.registration-button": "Registar",
+ "verification.registration-label": "Não tem uma conta?",
+ "verification.title": "Verifique a sua conta"
+}