diff --git a/packages/core/src/__mocks__/connector.ts b/packages/core/src/__mocks__/connector.ts index 476a78e91..4c9540f8b 100644 --- a/packages/core/src/__mocks__/connector.ts +++ b/packages/core/src/__mocks__/connector.ts @@ -10,6 +10,7 @@ export const mockMetadata: ConnectorMetadata = { platform: null, name: { en: 'Connector', + 'pt-PT': 'Conector', 'zh-CN': '连接器', 'tr-TR': 'Connector', 'ko-KR': 'Connector', @@ -18,6 +19,7 @@ export const mockMetadata: ConnectorMetadata = { logoDark: './logo-dark.png', description: { en: 'Connector', + 'pt-PT': 'Conector', 'zh-CN': '连接器', 'tr-TR': 'Connector', 'ko-KR': 'Connector', diff --git a/packages/phrases-ui/src/index.ts b/packages/phrases-ui/src/index.ts index 46a348ab5..0d1b65f26 100644 --- a/packages/phrases-ui/src/index.ts +++ b/packages/phrases-ui/src/index.ts @@ -3,6 +3,7 @@ import { NormalizeKeyPaths } from '@silverhand/essentials'; import en from './locales/en'; import fr from './locales/fr'; import koKR from './locales/ko-kr'; +import ptPT from './locales/pt-pt'; import trTR from './locales/tr-tr'; import zhCN from './locales/zh-cn'; import { Resource } from './types'; @@ -14,6 +15,7 @@ export type I18nKey = NormalizeKeyPaths; const resource: Resource = { en, fr, + 'pt-PT': ptPT, 'zh-CN': zhCN, 'ko-KR': koKR, 'tr-TR': trTR, diff --git a/packages/phrases-ui/src/locales/pt-pt.ts b/packages/phrases-ui/src/locales/pt-pt.ts new file mode 100644 index 000000000..038fb71fa --- /dev/null +++ b/packages/phrases-ui/src/locales/pt-pt.ts @@ -0,0 +1,78 @@ +import en from './en'; + +const translation = { + input: { + username: 'Utilizador', + password: 'Password', + email: 'Email', + phone_number: 'Telefone', + confirm_password: 'Confirmar password', + }, + secondary: { + sign_in_with: 'Entrar com {{methods, list(type: disjunction;)}}', + social_bind_with: + 'Já tem uma conta? Faça login para agregar {{methods, list(type: disjunction;)}} com a sua identidade social.', + }, + action: { + sign_in: 'Entrar', + continue: 'Continuar', + create_account: 'Criar uma conta', + create: 'Criar', + enter_passcode: 'Digite a senha', + confirm: 'Confirmar', + cancel: 'Cancelar', + bind: 'Agregar a {{address}}', + back: 'Voltar', + nav_back: 'Anterior', + agree: 'Aceito', + got_it: 'Entendi', + sign_in_with: 'Entrar com {{name}}', + }, + description: { + email: 'email', + phone_number: 'telefone', + reminder: 'Lembrete', + not_found: '404 Não encontrado', + agree_with_terms: 'Eu li e concordo com os ', + agree_with_terms_modal: 'Para prosseguir, por favor, concorde com o .', + terms_of_use: 'Termos de uso', + create_account: 'Criar uma conta', + forgot_password: 'Esqueceu a password?', + or: 'ou', + enter_passcode: 'A senha foi enviada para o seu {{address}}', + passcode_sent: 'A senha foi reenviada', + resend_after_seconds: 'Reenviar após {{seconds}} segundos', + resend_passcode: 'Reenviar senha', + continue_with: 'Continuar com', + create_account_id_exists: 'A conta com {{type}} {{value}} já existe, gostaria de fazer login?', + sign_in_id_does_not_exists: 'A conta com {{type}} {{value}} não existe, gostaria de criar uma?', + bind_account_title: 'Agregar conta', + social_create_account: 'Sem conta? Pode criar uma nova e agregar.', + social_bind_account: 'Já tem uma conta? Faça login para agregar a sua identidade social.', + social_bind_with_existing: 'Encontramos uma conta relacionada, pode agrega-la diretamente.', + }, + error: { + username_password_mismatch: 'O Utilizador e a password não correspondem', + username_required: 'Utilizador necessário', + password_required: 'Password necessária', + username_exists: 'O nome de utilizador já existe', + username_should_not_start_with_number: 'O nome de utilizador não deve começar com um número', + username_valid_charset: + 'O nome de utilizador deve conter apenas letras, números ou underscores.', + invalid_email: 'O email é inválido', + invalid_phone: 'O número de telefone é inválido', + password_min_length: 'A password requer um mínimo de {{min}} caracteres', + passwords_do_not_match: 'As passwords não coincidem', + invalid_passcode: 'A senha é inválida', + invalid_connector_auth: 'A autorização é inválida', + invalid_connector_request: 'Os dados do conector são inválidos', + unknown: 'Erro desconhecido. Por favor, tente novamente mais tarde.', + invalid_session: 'Sessão não encontrada. Volte e faça login novamente.', + }, +}; + +const ptPT: typeof en = Object.freeze({ + translation, +}); + +export default ptPT; diff --git a/packages/phrases-ui/src/types.ts b/packages/phrases-ui/src/types.ts index 4f43de2f6..31cf202b1 100644 --- a/packages/phrases-ui/src/types.ts +++ b/packages/phrases-ui/src/types.ts @@ -10,6 +10,7 @@ export type ResourceKey = string | Record; const languageCodeAndDisplayNameMappings: Record = { en: 'English', fr: 'Français', + 'pt-PT': 'Português', 'zh-CN': '简体中文', 'tr-TR': 'Türkçe', 'ko-KR': '한국어', diff --git a/packages/phrases/src/index.ts b/packages/phrases/src/index.ts index af3772f1f..9d23593d7 100644 --- a/packages/phrases/src/index.ts +++ b/packages/phrases/src/index.ts @@ -3,6 +3,7 @@ import { NormalizeKeyPaths } from '@silverhand/essentials'; import en from './locales/en'; import fr from './locales/fr'; import koKR from './locales/ko-kr'; +import ptPT from './locales/pt-pt'; import trTR from './locales/tr-tr'; import zhCN from './locales/zh-cn'; import { Resource } from './types'; @@ -18,6 +19,7 @@ export type AdminConsoleKey = NormalizeKeyPaths{{name}} para confirmar.', + enter_your_api_resource_name: 'Digite o nome do recurso API', + api_resource_deleted: 'O recurso API {{name}} foi eliminado com sucesso', +}; + +export default api_resource_details; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resources.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resources.ts new file mode 100644 index 000000000..fc37bc6b2 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resources.ts @@ -0,0 +1,14 @@ +const api_resources = { + title: 'Recursos API', + subtitle: 'Defina APIs que pode consumir nos aplicações autorizadas', + create: 'Criar recurso API', + api_name: 'Nome da API', + api_name_placeholder: 'Introduza o nome da sua API', + api_identifier: 'identificador da API', + api_identifier_tip: + 'O identificador exclusivo para o recurso API. Deve ser um URI absoluto e não tem componente de fragmento (#). Igual ao resource parameter no OAuth 2.0.', + api_resource_created: 'O recurso API {{name}} foi criado com sucesso', + api_identifier_placeholder: 'https://your-api-identifier/', +}; + +export default api_resources; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts new file mode 100644 index 000000000..4f7f11ce4 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/application-details.ts @@ -0,0 +1,40 @@ +const application_details = { + back_to_applications: 'Voltar para aplicações', + check_guide: 'Guia de verificação', + advanced_settings: 'Configurações avançadas', + application_name: 'Nome da aplicação', + application_name_placeholder: 'Ex: Site Empresa', + description: 'Descrição', + description_placeholder: 'Insira a descrição da sua aplicação', + authorization_endpoint: 'Endpoint de autorização', + authorization_endpoint_tip: + 'O endpoint para realizar autenticação e autorização. É usado para autenticação OpenID Connect.', + application_secret: 'Segredo da aplicação', + redirect_uri: 'URI de redirecionamento', + redirect_uris: 'URIs de redirecionamento', + redirect_uri_placeholder: 'https://your.website.com/app', + redirect_uri_placeholder_native: 'io.logto://callback', + redirect_uri_tip: + 'O URI redireciona após o login de um utilizador (com êxito ou não). Consulte OpenID Connect AuthRequest para obter mais informações.', + post_sign_out_redirect_uri: 'URI de redirecionamento pós-logout', + post_sign_out_redirect_uris: 'URIs de redirecionamento pós-logout', + post_sign_out_redirect_uri_placeholder: 'https://your.website.com/home', + post_sign_out_redirect_uri_tip: + 'O URI redireciona após a saída de um utilizador (opcional). Pode não ter efeito prático em alguns tipos de aplicações.', + cors_allowed_origins: 'origens permitidas CORS', + cors_allowed_origins_placeholder: 'https://your.website.com', + cors_allowed_origins_tip: + 'Por padrão, todas as origens de redirecionamento serão permitidas. Recomenda-se restringir isto.', + add_another: 'Adicionar outro', + id_token_expiration: 'Expiração do token de ID', + refresh_token_expiration: 'Expiração do token de atualização', + token_endpoint: 'Endpoint Token', + user_info_endpoint: 'Enpoint Userinfo', + delete_description: + 'Esta ação não pode ser desfeita. Isso ira eliminar permanentemente a app. Insira o nome da aplicação {{name}} para confirmar.', + enter_your_application_name: 'Digite o nome da aplicação', + application_deleted: 'Aplicação {{name}} eliminada com sucesso', + redirect_uri_required: 'Deve inserir pelo menos um URI de redirecionamento', +}; + +export default application_details; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/applications.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/applications.ts new file mode 100644 index 000000000..2cf29a44f --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/applications.ts @@ -0,0 +1,43 @@ +const applications = { + title: 'Aplicações', + subtitle: + 'Configure um aplicativo móvel, de página única ou tradicional para usar o Logto para autenticação', + create: 'Criar aplicação', + application_name: 'Nome da aplicação', + application_name_placeholder: 'Ex: Site Empresa', + application_description: 'Descrição do aplicação', + application_description_placeholder: 'Insira a descrição da sua aplicação', + select_application_type: 'Selecione o tipo de aplicação', + no_application_type_selected: 'Ainda não selecionou nenhum tipo de aplicação', + application_created: + 'A aplicação {{name}} foi criada com sucesso! \nAgora termine as configurações do seu aplicativo.', + app_id: 'ID da aplicação', + type: { + native: { + title: 'Nativo', + subtitle: 'Uma aplicação que é executada em um ambiente nativo', + description: 'Ex., App iOS, App Android', + }, + spa: { + title: 'Página única (SPAs)', + subtitle: 'Uma aplicação que é executada num navegador e atualiza dinamicamente os dados', + description: 'Ex., App React, App VueJS', + }, + traditional: { + title: 'Web tradicional', + subtitle: 'Uma aplicação que renderiza e atualiza páginas apenas pelo servidor web', + description: 'Ex., Next.js, PHP', + }, + }, + guide: { + get_sample_file: 'Obter amostra', + header_description: + 'Siga um guia passo a passo para integrar a sua aplicação ou clique com o botão direito para obter nosso projeto de amostra', + title: 'A aplicação foi criada com sucesso', + subtitle: + 'Agora siga as etapas abaixo para concluir as configurações da aplicação. Selecione o tipo de SDK para continuar.', + description_by_sdk: 'Este guia de início rápido demonstra como integrar o Logto em {{sdk}}', + }, +}; + +export default applications; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/connector-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/connector-details.ts new file mode 100644 index 000000000..3933d3f3c --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/connector-details.ts @@ -0,0 +1,22 @@ +const connector_details = { + back_to_connectors: 'Voltar para Conectores', + check_readme: 'Verifique o README', + save_error_empty_config: 'Por favor, insira a configuração', + send: 'Enviar', + send_error_invalid_format: 'Entrada inválida', + edit_config_label: 'Introduza o JSON aqui', + test_email_sender: 'Teste o conector de email', + test_sms_sender: 'Teste o conector de SMS', + test_email_placeholder: 'Insira um endereço de email para o teste', + test_sms_placeholder: 'Insira um número de telefone para o teste', + test_message_sent: 'Mensagem de teste enviada!', + test_sender_description: 'Receberá uma mensagem se o JSON estiver configurado corretamente', + options_change_email: 'Alterar conector de email', + options_change_sms: 'Alterar conector de SMS', + connector_deleted: 'O conector foi removido com sucesso', + type_email: 'Conector de Email', + type_sms: 'Conector de SMS', + type_social: 'Conector Social', +}; + +export default connector_details; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/connectors.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/connectors.ts new file mode 100644 index 000000000..05a5efb9b --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/connectors.ts @@ -0,0 +1,37 @@ +const connectors = { + title: 'Conectores', + subtitle: 'Configure conectores para habilitar a experiência de login social e sem senha', + create: 'Adicionar conector social', + tab_email_sms: 'Conectores de Email e SMS', + tab_social: 'Conectores sociais', + connector_name: 'Nome do conector', + connector_type: 'Tipo', + connector_status: 'Experiência de login', + connector_status_in_use: 'Em uso', + connector_status_not_in_use: 'Fora de uso', + social_connector_eg: 'Ex., Google, Facebook, Github', + save_and_done: 'Guardar', + type: { + email: 'Email', + sms: 'SMS', + social: 'Social', + }, + setup_title: { + email: 'Configurar o conector de email', + sms: 'Configurar o conector de SMS', + social: 'Adicionar conector social', + }, + guide: { + subtitle: 'Um guia passo a passo para configurar o conector', + }, + platform: { + universal: 'Universal', + web: 'Web', + native: 'Nativo', + }, + add_multi_platform: ' suporta várias plataformas, selecione uma plataforma para continuar', + drawer_title: 'Guia do conector', + drawer_subtitle: 'Siga as instruções para integrar o conector', +}; + +export default connectors; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/contact.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/contact.ts new file mode 100644 index 000000000..11ba3efe3 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/contact.ts @@ -0,0 +1,22 @@ +const contact = { + title: 'Contate-nos', + description: + 'Junte-se à nossa comunidade para fornecer feedback, pedir ajuda e compartilhar pensamentos com outros desenvolvedores', + discord: { + title: 'Discord', + description: 'Junte-se ao nosso canal público para conversar com outros desenvolvedores', + button: 'Juntar', + }, + github: { + title: 'GitHub', + description: 'Crie um issue e submeta no GitHub', + button: 'Abrir', + }, + email: { + title: 'Enviar email', + description: 'Envie-nos um email para mais informações e ajuda', + button: 'Enviar', + }, +}; + +export default contact; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/dashboard.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/dashboard.ts new file mode 100644 index 000000000..b26699a3d --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/dashboard.ts @@ -0,0 +1,22 @@ +const dashboard = { + title: 'Painel', + description: 'Obtenha uma visão geral sobre o desempenho da sua aplicação', + total_users: 'Utilizadores totais', + total_users_tip: 'Nº de Utilizadores registados', + new_users_today: 'Novos utilizadores hoje', + new_users_today_tip: 'O número de novos utilizadores registados nas suas aplicações hoje', + new_users_7_days: 'Novos utilizadores nos últimos 7 dias', + new_users_7_days_tip: + 'O número de novos utilizadores registados nas suas aplicações nos últimos sete dias', + daily_active_users: 'Utilizadores ativos diariamente', + daily_active_users_tip: + 'O número de utilizadores únicos que efetuaram login nas suas aplicações hoje', + weekly_active_users: 'Utilizadores ativos semanalmente', + weekly_active_users_tip: + 'O número de utilizadores únicos que efetuaram login nas suas aplicações nos últimos sete dias', + monthly_active_users: 'Utilizadores ativos mensais', + monthly_active_users_tip: + 'O número de utilizadores únicos que efetuaram login nas suas aplicações nos últimos 30 dias', +}; + +export default dashboard; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts new file mode 100644 index 000000000..1fe68ec83 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/errors.ts @@ -0,0 +1,21 @@ +const errors = { + something_went_wrong: 'Ops! Algo deu errado.', + page_not_found: 'Página não encontrada', + unknown_server_error: 'Ocorreu um erro de servidor desconhecido', + empty: 'Sem dados', + missing_total_number: 'Não foi possível encontrar `Total-Number` nos cabeçalhos da resposta', + invalid_uri_format: 'Formato de URI inválido', + invalid_origin_format: 'Formato de origem de URI inválido', + invalid_json_format: 'Formato JSON inválido', + invalid_error_message_format: 'The error message format is invalid.', + required_field_missing: 'Por favor, introduza {{field}}', + required_field_missing_plural: 'Deve inserir pelo menos um {{field}}', + more_details: 'Mais detalhes', + username_pattern_error: + 'O nome de utilizador deve conter apenas letras, números ou underscores e não deve começar com um número.', + password_pattern_error: 'A password requer um mínimo de 6 caracteres', + insecure_contexts: 'Contextos inseguros (não HTTPS) não são compatíveis.', + unexpected_error: 'Um erro inesperado ocorreu', +}; + +export default errors; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/general.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/general.ts new file mode 100644 index 000000000..a4108c12d --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/general.ts @@ -0,0 +1,40 @@ +const general = { + placeholder: 'Placeholder', + skip: 'Saltar', + next: 'Seguine', + retry: 'Tente novamente', + done: 'Feito', + search: 'Pesquisar', + search_placeholder: 'Pesquise', + clear_result: 'Limpar resultados', + save: 'Guardar', + save_changes: 'Guardar Alterações', + saved: 'Guardado!', + loading: 'Carregando...', + redirecting: 'Redirecionando...', + add: 'Adicionar', + added: 'Adicionado', + cancel: 'Cancelar', + confirm: 'Confirmar', + check_out: 'Verificar', + create: 'Criar', + set_up: 'Configurar', + customize: 'Customizar', + enable: 'Ativar', + reminder: 'Lembrete', + delete: 'Apagar', + more_options: 'MAIS OPÇÕES', + close: 'Fechar', + copy: 'Copiar', + copying: 'Copiando', + copied: 'Copiado', + required: 'Necessário', + add_another: '+ Adicionar outro', + deletion_confirmation: 'Tem a certeza que deseja eliminar isso {{title}}?', + settings_nav: 'Definições', + unsaved_changes_warning: 'Fez algumas alterações. Tem a certeza que deseja sair desta página?', + leave_page: 'Sair da página', + stay_on_page: 'Ficar na página', +}; + +export default general; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/get-started.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/get-started.ts new file mode 100644 index 000000000..9bab048a7 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/get-started.ts @@ -0,0 +1,27 @@ +const get_started = { + progress: 'Guia de primeiros passos: {{completed}}/{{total}}', + progress_dropdown_title: 'Algumas coisas que pode fazer...', + title: 'Como deseja começar a usar o Logto?', + subtitle_part1: 'Algumas coisas que pode fazer para obter rapidamente o valor do Logto', + subtitle_part2: 'Acabei com esta configuração. ', + hide_this: 'Ocultar isto', + confirm_message: 'Tem a certeza que deseja ocultar esta página? Esta ação não pode ser desfeita.', + card1_title: 'Confira a demonstração', + card1_subtitle: 'Experimente a experiência de login do Logto agora para ver como funciona', + card2_title: 'Crie e integre a primeira aplicação', + card2_subtitle: + 'Configure um aplicativo móvel, de página única ou tradicional para usar o Logto para autenticação', + card3_title: 'Personalize a experiência de login', + card3_subtitle: + 'Personalize a interface de login para corresponder a sua marca e visualize em tempo rea', + card4_title: 'Configure um conector de SMS/Email', + card4_subtitle: + 'Experimente o login sem senha com número de telefone ou email para permitir uma experiência do cliente segura e sem atritos', + card5_title: 'Adicione um conector social', + card5_subtitle: 'Permita que os seus clientes entrem com as identidades sociais em um clique', + card6_title: 'Outras leituras', + card6_subtitle: + 'Confira a nossa documentação passo a passo baseados em cenários sem conceitos tediosos', +}; + +export default get_started; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts new file mode 100644 index 000000000..f63ff54a0 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/index.ts @@ -0,0 +1,52 @@ +import api_resource_details from './api-resource-details'; +import api_resources from './api-resources'; +import application_details from './application-details'; +import applications from './applications'; +import connector_details from './connector-details'; +import connectors from './connectors'; +import contact from './contact'; +import dashboard from './dashboard'; +import errors from './errors'; +import general from './general'; +import get_started from './get-started'; +import log_details from './log-details'; +import logs from './logs'; +import session_expired from './session-expired'; +import settings from './settings'; +import sign_in_exp from './sign-in-exp'; +import tab_sections from './tab-sections'; +import tabs from './tabs'; +import user_details from './user-details'; +import users from './users'; +import welcome from './welcome'; + +const admin_console = { + title: 'Consola de Administrador', + sign_out: 'Terminar sessão', + profile: 'Perfil', + admin_user: 'Administrador', + system_app: 'Sistema', + general, + errors, + tab_sections, + tabs, + applications, + application_details, + api_resources, + api_resource_details, + connectors, + connector_details, + get_started, + users, + user_details, + contact, + sign_in_exp, + settings, + dashboard, + logs, + log_details, + session_expired, + welcome, +}; + +export default admin_console; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/log-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/log-details.ts new file mode 100644 index 000000000..71c197a1c --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/log-details.ts @@ -0,0 +1,17 @@ +const log_details = { + back_to_logs: 'Voltar aos registos de auditoria', + back_to_user: 'De volta a {{name}}', + success: 'Sucesso', + failed: 'Falha', + event_type: 'Tipo de evento', + application: 'Aplicação', + ip_address: 'Endereço IP', + user: 'Utilizador', + log_id: 'ID do registo', + time: 'Hora', + user_agent: 'User agent', + tab_details: 'Detalhes', + raw_data: 'Dados não tratados', +}; + +export default log_details; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/logs.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/logs.ts new file mode 100644 index 000000000..c4c113e7a --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/logs.ts @@ -0,0 +1,11 @@ +const logs = { + title: 'Registos de auditoria', + subtitle: 'Visualize logs de autenticação feitos por administradores e utilizadores', + event: 'Evento', + user: 'Utilizador', + application: 'Aplicação', + time: 'Hora', + filter_by: 'Filtrar pors', +}; + +export default logs; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/session-expired.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/session-expired.ts new file mode 100644 index 000000000..9948b7830 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/session-expired.ts @@ -0,0 +1,8 @@ +const session_expired = { + title: 'Sessão expirada', + subtitle: + 'A sua sessão pode ter expirado foi desconectado. Clique no botão abaixo para fazer login novamente.', + button: 'Entrar novamente', +}; + +export default session_expired; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/settings.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/settings.ts new file mode 100644 index 000000000..7f86eb2a6 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/settings.ts @@ -0,0 +1,27 @@ +const settings = { + title: 'Definições', + description: 'Gerenciar as configurações globais', + tabs: { + general: 'Geral', + }, + custom_domain: 'Domínio personalizado', + language: 'Linguagem', + appearance: 'Aparência', + appearance_system: 'Sincronizar com o sistema', + appearance_light: 'Claro', + appearance_dark: 'Escuro', + saved: 'Guardado!', + change_password: 'Mudar password', + change_password_description: + 'Pode alterar a senha desta conta. Usará o nome de utilizador atual com a nova password para fazer login na consola.', + change_modal_title: 'Alterar password da conta', + change_modal_description: + 'Usará o nome de utilizador atual com a nova password para fazer login na consola.', + new_password: 'Nova Password', + new_password_placeholder: 'Introduza a password', + confirm_password: 'Confirme a password', + confirm_password_placeholder: 'Confirme a password', + password_changed: 'Password alterada!', +}; + +export default settings; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp.ts new file mode 100644 index 000000000..4495499b0 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/sign-in-exp.ts @@ -0,0 +1,115 @@ +const sign_in_exp = { + title: 'Experiência de login', + description: + 'Personalize a interface de login para corresponder a sua marca e visualize em tempo real', + tabs: { + branding: 'Marca', + methods: 'Métodos de login', + others: 'Outros', + }, + welcome: { + title: + 'Esta é a primeira vez que define a experiência de login. Este guia irá ajudá-lo a passar por todas as configurações necessárias e começar rapidamente.', + get_started: 'Começar', + apply_remind: 'Observe que a experiência de login será aplicada a todos os apps nesta conta.', + got_it: 'Entendi', + }, + color: { + title: 'COR', + primary_color: 'Cor da marca', + dark_primary_color: 'Cor da marca (tema escuro)', + dark_mode: 'Ativar tema escuro', + dark_mode_description: + 'O app terá um tema escuro gerado automaticamente com base na cor da marca e no algoritmo Logto. contudo é livre de personalizar.', + dark_mode_reset_tip: 'Recalcular a cor do tema escuro com base na cor da marca.', + reset: 'Recalcular', + }, + branding: { + title: 'ÁREA DE MARCA', + ui_style: 'Estilo', + styles: { + logo_slogan: 'Logo da app com slogan', + logo: 'Apenas o logo da app', + }, + logo_image_url: 'URL do logotipo da app', + logo_image_url_placeholder: 'https://your.cdn.domain/logo.png', + dark_logo_image_url: 'URL do logotipo da app (tema escuro)', + dark_logo_image_url_placeholder: 'https://your.cdn.domain/logo-dark.png', + slogan: 'Slogan', + slogan_placeholder: 'Liberte a sua criatividade', + }, + sign_in_methods: { + title: 'MÉTODOS DE LOGIN', + primary: 'Método de login principal', + enable_secondary: 'Ativar login secundário', + enable_secondary_description: + 'Depois de ativado, a sua app oferecerá suporte a mais métodos de login além do principal. ', + methods: 'Método de login', + methods_sms: 'SMS', + methods_email: 'Email', + methods_social: 'Rede social', + methods_username: 'Utilizador e password', + methods_primary_tag: '(Primário)', + define_social_methods: 'Definir métodos de login social', + transfer: { + title: 'Conectores sociais', + footer: { + not_in_list: 'Não está na lista?', + set_up_more: 'Configurar mais', + go_to: 'conectores sociais ou vá para a seção "Conectores".', + }, + }, + }, + others: { + terms_of_use: { + title: 'TERMOS DE USO', + enable: 'Ativar termos de uso', + description: 'Adicione os termos legais para uso do seu produto', + terms_of_use: 'Termos de uso', + terms_of_use_placeholder: 'https://your.terms.of.use/', + terms_of_use_tip: 'URL dos termos de uso', + }, + languages: { + title: 'LÍNGUAS', + mode: 'Modo de idioma', + auto: 'automático', + fixed: 'Fixo', + fallback_language: 'Idioma fallback', + fallback_language_tip: 'Qual idioma usar se o Logto não encontrar o idioma requisitado.', + fixed_language: 'Idioma fixo', + }, + authentication: { + title: 'AUTENTICAÇÃO', + enable_create_account: 'Permitir criar conta?', + enable_create_account_description: + 'Ativa ou desativa a criação de contas. Depois de desativado, os seus clientes não poderão criar contas por meio da pagina de login, mas você poderá adicionar utiizadores na Consola de Administrador.', + }, + }, + setup_warning: { + no_connector: '', + no_connector_sms: + 'Ainda não configurou um conector de SMS. A experiência de login não será ativada até que conclua as configurações primeiro. ', + no_connector_email: + 'Ainda não configurou um conector de email. A experiência de login não será ativada até que conclua as configurações primeiro. ', + no_connector_social: + 'Ainda não configurou um conector social. A experiência de login não será ativada até que conclua as configurações primeiro. ', + no_added_social_connector: + 'Configurou alguns conectores sociais agora. Certifique-se de adicionar alguns a experiência de login.', + }, + save_alert: { + description: + 'Está alterando os métodos de login. Isso afetará alguns dos seus utilizadoress. Tem a certeza que deseja fazer isso?', + before: 'Antes', + after: 'Depois', + }, + preview: { + title: 'Pre-visualização do login', + dark: 'Escuro', + light: 'Claro', + native: 'Nativo', + desktop_web: 'Web computador', + mobile_web: 'Web móvel', + }, +}; + +export default sign_in_exp; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/tab-sections.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/tab-sections.ts new file mode 100644 index 000000000..3df4211c2 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/tab-sections.ts @@ -0,0 +1,8 @@ +const tab_sections = { + overview: 'Vista geral', + resource_management: 'Gestão de recursos', + user_management: 'Gestão de utilizadores', + help_and_support: 'Ajuda e suporte', +}; + +export default tab_sections; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts new file mode 100644 index 000000000..78501bb0d --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/tabs.ts @@ -0,0 +1,15 @@ +const tabs = { + get_started: 'Começo', + dashboard: 'Painel', + applications: 'Aplicações', + api_resources: 'Recursos API', + sign_in_experience: 'Experiência de login', + connectors: 'Conectores', + users: 'Gestão de utilizadores', + audit_logs: 'Registos de auditoria', + docs: 'Documentação', + contact_us: 'Contate-nos', + settings: 'Definições', +}; + +export default tabs; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/user-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/user-details.ts new file mode 100644 index 000000000..e897fde9d --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/user-details.ts @@ -0,0 +1,41 @@ +const user_details = { + back_to_users: 'Voltar a gestão de utilizadores', + created_title: 'Este utilizador foi criado com sucesso', + created_guide: 'Pode enviar as seguintes informações de login para o utilizador', + created_username: 'Utilizador:', + created_password: 'Password:', + menu_delete: 'eliminar', + delete_description: + 'Esta ação não pode ser desfeita. Isso ira eliminar o utilizador permanentemente.', + deleted: 'The user has been successfully deleted', + reset_password: { + reset_password: 'Redefinir password', + title: 'Tem a certeza que deseja redefinir a password?', + content: + 'Esta ação não pode ser desfeita. Isso irá redefinir as informações de login do utilizador.', + congratulations: 'Este utilizador foi redefinido', + new_password: 'Nova password:', + }, + tab_logs: 'Registros do utilizador', + field_email: 'Email', + field_phone: 'Telefone', + field_username: 'Nome de utilizador', + field_name: 'Nome', + field_avatar: 'URL da imagem do avatar', + field_avatar_placeholder: 'https://your.cdn.domain/avatar.png', + field_custom_data: 'Dados personalizados', + field_custom_data_tip: + 'Informações adicionais do utilizador não listadas nas propriedades predefinidas, ex: idioma preferido pelo utilizador.', + field_connectors: 'Conexões sociais', + custom_data_invalid: 'Os dados personalizados devem ser um objeto JSON válido', + connectors: { + connectors: 'Conectores', + user_id: 'ID do utilizador', + remove: 'Remover', + not_connected: 'O utilizador não está conectado a nenhum conector social', + deletion_confirmation: + 'Está removendo a identidade existente. Tem a certeza que deseja fazer isso?', + }, +}; + +export default user_details; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/users.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/users.ts new file mode 100644 index 000000000..32e2219e6 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/users.ts @@ -0,0 +1,15 @@ +const users = { + title: 'Gestão de utilizadores', + subtitle: + 'Gerencie os utilizadores, incluindo a criação, edição de informações, visualização de logs, recuperações de password e exclusões', + create: 'Adicionar usuário', + user_name: 'Utilizador', + application_name: 'Do app', + latest_sign_in: 'Último login', + create_form_username: 'Utilizador', + create_form_password: 'Password', + create_form_name: 'Nome completo', + unnamed: 'Sem nome', +}; + +export default users; diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/welcome.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/welcome.ts new file mode 100644 index 000000000..18cd15108 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/welcome.ts @@ -0,0 +1,8 @@ +const welcome = { + title: 'Bem-vindo a consola de Administrador', + description: + 'A consola de Administrador é o lugar para gerenciar o Logto sem ter conhecimentos de programação. Vamos primeiro criar uma conta. Com esta conta, pode gerir o Logto por conta própria ou em nome da empresa.', + create_account: 'Criar uma conta', +}; + +export default welcome; diff --git a/packages/phrases/src/locales/pt-pt/translation/demo-app.ts b/packages/phrases/src/locales/pt-pt/translation/demo-app.ts new file mode 100644 index 000000000..ee7cc19d3 --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/demo-app.ts @@ -0,0 +1,15 @@ +const demo_app = { + notification: + 'Use a sua conta de administrador padrão ou crie uma nova conta para entrar na app de demonstração.', + title: 'Entrou com sucesso na app de demonstração!', + subtitle: 'Aqui estão as suas informações de login:', + username: 'Utilizador: ', + user_id: 'ID de utilizador: ', + sign_out: 'Sair da app de demonstração', + continue_explore: 'Ou continue a explorar', + customize_sign_in_experience: 'Personalizar a experiência de login', + enable_passwordless: 'Ativar login sem passsword (passwordless)', + add_social_connector: 'Adicionar conector socials', +}; + +export default demo_app; diff --git a/packages/phrases/src/locales/pt-pt/translation/index.ts b/packages/phrases/src/locales/pt-pt/translation/index.ts new file mode 100644 index 000000000..4d123d04e --- /dev/null +++ b/packages/phrases/src/locales/pt-pt/translation/index.ts @@ -0,0 +1,9 @@ +import admin_console from './admin-console'; +import demo_app from './demo-app'; + +const translation = { + admin_console, + demo_app, +}; + +export default translation; diff --git a/packages/phrases/src/types.ts b/packages/phrases/src/types.ts index 212e8ecec..5c0041621 100644 --- a/packages/phrases/src/types.ts +++ b/packages/phrases/src/types.ts @@ -10,6 +10,7 @@ export type ResourceKey = string | Record; const languageCodeAndDisplayNameMappings: Record = { en: 'English', fr: 'Français', + 'pt-PT': 'Português', 'zh-CN': '简体中文', 'tr-TR': 'Türkçe', 'ko-KR': '한국어', diff --git a/packages/shared/src/language.ts b/packages/shared/src/language.ts index c89ecbcee..56b7afc03 100644 --- a/packages/shared/src/language.ts +++ b/packages/shared/src/language.ts @@ -1,5 +1,5 @@ import { z } from 'zod'; -export const languageKeys = ['en', 'fr', 'zh-CN', 'tr-TR', 'ko-KR'] as const; +export const languageKeys = ['en', 'fr', 'pt-PT', 'zh-CN', 'tr-TR', 'ko-KR'] as const; export const languageKeyGuard = z.enum(languageKeys); export type LanguageKey = z.infer; diff --git a/packages/ui/src/__mocks__/logto.tsx b/packages/ui/src/__mocks__/logto.tsx index a1acd3fa9..38a4324ba 100644 --- a/packages/ui/src/__mocks__/logto.tsx +++ b/packages/ui/src/__mocks__/logto.tsx @@ -21,12 +21,14 @@ export const socialConnectors = [ logoDark: null, name: { en: 'Sign in with GitHub', + 'pt-PT': 'Entrar com GitHub', 'zh-CN': '使用 GitHub 登录', 'tr-TR': 'Github ile giriş yap', 'ko-KR': 'Github 로그인', }, description: { en: 'Sign in with GitHub', + 'pt-PT': 'Entrar com GitHub', 'zh-CN': '使用 GitHub 登录', 'tr-TR': 'Github ile giriş yap', 'ko-KR': 'Github 로그인', @@ -43,12 +45,14 @@ export const socialConnectors = [ logoDark: null, name: { en: 'Sign in with Alipay', + 'pt-PT': 'Entrar com Alipay', 'zh-CN': '使用 Alipay 登录', 'tr-TR': 'Alipay ile giriş yap', 'ko-KR': 'Alipay 로그인', }, description: { en: 'Sign in with Alipay', + 'pt-PT': 'Entrar com Alipay', 'zh-CN': '使用 Alipay 登录', 'tr-TR': 'Alipay ile giriş yap', 'ko-KR': 'Alipay 로그인', @@ -65,12 +69,14 @@ export const socialConnectors = [ logoDark: null, name: { en: 'Sign in with WeChat', + 'pt-PT': 'Entrar com WeChat', 'zh-CN': '使用 WeChat 登录', 'tr-TR': 'WeChat ile giriş yap', 'ko-KR': 'WeChat 로그인', }, description: { en: 'Sign in with WeChat', + 'pt-PT': 'Entrar com WeChat', 'zh-CN': '使用 WeChat 登录', 'tr-TR': 'WeChat ile giriş yap', 'ko-KR': 'WeChat 로그인', @@ -87,12 +93,14 @@ export const socialConnectors = [ logoDark: null, name: { en: 'Sign in with Google', + 'pt-PT': 'Entrar com Google', 'zh-CN': '使用 Google 登录', 'tr-TR': 'Google ile giriş yap', 'ko-KR': 'Google 로그인', }, description: { en: 'Sign in with Google', + 'pt-PT': 'Entrar com Google', 'zh-CN': '使用 Google 登录', 'tr-TR': 'Google ile giriş yap', 'ko-KR': 'Google 로그인', @@ -109,12 +117,14 @@ export const socialConnectors = [ logoDark: null, name: { en: 'Sign in with Meta', + 'pt-PT': 'Entrar com Facebook', 'zh-CN': '使用 Meta 登录', 'tr-TR': 'Meta ile giriş yap', 'ko-KR': 'Meta 로그인', }, description: { en: 'Sign in with Meta', + 'pt-PT': 'Entrar com Facebook', 'zh-CN': '使用 Meta 登录', 'tr-TR': 'Meta ile giriş yap', 'ko-KR': 'Meta 로그인', @@ -133,12 +143,14 @@ export const mockSocialConnectorData = { logoDark: null, name: { en: 'Sign in with Xxx', + 'pt-PT': 'Entrar com Xxx', 'zh-CN': '使用 Xxx 登录', 'tr-TR': 'Xxx ile giriş yap', 'ko-KR': 'Xxx 로그인', }, description: { en: 'Sign in with Xxx', + 'pt-PT': 'Entrar com Xxx', 'zh-CN': '使用 Xxx 登录', 'tr-TR': 'Xxx ile giriş yap', 'ko-KR': 'Xxx 로그인',