@adonis-agora/authkit-server 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +158 -0
- package/build/assets/grafana/authkit-dashboard.json +118 -0
- package/build/commands/clients_create.d.ts +27 -0
- package/build/commands/clients_create.js +121 -0
- package/build/commands/commands.json +292 -0
- package/build/commands/configure.d.ts +2 -0
- package/build/commands/configure.js +45 -0
- package/build/commands/doctor.d.ts +10 -0
- package/build/commands/doctor.js +113 -0
- package/build/commands/eject.d.ts +11 -0
- package/build/commands/eject.js +96 -0
- package/build/commands/expire_scan.d.ts +28 -0
- package/build/commands/expire_scan.js +92 -0
- package/build/commands/import_users.d.ts +17 -0
- package/build/commands/import_users.js +80 -0
- package/build/commands/keys_rotate.d.ts +21 -0
- package/build/commands/keys_rotate.js +126 -0
- package/build/commands/main.d.ts +12 -0
- package/build/commands/main.js +38 -0
- package/build/commands/settings_get.d.ts +18 -0
- package/build/commands/settings_get.js +43 -0
- package/build/commands/settings_list.d.ts +17 -0
- package/build/commands/settings_list.js +39 -0
- package/build/commands/settings_set.d.ts +20 -0
- package/build/commands/settings_set.js +55 -0
- package/build/commands/settings_unset.d.ts +18 -0
- package/build/commands/settings_unset.js +46 -0
- package/build/commands/ui_preset.d.ts +4 -0
- package/build/commands/ui_preset.js +32 -0
- package/build/database/migrations/make_authkit_oidc_table.d.ts +6 -0
- package/build/database/migrations/make_authkit_oidc_table.js +19 -0
- package/build/host/ui/admin.html +29 -0
- package/build/host/views/account/apps.edge +59 -0
- package/build/host/views/account/confirm.edge +70 -0
- package/build/host/views/account/email-confirmed.edge +16 -0
- package/build/host/views/account/login.edge +33 -0
- package/build/host/views/account/mfa.edge +152 -0
- package/build/host/views/account/orgs.edge +58 -0
- package/build/host/views/account/security.edge +215 -0
- package/build/host/views/account/tokens.edge +75 -0
- package/build/host/views/consent.edge +20 -0
- package/build/host/views/forgot.edge +43 -0
- package/build/host/views/login.edge +251 -0
- package/build/host/views/maintenance.edge +32 -0
- package/build/host/views/mfa-challenge.edge +107 -0
- package/build/host/views/otp-unlock.edge +40 -0
- package/build/host/views/partials/styles.edge +2 -0
- package/build/host/views/reset.edge +30 -0
- package/build/host/views/signup.edge +62 -0
- package/build/host/views/verify-email.edge +17 -0
- package/build/index.d.ts +115 -0
- package/build/index.js +76 -0
- package/build/password/common_passwords.txt +10000 -0
- package/build/providers/authkit_server_provider.d.ts +27 -0
- package/build/providers/authkit_server_provider.js +242 -0
- package/build/src/accounts/account_store.d.ts +578 -0
- package/build/src/accounts/account_store.js +60 -0
- package/build/src/accounts/lucid_account_store.d.ts +156 -0
- package/build/src/accounts/lucid_account_store.js +294 -0
- package/build/src/accounts/lucid_store/core.d.ts +9 -0
- package/build/src/accounts/lucid_store/core.js +306 -0
- package/build/src/accounts/lucid_store/mfa.d.ts +15 -0
- package/build/src/accounts/lucid_store/mfa.js +108 -0
- package/build/src/accounts/lucid_store/organizations.d.ts +13 -0
- package/build/src/accounts/lucid_store/organizations.js +294 -0
- package/build/src/accounts/lucid_store/password_hygiene.d.ts +20 -0
- package/build/src/accounts/lucid_store/password_hygiene.js +130 -0
- package/build/src/accounts/lucid_store/provider_identity.d.ts +8 -0
- package/build/src/accounts/lucid_store/provider_identity.js +59 -0
- package/build/src/accounts/lucid_store/shared.d.ts +113 -0
- package/build/src/accounts/lucid_store/shared.js +130 -0
- package/build/src/accounts/lucid_store/status_profile.d.ts +34 -0
- package/build/src/accounts/lucid_store/status_profile.js +100 -0
- package/build/src/accounts/lucid_store/webauthn.d.ts +8 -0
- package/build/src/accounts/lucid_store/webauthn.js +140 -0
- package/build/src/accounts/lucid_stores.d.ts +45 -0
- package/build/src/accounts/lucid_stores.js +30 -0
- package/build/src/adapters/adapter_contract.d.ts +37 -0
- package/build/src/adapters/adapter_contract.js +1 -0
- package/build/src/adapters/database_adapter.d.ts +21 -0
- package/build/src/adapters/database_adapter.js +79 -0
- package/build/src/adapters/factory.d.ts +30 -0
- package/build/src/adapters/factory.js +43 -0
- package/build/src/adapters/redis_adapter.d.ts +24 -0
- package/build/src/adapters/redis_adapter.js +122 -0
- package/build/src/audit/audit_sink.d.ts +63 -0
- package/build/src/audit/audit_sink.js +1 -0
- package/build/src/audit/lucid_audit_sink.d.ts +10 -0
- package/build/src/audit/lucid_audit_sink.js +99 -0
- package/build/src/commands/expire_scan_command.d.ts +60 -0
- package/build/src/commands/expire_scan_command.js +229 -0
- package/build/src/commands/import_clients.d.ts +40 -0
- package/build/src/commands/import_clients.js +79 -0
- package/build/src/commands/import_users.d.ts +51 -0
- package/build/src/commands/import_users.js +94 -0
- package/build/src/commands/resolve_config.d.ts +13 -0
- package/build/src/commands/resolve_config.js +18 -0
- package/build/src/commands/settings_commands.d.ts +47 -0
- package/build/src/commands/settings_commands.js +270 -0
- package/build/src/controllers/oidc_callback_controller.d.ts +22 -0
- package/build/src/controllers/oidc_callback_controller.js +33 -0
- package/build/src/define_config.d.ts +772 -0
- package/build/src/define_config.js +351 -0
- package/build/src/doctor/checks.d.ts +197 -0
- package/build/src/doctor/checks.js +858 -0
- package/build/src/events/dispatcher.d.ts +45 -0
- package/build/src/events/dispatcher.js +117 -0
- package/build/src/host/account_api/account_api_controller.d.ts +245 -0
- package/build/src/host/account_api/account_api_controller.js +827 -0
- package/build/src/host/account_deletion_ops.d.ts +80 -0
- package/build/src/host/account_deletion_ops.js +118 -0
- package/build/src/host/account_deletion_service.d.ts +63 -0
- package/build/src/host/account_deletion_service.js +133 -0
- package/build/src/host/account_export_service.d.ts +76 -0
- package/build/src/host/account_export_service.js +140 -0
- package/build/src/host/account_home.d.ts +11 -0
- package/build/src/host/account_home.js +11 -0
- package/build/src/host/account_lockout.d.ts +86 -0
- package/build/src/host/account_lockout.js +185 -0
- package/build/src/host/active_org_cookie.d.ts +28 -0
- package/build/src/host/active_org_cookie.js +47 -0
- package/build/src/host/admin_api/admin_api_guard.d.ts +16 -0
- package/build/src/host/admin_api/admin_api_guard.js +59 -0
- package/build/src/host/admin_api/admin_orgs_service.d.ts +125 -0
- package/build/src/host/admin_api/admin_orgs_service.js +324 -0
- package/build/src/host/admin_api/admin_users_service.d.ts +163 -0
- package/build/src/host/admin_api/admin_users_service.js +308 -0
- package/build/src/host/admin_api/api_clients_controller.d.ts +54 -0
- package/build/src/host/admin_api/api_clients_controller.js +89 -0
- package/build/src/host/admin_api/api_keys_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_keys_controller.js +36 -0
- package/build/src/host/admin_api/api_misc_controller.d.ts +19 -0
- package/build/src/host/admin_api/api_misc_controller.js +44 -0
- package/build/src/host/admin_api/api_orgs_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_orgs_controller.js +189 -0
- package/build/src/host/admin_api/api_settings_controller.d.ts +55 -0
- package/build/src/host/admin_api/api_settings_controller.js +134 -0
- package/build/src/host/admin_api/api_users_controller.d.ts +108 -0
- package/build/src/host/admin_api/api_users_controller.js +187 -0
- package/build/src/host/admin_api/dto.d.ts +131 -0
- package/build/src/host/admin_api/dto.js +122 -0
- package/build/src/host/admin_api/token_verify_service.d.ts +34 -0
- package/build/src/host/admin_api/token_verify_service.js +74 -0
- package/build/src/host/admin_clients_service.d.ts +88 -0
- package/build/src/host/admin_clients_service.js +181 -0
- package/build/src/host/admin_console/admin_shell_controller.d.ts +27 -0
- package/build/src/host/admin_console/admin_shell_controller.js +167 -0
- package/build/src/host/admin_console/console_audit_controller.d.ts +17 -0
- package/build/src/host/admin_console/console_audit_controller.js +25 -0
- package/build/src/host/admin_console/console_clients_controller.d.ts +53 -0
- package/build/src/host/admin_console/console_clients_controller.js +102 -0
- package/build/src/host/admin_console/console_impersonation_controller.d.ts +23 -0
- package/build/src/host/admin_console/console_impersonation_controller.js +45 -0
- package/build/src/host/admin_console/console_keys_controller.d.ts +24 -0
- package/build/src/host/admin_console/console_keys_controller.js +41 -0
- package/build/src/host/admin_console/console_orgs_controller.d.ts +96 -0
- package/build/src/host/admin_console/console_orgs_controller.js +238 -0
- package/build/src/host/admin_console/console_overview_controller.d.ts +27 -0
- package/build/src/host/admin_console/console_overview_controller.js +44 -0
- package/build/src/host/admin_console/console_roles_controller.d.ts +31 -0
- package/build/src/host/admin_console/console_roles_controller.js +108 -0
- package/build/src/host/admin_console/console_sessions_controller.d.ts +91 -0
- package/build/src/host/admin_console/console_sessions_controller.js +125 -0
- package/build/src/host/admin_console/console_settings_controller.d.ts +47 -0
- package/build/src/host/admin_console/console_settings_controller.js +115 -0
- package/build/src/host/admin_console/console_users_controller.d.ts +110 -0
- package/build/src/host/admin_console/console_users_controller.js +212 -0
- package/build/src/host/admin_prefix.d.ts +50 -0
- package/build/src/host/admin_prefix.js +77 -0
- package/build/src/host/admin_sessions_service.d.ts +119 -0
- package/build/src/host/admin_sessions_service.js +284 -0
- package/build/src/host/admin_stats_service.d.ts +44 -0
- package/build/src/host/admin_stats_service.js +130 -0
- package/build/src/host/admin_validators.d.ts +247 -0
- package/build/src/host/admin_validators.js +197 -0
- package/build/src/host/augmentations.d.ts +12 -0
- package/build/src/host/augmentations.js +1 -0
- package/build/src/host/auth_host_config.d.ts +22 -0
- package/build/src/host/auth_host_config.js +13 -0
- package/build/src/host/avatar_storage.d.ts +68 -0
- package/build/src/host/avatar_storage.js +166 -0
- package/build/src/host/bot_protection.d.ts +187 -0
- package/build/src/host/bot_protection.js +132 -0
- package/build/src/host/branding.d.ts +19 -0
- package/build/src/host/branding.js +8 -0
- package/build/src/host/config_locks.d.ts +38 -0
- package/build/src/host/config_locks.js +70 -0
- package/build/src/host/console_session.d.ts +27 -0
- package/build/src/host/console_session.js +36 -0
- package/build/src/host/controllers/account_apps_controller.d.ts +15 -0
- package/build/src/host/controllers/account_apps_controller.js +61 -0
- package/build/src/host/controllers/account_confirm_controller.d.ts +24 -0
- package/build/src/host/controllers/account_confirm_controller.js +144 -0
- package/build/src/host/controllers/account_mfa_controller.d.ts +28 -0
- package/build/src/host/controllers/account_mfa_controller.js +208 -0
- package/build/src/host/controllers/account_orgs_controller.d.ts +80 -0
- package/build/src/host/controllers/account_orgs_controller.js +401 -0
- package/build/src/host/controllers/account_security_controller.d.ts +43 -0
- package/build/src/host/controllers/account_security_controller.js +546 -0
- package/build/src/host/controllers/account_session_controller.d.ts +21 -0
- package/build/src/host/controllers/account_session_controller.js +113 -0
- package/build/src/host/controllers/account_tokens_controller.d.ts +7 -0
- package/build/src/host/controllers/account_tokens_controller.js +67 -0
- package/build/src/host/controllers/interaction_controller.d.ts +125 -0
- package/build/src/host/controllers/interaction_controller.js +981 -0
- package/build/src/host/controllers/pat_introspection_controller.d.ts +22 -0
- package/build/src/host/controllers/pat_introspection_controller.js +46 -0
- package/build/src/host/controllers/registration_controller.d.ts +18 -0
- package/build/src/host/controllers/registration_controller.js +382 -0
- package/build/src/host/controllers/social_controller.d.ts +8 -0
- package/build/src/host/controllers/social_controller.js +89 -0
- package/build/src/host/csrf.d.ts +29 -0
- package/build/src/host/csrf.js +14 -0
- package/build/src/host/default_mailer.d.ts +112 -0
- package/build/src/host/default_mailer.js +417 -0
- package/build/src/host/durable/account_deletion_workflow.d.ts +48 -0
- package/build/src/host/durable/account_deletion_workflow.js +86 -0
- package/build/src/host/durable/account_export_workflow.d.ts +68 -0
- package/build/src/host/durable/account_export_workflow.js +93 -0
- package/build/src/host/durable/index.d.ts +68 -0
- package/build/src/host/durable/index.js +77 -0
- package/build/src/host/email_templates.d.ts +39 -0
- package/build/src/host/email_templates.js +69 -0
- package/build/src/host/geo.d.ts +22 -0
- package/build/src/host/geo.js +39 -0
- package/build/src/host/i18n.d.ts +1416 -0
- package/build/src/host/i18n.js +1583 -0
- package/build/src/host/impersonation.d.ts +25 -0
- package/build/src/host/impersonation.js +31 -0
- package/build/src/host/key_rotation.d.ts +14 -0
- package/build/src/host/key_rotation.js +27 -0
- package/build/src/host/key_rotation_actions.d.ts +42 -0
- package/build/src/host/key_rotation_actions.js +27 -0
- package/build/src/host/login_attempt.d.ts +98 -0
- package/build/src/host/login_attempt.js +211 -0
- package/build/src/host/login_notify.d.ts +27 -0
- package/build/src/host/login_notify.js +142 -0
- package/build/src/host/middleware/account_auth.d.ts +7 -0
- package/build/src/host/middleware/account_auth.js +11 -0
- package/build/src/host/otp_lockout.d.ts +103 -0
- package/build/src/host/otp_lockout.js +221 -0
- package/build/src/host/rate_limit.d.ts +39 -0
- package/build/src/host/rate_limit.js +94 -0
- package/build/src/host/register_auth_host.d.ts +97 -0
- package/build/src/host/register_auth_host.js +466 -0
- package/build/src/host/renderers/edge_renderer.d.ts +12 -0
- package/build/src/host/renderers/edge_renderer.js +38 -0
- package/build/src/host/renderers/inertia_renderer.d.ts +70 -0
- package/build/src/host/renderers/inertia_renderer.js +54 -0
- package/build/src/host/runtime_settings.d.ts +181 -0
- package/build/src/host/runtime_settings.js +307 -0
- package/build/src/host/runtime_toggles.d.ts +807 -0
- package/build/src/host/runtime_toggles.js +784 -0
- package/build/src/host/security_notice_service.d.ts +36 -0
- package/build/src/host/security_notice_service.js +87 -0
- package/build/src/host/session_context.d.ts +23 -0
- package/build/src/host/session_context.js +89 -0
- package/build/src/host/sudo_mode.d.ts +56 -0
- package/build/src/host/sudo_mode.js +99 -0
- package/build/src/host/svg_chart.d.ts +15 -0
- package/build/src/host/svg_chart.js +45 -0
- package/build/src/host/trusted_device.d.ts +61 -0
- package/build/src/host/trusted_device.js +65 -0
- package/build/src/host/ui-dist/assets/index-CRWcmsex.js +137 -0
- package/build/src/host/ui-dist/assets/index-DTSmD4RU.css +1 -0
- package/build/src/host/ui-dist/index.html +17 -0
- package/build/src/host/user_agent.d.ts +18 -0
- package/build/src/host/user_agent.js +50 -0
- package/build/src/host/validators.d.ts +127 -0
- package/build/src/host/validators.js +53 -0
- package/build/src/keys/jwks_manager.d.ts +6 -0
- package/build/src/keys/jwks_manager.js +11 -0
- package/build/src/keys/keystore.d.ts +52 -0
- package/build/src/keys/keystore.js +68 -0
- package/build/src/keys/keystore_codec.d.ts +20 -0
- package/build/src/keys/keystore_codec.js +42 -0
- package/build/src/keys/keystore_crypto.d.ts +9 -0
- package/build/src/keys/keystore_crypto.js +27 -0
- package/build/src/keys/keystore_manager.d.ts +43 -0
- package/build/src/keys/keystore_manager.js +104 -0
- package/build/src/keys/keystore_vault.d.ts +113 -0
- package/build/src/keys/keystore_vault.js +265 -0
- package/build/src/mixins/json_column.d.ts +33 -0
- package/build/src/mixins/json_column.js +38 -0
- package/build/src/mixins/with_audit_log.d.ts +19 -0
- package/build/src/mixins/with_audit_log.js +39 -0
- package/build/src/mixins/with_auth_user.d.ts +24 -0
- package/build/src/mixins/with_auth_user.js +46 -0
- package/build/src/mixins/with_credentials.d.ts +20 -0
- package/build/src/mixins/with_credentials.js +29 -0
- package/build/src/mixins/with_mfa.d.ts +35 -0
- package/build/src/mixins/with_mfa.js +21 -0
- package/build/src/mixins/with_personal_access_token.d.ts +19 -0
- package/build/src/mixins/with_personal_access_token.js +42 -0
- package/build/src/mixins/with_provider_identity.d.ts +20 -0
- package/build/src/mixins/with_provider_identity.js +32 -0
- package/build/src/mixins/with_webauthn_credential.d.ts +37 -0
- package/build/src/mixins/with_webauthn_credential.js +46 -0
- package/build/src/observability/diagnostics_bridge.d.ts +6 -0
- package/build/src/observability/diagnostics_bridge.js +27 -0
- package/build/src/observability/metrics_controller.d.ts +5 -0
- package/build/src/observability/metrics_controller.js +24 -0
- package/build/src/observability/metrics_service.d.ts +2 -0
- package/build/src/observability/metrics_service.js +7 -0
- package/build/src/observability/otel_recorder.d.ts +10 -0
- package/build/src/observability/otel_recorder.js +59 -0
- package/build/src/observability/telescope/data_providers.d.ts +24 -0
- package/build/src/observability/telescope/data_providers.js +235 -0
- package/build/src/observability/telescope/extension.d.ts +29 -0
- package/build/src/observability/telescope/extension.js +167 -0
- package/build/src/observability/telescope/index.d.ts +8 -0
- package/build/src/observability/telescope/index.js +8 -0
- package/build/src/observability/wire_provider_events.d.ts +12 -0
- package/build/src/observability/wire_provider_events.js +30 -0
- package/build/src/password/common_passwords.d.ts +31 -0
- package/build/src/password/common_passwords.js +73 -0
- package/build/src/password/password_manager.d.ts +163 -0
- package/build/src/password/password_manager.js +191 -0
- package/build/src/password/policy.d.ts +71 -0
- package/build/src/password/policy.js +55 -0
- package/build/src/password/pwned.d.ts +36 -0
- package/build/src/password/pwned.js +52 -0
- package/build/src/pat/lucid_pat_store.d.ts +6 -0
- package/build/src/pat/lucid_pat_store.js +62 -0
- package/build/src/pat/pat_store.d.ts +31 -0
- package/build/src/pat/pat_store.js +1 -0
- package/build/src/pat/pat_tokens.d.ts +4 -0
- package/build/src/pat/pat_tokens.js +9 -0
- package/build/src/provider/build_provider.d.ts +45 -0
- package/build/src/provider/build_provider.js +219 -0
- package/build/src/provider/device_sources.d.ts +6 -0
- package/build/src/provider/device_sources.js +65 -0
- package/build/src/provider/interaction_actions.d.ts +36 -0
- package/build/src/provider/interaction_actions.js +55 -0
- package/build/src/provider/key_rotation_scheduler.d.ts +28 -0
- package/build/src/provider/key_rotation_scheduler.js +40 -0
- package/build/src/provider/keystore_reload.d.ts +21 -0
- package/build/src/provider/keystore_reload.js +39 -0
- package/build/src/provider/logout_sources.d.ts +13 -0
- package/build/src/provider/logout_sources.js +64 -0
- package/build/src/provider/oidc_service.d.ts +81 -0
- package/build/src/provider/oidc_service.js +254 -0
- package/build/src/provider/single_flight_lock.d.ts +18 -0
- package/build/src/provider/single_flight_lock.js +31 -0
- package/build/src/provider/token_exchange.d.ts +21 -0
- package/build/src/provider/token_exchange.js +124 -0
- package/build/src/register_routes.d.ts +16 -0
- package/build/src/register_routes.js +21 -0
- package/build/src/schema/ensure.d.ts +41 -0
- package/build/src/schema/ensure.js +262 -0
- package/build/stubs/config/authkit.stub +20 -0
- package/build/stubs/config/authkit_react.stub +52 -0
- package/build/stubs/main.d.ts +1 -0
- package/build/stubs/main.js +2 -0
- package/build/stubs/models/auth_user.stub +22 -0
- package/build/stubs/ui/edge/views/consent.edge +13 -0
- package/build/stubs/ui/edge/views/login.edge +19 -0
- package/build/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/build/stubs/ui/react/pages/account/login.tsx +56 -0
- package/build/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/build/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/build/stubs/ui/react/pages/consent.tsx +39 -0
- package/build/stubs/ui/react/pages/forgot.tsx +44 -0
- package/build/stubs/ui/react/pages/login.tsx +171 -0
- package/build/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/build/stubs/ui/react/pages/reset.tsx +58 -0
- package/build/stubs/ui/react/pages/signup.tsx +78 -0
- package/build/stubs/ui/react/pages/verify-email.tsx +24 -0
- package/build/types.d.ts +7 -0
- package/build/types.js +1 -0
- package/package.json +147 -0
- package/stubs/config/authkit.stub +20 -0
- package/stubs/config/authkit_react.stub +52 -0
- package/stubs/main.ts +2 -0
- package/stubs/models/auth_user.stub +22 -0
- package/stubs/ui/edge/views/consent.edge +13 -0
- package/stubs/ui/edge/views/login.edge +19 -0
- package/stubs/ui/react/components/auth_shell.tsx +67 -0
- package/stubs/ui/react/pages/account/login.tsx +56 -0
- package/stubs/ui/react/pages/account/mfa.tsx +132 -0
- package/stubs/ui/react/pages/account/tokens.tsx +88 -0
- package/stubs/ui/react/pages/consent.tsx +39 -0
- package/stubs/ui/react/pages/forgot.tsx +44 -0
- package/stubs/ui/react/pages/login.tsx +171 -0
- package/stubs/ui/react/pages/mfa-challenge.tsx +72 -0
- package/stubs/ui/react/pages/reset.tsx +58 -0
- package/stubs/ui/react/pages/signup.tsx +78 -0
- package/stubs/ui/react/pages/verify-email.tsx +24 -0
|
@@ -0,0 +1,1583 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internacionalização (i18n) das telas do host-kit.
|
|
3
|
+
*
|
|
4
|
+
* Todas as strings visíveis ao usuário das views Edge (e as mensagens de
|
|
5
|
+
* flash/erro produzidas pelos controllers) vivem num catálogo achatado de
|
|
6
|
+
* chaves pontilhadas. O default embutido é inglês (`en`) — os apps continuam
|
|
7
|
+
* funcionando SEM nenhuma configuração. O pt-BR é um locale embutido: basta
|
|
8
|
+
* `i18n: { locale: 'pt-BR' }`. O host também pode sobrescrever chaves pontuais
|
|
9
|
+
* ou fornecer locales inteiros (ex.: `fr`) via `I18nConfig`.
|
|
10
|
+
*/
|
|
11
|
+
/** Locale default do host-kit. */
|
|
12
|
+
export const DEFAULT_LOCALE = "en";
|
|
13
|
+
/**
|
|
14
|
+
* Catálogo default (inglês) — cobre TODAS as strings visíveis ao usuário das
|
|
15
|
+
* views e as mensagens de flash/erro dos controllers. Chaves agrupadas por tela.
|
|
16
|
+
*/
|
|
17
|
+
export const DEFAULT_MESSAGES = {
|
|
18
|
+
// Comum / fallback de marca.
|
|
19
|
+
"common.app_fallback": "Auth",
|
|
20
|
+
"common.brand_eyebrow": "Auth",
|
|
21
|
+
// Tela de login (interaction OIDC: identifier + password).
|
|
22
|
+
"login.page_title": "Login",
|
|
23
|
+
"login.title": "Login",
|
|
24
|
+
"login.identifier_intro": "Enter your email to continue.",
|
|
25
|
+
"login.email_label": "Email",
|
|
26
|
+
"login.identifier_submit": "Continue",
|
|
27
|
+
"login.create_account": "Create account",
|
|
28
|
+
"login.forgot_password": "Forgot password",
|
|
29
|
+
"login.divider_or": "or",
|
|
30
|
+
"login.google": "Sign in with Google",
|
|
31
|
+
"login.greeting": "Hi, {name}",
|
|
32
|
+
"login.switch_account": "Switch account",
|
|
33
|
+
"login.password_label": "Password",
|
|
34
|
+
"login.submit": "Log in",
|
|
35
|
+
// Remember-me (session_policy).
|
|
36
|
+
"login.remember_me": "Keep me signed in",
|
|
37
|
+
// Idle timeout redirect reason.
|
|
38
|
+
"account.login.idle_timeout": "Your session expired due to inactivity. Please sign in again.",
|
|
39
|
+
// Passwordless (login).
|
|
40
|
+
"login.magic_link_button": "Email me a login link",
|
|
41
|
+
"login.magic_link_sent": "If the account exists, we sent you a login link.",
|
|
42
|
+
"login.passkey_button": "Sign in with a passkey",
|
|
43
|
+
// Tela de cadastro (signup).
|
|
44
|
+
"signup.page_title": "Create account",
|
|
45
|
+
"signup.title": "Create account",
|
|
46
|
+
"signup.intro": "Fill in your details to get started.",
|
|
47
|
+
"signup.name_label": "Name",
|
|
48
|
+
"signup.email_label": "Email",
|
|
49
|
+
"signup.password_label": "Password",
|
|
50
|
+
"signup.submit": "Create account",
|
|
51
|
+
"signup.have_account": "I already have an account",
|
|
52
|
+
// Recuperação de senha (forgot).
|
|
53
|
+
"forgot.page_title": "Reset password",
|
|
54
|
+
"forgot.sent_title": "Email sent",
|
|
55
|
+
"forgot.sent_body": "If the email exists, we will send reset instructions.",
|
|
56
|
+
"forgot.title": "Reset password",
|
|
57
|
+
"forgot.intro": "We will send you a link to reset your password.",
|
|
58
|
+
"forgot.email_label": "Email",
|
|
59
|
+
"forgot.submit": "Send link",
|
|
60
|
+
// Redefinição de senha (reset).
|
|
61
|
+
"reset.page_title": "Reset password",
|
|
62
|
+
"reset.done_title": "Password reset",
|
|
63
|
+
"reset.done_body": "You can now log in with your new password.",
|
|
64
|
+
"reset.title": "New password",
|
|
65
|
+
"reset.intro": "Choose a new password for your account.",
|
|
66
|
+
"reset.password_label": "Password",
|
|
67
|
+
"reset.submit": "Reset",
|
|
68
|
+
// Verificação de e-mail (verify-email).
|
|
69
|
+
"verify_email.page_title": "Verify email",
|
|
70
|
+
"verify_email.verified_title": "Email verified",
|
|
71
|
+
"verify_email.verified_body": "Your email was confirmed successfully.",
|
|
72
|
+
"verify_email.invalid_title": "Invalid link",
|
|
73
|
+
"verify_email.invalid_body": "The verification link is invalid or has already been used.",
|
|
74
|
+
// Desafio de MFA no fluxo de login (mfa-challenge).
|
|
75
|
+
"mfa_challenge.page_title": "Two-factor verification",
|
|
76
|
+
"mfa_challenge.title": "Two-factor verification",
|
|
77
|
+
"mfa_challenge.intro": "Open your authenticator app and enter the 6-digit code.",
|
|
78
|
+
"mfa_challenge.code_label": "Code",
|
|
79
|
+
"mfa_challenge.submit": "Verify",
|
|
80
|
+
"mfa_challenge.recovery_summary": "Use a recovery code",
|
|
81
|
+
"mfa_challenge.recovery_submit": "Log in with a recovery code",
|
|
82
|
+
"mfa_challenge.passkey_button": "Use passkey",
|
|
83
|
+
"mfa_challenge.passkey_error": "Could not authenticate with the passkey. Please try again.",
|
|
84
|
+
"mfa_challenge.trust_device": "Trust this device for {days} days",
|
|
85
|
+
// Consent (autorização de cliente OIDC).
|
|
86
|
+
"consent.page_title": "Authorize",
|
|
87
|
+
"consent.title": "Authorize access",
|
|
88
|
+
// `{app}` é interpolado com o nome do app já envolto em <strong> (renderizado
|
|
89
|
+
// raw na view). O nome vem do branding (config-trusted).
|
|
90
|
+
"consent.body": "The app <strong>{app}</strong> wants to access your account.",
|
|
91
|
+
"consent.submit": "Authorize",
|
|
92
|
+
// Console de conta — login (account/login).
|
|
93
|
+
"account.login.page_title": "My account",
|
|
94
|
+
"account.login.title": "My account",
|
|
95
|
+
"account.login.intro": "Manage your access tokens.",
|
|
96
|
+
"account.login.email_label": "Email",
|
|
97
|
+
"account.login.password_label": "Password",
|
|
98
|
+
"account.login.submit": "Log in",
|
|
99
|
+
// Console de conta — tokens (account/tokens).
|
|
100
|
+
"account.tokens.page_title": "Access tokens",
|
|
101
|
+
"account.tokens.title": "Access tokens",
|
|
102
|
+
"account.tokens.logout": "Log out",
|
|
103
|
+
"account.tokens.security": "Security",
|
|
104
|
+
"account.tokens.created_notice": "Token created — copy it now, it will not be shown again:",
|
|
105
|
+
"account.tokens.name_placeholder": "Token name (e.g. CI deploy)",
|
|
106
|
+
"account.tokens.create": "Create",
|
|
107
|
+
"account.tokens.empty": "No tokens yet.",
|
|
108
|
+
"account.tokens.created_at": "Created on {date}",
|
|
109
|
+
"account.tokens.last_used": "· last used {date}",
|
|
110
|
+
"account.tokens.never_used": "· never used",
|
|
111
|
+
"account.tokens.scopes": "Scopes: {scopes}",
|
|
112
|
+
"account.tokens.audience": "Audience: {audience}",
|
|
113
|
+
"account.tokens.revoke": "Revoke",
|
|
114
|
+
// Console de conta — segurança (account/security): senha + e-mail.
|
|
115
|
+
"account.security.page_title": "Account security",
|
|
116
|
+
"account.security.title": "Account security",
|
|
117
|
+
"account.security.logout": "Log out",
|
|
118
|
+
"account.security.current_email": "Current email: {email}",
|
|
119
|
+
"account.security.not_supported": "Changing password and email is not available in this installation.",
|
|
120
|
+
"account.security.password_section": "Change password",
|
|
121
|
+
"account.security.current_password_label": "Current password",
|
|
122
|
+
"account.security.new_password_label": "New password",
|
|
123
|
+
"account.security.change_password_submit": "Change password",
|
|
124
|
+
"account.security.password_changed": "Password changed successfully.",
|
|
125
|
+
"account.security.email_section": "Change email",
|
|
126
|
+
"account.security.email_intro": "We will send a confirmation link to the new address. The change only takes effect after confirmation.",
|
|
127
|
+
"account.security.new_email_label": "New email",
|
|
128
|
+
"account.security.email_password_label": "Current password",
|
|
129
|
+
"account.security.change_email_submit": "Request email change",
|
|
130
|
+
"account.security.email_change_requested": "We sent a confirmation link to {email}. Click it to complete the change.",
|
|
131
|
+
"account.security.email_changed": "Email changed successfully.",
|
|
132
|
+
"account.security.email_change_disabled": "Email change is currently disabled.",
|
|
133
|
+
"account.security.email_change_cancelled": "Email change request cancelled.",
|
|
134
|
+
// Trusted devices (account/security).
|
|
135
|
+
"account.security.trusted_devices_section": "Trusted devices",
|
|
136
|
+
"account.security.trusted_devices_intro": "You can stop trusting this browser so two-factor is required here again. To revoke trust on all devices, re-enroll your authenticator.",
|
|
137
|
+
"account.security.trusted_devices_revoke": "Stop trusting this device",
|
|
138
|
+
"account.security.trusted_devices_revoked": "This device is no longer trusted. Two-factor will be required here again.",
|
|
139
|
+
"account.security.sessions_section": "Active sessions",
|
|
140
|
+
"account.security.sessions_intro": "Devices and locations where your account is currently signed in.",
|
|
141
|
+
"account.security.sessions_empty": "No active sessions.",
|
|
142
|
+
// Console de conta — perfil (seção em account/security).
|
|
143
|
+
"account.profile.section": "Profile",
|
|
144
|
+
"account.profile.intro": "Update your display name and avatar.",
|
|
145
|
+
"account.profile.name_label": "Name",
|
|
146
|
+
"account.profile.avatar_label": "Avatar URL",
|
|
147
|
+
"account.profile.avatar_upload_label": "Upload avatar",
|
|
148
|
+
"account.profile.avatar_upload_hint": "JPG, PNG or WebP, up to 5MB.",
|
|
149
|
+
"account.profile.avatar_invalid_type": "Invalid image type. Use JPG, PNG or WebP.",
|
|
150
|
+
"account.profile.avatar_too_large": "Image is too large.",
|
|
151
|
+
"account.profile.submit": "Save profile",
|
|
152
|
+
"account.profile.updated": "Profile updated successfully.",
|
|
153
|
+
"account.profile.not_supported": "Profile editing is not available in this installation.",
|
|
154
|
+
// Console de conta — exportar dados (portabilidade, LGPD/GDPR).
|
|
155
|
+
"account.export.section": "Export your data",
|
|
156
|
+
"account.export.intro": "Download a copy of your data: profile, linked identities, authorized apps, active sessions, passkeys and your audit history. No secrets or tokens are included.",
|
|
157
|
+
"account.export.submit": "Download my data (JSON)",
|
|
158
|
+
"account.export.requested": "Your data export is being prepared and will be delivered shortly.",
|
|
159
|
+
// Console de conta — deletar conta (danger zone, LGPD/GDPR).
|
|
160
|
+
"account.delete.section": "Delete account",
|
|
161
|
+
"account.delete.intro": "Permanently delete your account and all associated data: sessions, authorized apps, personal access tokens, passkeys, linked identities and two-factor secrets. This cannot be undone.",
|
|
162
|
+
"account.delete.confirm_password_label": "Confirm with your current password",
|
|
163
|
+
"account.delete.confirm_email_label": "Type your email to confirm",
|
|
164
|
+
"account.delete.submit": "Delete my account",
|
|
165
|
+
"account.delete.deleted": "Your account has been permanently deleted.",
|
|
166
|
+
"account.delete.invalid_confirmation": "Confirmation failed. Your account was not deleted.",
|
|
167
|
+
"account.delete.not_supported": "Account deletion is not available in this installation.",
|
|
168
|
+
// Console de conta — apps com acesso (account/apps).
|
|
169
|
+
"account.apps.page_title": "Apps with access",
|
|
170
|
+
"account.apps.title": "Apps with access",
|
|
171
|
+
"account.apps.intro": "Apps you have authorized to access your account.",
|
|
172
|
+
"account.apps.logout": "Log out",
|
|
173
|
+
"account.apps.empty": "No apps have access to your account.",
|
|
174
|
+
"account.apps.tokens": "{accessTokens} access · {refreshTokens} refresh",
|
|
175
|
+
"account.apps.revoke": "Revoke access",
|
|
176
|
+
"account.apps.revoke_confirm": "Revoke this app’s access? It will need to be authorized again and its tokens will stop working.",
|
|
177
|
+
"account.apps.revoked": "Access revoked.",
|
|
178
|
+
"account.apps.not_supported": "The configured OIDC adapter does not support enumeration — listing apps is unavailable.",
|
|
179
|
+
// Console de conta — organizations (account/orgs).
|
|
180
|
+
"account.orgs.page_title": "My Organizations",
|
|
181
|
+
"account.orgs.title": "My Organizations",
|
|
182
|
+
"account.orgs.logout": "Log out",
|
|
183
|
+
"account.orgs.empty": "You are not a member of any organization.",
|
|
184
|
+
"account.orgs.active_badge": "Active",
|
|
185
|
+
"account.orgs.activate": "Set as active",
|
|
186
|
+
"account.orgs.deactivate": "Deactivate",
|
|
187
|
+
"account.orgs.leave": "Leave",
|
|
188
|
+
"account.orgs.leave_last_owner": "Cannot leave — you are the only owner.",
|
|
189
|
+
"account.orgs.create_section": "Create organization",
|
|
190
|
+
"account.orgs.create_name_label": "Name",
|
|
191
|
+
"account.orgs.create_slug_label": "Slug (URL-friendly identifier)",
|
|
192
|
+
"account.orgs.create_submit": "Create organization",
|
|
193
|
+
"account.orgs.created": "Organization created.",
|
|
194
|
+
"account.orgs.activated": "Organization activated.",
|
|
195
|
+
"account.orgs.deactivated": "Organization deactivated.",
|
|
196
|
+
"account.orgs.left": "You left the organization.",
|
|
197
|
+
"account.orgs.not_supported": "Organizations are not available in this installation.",
|
|
198
|
+
"account.orgs.not_member": "You are not a member of this organization.",
|
|
199
|
+
// Invitations section
|
|
200
|
+
"account.orgs.invitations_section": "Pending invitations",
|
|
201
|
+
"account.orgs.invitations_empty": "No pending invitations.",
|
|
202
|
+
"account.orgs.invitation_from": "Invited to {orgName} as {role}",
|
|
203
|
+
"account.orgs.invitation_accept": "Accept",
|
|
204
|
+
"account.orgs.invitation_accepted": "Invitation accepted.",
|
|
205
|
+
"account.orgs.invitation_error": "Could not accept invitation.",
|
|
206
|
+
// Members (for owners/admins)
|
|
207
|
+
"account.orgs.members_section": "Members",
|
|
208
|
+
"account.orgs.invite_section": "Invite by email",
|
|
209
|
+
"account.orgs.invite_email_label": "Email",
|
|
210
|
+
"account.orgs.invite_role_label": "Role",
|
|
211
|
+
"account.orgs.invite_submit": "Send invitation",
|
|
212
|
+
"account.orgs.invited": "Invitation sent.",
|
|
213
|
+
"account.orgs.remove_member": "Remove",
|
|
214
|
+
"account.orgs.member_removed": "Member removed.",
|
|
215
|
+
"account.orgs.change_role": "Change role",
|
|
216
|
+
"account.orgs.role_updated": "Role updated.",
|
|
217
|
+
// Confirmação de troca de e-mail (account/email-confirmed).
|
|
218
|
+
"account.email_confirmed.page_title": "Email confirmation",
|
|
219
|
+
"account.email_confirmed.ok_title": "Email changed",
|
|
220
|
+
"account.email_confirmed.ok_body": "Your new email has been confirmed and is now active.",
|
|
221
|
+
"account.email_confirmed.invalid_title": "Invalid link",
|
|
222
|
+
"account.email_confirmed.invalid_body": "The confirmation link is invalid or has already been used.",
|
|
223
|
+
// Console de conta — MFA (account/mfa).
|
|
224
|
+
"account.mfa.page_title": "Two-factor verification",
|
|
225
|
+
"account.mfa.title": "Two-factor verification",
|
|
226
|
+
"account.mfa.logout": "Log out",
|
|
227
|
+
"account.mfa.recovery_codes_notice": "Save your recovery codes — they will not be shown again:",
|
|
228
|
+
"account.mfa.enroll_intro": "Scan the QR code with your authenticator app (Google Authenticator, 1Password, etc.).",
|
|
229
|
+
"account.mfa.qr_alt": "TOTP QR code",
|
|
230
|
+
"account.mfa.manual_intro": "Or enter it manually:",
|
|
231
|
+
"account.mfa.confirm_code_label": "Confirmation code",
|
|
232
|
+
"account.mfa.activate": "Enable two-factor verification",
|
|
233
|
+
"account.mfa.enabled_html": 'Two-factor verification is <span class="font-semibold text-emerald-700">enabled</span> on this account.',
|
|
234
|
+
"account.mfa.disable": "Disable",
|
|
235
|
+
"account.mfa.disabled_intro": "Two-factor verification is disabled. Enable it to protect your account with an authenticator app.",
|
|
236
|
+
"account.mfa.enable": "Enable two-factor verification",
|
|
237
|
+
// Console de conta — passkeys (WebAuthn) na tela de MFA.
|
|
238
|
+
"mfa.passkey.section_title": "Passkeys",
|
|
239
|
+
"mfa.passkey.section_intro": "Use a passkey (biometrics, device PIN, or security key) as a second factor, without typing codes.",
|
|
240
|
+
"mfa.passkey.add": "Add passkey",
|
|
241
|
+
"mfa.passkey.remove": "Remove",
|
|
242
|
+
"mfa.passkey.empty": "No passkeys registered.",
|
|
243
|
+
"mfa.passkey.unnamed": "Passkey",
|
|
244
|
+
"mfa.passkey.created_at": "Created on {date}",
|
|
245
|
+
"mfa.passkey.register_error": "Could not register the passkey. Please try again.",
|
|
246
|
+
"mfa.passkey.unsupported": "Your browser does not support passkeys.",
|
|
247
|
+
// Console admin (B6) — navegação compartilhada.
|
|
248
|
+
"admin.nav.roles": "Roles",
|
|
249
|
+
"admin.nav.dashboard": "Dashboard",
|
|
250
|
+
"admin.nav.users": "Users",
|
|
251
|
+
"admin.nav.orgs": "Organizations",
|
|
252
|
+
"admin.nav.clients": "Clients",
|
|
253
|
+
"admin.nav.audit": "Audit",
|
|
254
|
+
"admin.nav.settings": "Settings",
|
|
255
|
+
"admin.nav.logout": "Log out",
|
|
256
|
+
// Console admin — dashboard.
|
|
257
|
+
"admin.dashboard.page_title": "Admin dashboard",
|
|
258
|
+
"admin.dashboard.title": "Admin dashboard",
|
|
259
|
+
"admin.dashboard.users_count": "Users",
|
|
260
|
+
"admin.dashboard.clients_count": "Clients",
|
|
261
|
+
"admin.dashboard.audit_count": "Audit events",
|
|
262
|
+
"admin.dashboard.recent_title": "Recent events",
|
|
263
|
+
"admin.dashboard.mau": "Active users (30d)",
|
|
264
|
+
"admin.dashboard.active_sessions": "Active sessions",
|
|
265
|
+
"admin.dashboard.signins_title": "Sign-ins (last {days}d)",
|
|
266
|
+
"admin.dashboard.signups_title": "Sign-ups (last {days}d)",
|
|
267
|
+
// Console admin — usuários.
|
|
268
|
+
"admin.users.page_title": "Users",
|
|
269
|
+
"admin.users.title": "Users",
|
|
270
|
+
"admin.users.search_placeholder": "Search by email",
|
|
271
|
+
"admin.users.search": "Search",
|
|
272
|
+
"admin.users.empty": "No users found.",
|
|
273
|
+
"admin.users.roles_placeholder": "Roles (comma-separated)",
|
|
274
|
+
"admin.users.save_roles": "Save roles",
|
|
275
|
+
"admin.users.sessions": "Sessions",
|
|
276
|
+
"admin.users.create_section": "Create user",
|
|
277
|
+
"admin.users.create_name_placeholder": "Name (optional)",
|
|
278
|
+
"admin.users.create_email_placeholder": "Email",
|
|
279
|
+
"admin.users.create_password_placeholder": "Password (leave blank to send invite)",
|
|
280
|
+
"admin.users.create_submit": "Create user",
|
|
281
|
+
"admin.users.created": "User created.",
|
|
282
|
+
"admin.users.reset_password": "Send password reset",
|
|
283
|
+
"admin.users.reset_sent": "Password reset email sent.",
|
|
284
|
+
"admin.users.disable": "Disable",
|
|
285
|
+
"admin.users.enable": "Enable",
|
|
286
|
+
"admin.users.disabled": "Account disabled.",
|
|
287
|
+
"admin.users.enabled": "Account enabled.",
|
|
288
|
+
"admin.users.deleted": "Account permanently deleted.",
|
|
289
|
+
"admin.users.delete_unsupported": "The account store does not support deleting users.",
|
|
290
|
+
"admin.users.delete": "Delete",
|
|
291
|
+
"admin.users.delete_confirm": "Permanently delete this account and all its data? This cannot be undone.",
|
|
292
|
+
"admin.users.disabled_badge": "Disabled",
|
|
293
|
+
"admin.users.disable_confirm": "Disable this account? The user will not be able to log in.",
|
|
294
|
+
// Console admin — sessões/grants ativos de uma conta.
|
|
295
|
+
"admin.sessions.page_title": "Active sessions",
|
|
296
|
+
"admin.sessions.title": "Active sessions",
|
|
297
|
+
"admin.sessions.account": "Account: {email}",
|
|
298
|
+
"admin.sessions.back": "Back to users",
|
|
299
|
+
"admin.sessions.not_supported": "The configured OIDC adapter does not support enumeration — session inspection is unavailable.",
|
|
300
|
+
"admin.sessions.revoked_notice": "Revoked: {sessions} session(s), {grants} grant(s), {accessTokens} access token(s), {refreshTokens} refresh token(s).",
|
|
301
|
+
"admin.sessions.sessions_section": "Sessions (IdP login)",
|
|
302
|
+
"admin.sessions.sessions_empty": "No active sessions.",
|
|
303
|
+
"admin.sessions.session_login_ts": "Login: {date}",
|
|
304
|
+
"admin.sessions.session_amr": "Methods: {amr}",
|
|
305
|
+
"admin.sessions.session_device": "{browser} on {os}",
|
|
306
|
+
"admin.sessions.session_ip": "IP: {ip}",
|
|
307
|
+
"admin.sessions.session_ip_geo": "IP: {ip} · {location}",
|
|
308
|
+
"admin.sessions.grants_section": "Grants (per-client authorizations)",
|
|
309
|
+
"admin.sessions.grants_empty": "No active grants.",
|
|
310
|
+
"admin.sessions.grant_client": "Client: {clientId}",
|
|
311
|
+
"admin.sessions.grant_tokens": "{accessTokens} access · {refreshTokens} refresh",
|
|
312
|
+
"admin.sessions.revoke_all": "Revoke all sessions and grants",
|
|
313
|
+
"admin.sessions.revoke_confirm": "Revoke all sessions and grants for this account? The user will need to log in again and issued tokens will stop working.",
|
|
314
|
+
// Console admin — impersonation (RFC 8693 token exchange).
|
|
315
|
+
"admin.impersonation.title": "Impersonate this user",
|
|
316
|
+
"admin.impersonation.help": "Token Exchange (RFC 8693) lets an admin act as this user. There is no auth bypass: you exchange YOUR OWN admin access token for one scoped to the target.",
|
|
317
|
+
"admin.impersonation.curl_label": "Ready-to-run request",
|
|
318
|
+
"admin.impersonation.note": "Replace <ADMIN_ACCESS_TOKEN> with a current admin access token. The resulting id_token carries act={sub: admin}; the event is audited as impersonation.started.",
|
|
319
|
+
"admin.impersonation.no_client": 'No client has the token-exchange grant enabled. Add "urn:ietf:params:oauth:grant-type:token-exchange" to a client to enable impersonation.',
|
|
320
|
+
// Console admin — clients.
|
|
321
|
+
"admin.clients.page_title": "OAuth clients",
|
|
322
|
+
"admin.clients.title": "OAuth clients",
|
|
323
|
+
"admin.clients.empty": "No clients configured.",
|
|
324
|
+
"admin.clients.confidential": "Confidential",
|
|
325
|
+
"admin.clients.public": "Public",
|
|
326
|
+
"admin.clients.grants": "Grants: {grants}",
|
|
327
|
+
"admin.clients.redirect_uris": "Redirects: {uris}",
|
|
328
|
+
"admin.clients.dynamic_notice": "Dynamic client registration (RFC 7591) is on — clients registered via /reg are persisted in the adapter and appear in the dynamic section below.",
|
|
329
|
+
"admin.clients.static_section": "Static clients (config)",
|
|
330
|
+
"admin.clients.dynamic_section": "Dynamic clients (adapter)",
|
|
331
|
+
"admin.clients.dynamic_empty": "No dynamic clients persisted.",
|
|
332
|
+
"admin.clients.dynamic_not_supported": "The configured OIDC adapter does not support client enumeration — dynamic management is unavailable.",
|
|
333
|
+
"admin.clients.new": "New client",
|
|
334
|
+
"admin.clients.new_title": "New OIDC client",
|
|
335
|
+
"admin.clients.edit_title": "Edit OIDC client",
|
|
336
|
+
"admin.clients.edit": "Edit",
|
|
337
|
+
"admin.clients.delete": "Delete",
|
|
338
|
+
"admin.clients.delete_confirm": "Delete this client? This action cannot be undone.",
|
|
339
|
+
"admin.clients.regenerate_secret": "Regenerate secret",
|
|
340
|
+
"admin.clients.regenerate_confirm": "Regenerate the secret? The current secret will stop working immediately.",
|
|
341
|
+
"admin.clients.back": "Back",
|
|
342
|
+
"admin.clients.cancel": "Cancel",
|
|
343
|
+
"admin.clients.save": "Save",
|
|
344
|
+
"admin.clients.create": "Create client",
|
|
345
|
+
"admin.clients.secret_once_title": "Save the client_secret now",
|
|
346
|
+
"admin.clients.secret_once_notice": "This is the only time the secret is shown. Copy it now — it cannot be retrieved later.",
|
|
347
|
+
"admin.clients.field_client_id": "Client ID",
|
|
348
|
+
"admin.clients.field_client_id_placeholder": "leave blank to generate automatically",
|
|
349
|
+
"admin.clients.field_client_id_help": "Optional. If empty, a random identifier will be generated.",
|
|
350
|
+
"admin.clients.field_redirect_uris": "Redirect URIs",
|
|
351
|
+
"admin.clients.field_redirect_uris_help": "One URI per line.",
|
|
352
|
+
"admin.clients.field_post_logout_uris": "Post-logout redirect URIs",
|
|
353
|
+
"admin.clients.field_post_logout_uris_help": "One URI per line (optional).",
|
|
354
|
+
"admin.clients.field_grant_types": "Grant types",
|
|
355
|
+
"admin.clients.field_auth_method": "Token endpoint auth method",
|
|
356
|
+
"admin.clients.field_backchannel_uri": "Back-Channel Logout URI (optional)",
|
|
357
|
+
"admin.clients.field_backchannel_uri_help": "OIDC Back-Channel Logout endpoint of the RP. Leave blank if not needed.",
|
|
358
|
+
"admin.clients.field_backchannel_session_required": "Require sid in logout_token",
|
|
359
|
+
"admin.clients.field_backchannel_session_required_help": "When checked, the IdP includes the session ID (sid) in every logout_token sent to this client.",
|
|
360
|
+
"admin.clients.static_deprecated_notice": "These clients are defined statically in config and are deprecated. " +
|
|
361
|
+
"Migrate them to the adapter/DB with:",
|
|
362
|
+
// Console admin — organizations.
|
|
363
|
+
"admin.orgs.page_title": "Organizations",
|
|
364
|
+
"admin.orgs.title": "Organizations",
|
|
365
|
+
"admin.orgs.detail_title": "Organization",
|
|
366
|
+
"admin.orgs.not_supported": "Organizations are not available in this installation.",
|
|
367
|
+
"admin.orgs.empty": "No organizations found.",
|
|
368
|
+
"admin.orgs.create_section": "Create organization",
|
|
369
|
+
"admin.orgs.create_name_placeholder": "Name",
|
|
370
|
+
"admin.orgs.create_slug_placeholder": "Slug (URL-friendly)",
|
|
371
|
+
"admin.orgs.create_submit": "Create organization",
|
|
372
|
+
"admin.orgs.created": "Organization created.",
|
|
373
|
+
"admin.orgs.deleted": "Organization deleted.",
|
|
374
|
+
"admin.orgs.slug_taken": "An organization with this slug already exists.",
|
|
375
|
+
"admin.orgs.invalid_input": "Name, slug and owner account are required.",
|
|
376
|
+
"admin.orgs.view": "View",
|
|
377
|
+
"admin.orgs.delete": "Delete",
|
|
378
|
+
"admin.orgs.delete_confirm": "Permanently delete this organization and all its members/invitations? This cannot be undone.",
|
|
379
|
+
"admin.orgs.back": "Back to organizations",
|
|
380
|
+
"admin.orgs.members_section": "Members",
|
|
381
|
+
"admin.orgs.members_count": "members",
|
|
382
|
+
"admin.orgs.members_empty": "No members.",
|
|
383
|
+
"admin.orgs.add_member_section": "Add member",
|
|
384
|
+
"admin.orgs.select_account": "— Select account —",
|
|
385
|
+
"admin.orgs.add_member_submit": "Add member",
|
|
386
|
+
"admin.orgs.member_added": "Member added.",
|
|
387
|
+
"admin.orgs.member_removed": "Member removed.",
|
|
388
|
+
"admin.orgs.member_add_error": "Could not add member.",
|
|
389
|
+
"admin.orgs.member_remove_error": "Could not remove member.",
|
|
390
|
+
"admin.orgs.member_remove_confirm": "Remove this member?",
|
|
391
|
+
"admin.orgs.remove_member": "Remove",
|
|
392
|
+
"admin.orgs.last_owner": "Cannot remove the last owner.",
|
|
393
|
+
"admin.orgs.invitations_section": "Pending invitations",
|
|
394
|
+
"admin.orgs.expires": "Expires",
|
|
395
|
+
"admin.orgs.revoke_invitation": "Revoke",
|
|
396
|
+
"admin.orgs.invitation_revoked": "Invitation revoked.",
|
|
397
|
+
"admin.orgs.danger_zone": "Danger zone",
|
|
398
|
+
// Console admin — auditoria.
|
|
399
|
+
"admin.audit.page_title": "Audit",
|
|
400
|
+
"admin.audit.title": "Audit log",
|
|
401
|
+
"admin.audit.type_placeholder": "Filter by type",
|
|
402
|
+
"admin.audit.subject_placeholder": "Filter by subject (accountId)",
|
|
403
|
+
"admin.audit.filter": "Filter",
|
|
404
|
+
"admin.audit.empty": "No events found.",
|
|
405
|
+
"admin.audit.not_supported": "The configured audit sink does not support querying.",
|
|
406
|
+
// Console admin — settings (runtime configuration).
|
|
407
|
+
"admin.settings.page_title": "Settings",
|
|
408
|
+
"admin.settings.title": "Settings",
|
|
409
|
+
"admin.settings.bot_protection_section": "Bot protection",
|
|
410
|
+
"admin.settings.bot_protection_intro": "Override the static config at runtime. The `verify` function always comes from config — only on/off and which actions are affected can be changed here.",
|
|
411
|
+
"admin.settings.bot_protection_no_verify": "Bot protection is not configured — add `botProtection.verify` to config/authkit.ts to enable this feature.",
|
|
412
|
+
"admin.settings.no_settings_table": "The `auth_settings` table is not present. To enable runtime settings, create it: `key TEXT PK, value TEXT NOT NULL, updated_at TIMESTAMP, updated_by TEXT`.",
|
|
413
|
+
"admin.settings.enabled_label": "Enabled",
|
|
414
|
+
"admin.settings.actions_label": "Active on",
|
|
415
|
+
"admin.settings.action_login": "Login",
|
|
416
|
+
"admin.settings.action_signup": "Signup",
|
|
417
|
+
"admin.settings.action_reset": "Password reset",
|
|
418
|
+
"admin.settings.save": "Save",
|
|
419
|
+
"admin.settings.saved": "Settings saved.",
|
|
420
|
+
"admin.settings.reset_to_config": "Reset to config",
|
|
421
|
+
"admin.settings.reset_done": "Runtime setting cleared — config is now the source of truth.",
|
|
422
|
+
// Registration setting card.
|
|
423
|
+
"admin.settings.registration_section": "Open registration",
|
|
424
|
+
"admin.settings.registration_intro": "Controls whether new users can self-register (public signup). Admin-created accounts and org invitations are never affected.",
|
|
425
|
+
"admin.settings.registration_from_config": "Source: static config",
|
|
426
|
+
"admin.settings.registration_from_setting": "Source: runtime setting",
|
|
427
|
+
// require_verified_email setting card.
|
|
428
|
+
"admin.settings.require_verified_email_section": "Require verified email",
|
|
429
|
+
"admin.settings.require_verified_email_intro": "When enabled, login is blocked for accounts whose email has not been verified (applies to password, magic link and passkey-first flows). Overrides the static `login.requireVerifiedEmail` config.",
|
|
430
|
+
"admin.settings.require_verified_email_config_note": "Note: overrides `login.requireVerifiedEmail` in config/authkit.ts at runtime.",
|
|
431
|
+
"admin.settings.require_verified_email_from_config": "Source: static config",
|
|
432
|
+
"admin.settings.require_verified_email_from_setting": "Source: runtime setting",
|
|
433
|
+
// Maintenance mode setting card.
|
|
434
|
+
"admin.settings.maintenance_section": "Maintenance mode",
|
|
435
|
+
"admin.settings.maintenance_intro": "When on, login/signup/forgot/interaction screens show a maintenance page and reject POSTs. Existing OIDC tokens (refresh, userinfo, introspection) continue to work. The Admin API and admin console remain accessible.",
|
|
436
|
+
"admin.settings.maintenance_message_label": "Custom message (optional)",
|
|
437
|
+
"admin.settings.maintenance_message_placeholder": "We are performing scheduled maintenance. Please try again later.",
|
|
438
|
+
"admin.settings.maintenance_warning": 'LOCKOUT WARNING: If you enable maintenance mode and lose access to the Admin API, you will not be able to disable it remotely. Accounts with an admin role can still log in — but if you are locked out, use the Admin REST API (PUT /api/authkit/v1/settings/maintenance_mode with {\"value\":{\"enabled\":false}}) to disable it without a browser login.',
|
|
439
|
+
"admin.settings.maintenance_from_setting": "Source: runtime setting",
|
|
440
|
+
// Auth methods setting card (admin console).
|
|
441
|
+
"admin.settings.auth_methods_section": "Authentication methods",
|
|
442
|
+
"admin.settings.auth_methods_intro": "Control which login methods are offered on the login screen at runtime. Disabling all methods activates a fail-safe that restores config defaults.",
|
|
443
|
+
"admin.settings.auth_methods_from_config": "Source: static config",
|
|
444
|
+
"admin.settings.auth_methods_from_setting": "Source: runtime setting",
|
|
445
|
+
"admin.settings.auth_methods_password_label": "Password",
|
|
446
|
+
"admin.settings.auth_methods_magic_link_label": "Magic link (email login link)",
|
|
447
|
+
"admin.settings.auth_methods_passkey_label": "Passkey (passwordless)",
|
|
448
|
+
"admin.settings.auth_methods_forgot_password_label": "Forgot password link",
|
|
449
|
+
"admin.settings.auth_methods_social_section": "Social providers",
|
|
450
|
+
"admin.settings.auth_methods_social_intro": "Only providers configured in the code can be enabled here.",
|
|
451
|
+
"admin.settings.auth_methods_magic_link_unavailable": "Unavailable — requires mail and `passwordless.magicLink` in config.",
|
|
452
|
+
"admin.settings.auth_methods_passkey_unavailable": "Unavailable — requires WebAuthn configured in config.",
|
|
453
|
+
"admin.settings.auth_methods_forgot_disabled_hint": "Automatically disabled when password method is off.",
|
|
454
|
+
"admin.settings.auth_methods_no_social": "No social providers configured in the static config.",
|
|
455
|
+
"admin.settings.auth_methods_passkey_autofill_label": "Enable passkey autofill (conditional mediation — suggests passkeys in the email input)",
|
|
456
|
+
// Generic social provider label (fallback when no specific translation exists).
|
|
457
|
+
"login.social_provider": "Sign in with {provider}",
|
|
458
|
+
// Console admin — paginação compartilhada.
|
|
459
|
+
"admin.pagination.page": "Page {page} of {total}",
|
|
460
|
+
"admin.pagination.prev": "Previous",
|
|
461
|
+
"admin.pagination.next": "Next",
|
|
462
|
+
// Device Authorization Grant (RFC 8628) — telas servidas pelo oidc-provider.
|
|
463
|
+
"device.input.title": "Sign in to the device",
|
|
464
|
+
"device.input.intro": "Enter the code shown on your device.",
|
|
465
|
+
"device.input.submit": "Continue",
|
|
466
|
+
"device.input.error_invalid": "The code you entered is incorrect. Please try again.",
|
|
467
|
+
"device.input.error_aborted": "The login request was aborted.",
|
|
468
|
+
"device.input.error_generic": "An error occurred while processing your request.",
|
|
469
|
+
"device.confirm.title": "Confirm device",
|
|
470
|
+
"device.confirm.body": "The code below should be displayed on your device. Confirm only if you recognize it.",
|
|
471
|
+
"device.confirm.submit": "Continue",
|
|
472
|
+
"device.confirm.abort": "Cancel",
|
|
473
|
+
"device.success.title": "Login complete",
|
|
474
|
+
"device.success.body": "You are signed in. You can return to your device.",
|
|
475
|
+
// RP-initiated logout (end_session) — splash de saída e tela de sucesso.
|
|
476
|
+
"logout.title": "Signing out",
|
|
477
|
+
"logout.body": "Ending your session…",
|
|
478
|
+
"logout.fallback": "Sign out",
|
|
479
|
+
"logout.success.title": "Signed out",
|
|
480
|
+
"logout.success.body": "You have been signed out. See you soon.",
|
|
481
|
+
// Step-up auth (acr_values): cliente exige MFA mas a conta não tem MFA enrolado.
|
|
482
|
+
"mfa_challenge.required_no_enrollment": "This client requires two-factor verification. Set up MFA in your account console to continue.",
|
|
483
|
+
// Mensagens de erro/flash produzidas pelos controllers.
|
|
484
|
+
"errors.invalid_credentials": "Invalid credentials",
|
|
485
|
+
"errors.invalid_code": "Invalid code",
|
|
486
|
+
"errors.account_disabled": "This account has been disabled.",
|
|
487
|
+
"errors.email_unverified": "Please verify your email address before signing in. Check your inbox for the verification link.",
|
|
488
|
+
"errors.email_taken": "Email already registered",
|
|
489
|
+
"errors.signup_failed": "Could not create the account",
|
|
490
|
+
"errors.invalid_or_expired_token": "Invalid or expired token",
|
|
491
|
+
"errors.account_locked": "Account temporarily locked due to too many attempts. Try again in {seconds}s.",
|
|
492
|
+
"errors.otp_locked": "Two-factor authentication has been locked due to too many failed attempts. A recovery link has been sent to your email.",
|
|
493
|
+
"errors.bot_protection_failed": "Bot verification failed. Please try again.",
|
|
494
|
+
"errors.session_expired": "Session expired",
|
|
495
|
+
"errors.challenge_expired": "Challenge expired",
|
|
496
|
+
"errors.passkeys_unavailable": "Passkeys unavailable",
|
|
497
|
+
"errors.no_passkey_registered": "No passkey registered",
|
|
498
|
+
"errors.registration_disabled": "Registration is currently disabled. Please contact the administrator to get access.",
|
|
499
|
+
"errors.not_found": "Not found.",
|
|
500
|
+
// Manutenção do sistema.
|
|
501
|
+
"maintenance.title": "Under Maintenance",
|
|
502
|
+
"maintenance.default_message": "The service is temporarily unavailable for maintenance. Please try again shortly.",
|
|
503
|
+
"maintenance.admin_login_note": "If you are an administrator, you may still log in to manage the system.",
|
|
504
|
+
// Política de senha (validação ao definir uma senha nova) + vazamento (HIBP) + histórico + expiração.
|
|
505
|
+
"password.policy.min_length": "Password must be at least {min} characters long.",
|
|
506
|
+
"password.policy.uppercase": "Password must contain at least one uppercase letter.",
|
|
507
|
+
"password.policy.lowercase": "Password must contain at least one lowercase letter.",
|
|
508
|
+
"password.policy.numbers": "Password must contain at least one number.",
|
|
509
|
+
"password.policy.symbols": "Password must contain at least one symbol.",
|
|
510
|
+
"password.pwned": "This password has appeared in known data breaches. Please choose a different one.",
|
|
511
|
+
"password.common": "This password is too common. Please choose a more unique password.",
|
|
512
|
+
"password.reused": "This password was used recently. Please choose a different one (last {count} passwords are remembered).",
|
|
513
|
+
// Step de troca obrigatória (expiração de senha).
|
|
514
|
+
"login.password_expired_title": "Password expired",
|
|
515
|
+
"login.password_expired_intro": "Your password has expired. Please set a new password to continue.",
|
|
516
|
+
"login.password_expired_new_label": "New password",
|
|
517
|
+
"login.password_expired_submit": "Set new password",
|
|
518
|
+
// Banner de graça de verificação de e-mail.
|
|
519
|
+
"login.email_grace_banner": "Please verify your email. You have {days} day(s) remaining.",
|
|
520
|
+
// Admin settings — password hygiene cards.
|
|
521
|
+
"admin.settings.password_history_section": "Password reuse history",
|
|
522
|
+
"admin.settings.password_history_intro": "Prevents users from reusing recent passwords. Requires the `auth_password_history` table. When enabled, the last N password hashes are stored and checked on every password change.",
|
|
523
|
+
"admin.settings.password_history_count_label": "Password history count",
|
|
524
|
+
"admin.settings.password_history_from_config": "Source: defaults",
|
|
525
|
+
"admin.settings.password_history_from_setting": "Source: runtime setting",
|
|
526
|
+
"admin.settings.password_history_no_table": "The `auth_password_history` table is not present. Create it to enable this feature: `id UUID/SERIAL PK, account_id TEXT NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMP NOT NULL`.",
|
|
527
|
+
"admin.settings.password_expiration_section": "Password expiration",
|
|
528
|
+
"admin.settings.password_expiration_intro": "Forces users to change their password after a set number of days. Requires the `password_changed_at` column in the auth users table.",
|
|
529
|
+
"admin.settings.password_expiration_max_age_label": "Max password age (days)",
|
|
530
|
+
"admin.settings.password_expiration_from_config": "Source: defaults",
|
|
531
|
+
"admin.settings.password_expiration_from_setting": "Source: runtime setting",
|
|
532
|
+
"admin.settings.password_expiration_no_column": "The `password_changed_at` column is not present in the auth users table. Add it (TIMESTAMP NULL) to enable this feature.",
|
|
533
|
+
// Assuntos/corpos de e-mail transacional (default_mailer).
|
|
534
|
+
"mail.common.link_fallback": "If the button does not work, copy and paste this link into your browser:",
|
|
535
|
+
"mail.reset.subject": "Reset your password",
|
|
536
|
+
"mail.reset.heading": "Reset your password",
|
|
537
|
+
"mail.reset.intro": "We received a request to reset the password for your account.",
|
|
538
|
+
"mail.reset.cta": "Reset password",
|
|
539
|
+
"mail.reset.fallback": "If you did not request this, you can ignore this email.",
|
|
540
|
+
"mail.reset.expires": "This link expires in {minutes} minutes.",
|
|
541
|
+
"mail.verify.subject": "Verify your email",
|
|
542
|
+
"mail.verify.heading": "Verify your email",
|
|
543
|
+
"mail.verify.intro": "Confirm your email address to finish setting up your account.",
|
|
544
|
+
"mail.verify.cta": "Verify email",
|
|
545
|
+
"mail.verify.fallback": "If you did not create this account, you can ignore this email.",
|
|
546
|
+
"mail.verify.expires": "This link expires in {minutes} minutes.",
|
|
547
|
+
"mail.magic_link.subject": "Your login link",
|
|
548
|
+
"mail.magic_link.heading": "Sign in to your account",
|
|
549
|
+
"mail.magic_link.intro": "Click the button below to sign in. The link expires shortly and can be used once.",
|
|
550
|
+
"mail.magic_link.cta": "Sign in",
|
|
551
|
+
"mail.magic_link.fallback": "If you did not request this, you can ignore this email.",
|
|
552
|
+
"mail.new_login.subject": "New login to your account",
|
|
553
|
+
"mail.new_login.heading": "New login detected",
|
|
554
|
+
"mail.new_login.intro": "We detected a new login to your account.",
|
|
555
|
+
"mail.new_login.when": "When: {date}",
|
|
556
|
+
"mail.new_login.ip": "IP address: {ip}",
|
|
557
|
+
"mail.new_login.device": "Device: {device}",
|
|
558
|
+
"mail.new_login.fallback": "If this was you, no action is needed. If not, reset your password right away.",
|
|
559
|
+
"mail.email_change.subject": "Confirm your new email",
|
|
560
|
+
"mail.email_change.heading": "Confirm your new email",
|
|
561
|
+
"mail.email_change.intro": "We received a request to change the email address on your account. Confirm the new address below.",
|
|
562
|
+
"mail.email_change.cta": "Confirm new email",
|
|
563
|
+
"mail.email_change.fallback": "If you did not request this, you can ignore this email.",
|
|
564
|
+
"mail.email_change.expires": "This link expires in {minutes} minutes.",
|
|
565
|
+
// E-mail de aviso ao endereço ATUAL quando troca de e-mail é solicitada.
|
|
566
|
+
"mail.email_change_notice.subject": "Email change requested",
|
|
567
|
+
"mail.email_change_notice.heading": "Email change requested",
|
|
568
|
+
"mail.email_change_notice.intro": "A request was made to change the email address on your account to {newEmail}. A confirmation link was sent to the new address.",
|
|
569
|
+
"mail.email_change_notice.cta": "Review account security",
|
|
570
|
+
"mail.email_change_notice.fallback": "If this was not you, your account may be compromised — change your password immediately.",
|
|
571
|
+
// E-mail de confirmação ao endereço ANTIGO após troca concluída.
|
|
572
|
+
"mail.email_changed_completed.subject": "Your email address has been changed",
|
|
573
|
+
"mail.email_changed_completed.heading": "Email address changed",
|
|
574
|
+
"mail.email_changed_completed.intro": "The email address on your account has been changed from {oldEmail} to {newEmail}.",
|
|
575
|
+
"mail.email_changed_completed.cta": "Review account security",
|
|
576
|
+
"mail.email_changed_completed.fallback": "If this was not you, contact support immediately.",
|
|
577
|
+
// E-mails de notificação de segurança (senha alterada, MFA, passkey, e-mail).
|
|
578
|
+
"mail.security_notice.subject": "Security alert: {kind}",
|
|
579
|
+
"mail.security_notice.heading": "Security alert",
|
|
580
|
+
"mail.security_notice.intro": "A security event occurred on your account: {kind}.",
|
|
581
|
+
"mail.security_notice.when": "When: {date}",
|
|
582
|
+
"mail.security_notice.ip": "IP address: {ip}",
|
|
583
|
+
"mail.security_notice.fallback": "If this was you, no action is needed. If not, secure your account immediately.",
|
|
584
|
+
"mail.security_notice.kind_password_changed": "password changed",
|
|
585
|
+
"mail.security_notice.kind_mfa_enabled": "two-factor authentication enabled",
|
|
586
|
+
"mail.security_notice.kind_mfa_disabled": "two-factor authentication disabled",
|
|
587
|
+
"mail.security_notice.kind_passkey_added": "passkey added",
|
|
588
|
+
"mail.security_notice.kind_passkey_removed": "passkey removed",
|
|
589
|
+
"mail.security_notice.kind_email_changed": "email address changed",
|
|
590
|
+
// E-mail de desbloqueio do fator OTP.
|
|
591
|
+
"mail.otp_unlock.subject": "Two-factor authentication unlock",
|
|
592
|
+
"mail.otp_unlock.heading": "Unlock your two-factor authentication",
|
|
593
|
+
"mail.otp_unlock.intro": "Your two-factor authentication factor has been locked due to too many failed attempts. Click the button below to unlock it.",
|
|
594
|
+
"mail.otp_unlock.cta": "Unlock two-factor",
|
|
595
|
+
"mail.otp_unlock.fallback": "If you did not attempt to sign in, your account may be at risk — change your password immediately.",
|
|
596
|
+
// Tela de desbloqueio OTP (/auth/otp-unlock/:token).
|
|
597
|
+
// Sudo mode (confirm identity — /account/confirm).
|
|
598
|
+
"account.confirm.page_title": "Confirm your identity",
|
|
599
|
+
"account.confirm.title": "Confirm your identity",
|
|
600
|
+
"account.confirm.intro": "For security, please confirm your password to continue.",
|
|
601
|
+
"account.confirm.password_label": "Password",
|
|
602
|
+
"account.confirm.submit": "Confirm",
|
|
603
|
+
"account.confirm.passkey_button": "Confirm with passkey",
|
|
604
|
+
"account.confirm.error": "Incorrect password.",
|
|
605
|
+
"account.confirm.passkey_error": "Could not authenticate with the passkey. Please try again.",
|
|
606
|
+
"account.confirm.passwordless_notice": "This account does not have a password. Please add a passkey to use sudo-protected features.",
|
|
607
|
+
// Admin settings — sudo_mode card.
|
|
608
|
+
"admin.settings.sudo_mode_section": "Sudo mode (identity confirmation)",
|
|
609
|
+
"admin.settings.sudo_mode_intro": "When enabled, sensitive actions (password change, email change, account deletion, MFA/passkey management, PAT creation/revocation) require the user to confirm their password. The confirmation is valid for a configurable grace period.",
|
|
610
|
+
"admin.settings.sudo_mode_from_config": "Source: defaults",
|
|
611
|
+
"admin.settings.sudo_mode_from_setting": "Source: runtime setting",
|
|
612
|
+
"admin.settings.sudo_mode_grace_label": "Grace period (minutes)",
|
|
613
|
+
"otp_unlock.page_title": "Two-factor unlock",
|
|
614
|
+
"otp_unlock.ok_title": "Two-factor authentication unlocked",
|
|
615
|
+
"otp_unlock.ok_body": "Your two-factor authentication factor has been unlocked. You can now sign in again.",
|
|
616
|
+
"otp_unlock.login_link": "Back to login",
|
|
617
|
+
"otp_unlock.invalid_title": "Invalid or expired link",
|
|
618
|
+
"otp_unlock.invalid_body": "The unlock link is invalid or has already been used. Request a new one by attempting to sign in again.",
|
|
619
|
+
"otp_unlock.expired_body": "The unlock link has expired. Please sign in again to receive a new link.",
|
|
620
|
+
// Admin settings — otp_lockout card.
|
|
621
|
+
"admin.settings.otp_lockout_section": "OTP factor lockout",
|
|
622
|
+
"admin.settings.otp_lockout_intro": "Locks the TOTP/recovery factor (not the account) after N consecutive failures. Sends an email unlock link. Requires @adonisjs/limiter. Keyed by account ID.",
|
|
623
|
+
"admin.settings.otp_lockout_from_config": "Source: defaults",
|
|
624
|
+
"admin.settings.otp_lockout_from_setting": "Source: runtime setting",
|
|
625
|
+
"admin.settings.otp_lockout_max_attempts_label": "Max failed attempts before lockout",
|
|
626
|
+
"admin.settings.otp_lockout_unlock_ttl_label": "Unlock token TTL (hours)",
|
|
627
|
+
// Admin settings — email_change card.
|
|
628
|
+
"admin.settings.email_change_section": "Email change",
|
|
629
|
+
"admin.settings.email_change_intro": "Controls the verified email-change flow. When enabled, users can request an email change from /account/security; a confirmation link is sent to the new address and a security notice to the current one.",
|
|
630
|
+
"admin.settings.email_change_ttl_label": "Token TTL (hours)",
|
|
631
|
+
"admin.settings.email_change_require_password_label": "Require current password",
|
|
632
|
+
"admin.settings.email_change_from_config": "Source: defaults",
|
|
633
|
+
"admin.settings.email_change_from_setting": "Source: runtime setting",
|
|
634
|
+
// Admin settings — security_notifications card.
|
|
635
|
+
"admin.settings.security_notifications_section": "Security notifications",
|
|
636
|
+
"admin.settings.security_notifications_intro": "Sends an email alert to the account when security-sensitive events occur (password change, MFA on/off, passkey add/remove, email change). Each kind can be toggled individually.",
|
|
637
|
+
"admin.settings.security_notifications_kinds_label": "Notify on",
|
|
638
|
+
"admin.settings.security_notifications_from_config": "Source: defaults",
|
|
639
|
+
"admin.settings.security_notifications_from_setting": "Source: runtime setting",
|
|
640
|
+
"admin.settings.security_notifications_kind_password_changed": "Password changed",
|
|
641
|
+
"admin.settings.security_notifications_kind_mfa_enabled": "MFA enabled",
|
|
642
|
+
"admin.settings.security_notifications_kind_mfa_disabled": "MFA disabled",
|
|
643
|
+
"admin.settings.security_notifications_kind_passkey_added": "Passkey added",
|
|
644
|
+
"admin.settings.security_notifications_kind_passkey_removed": "Passkey removed",
|
|
645
|
+
"admin.settings.security_notifications_kind_email_changed": "Email changed",
|
|
646
|
+
// Admin settings — session_policy card.
|
|
647
|
+
"admin.settings.session_policy_section": "Session policy",
|
|
648
|
+
"admin.settings.session_policy_intro": 'Controls session lifetime and single-session enforcement. "Remember me" lets users opt into a longer session. Single session revokes all other active OIDC sessions on login. Idle timeout ends the account-console session after inactivity (OIDC tokens are unaffected).',
|
|
649
|
+
"admin.settings.session_policy_from_config": "Source: defaults",
|
|
650
|
+
"admin.settings.session_policy_from_setting": "Source: runtime setting",
|
|
651
|
+
"admin.settings.session_policy_remember_enabled_label": 'Show "Keep me signed in" checkbox',
|
|
652
|
+
"admin.settings.session_policy_remember_days_label": "Remember-me duration (days)",
|
|
653
|
+
"admin.settings.session_policy_remember_days_hint": "Duration of the persistent OIDC session when the checkbox is checked.",
|
|
654
|
+
"admin.settings.session_policy_default_hours_label": "Default session duration (hours)",
|
|
655
|
+
"admin.settings.session_policy_default_hours_hint": "Max duration of a transient session (checkbox unchecked or disabled). Derived from config.ttl.session when not set.",
|
|
656
|
+
"admin.settings.session_policy_single_session_label": "Single active session per account",
|
|
657
|
+
"admin.settings.session_policy_single_session_hint": "When enabled, signing in revokes all other active OIDC sessions for the account. Tokens issued in prior sessions become invalid.",
|
|
658
|
+
"admin.settings.session_policy_idle_timeout_label": "Account-console idle timeout (minutes, 0 = off)",
|
|
659
|
+
"admin.settings.session_policy_idle_timeout_hint": "Ends the account-console session after this many minutes of inactivity. Does not affect OIDC sessions or tokens.",
|
|
660
|
+
"admin.settings.session_policy_idle_warn": "Idle timeout warning: idleTimeoutMinutes exceeds defaultSessionHours. The idle timeout will never trigger.",
|
|
661
|
+
"admin.settings.session_policy_remember_days_warn": "Remember-me days exceeds 365. This is unusually long.",
|
|
662
|
+
// Admin settings — section headers.
|
|
663
|
+
"admin.settings.section_authentication": "Authentication",
|
|
664
|
+
"admin.settings.section_security": "Security",
|
|
665
|
+
"admin.settings.section_sessions": "Sessions",
|
|
666
|
+
"admin.settings.section_communications": "Communications",
|
|
667
|
+
"admin.settings.section_advanced": "Advanced",
|
|
668
|
+
// Admin settings — lockout card.
|
|
669
|
+
"admin.settings.lockout_section": "Account lockout",
|
|
670
|
+
"admin.settings.lockout_intro": "Progressive account lockout (anti-brute-force keyed per email). Requires @adonisjs/limiter. Policy fields are now managed here; the `store` remains in the static config.",
|
|
671
|
+
"admin.settings.lockout_from_config": "Source: static config / defaults",
|
|
672
|
+
"admin.settings.lockout_from_setting": "Source: runtime setting",
|
|
673
|
+
"admin.settings.lockout_max_attempts_label": "Max attempts before lockout",
|
|
674
|
+
"admin.settings.lockout_window_sec_label": "Sliding window (seconds)",
|
|
675
|
+
"admin.settings.lockout_base_lockout_sec_label": "Base lockout duration (seconds)",
|
|
676
|
+
"admin.settings.lockout_max_lockout_sec_label": "Max lockout duration (seconds)",
|
|
677
|
+
// Admin settings — rate_limit card.
|
|
678
|
+
"admin.settings.rate_limit_section": "Rate limit",
|
|
679
|
+
"admin.settings.rate_limit_intro": "Rate-limit buckets for login/signup/forgot/reset (per IP) and PAT introspection. NOTE: the route throttle middleware uses boot-time values; this setting only affects lockout-side logic at runtime. Reconfigure and restart for full effect on the route middleware.",
|
|
680
|
+
"admin.settings.rate_limit_from_config": "Source: static config / defaults",
|
|
681
|
+
"admin.settings.rate_limit_from_setting": "Source: runtime setting",
|
|
682
|
+
"admin.settings.rate_limit_login_points_label": "Login bucket: requests allowed",
|
|
683
|
+
"admin.settings.rate_limit_login_duration_label": 'Login bucket: window duration (e.g. "1 min")',
|
|
684
|
+
"admin.settings.rate_limit_introspection_points_label": "Introspection bucket: requests allowed",
|
|
685
|
+
"admin.settings.rate_limit_introspection_duration_label": "Introspection bucket: window duration",
|
|
686
|
+
"admin.settings.rate_limit_limitation_note": "LIMITATION: route-level throttle middleware uses boot-time config. This setting affects lockout logic only at runtime.",
|
|
687
|
+
// Admin settings — password_policy card.
|
|
688
|
+
"admin.settings.password_policy_section": "Password policy",
|
|
689
|
+
"admin.settings.password_policy_intro": "Complexity requirements for new passwords. checkPwned checks passwords against HaveIBeenPwned (k-anonymity, fail-safe). Fields were previously in the store config; managing them here avoids redeploy.",
|
|
690
|
+
"admin.settings.password_policy_from_config": "Source: static config / defaults",
|
|
691
|
+
"admin.settings.password_policy_from_setting": "Source: runtime setting",
|
|
692
|
+
"admin.settings.password_policy_min_length_label": "Minimum length",
|
|
693
|
+
"admin.settings.password_policy_require_uppercase_label": "Require uppercase letter",
|
|
694
|
+
"admin.settings.password_policy_require_lowercase_label": "Require lowercase letter",
|
|
695
|
+
"admin.settings.password_policy_require_numbers_label": "Require number",
|
|
696
|
+
"admin.settings.password_policy_require_symbols_label": "Require symbol",
|
|
697
|
+
"admin.settings.password_policy_check_pwned_label": "Check against HaveIBeenPwned (k-anonymity, fail-safe)",
|
|
698
|
+
"admin.settings.password_policy_block_common_label": "Block common passwords (offline list of ~10 000 most-used passwords, case-insensitive)",
|
|
699
|
+
// Admin settings — notifications card.
|
|
700
|
+
"admin.settings.notifications_section": "Login notifications",
|
|
701
|
+
"admin.settings.notifications_intro": "Email alerts for new logins (new IP) and new device logins (no trusted-device cookie). Best-effort, fire-and-forget.",
|
|
702
|
+
"admin.settings.notifications_from_config": "Source: static config / defaults",
|
|
703
|
+
"admin.settings.notifications_from_setting": "Source: runtime setting",
|
|
704
|
+
"admin.settings.notifications_new_login_label": "Send new login alert (new IP)",
|
|
705
|
+
"admin.settings.notifications_new_device_label": "Send new device login alert",
|
|
706
|
+
// Admin settings — trusted_devices card.
|
|
707
|
+
"admin.settings.trusted_devices_section": "Trusted devices (skip MFA)",
|
|
708
|
+
"admin.settings.trusted_devices_intro": "When enabled, an encrypted cookie marks a device as trusted for N days after MFA verification. Step-up (acr_values) always bypasses this. Cookie name and secrets remain in the static config.",
|
|
709
|
+
"admin.settings.trusted_devices_from_config": "Source: static config / defaults",
|
|
710
|
+
"admin.settings.trusted_devices_from_setting": "Source: runtime setting",
|
|
711
|
+
"admin.settings.trusted_devices_days_label": "Trust duration (days)",
|
|
712
|
+
// Admin settings — token_ttl card.
|
|
713
|
+
"admin.settings.token_ttl_section": "Token TTL",
|
|
714
|
+
"admin.settings.token_ttl_intro": "Lifetime of OIDC tokens. Changes take effect immediately via a mutable holder (no redeploy needed). Session TTL is managed via Session policy. Seconds.",
|
|
715
|
+
"admin.settings.token_ttl_from_config": "Source: static config / defaults",
|
|
716
|
+
"admin.settings.token_ttl_from_setting": "Source: runtime setting",
|
|
717
|
+
"admin.settings.token_ttl_access_token_label": "Access token TTL (seconds)",
|
|
718
|
+
"admin.settings.token_ttl_id_token_label": "ID token TTL (seconds)",
|
|
719
|
+
"admin.settings.token_ttl_refresh_token_label": "Refresh token TTL (seconds)",
|
|
720
|
+
// Admin settings — admin_impersonation card.
|
|
721
|
+
"admin.settings.admin_impersonation_section": "Admin impersonation",
|
|
722
|
+
"admin.settings.admin_impersonation_intro": "Shows the impersonation panel (RFC 8693 token exchange) on the user page in the admin console. NOT a bypass of auth — the exchange requires an admin access token. Toggle without redeploy.",
|
|
723
|
+
"admin.settings.admin_impersonation_from_config": "Source: static config / defaults",
|
|
724
|
+
"admin.settings.admin_impersonation_from_setting": "Source: runtime setting",
|
|
725
|
+
// Admin settings — organizations_policy card.
|
|
726
|
+
"admin.settings.organizations_policy_section": "Organizations policy",
|
|
727
|
+
"admin.settings.organizations_policy_intro": "Runtime policy for multi-tenancy organizations. The `owner` role is always present (governance invariant). Whether organizations are enabled is determined by capability-probing (table presence) and the static config.",
|
|
728
|
+
"admin.settings.organizations_policy_from_config": "Source: static config / defaults",
|
|
729
|
+
"admin.settings.organizations_policy_from_setting": "Source: runtime setting",
|
|
730
|
+
"admin.settings.organizations_policy_allow_self_create_label": "Allow users to self-create organizations",
|
|
731
|
+
"admin.settings.organizations_policy_invitation_ttl_label": "Invitation TTL (hours)",
|
|
732
|
+
"admin.settings.organizations_policy_roles_label": "Available roles (comma-separated, owner always included)",
|
|
733
|
+
// Console admin — roles catalog (admin/roles).
|
|
734
|
+
"admin.roles.page_title": "Roles catalog",
|
|
735
|
+
"admin.roles.title": "Roles catalog",
|
|
736
|
+
"admin.roles.create_section": "Create role",
|
|
737
|
+
"admin.roles.create_intro": "Role names must be uppercase letters and underscores only (e.g. EDITOR, CONTENT_MANAGER). The ADMIN role is always present and cannot be removed.",
|
|
738
|
+
"admin.roles.name_placeholder": "ROLE_NAME",
|
|
739
|
+
"admin.roles.name_pattern_hint": "Uppercase letters, digits and underscores only. Must start with a letter.",
|
|
740
|
+
"admin.roles.description_placeholder": "Description (optional)",
|
|
741
|
+
"admin.roles.create_submit": "Create role",
|
|
742
|
+
"admin.roles.empty": "No roles in the catalog.",
|
|
743
|
+
"admin.roles.protected_badge": "Protected",
|
|
744
|
+
"admin.roles.save_description": "Save",
|
|
745
|
+
"admin.roles.delete": "Remove",
|
|
746
|
+
"admin.roles.delete_confirm": "Remove role {name} from the catalog? Users who have this role will keep it — it will just no longer appear in the catalog for new assignments.",
|
|
747
|
+
"admin.roles.delete_note": "Removing a role from the catalog does NOT remove it from users who already have it. Use the user page to update individual user roles.",
|
|
748
|
+
"admin.roles.created": "Role created.",
|
|
749
|
+
"admin.roles.updated": "Role description updated.",
|
|
750
|
+
"admin.roles.deleted": "Role removed from catalog.",
|
|
751
|
+
"admin.roles.name_invalid": "Invalid role name. Use uppercase letters, digits and underscores only, starting with a letter (e.g. EDITOR, CONTENT_MANAGER).",
|
|
752
|
+
"admin.roles.name_taken": "A role with this name already exists in the catalog.",
|
|
753
|
+
"admin.roles.admin_protected": "The ADMIN role cannot be removed — it is the gate for the admin console.",
|
|
754
|
+
"admin.roles.no_settings_table": "The `auth_settings` table is not present. The roles catalog requires runtime settings — create the table first.",
|
|
755
|
+
"admin.roles.unknown_role": "One or more selected roles are not in the catalog. Manage the catalog at /admin/roles.",
|
|
756
|
+
// Console admin — users: roles section (updated UI keys).
|
|
757
|
+
"admin.users.roles_section": "Global roles",
|
|
758
|
+
"admin.users.out_of_catalog_label": "Roles outside catalog:",
|
|
759
|
+
"admin.users.out_of_catalog_badge": "out of catalog",
|
|
760
|
+
// Account expiration — login error.
|
|
761
|
+
"errors.account_expired": "Your account has been deactivated due to inactivity. To reactivate it, reset your password.",
|
|
762
|
+
// Admin settings — account_expiration card.
|
|
763
|
+
"admin.settings.account_expiration_section": "Account inactivity expiration",
|
|
764
|
+
"admin.settings.account_expiration_intro": 'Blocks login for accounts inactive for more than N days (measured by last successful login in the audit log). Requires a queryable audit sink (list capability). Reactivation: user resets their password. No new columns — "last activity" is read from audit.',
|
|
765
|
+
"admin.settings.account_expiration_from_config": "Source: defaults",
|
|
766
|
+
"admin.settings.account_expiration_from_setting": "Source: runtime setting",
|
|
767
|
+
"admin.settings.account_expiration_inactive_days_label": "Inactivity threshold (days)",
|
|
768
|
+
"admin.settings.account_expiration_warn_days_label": "Warn N days before expiry (0 = off)",
|
|
769
|
+
"admin.settings.account_expiration_no_audit": "Queryable audit sink not available. Account expiration requires an audit sink that implements the `list` method (e.g. lucidAuditSink). Enable audit first.",
|
|
770
|
+
// E-mail de aviso de expiração de conta iminente.
|
|
771
|
+
"mail.account_expiration_warn.subject": "Your account will be deactivated due to inactivity",
|
|
772
|
+
"mail.account_expiration_warn.heading": "Account inactivity notice",
|
|
773
|
+
"mail.account_expiration_warn.intro": "Your account will be deactivated in {days} day(s) due to inactivity. Sign in to keep your account active.",
|
|
774
|
+
"mail.account_expiration_warn.cta": "Sign in now",
|
|
775
|
+
"mail.account_expiration_warn.fallback": "If you no longer use this account, you can ignore this email.",
|
|
776
|
+
};
|
|
777
|
+
/**
|
|
778
|
+
* Catálogo embutido pt-BR. Espelha TODAS as chaves do default `en`. Ativado
|
|
779
|
+
* com `i18n: { locale: 'pt-BR' }` sem nenhuma config extra de mensagens.
|
|
780
|
+
*/
|
|
781
|
+
export const PT_BR_MESSAGES = {
|
|
782
|
+
// Comum / fallback de marca.
|
|
783
|
+
"common.app_fallback": "Auth",
|
|
784
|
+
"common.brand_eyebrow": "Auth",
|
|
785
|
+
// Tela de login (interaction OIDC: identifier + password).
|
|
786
|
+
"login.page_title": "Entrar",
|
|
787
|
+
"login.title": "Entrar",
|
|
788
|
+
"login.identifier_intro": "Informe seu e-mail para continuar.",
|
|
789
|
+
"login.email_label": "E-mail",
|
|
790
|
+
"login.identifier_submit": "Continuar",
|
|
791
|
+
"login.create_account": "Criar conta",
|
|
792
|
+
"login.forgot_password": "Esqueci a senha",
|
|
793
|
+
"login.divider_or": "ou",
|
|
794
|
+
"login.google": "Entrar com Google",
|
|
795
|
+
"login.greeting": "Olá, {name}",
|
|
796
|
+
"login.switch_account": "Trocar de conta",
|
|
797
|
+
"login.password_label": "Senha",
|
|
798
|
+
"login.submit": "Entrar",
|
|
799
|
+
// Remember-me (session_policy).
|
|
800
|
+
"login.remember_me": "Manter conectado",
|
|
801
|
+
// Idle timeout redirect reason.
|
|
802
|
+
"account.login.idle_timeout": "Sua sessão expirou por inatividade. Por favor, entre novamente.",
|
|
803
|
+
// Passwordless (login).
|
|
804
|
+
"login.magic_link_button": "Me envie um link de login",
|
|
805
|
+
"login.magic_link_sent": "Se a conta existir, enviamos um link de login.",
|
|
806
|
+
"login.passkey_button": "Entrar com passkey",
|
|
807
|
+
// Tela de cadastro (signup).
|
|
808
|
+
"signup.page_title": "Criar conta",
|
|
809
|
+
"signup.title": "Criar conta",
|
|
810
|
+
"signup.intro": "Preencha seus dados para começar.",
|
|
811
|
+
"signup.name_label": "Nome",
|
|
812
|
+
"signup.email_label": "E-mail",
|
|
813
|
+
"signup.password_label": "Senha",
|
|
814
|
+
"signup.submit": "Criar conta",
|
|
815
|
+
"signup.have_account": "Já tenho conta",
|
|
816
|
+
// Recuperação de senha (forgot).
|
|
817
|
+
"forgot.page_title": "Recuperar senha",
|
|
818
|
+
"forgot.sent_title": "E-mail enviado",
|
|
819
|
+
"forgot.sent_body": "Se o e-mail existir, enviaremos instruções de redefinição.",
|
|
820
|
+
"forgot.title": "Recuperar senha",
|
|
821
|
+
"forgot.intro": "Enviaremos um link para redefinir sua senha.",
|
|
822
|
+
"forgot.email_label": "E-mail",
|
|
823
|
+
"forgot.submit": "Enviar link",
|
|
824
|
+
// Redefinição de senha (reset).
|
|
825
|
+
"reset.page_title": "Redefinir senha",
|
|
826
|
+
"reset.done_title": "Senha redefinida",
|
|
827
|
+
"reset.done_body": "Você já pode entrar com a nova senha.",
|
|
828
|
+
"reset.title": "Nova senha",
|
|
829
|
+
"reset.intro": "Escolha uma nova senha para sua conta.",
|
|
830
|
+
"reset.password_label": "Senha",
|
|
831
|
+
"reset.submit": "Redefinir",
|
|
832
|
+
// Verificação de e-mail (verify-email).
|
|
833
|
+
"verify_email.page_title": "Verificar e-mail",
|
|
834
|
+
"verify_email.verified_title": "E-mail verificado",
|
|
835
|
+
"verify_email.verified_body": "Seu e-mail foi confirmado com sucesso.",
|
|
836
|
+
"verify_email.invalid_title": "Link inválido",
|
|
837
|
+
"verify_email.invalid_body": "O link de verificação é inválido ou já foi utilizado.",
|
|
838
|
+
// Desafio de MFA no fluxo de login (mfa-challenge).
|
|
839
|
+
"mfa_challenge.page_title": "Verificação em duas etapas",
|
|
840
|
+
"mfa_challenge.title": "Verificação em duas etapas",
|
|
841
|
+
"mfa_challenge.intro": "Abra seu app autenticador e informe o código de 6 dígitos.",
|
|
842
|
+
"mfa_challenge.code_label": "Código",
|
|
843
|
+
"mfa_challenge.submit": "Verificar",
|
|
844
|
+
"mfa_challenge.recovery_summary": "Usar um código de recuperação",
|
|
845
|
+
"mfa_challenge.recovery_submit": "Entrar com código de recuperação",
|
|
846
|
+
"mfa_challenge.passkey_button": "Usar passkey",
|
|
847
|
+
"mfa_challenge.passkey_error": "Não foi possível autenticar com a passkey. Tente novamente.",
|
|
848
|
+
"mfa_challenge.trust_device": "Confiar neste dispositivo por {days} dias",
|
|
849
|
+
// Consent (autorização de cliente OIDC).
|
|
850
|
+
"consent.page_title": "Autorizar",
|
|
851
|
+
"consent.title": "Autorizar acesso",
|
|
852
|
+
"consent.body": "O app <strong>{app}</strong> quer acessar sua conta.",
|
|
853
|
+
"consent.submit": "Autorizar",
|
|
854
|
+
// Console de conta — login (account/login).
|
|
855
|
+
"account.login.page_title": "Minha conta",
|
|
856
|
+
"account.login.title": "Minha conta",
|
|
857
|
+
"account.login.intro": "Gerencie seus tokens de acesso.",
|
|
858
|
+
"account.login.email_label": "E-mail",
|
|
859
|
+
"account.login.password_label": "Senha",
|
|
860
|
+
"account.login.submit": "Entrar",
|
|
861
|
+
// Console de conta — tokens (account/tokens).
|
|
862
|
+
"account.tokens.page_title": "Tokens de acesso",
|
|
863
|
+
"account.tokens.title": "Tokens de acesso",
|
|
864
|
+
"account.tokens.logout": "Sair",
|
|
865
|
+
"account.tokens.security": "Segurança",
|
|
866
|
+
"account.tokens.created_notice": "Token criado — copie agora, não será mostrado de novo:",
|
|
867
|
+
"account.tokens.name_placeholder": "Nome do token (ex.: CI deploy)",
|
|
868
|
+
"account.tokens.create": "Criar",
|
|
869
|
+
"account.tokens.empty": "Nenhum token ainda.",
|
|
870
|
+
"account.tokens.created_at": "Criado em {date}",
|
|
871
|
+
"account.tokens.last_used": "· último uso {date}",
|
|
872
|
+
"account.tokens.never_used": "· nunca usado",
|
|
873
|
+
"account.tokens.scopes": "Escopos: {scopes}",
|
|
874
|
+
"account.tokens.audience": "Audiência: {audience}",
|
|
875
|
+
"account.tokens.revoke": "Revogar",
|
|
876
|
+
// Console de conta — segurança (account/security): senha + e-mail.
|
|
877
|
+
"account.security.page_title": "Segurança da conta",
|
|
878
|
+
"account.security.title": "Segurança da conta",
|
|
879
|
+
"account.security.logout": "Sair",
|
|
880
|
+
"account.security.current_email": "E-mail atual: {email}",
|
|
881
|
+
"account.security.not_supported": "A troca de senha e e-mail não está disponível nesta instalação.",
|
|
882
|
+
"account.security.password_section": "Trocar senha",
|
|
883
|
+
"account.security.current_password_label": "Senha atual",
|
|
884
|
+
"account.security.new_password_label": "Nova senha",
|
|
885
|
+
"account.security.change_password_submit": "Trocar senha",
|
|
886
|
+
"account.security.password_changed": "Senha alterada com sucesso.",
|
|
887
|
+
"account.security.email_section": "Trocar e-mail",
|
|
888
|
+
"account.security.email_intro": "Enviaremos um link de confirmação para o novo endereço. A troca só é aplicada após a confirmação.",
|
|
889
|
+
"account.security.new_email_label": "Novo e-mail",
|
|
890
|
+
"account.security.email_password_label": "Senha atual",
|
|
891
|
+
"account.security.change_email_submit": "Solicitar troca de e-mail",
|
|
892
|
+
"account.security.email_change_requested": "Enviamos um link de confirmação para {email}. Clique nele para concluir a troca.",
|
|
893
|
+
"account.security.email_changed": "E-mail alterado com sucesso.",
|
|
894
|
+
"account.security.email_change_disabled": "A troca de e-mail está desabilitada no momento.",
|
|
895
|
+
"account.security.email_change_cancelled": "Solicitação de troca de e-mail cancelada.",
|
|
896
|
+
// Trusted devices (account/security).
|
|
897
|
+
"account.security.trusted_devices_section": "Dispositivos confiáveis",
|
|
898
|
+
"account.security.trusted_devices_intro": "Você pode deixar de confiar neste navegador para que a verificação em duas etapas volte a ser exigida aqui. Para revogar a confiança em todos os dispositivos, refaça o cadastro do seu autenticador.",
|
|
899
|
+
"account.security.trusted_devices_revoke": "Deixar de confiar neste dispositivo",
|
|
900
|
+
"account.security.trusted_devices_revoked": "Este dispositivo não é mais confiável. A verificação em duas etapas voltará a ser exigida aqui.",
|
|
901
|
+
"account.security.sessions_section": "Sessões ativas",
|
|
902
|
+
"account.security.sessions_intro": "Dispositivos e locais onde sua conta está logada agora.",
|
|
903
|
+
"account.security.sessions_empty": "Nenhuma sessão ativa.",
|
|
904
|
+
// Console de conta — perfil (seção em account/security).
|
|
905
|
+
"account.profile.section": "Perfil",
|
|
906
|
+
"account.profile.intro": "Atualize seu nome de exibição e avatar.",
|
|
907
|
+
"account.profile.name_label": "Nome",
|
|
908
|
+
"account.profile.avatar_label": "URL do avatar",
|
|
909
|
+
"account.profile.avatar_upload_label": "Enviar avatar",
|
|
910
|
+
"account.profile.avatar_upload_hint": "JPG, PNG ou WebP, até 5MB.",
|
|
911
|
+
"account.profile.avatar_invalid_type": "Tipo de imagem inválido. Use JPG, PNG ou WebP.",
|
|
912
|
+
"account.profile.avatar_too_large": "A imagem é muito grande.",
|
|
913
|
+
"account.profile.submit": "Salvar perfil",
|
|
914
|
+
"account.profile.updated": "Perfil atualizado com sucesso.",
|
|
915
|
+
"account.profile.not_supported": "A edição de perfil não está disponível nesta instalação.",
|
|
916
|
+
// Console de conta — exportar dados (portabilidade, LGPD/GDPR).
|
|
917
|
+
"account.export.section": "Exportar seus dados",
|
|
918
|
+
"account.export.intro": "Baixe uma cópia dos seus dados: perfil, identidades vinculadas, apps autorizados, sessões ativas, passkeys e seu histórico de auditoria. Nenhum segredo ou token é incluído.",
|
|
919
|
+
"account.export.submit": "Baixar meus dados (JSON)",
|
|
920
|
+
"account.export.requested": "Sua exportação de dados está sendo preparada e será entregue em breve.",
|
|
921
|
+
// Console de conta — deletar conta (danger zone, LGPD/GDPR).
|
|
922
|
+
"account.delete.section": "Deletar conta",
|
|
923
|
+
"account.delete.intro": "Apaga permanentemente sua conta e todos os dados associados: sessões, apps autorizados, tokens de acesso pessoal, passkeys, identidades vinculadas e segredos de duplo fator. Esta ação não pode ser desfeita.",
|
|
924
|
+
"account.delete.confirm_password_label": "Confirme com sua senha atual",
|
|
925
|
+
"account.delete.confirm_email_label": "Digite seu e-mail para confirmar",
|
|
926
|
+
"account.delete.submit": "Deletar minha conta",
|
|
927
|
+
"account.delete.deleted": "Sua conta foi deletada permanentemente.",
|
|
928
|
+
"account.delete.invalid_confirmation": "Confirmação falhou. Sua conta NÃO foi deletada.",
|
|
929
|
+
"account.delete.not_supported": "A deleção de conta não está disponível nesta instalação.",
|
|
930
|
+
// Console de conta — apps com acesso (account/apps).
|
|
931
|
+
"account.apps.page_title": "Apps com acesso",
|
|
932
|
+
"account.apps.title": "Apps com acesso",
|
|
933
|
+
"account.apps.intro": "Apps que você autorizou a acessar sua conta.",
|
|
934
|
+
"account.apps.logout": "Sair",
|
|
935
|
+
"account.apps.empty": "Nenhum app tem acesso à sua conta.",
|
|
936
|
+
"account.apps.tokens": "{accessTokens} access · {refreshTokens} refresh",
|
|
937
|
+
"account.apps.revoke": "Revogar acesso",
|
|
938
|
+
"account.apps.revoke_confirm": "Revogar o acesso deste app? Ele precisará ser autorizado novamente e seus tokens deixarão de funcionar.",
|
|
939
|
+
"account.apps.revoked": "Acesso revogado.",
|
|
940
|
+
"account.apps.not_supported": "O adapter OIDC configurado não suporta enumeração — a listagem de apps fica indisponível.",
|
|
941
|
+
// Console de conta — organizations (account/orgs).
|
|
942
|
+
"account.orgs.page_title": "Minhas Organizações",
|
|
943
|
+
"account.orgs.title": "Minhas Organizações",
|
|
944
|
+
"account.orgs.logout": "Sair",
|
|
945
|
+
"account.orgs.empty": "Você não é membro de nenhuma organização.",
|
|
946
|
+
"account.orgs.active_badge": "Ativa",
|
|
947
|
+
"account.orgs.activate": "Definir como ativa",
|
|
948
|
+
"account.orgs.deactivate": "Desativar",
|
|
949
|
+
"account.orgs.leave": "Sair",
|
|
950
|
+
"account.orgs.leave_last_owner": "Não é possível sair — você é o único proprietário.",
|
|
951
|
+
"account.orgs.create_section": "Criar organização",
|
|
952
|
+
"account.orgs.create_name_label": "Nome",
|
|
953
|
+
"account.orgs.create_slug_label": "Slug (identificador de URL)",
|
|
954
|
+
"account.orgs.create_submit": "Criar organização",
|
|
955
|
+
"account.orgs.created": "Organização criada.",
|
|
956
|
+
"account.orgs.activated": "Organização ativada.",
|
|
957
|
+
"account.orgs.deactivated": "Organização desativada.",
|
|
958
|
+
"account.orgs.left": "Você saiu da organização.",
|
|
959
|
+
"account.orgs.not_supported": "Organizations não está disponível nesta instalação.",
|
|
960
|
+
"account.orgs.not_member": "Você não é membro desta organização.",
|
|
961
|
+
"account.orgs.invitations_section": "Convites pendentes",
|
|
962
|
+
"account.orgs.invitations_empty": "Nenhum convite pendente.",
|
|
963
|
+
"account.orgs.invitation_from": "Convidado para {orgName} como {role}",
|
|
964
|
+
"account.orgs.invitation_accept": "Aceitar",
|
|
965
|
+
"account.orgs.invitation_accepted": "Convite aceito.",
|
|
966
|
+
"account.orgs.invitation_error": "Não foi possível aceitar o convite.",
|
|
967
|
+
"account.orgs.members_section": "Membros",
|
|
968
|
+
"account.orgs.invite_section": "Convidar por e-mail",
|
|
969
|
+
"account.orgs.invite_email_label": "E-mail",
|
|
970
|
+
"account.orgs.invite_role_label": "Papel",
|
|
971
|
+
"account.orgs.invite_submit": "Enviar convite",
|
|
972
|
+
"account.orgs.invited": "Convite enviado.",
|
|
973
|
+
"account.orgs.remove_member": "Remover",
|
|
974
|
+
"account.orgs.member_removed": "Membro removido.",
|
|
975
|
+
"account.orgs.change_role": "Alterar papel",
|
|
976
|
+
"account.orgs.role_updated": "Papel atualizado.",
|
|
977
|
+
// Confirmação de troca de e-mail (account/email-confirmed).
|
|
978
|
+
"account.email_confirmed.page_title": "Confirmação de e-mail",
|
|
979
|
+
"account.email_confirmed.ok_title": "E-mail alterado",
|
|
980
|
+
"account.email_confirmed.ok_body": "Seu novo e-mail foi confirmado e já está ativo.",
|
|
981
|
+
"account.email_confirmed.invalid_title": "Link inválido",
|
|
982
|
+
"account.email_confirmed.invalid_body": "O link de confirmação é inválido ou já foi utilizado.",
|
|
983
|
+
// Console de conta — MFA (account/mfa).
|
|
984
|
+
"account.mfa.page_title": "Verificação em duas etapas",
|
|
985
|
+
"account.mfa.title": "Verificação em duas etapas",
|
|
986
|
+
"account.mfa.logout": "Sair",
|
|
987
|
+
"account.mfa.recovery_codes_notice": "Guarde seus códigos de recuperação — eles não serão mostrados de novo:",
|
|
988
|
+
"account.mfa.enroll_intro": "Escaneie o QR code com seu app autenticador (Google Authenticator, 1Password, etc.).",
|
|
989
|
+
"account.mfa.qr_alt": "QR code TOTP",
|
|
990
|
+
"account.mfa.manual_intro": "Ou informe manualmente:",
|
|
991
|
+
"account.mfa.confirm_code_label": "Código de confirmação",
|
|
992
|
+
"account.mfa.activate": "Ativar verificação em duas etapas",
|
|
993
|
+
"account.mfa.enabled_html": 'A verificação em duas etapas está <span class="font-semibold text-emerald-700">ativa</span> nesta conta.',
|
|
994
|
+
"account.mfa.disable": "Desativar",
|
|
995
|
+
"account.mfa.disabled_intro": "A verificação em duas etapas está desativada. Ative-a para proteger sua conta com um app autenticador.",
|
|
996
|
+
"account.mfa.enable": "Ativar verificação em duas etapas",
|
|
997
|
+
// Console de conta — passkeys (WebAuthn) na tela de MFA.
|
|
998
|
+
"mfa.passkey.section_title": "Passkeys (chaves de acesso)",
|
|
999
|
+
"mfa.passkey.section_intro": "Use uma chave de acesso (biometria, PIN do dispositivo ou chave de segurança) como segundo fator, sem precisar digitar códigos.",
|
|
1000
|
+
"mfa.passkey.add": "Adicionar passkey",
|
|
1001
|
+
"mfa.passkey.remove": "Remover",
|
|
1002
|
+
"mfa.passkey.empty": "Nenhuma passkey registrada.",
|
|
1003
|
+
"mfa.passkey.unnamed": "Passkey",
|
|
1004
|
+
"mfa.passkey.created_at": "Criada em {date}",
|
|
1005
|
+
"mfa.passkey.register_error": "Não foi possível registrar a passkey. Tente novamente.",
|
|
1006
|
+
"mfa.passkey.unsupported": "Seu navegador não suporta passkeys.",
|
|
1007
|
+
// Console admin (B6) — navegação compartilhada.
|
|
1008
|
+
"admin.nav.roles": "Roles",
|
|
1009
|
+
"admin.nav.dashboard": "Painel",
|
|
1010
|
+
"admin.nav.users": "Usuários",
|
|
1011
|
+
"admin.nav.orgs": "Organizações",
|
|
1012
|
+
"admin.nav.clients": "Clients",
|
|
1013
|
+
"admin.nav.audit": "Auditoria",
|
|
1014
|
+
"admin.nav.settings": "Configurações",
|
|
1015
|
+
"admin.nav.logout": "Sair",
|
|
1016
|
+
// Console admin — dashboard.
|
|
1017
|
+
"admin.dashboard.page_title": "Painel admin",
|
|
1018
|
+
"admin.dashboard.title": "Painel administrativo",
|
|
1019
|
+
"admin.dashboard.users_count": "Usuários",
|
|
1020
|
+
"admin.dashboard.clients_count": "Clients",
|
|
1021
|
+
"admin.dashboard.audit_count": "Eventos de auditoria",
|
|
1022
|
+
"admin.dashboard.recent_title": "Eventos recentes",
|
|
1023
|
+
"admin.dashboard.mau": "Usuários ativos (30d)",
|
|
1024
|
+
"admin.dashboard.active_sessions": "Sessões ativas",
|
|
1025
|
+
"admin.dashboard.signins_title": "Logins (últimos {days}d)",
|
|
1026
|
+
"admin.dashboard.signups_title": "Cadastros (últimos {days}d)",
|
|
1027
|
+
// Console admin — usuários.
|
|
1028
|
+
"admin.users.page_title": "Usuários",
|
|
1029
|
+
"admin.users.title": "Usuários",
|
|
1030
|
+
"admin.users.search_placeholder": "Buscar por e-mail",
|
|
1031
|
+
"admin.users.search": "Buscar",
|
|
1032
|
+
"admin.users.empty": "Nenhum usuário encontrado.",
|
|
1033
|
+
"admin.users.roles_placeholder": "Papéis (separados por vírgula)",
|
|
1034
|
+
"admin.users.save_roles": "Salvar papéis",
|
|
1035
|
+
"admin.users.sessions": "Sessões",
|
|
1036
|
+
"admin.users.create_section": "Criar usuário",
|
|
1037
|
+
"admin.users.create_name_placeholder": "Nome (opcional)",
|
|
1038
|
+
"admin.users.create_email_placeholder": "E-mail",
|
|
1039
|
+
"admin.users.create_password_placeholder": "Senha (deixe em branco para enviar convite)",
|
|
1040
|
+
"admin.users.create_submit": "Criar usuário",
|
|
1041
|
+
"admin.users.created": "Usuário criado.",
|
|
1042
|
+
"admin.users.reset_password": "Enviar redefinição de senha",
|
|
1043
|
+
"admin.users.reset_sent": "E-mail de redefinição de senha enviado.",
|
|
1044
|
+
"admin.users.disable": "Desabilitar",
|
|
1045
|
+
"admin.users.enable": "Reabilitar",
|
|
1046
|
+
"admin.users.disabled": "Conta desabilitada.",
|
|
1047
|
+
"admin.users.enabled": "Conta reabilitada.",
|
|
1048
|
+
"admin.users.deleted": "Conta deletada permanentemente.",
|
|
1049
|
+
"admin.users.delete_unsupported": "O store de contas não suporta deletar usuários.",
|
|
1050
|
+
"admin.users.delete": "Deletar",
|
|
1051
|
+
"admin.users.delete_confirm": "Deletar permanentemente esta conta e todos os dados? Não pode ser desfeito.",
|
|
1052
|
+
"admin.users.disabled_badge": "Desabilitada",
|
|
1053
|
+
"admin.users.disable_confirm": "Desabilitar esta conta? O usuário não conseguirá entrar.",
|
|
1054
|
+
// Console admin — organizations (pt-BR).
|
|
1055
|
+
"admin.orgs.page_title": "Organizações",
|
|
1056
|
+
"admin.orgs.title": "Organizações",
|
|
1057
|
+
"admin.orgs.detail_title": "Organização",
|
|
1058
|
+
"admin.orgs.not_supported": "Organizações não estão disponíveis nesta instalação.",
|
|
1059
|
+
"admin.orgs.empty": "Nenhuma organização encontrada.",
|
|
1060
|
+
"admin.orgs.create_section": "Criar organização",
|
|
1061
|
+
"admin.orgs.create_name_placeholder": "Nome",
|
|
1062
|
+
"admin.orgs.create_slug_placeholder": "Slug (identificador na URL)",
|
|
1063
|
+
"admin.orgs.create_submit": "Criar organização",
|
|
1064
|
+
"admin.orgs.created": "Organização criada.",
|
|
1065
|
+
"admin.orgs.deleted": "Organização deletada.",
|
|
1066
|
+
"admin.orgs.slug_taken": "Já existe uma organização com este slug.",
|
|
1067
|
+
"admin.orgs.invalid_input": "Nome, slug e conta owner são obrigatórios.",
|
|
1068
|
+
"admin.orgs.view": "Ver",
|
|
1069
|
+
"admin.orgs.delete": "Deletar",
|
|
1070
|
+
"admin.orgs.delete_confirm": "Deletar permanentemente esta organização e todos os membros/convites? Não pode ser desfeito.",
|
|
1071
|
+
"admin.orgs.back": "Voltar para organizações",
|
|
1072
|
+
"admin.orgs.members_section": "Membros",
|
|
1073
|
+
"admin.orgs.members_count": "membros",
|
|
1074
|
+
"admin.orgs.members_empty": "Nenhum membro.",
|
|
1075
|
+
"admin.orgs.add_member_section": "Adicionar membro",
|
|
1076
|
+
"admin.orgs.select_account": "— Selecione a conta —",
|
|
1077
|
+
"admin.orgs.add_member_submit": "Adicionar membro",
|
|
1078
|
+
"admin.orgs.member_added": "Membro adicionado.",
|
|
1079
|
+
"admin.orgs.member_removed": "Membro removido.",
|
|
1080
|
+
"admin.orgs.member_add_error": "Não foi possível adicionar o membro.",
|
|
1081
|
+
"admin.orgs.member_remove_error": "Não foi possível remover o membro.",
|
|
1082
|
+
"admin.orgs.member_remove_confirm": "Remover este membro?",
|
|
1083
|
+
"admin.orgs.remove_member": "Remover",
|
|
1084
|
+
"admin.orgs.last_owner": "Não é possível remover o último owner.",
|
|
1085
|
+
"admin.orgs.invitations_section": "Convites pendentes",
|
|
1086
|
+
"admin.orgs.expires": "Expira",
|
|
1087
|
+
"admin.orgs.revoke_invitation": "Revogar",
|
|
1088
|
+
"admin.orgs.invitation_revoked": "Convite revogado.",
|
|
1089
|
+
"admin.orgs.danger_zone": "Zona de perigo",
|
|
1090
|
+
// Console admin — sessões/grants ativos de uma conta.
|
|
1091
|
+
"admin.sessions.page_title": "Sessões ativas",
|
|
1092
|
+
"admin.sessions.title": "Sessões ativas",
|
|
1093
|
+
"admin.sessions.account": "Conta: {email}",
|
|
1094
|
+
"admin.sessions.back": "Voltar para usuários",
|
|
1095
|
+
"admin.sessions.not_supported": "O adapter OIDC configurado não suporta enumeração — a inspeção de sessões fica indisponível.",
|
|
1096
|
+
"admin.sessions.revoked_notice": "Revogado: {sessions} sessão(ões), {grants} grant(s), {accessTokens} access token(s), {refreshTokens} refresh token(s).",
|
|
1097
|
+
"admin.sessions.sessions_section": "Sessões (login no IdP)",
|
|
1098
|
+
"admin.sessions.sessions_empty": "Nenhuma sessão ativa.",
|
|
1099
|
+
"admin.sessions.session_login_ts": "Login: {date}",
|
|
1100
|
+
"admin.sessions.session_amr": "Métodos: {amr}",
|
|
1101
|
+
"admin.sessions.session_device": "{browser} em {os}",
|
|
1102
|
+
"admin.sessions.session_ip": "IP: {ip}",
|
|
1103
|
+
"admin.sessions.session_ip_geo": "IP: {ip} · {location}",
|
|
1104
|
+
"admin.sessions.grants_section": "Grants (autorizações por client)",
|
|
1105
|
+
"admin.sessions.grants_empty": "Nenhum grant ativo.",
|
|
1106
|
+
"admin.sessions.grant_client": "Client: {clientId}",
|
|
1107
|
+
"admin.sessions.grant_tokens": "{accessTokens} access · {refreshTokens} refresh",
|
|
1108
|
+
"admin.sessions.revoke_all": "Revogar todas as sessões e grants",
|
|
1109
|
+
"admin.sessions.revoke_confirm": "Revogar todas as sessões e grants desta conta? O usuário precisará entrar novamente e os tokens emitidos deixarão de funcionar.",
|
|
1110
|
+
// Console admin — impersonation (RFC 8693 token exchange).
|
|
1111
|
+
"admin.impersonation.title": "Personificar este usuário",
|
|
1112
|
+
"admin.impersonation.help": "O Token Exchange (RFC 8693) permite que um admin aja como este usuário. Não há bypass de auth: você troca o SEU PRÓPRIO access token de admin por um escopado ao alvo.",
|
|
1113
|
+
"admin.impersonation.curl_label": "Requisição pronta para rodar",
|
|
1114
|
+
"admin.impersonation.note": "Troque <ADMIN_ACCESS_TOKEN> por um access token de admin válido. O id_token resultante carrega act={sub: admin}; o evento é auditado como impersonation.started.",
|
|
1115
|
+
"admin.impersonation.no_client": 'Nenhum client tem o grant token-exchange habilitado. Adicione "urn:ietf:params:oauth:grant-type:token-exchange" a um client para habilitar a personificação.',
|
|
1116
|
+
// Console admin — clients.
|
|
1117
|
+
"admin.clients.page_title": "Clients OAuth",
|
|
1118
|
+
"admin.clients.title": "Clients OAuth",
|
|
1119
|
+
"admin.clients.empty": "Nenhum client configurado.",
|
|
1120
|
+
"admin.clients.confidential": "Confidencial",
|
|
1121
|
+
"admin.clients.public": "Público",
|
|
1122
|
+
"admin.clients.grants": "Grants: {grants}",
|
|
1123
|
+
"admin.clients.redirect_uris": "Redirects: {uris}",
|
|
1124
|
+
"admin.clients.dynamic_notice": "O registro dinâmico de clients (RFC 7591) está ligado — clients registrados via /reg são persistidos no adapter e aparecem na seção dinâmica abaixo.",
|
|
1125
|
+
"admin.clients.static_section": "Clients estáticos (config)",
|
|
1126
|
+
"admin.clients.dynamic_section": "Clients dinâmicos (adapter)",
|
|
1127
|
+
"admin.clients.dynamic_empty": "Nenhum client dinâmico persistido.",
|
|
1128
|
+
"admin.clients.dynamic_not_supported": "O adapter OIDC configurado não suporta enumeração de clients — a gestão dinâmica fica indisponível.",
|
|
1129
|
+
"admin.clients.new": "Novo client",
|
|
1130
|
+
"admin.clients.new_title": "Novo client OIDC",
|
|
1131
|
+
"admin.clients.edit_title": "Editar client OIDC",
|
|
1132
|
+
"admin.clients.edit": "Editar",
|
|
1133
|
+
"admin.clients.delete": "Excluir",
|
|
1134
|
+
"admin.clients.delete_confirm": "Excluir este client? Esta ação não pode ser desfeita.",
|
|
1135
|
+
"admin.clients.regenerate_secret": "Regenerar secret",
|
|
1136
|
+
"admin.clients.regenerate_confirm": "Regenerar o secret? O secret atual deixará de funcionar imediatamente.",
|
|
1137
|
+
"admin.clients.back": "Voltar",
|
|
1138
|
+
"admin.clients.cancel": "Cancelar",
|
|
1139
|
+
"admin.clients.save": "Salvar",
|
|
1140
|
+
"admin.clients.create": "Criar client",
|
|
1141
|
+
"admin.clients.secret_once_title": "Guarde o client_secret agora",
|
|
1142
|
+
"admin.clients.secret_once_notice": "Este é o único momento em que o secret é exibido. Copie-o agora — ele não pode ser recuperado depois.",
|
|
1143
|
+
"admin.clients.field_client_id": "Client ID",
|
|
1144
|
+
"admin.clients.field_client_id_placeholder": "deixe em branco para gerar automaticamente",
|
|
1145
|
+
"admin.clients.field_client_id_help": "Opcional. Se vazio, um identificador aleatório será gerado.",
|
|
1146
|
+
"admin.clients.field_redirect_uris": "Redirect URIs",
|
|
1147
|
+
"admin.clients.field_redirect_uris_help": "Uma URI por linha.",
|
|
1148
|
+
"admin.clients.field_post_logout_uris": "Post-logout redirect URIs",
|
|
1149
|
+
"admin.clients.field_post_logout_uris_help": "Uma URI por linha (opcional).",
|
|
1150
|
+
"admin.clients.field_grant_types": "Grant types",
|
|
1151
|
+
"admin.clients.field_auth_method": "Token endpoint auth method",
|
|
1152
|
+
"admin.clients.field_backchannel_uri": "Back-Channel Logout URI (opcional)",
|
|
1153
|
+
"admin.clients.field_backchannel_uri_help": "Endpoint de OIDC Back-Channel Logout do RP. Deixe em branco se não usar.",
|
|
1154
|
+
"admin.clients.field_backchannel_session_required": "Exigir sid no logout_token",
|
|
1155
|
+
"admin.clients.field_backchannel_session_required_help": "Quando marcado, o IdP inclui o session ID (sid) em cada logout_token enviado a este client.",
|
|
1156
|
+
"admin.clients.static_deprecated_notice": "Estes clients estão definidos estaticamente no config e estão depreciados. " +
|
|
1157
|
+
"Migre-os para o adapter/DB com:",
|
|
1158
|
+
// Console admin — auditoria.
|
|
1159
|
+
"admin.audit.page_title": "Auditoria",
|
|
1160
|
+
"admin.audit.title": "Log de auditoria",
|
|
1161
|
+
"admin.audit.type_placeholder": "Filtrar por tipo",
|
|
1162
|
+
"admin.audit.subject_placeholder": "Filtrar por subject (accountId)",
|
|
1163
|
+
"admin.audit.filter": "Filtrar",
|
|
1164
|
+
"admin.audit.empty": "Nenhum evento encontrado.",
|
|
1165
|
+
"admin.audit.not_supported": "O sink de auditoria configurado não suporta consulta.",
|
|
1166
|
+
// Console admin — settings (runtime configuration) — pt-BR.
|
|
1167
|
+
"admin.settings.page_title": "Configurações",
|
|
1168
|
+
"admin.settings.title": "Configurações",
|
|
1169
|
+
"admin.settings.bot_protection_section": "Bot protection",
|
|
1170
|
+
"admin.settings.bot_protection_intro": "Sobrescreva a config estática em tempo de execução. A função `verify` sempre vem do config — aqui só é possível ligar/desligar e escolher as ações afetadas.",
|
|
1171
|
+
"admin.settings.bot_protection_no_verify": "Bot protection não está configurado — adicione `botProtection.verify` ao config/authkit.ts para habilitar esta feature.",
|
|
1172
|
+
"admin.settings.no_settings_table": "A tabela `auth_settings` não existe. Para habilitar configurações em runtime, crie-a: `key TEXT PK, value TEXT NOT NULL, updated_at TIMESTAMP, updated_by TEXT`.",
|
|
1173
|
+
"admin.settings.enabled_label": "Habilitado",
|
|
1174
|
+
"admin.settings.actions_label": "Ativo em",
|
|
1175
|
+
"admin.settings.action_login": "Login",
|
|
1176
|
+
"admin.settings.action_signup": "Cadastro",
|
|
1177
|
+
"admin.settings.action_reset": "Redefinição de senha",
|
|
1178
|
+
"admin.settings.save": "Salvar",
|
|
1179
|
+
"admin.settings.saved": "Configurações salvas.",
|
|
1180
|
+
"admin.settings.reset_to_config": "Resetar ao config",
|
|
1181
|
+
"admin.settings.reset_done": "Setting em runtime apagado — o config estático voltou a ser a fonte de verdade.",
|
|
1182
|
+
// Cadastro aberto.
|
|
1183
|
+
"admin.settings.registration_section": "Cadastro aberto",
|
|
1184
|
+
"admin.settings.registration_intro": "Controla se novos usuários podem se auto-registrar (cadastro público). Contas criadas pelo admin e convites de organização não são afetados.",
|
|
1185
|
+
"admin.settings.registration_from_config": "Fonte: config estático",
|
|
1186
|
+
"admin.settings.registration_from_setting": "Fonte: setting em runtime",
|
|
1187
|
+
// Exigir e-mail verificado.
|
|
1188
|
+
"admin.settings.require_verified_email_section": "Exigir e-mail verificado",
|
|
1189
|
+
"admin.settings.require_verified_email_intro": "Quando ativo, o login é bloqueado para contas com e-mail não verificado (aplica-se a senha, magic link e passkey-first). Sobrescreve o `login.requireVerifiedEmail` do config estático.",
|
|
1190
|
+
"admin.settings.require_verified_email_config_note": "Nota: sobrescreve `login.requireVerifiedEmail` em config/authkit.ts em tempo de execução.",
|
|
1191
|
+
"admin.settings.require_verified_email_from_config": "Fonte: config estático",
|
|
1192
|
+
"admin.settings.require_verified_email_from_setting": "Fonte: setting em runtime",
|
|
1193
|
+
// Modo de manutenção.
|
|
1194
|
+
"admin.settings.maintenance_section": "Modo de manutenção",
|
|
1195
|
+
"admin.settings.maintenance_intro": "Quando ativo, as telas de login/cadastro/esqueci-senha/interaction exibem uma página de manutenção e rejeitam POSTs. Tokens OIDC existentes (refresh, userinfo, introspection) continuam funcionando. A Admin API e o console admin permanecem acessíveis.",
|
|
1196
|
+
"admin.settings.maintenance_message_label": "Mensagem personalizada (opcional)",
|
|
1197
|
+
"admin.settings.maintenance_message_placeholder": "Estamos em manutenção programada. Por favor, tente novamente em breve.",
|
|
1198
|
+
"admin.settings.maintenance_warning": 'ATENÇÃO — BLOQUEIO: Se você ativar o modo de manutenção e perder acesso à Admin API, não conseguirá desativá-lo remotamente. Contas com role admin ainda podem entrar — mas se você ficar bloqueado, use a Admin REST API (PUT /api/authkit/v1/settings/maintenance_mode com {"value":{"enabled":false}}) para desativar sem login no browser.',
|
|
1199
|
+
"admin.settings.maintenance_from_setting": "Fonte: setting em runtime",
|
|
1200
|
+
// Auth methods setting card (console admin).
|
|
1201
|
+
"admin.settings.auth_methods_section": "Métodos de autenticação",
|
|
1202
|
+
"admin.settings.auth_methods_intro": "Controla quais métodos de login a tela oferece em tempo de execução. Desativar todos ativa um fail-safe que restaura os defaults do config.",
|
|
1203
|
+
"admin.settings.auth_methods_from_config": "Fonte: config estático",
|
|
1204
|
+
"admin.settings.auth_methods_from_setting": "Fonte: setting em runtime",
|
|
1205
|
+
"admin.settings.auth_methods_password_label": "Senha",
|
|
1206
|
+
"admin.settings.auth_methods_magic_link_label": "Magic link (link de login por e-mail)",
|
|
1207
|
+
"admin.settings.auth_methods_passkey_label": "Passkey (sem senha)",
|
|
1208
|
+
"admin.settings.auth_methods_forgot_password_label": 'Link "Esqueci minha senha"',
|
|
1209
|
+
"admin.settings.auth_methods_social_section": "Providers sociais",
|
|
1210
|
+
"admin.settings.auth_methods_social_intro": "Apenas providers configurados no código podem ser habilitados aqui.",
|
|
1211
|
+
"admin.settings.auth_methods_magic_link_unavailable": "Indisponível — requer mail e `passwordless.magicLink` no config.",
|
|
1212
|
+
"admin.settings.auth_methods_passkey_unavailable": "Indisponível — requer WebAuthn configurado no config.",
|
|
1213
|
+
"admin.settings.auth_methods_forgot_disabled_hint": "Desabilitado automaticamente quando o método senha está desligado.",
|
|
1214
|
+
"admin.settings.auth_methods_no_social": "Nenhum provider social configurado no config estático.",
|
|
1215
|
+
"admin.settings.auth_methods_passkey_autofill_label": "Habilitar autofill de passkey (conditional mediation — sugere passkeys no campo de e-mail)",
|
|
1216
|
+
// Rótulo genérico de provider social (fallback quando não há tradução específica).
|
|
1217
|
+
"login.social_provider": "Entrar com {provider}",
|
|
1218
|
+
// Console admin — paginação compartilhada.
|
|
1219
|
+
"admin.pagination.page": "Página {page} de {total}",
|
|
1220
|
+
"admin.pagination.prev": "Anterior",
|
|
1221
|
+
"admin.pagination.next": "Próxima",
|
|
1222
|
+
// Device Authorization Grant (RFC 8628) — telas servidas pelo oidc-provider.
|
|
1223
|
+
"device.input.title": "Entrar no dispositivo",
|
|
1224
|
+
"device.input.intro": "Digite o código exibido no seu dispositivo.",
|
|
1225
|
+
"device.input.submit": "Continuar",
|
|
1226
|
+
"device.input.error_invalid": "O código informado está incorreto. Tente novamente.",
|
|
1227
|
+
"device.input.error_aborted": "A solicitação de login foi interrompida.",
|
|
1228
|
+
"device.input.error_generic": "Ocorreu um erro ao processar sua solicitação.",
|
|
1229
|
+
"device.confirm.title": "Confirmar dispositivo",
|
|
1230
|
+
"device.confirm.body": "O código abaixo deve estar sendo exibido no seu dispositivo. Confirme apenas se reconhecê-lo.",
|
|
1231
|
+
"device.confirm.submit": "Continuar",
|
|
1232
|
+
"device.confirm.abort": "Cancelar",
|
|
1233
|
+
"device.success.title": "Login concluído",
|
|
1234
|
+
"device.success.body": "Login realizado com sucesso. Você já pode voltar ao dispositivo.",
|
|
1235
|
+
// RP-initiated logout (end_session) — splash de saída e tela de sucesso.
|
|
1236
|
+
"logout.title": "Saindo",
|
|
1237
|
+
"logout.body": "Encerrando sua sessão…",
|
|
1238
|
+
"logout.fallback": "Sair",
|
|
1239
|
+
"logout.success.title": "Sessão encerrada",
|
|
1240
|
+
"logout.success.body": "Você saiu da sua conta. Até breve.",
|
|
1241
|
+
// Step-up auth (acr_values): cliente exige MFA mas a conta não tem MFA enrolado.
|
|
1242
|
+
"mfa_challenge.required_no_enrollment": "Este cliente exige verificação em duas etapas. Configure o MFA no console da sua conta para continuar.",
|
|
1243
|
+
// Mensagens de erro/flash produzidas pelos controllers.
|
|
1244
|
+
"errors.invalid_credentials": "Credenciais inválidas",
|
|
1245
|
+
"errors.invalid_code": "Código inválido",
|
|
1246
|
+
"errors.account_disabled": "Esta conta foi desabilitada.",
|
|
1247
|
+
"errors.email_unverified": "Verifique seu e-mail antes de entrar. Procure o link de verificação na sua caixa de entrada.",
|
|
1248
|
+
"errors.email_taken": "E-mail já cadastrado",
|
|
1249
|
+
"errors.signup_failed": "Não foi possível criar a conta",
|
|
1250
|
+
"errors.invalid_or_expired_token": "Token inválido ou expirado",
|
|
1251
|
+
"errors.account_locked": "Conta temporariamente bloqueada por excesso de tentativas. Tente novamente em {seconds}s.",
|
|
1252
|
+
"errors.otp_locked": "A verificação em duas etapas foi bloqueada por excesso de tentativas incorretas. Um link de recuperação foi enviado para o seu e-mail.",
|
|
1253
|
+
"errors.bot_protection_failed": "A verificação anti-bot falhou. Tente novamente.",
|
|
1254
|
+
"errors.session_expired": "Sessão expirada",
|
|
1255
|
+
"errors.challenge_expired": "Desafio expirado",
|
|
1256
|
+
"errors.passkeys_unavailable": "Passkeys indisponíveis",
|
|
1257
|
+
"errors.no_passkey_registered": "Nenhuma passkey registrada",
|
|
1258
|
+
"errors.registration_disabled": "O cadastro está desabilitado no momento. Entre em contato com o administrador para obter acesso.",
|
|
1259
|
+
"errors.not_found": "Não encontrado.",
|
|
1260
|
+
// Manutenção do sistema.
|
|
1261
|
+
"maintenance.title": "Em manutenção",
|
|
1262
|
+
"maintenance.default_message": "O serviço está temporariamente indisponível para manutenção. Tente novamente em breve.",
|
|
1263
|
+
"maintenance.admin_login_note": "Se você é administrador, ainda pode entrar para gerenciar o sistema.",
|
|
1264
|
+
// Política de senha (validação ao definir uma senha nova) + vazamento (HIBP) + histórico + expiração.
|
|
1265
|
+
"password.policy.min_length": "A senha deve ter no mínimo {min} caracteres.",
|
|
1266
|
+
"password.policy.uppercase": "A senha deve conter ao menos uma letra maiúscula.",
|
|
1267
|
+
"password.policy.lowercase": "A senha deve conter ao menos uma letra minúscula.",
|
|
1268
|
+
"password.policy.numbers": "A senha deve conter ao menos um número.",
|
|
1269
|
+
"password.policy.symbols": "A senha deve conter ao menos um símbolo.",
|
|
1270
|
+
"password.pwned": "Esta senha apareceu em vazamentos de dados conhecidos. Escolha uma senha diferente.",
|
|
1271
|
+
"password.common": "Esta senha é muito comum. Escolha uma senha mais única.",
|
|
1272
|
+
"password.reused": "Esta senha foi usada recentemente. Escolha uma senha diferente (as últimas {count} senhas são lembradas).",
|
|
1273
|
+
// Step de troca obrigatória (expiração de senha).
|
|
1274
|
+
"login.password_expired_title": "Senha expirada",
|
|
1275
|
+
"login.password_expired_intro": "Sua senha expirou. Defina uma nova senha para continuar.",
|
|
1276
|
+
"login.password_expired_new_label": "Nova senha",
|
|
1277
|
+
"login.password_expired_submit": "Definir nova senha",
|
|
1278
|
+
// Banner de graça de verificação de e-mail.
|
|
1279
|
+
"login.email_grace_banner": "Verifique seu e-mail. Você tem {days} dia(s) restante(s).",
|
|
1280
|
+
// Admin settings — password hygiene cards (pt-BR).
|
|
1281
|
+
"admin.settings.password_history_section": "Histórico de senhas",
|
|
1282
|
+
"admin.settings.password_history_intro": "Impede reutilização de senhas recentes. Requer a tabela `auth_password_history`. Quando habilitado, os últimos N hashes de senha são armazenados e verificados em cada troca.",
|
|
1283
|
+
"admin.settings.password_history_count_label": "Senhas lembradas",
|
|
1284
|
+
"admin.settings.password_history_from_config": "Fonte: padrão",
|
|
1285
|
+
"admin.settings.password_history_from_setting": "Fonte: setting em runtime",
|
|
1286
|
+
"admin.settings.password_history_no_table": "A tabela `auth_password_history` não existe. Crie-a para habilitar este recurso: `id UUID/SERIAL PK, account_id TEXT NOT NULL, password_hash TEXT NOT NULL, created_at TIMESTAMP NOT NULL`.",
|
|
1287
|
+
"admin.settings.password_expiration_section": "Expiração de senha",
|
|
1288
|
+
"admin.settings.password_expiration_intro": "Força os usuários a trocar a senha após um número de dias. Requer a coluna `password_changed_at` na tabela de usuários.",
|
|
1289
|
+
"admin.settings.password_expiration_max_age_label": "Dias máximos sem troca",
|
|
1290
|
+
"admin.settings.password_expiration_from_config": "Fonte: padrão",
|
|
1291
|
+
"admin.settings.password_expiration_from_setting": "Fonte: setting em runtime",
|
|
1292
|
+
"admin.settings.password_expiration_no_column": "A coluna `password_changed_at` não existe na tabela de usuários. Adicione-a (TIMESTAMP NULL) para habilitar este recurso.",
|
|
1293
|
+
// Assuntos/corpos de e-mail transacional (default_mailer).
|
|
1294
|
+
"mail.common.link_fallback": "Se o botão não funcionar, copie e cole este link no navegador:",
|
|
1295
|
+
"mail.reset.subject": "Redefinição de senha",
|
|
1296
|
+
"mail.reset.heading": "Redefinição de senha",
|
|
1297
|
+
"mail.reset.intro": "Recebemos um pedido para redefinir a senha da sua conta.",
|
|
1298
|
+
"mail.reset.cta": "Redefinir senha",
|
|
1299
|
+
"mail.reset.fallback": "Se você não solicitou isso, pode ignorar este e-mail.",
|
|
1300
|
+
"mail.reset.expires": "Este link expira em {minutes} minutos.",
|
|
1301
|
+
"mail.verify.subject": "Verifique seu e-mail",
|
|
1302
|
+
"mail.verify.heading": "Verifique seu e-mail",
|
|
1303
|
+
"mail.verify.intro": "Confirme seu endereço de e-mail para concluir a configuração da conta.",
|
|
1304
|
+
"mail.verify.cta": "Verificar e-mail",
|
|
1305
|
+
"mail.verify.fallback": "Se você não criou esta conta, pode ignorar este e-mail.",
|
|
1306
|
+
"mail.verify.expires": "Este link expira em {minutes} minutos.",
|
|
1307
|
+
"mail.magic_link.subject": "Seu link de login",
|
|
1308
|
+
"mail.magic_link.heading": "Entrar na sua conta",
|
|
1309
|
+
"mail.magic_link.intro": "Clique no botão abaixo para entrar. O link expira em breve e pode ser usado uma vez.",
|
|
1310
|
+
"mail.magic_link.cta": "Entrar",
|
|
1311
|
+
"mail.magic_link.fallback": "Se você não solicitou isso, pode ignorar este e-mail.",
|
|
1312
|
+
"mail.new_login.subject": "Novo login na sua conta",
|
|
1313
|
+
"mail.new_login.heading": "Novo login detectado",
|
|
1314
|
+
"mail.new_login.intro": "Detectamos um novo login na sua conta.",
|
|
1315
|
+
"mail.new_login.when": "Quando: {date}",
|
|
1316
|
+
"mail.new_login.ip": "Endereço IP: {ip}",
|
|
1317
|
+
"mail.new_login.device": "Dispositivo: {device}",
|
|
1318
|
+
"mail.new_login.fallback": "Se foi você, nenhuma ação é necessária. Caso contrário, redefina sua senha imediatamente.",
|
|
1319
|
+
"mail.email_change.subject": "Confirme seu novo e-mail",
|
|
1320
|
+
"mail.email_change.heading": "Confirme seu novo e-mail",
|
|
1321
|
+
"mail.email_change.intro": "Recebemos um pedido para trocar o e-mail da sua conta. Confirme o novo endereço abaixo.",
|
|
1322
|
+
"mail.email_change.cta": "Confirmar novo e-mail",
|
|
1323
|
+
"mail.email_change.fallback": "Se você não solicitou isso, pode ignorar este e-mail.",
|
|
1324
|
+
"mail.email_change.expires": "Este link expira em {minutes} minutos.",
|
|
1325
|
+
// E-mail de aviso ao endereço ATUAL quando troca de e-mail é solicitada.
|
|
1326
|
+
"mail.email_change_notice.subject": "Solicitação de troca de e-mail",
|
|
1327
|
+
"mail.email_change_notice.heading": "Solicitação de troca de e-mail",
|
|
1328
|
+
"mail.email_change_notice.intro": "Foi feita uma solicitação para trocar o e-mail da sua conta para {newEmail}. Um link de confirmação foi enviado para o novo endereço.",
|
|
1329
|
+
"mail.email_change_notice.cta": "Verificar segurança da conta",
|
|
1330
|
+
"mail.email_change_notice.fallback": "Se não foi você, sua conta pode estar comprometida — troque sua senha imediatamente.",
|
|
1331
|
+
// E-mail de confirmação ao endereço ANTIGO após troca concluída.
|
|
1332
|
+
"mail.email_changed_completed.subject": "Seu e-mail foi alterado",
|
|
1333
|
+
"mail.email_changed_completed.heading": "E-mail alterado",
|
|
1334
|
+
"mail.email_changed_completed.intro": "O e-mail da sua conta foi alterado de {oldEmail} para {newEmail}.",
|
|
1335
|
+
"mail.email_changed_completed.cta": "Verificar segurança da conta",
|
|
1336
|
+
"mail.email_changed_completed.fallback": "Se não foi você, entre em contato com o suporte imediatamente.",
|
|
1337
|
+
// E-mails de notificação de segurança (senha alterada, MFA, passkey, e-mail).
|
|
1338
|
+
"mail.security_notice.subject": "Alerta de segurança: {kind}",
|
|
1339
|
+
"mail.security_notice.heading": "Alerta de segurança",
|
|
1340
|
+
"mail.security_notice.intro": "Um evento de segurança ocorreu na sua conta: {kind}.",
|
|
1341
|
+
"mail.security_notice.when": "Quando: {date}",
|
|
1342
|
+
"mail.security_notice.ip": "Endereço IP: {ip}",
|
|
1343
|
+
"mail.security_notice.fallback": "Se foi você, nenhuma ação é necessária. Caso contrário, proteja sua conta imediatamente.",
|
|
1344
|
+
"mail.security_notice.kind_password_changed": "senha alterada",
|
|
1345
|
+
"mail.security_notice.kind_mfa_enabled": "verificação em duas etapas habilitada",
|
|
1346
|
+
"mail.security_notice.kind_mfa_disabled": "verificação em duas etapas desabilitada",
|
|
1347
|
+
"mail.security_notice.kind_passkey_added": "passkey adicionada",
|
|
1348
|
+
"mail.security_notice.kind_passkey_removed": "passkey removida",
|
|
1349
|
+
"mail.security_notice.kind_email_changed": "e-mail alterado",
|
|
1350
|
+
// Sudo mode (pt-BR).
|
|
1351
|
+
"account.confirm.page_title": "Confirme sua identidade",
|
|
1352
|
+
"account.confirm.title": "Confirme sua identidade",
|
|
1353
|
+
"account.confirm.intro": "Por segurança, confirme sua senha para continuar.",
|
|
1354
|
+
"account.confirm.password_label": "Senha",
|
|
1355
|
+
"account.confirm.submit": "Confirmar",
|
|
1356
|
+
"account.confirm.passkey_button": "Confirmar com passkey",
|
|
1357
|
+
"account.confirm.error": "Senha incorreta.",
|
|
1358
|
+
"account.confirm.passkey_error": "Não foi possível autenticar com a passkey. Tente novamente.",
|
|
1359
|
+
"account.confirm.passwordless_notice": "Esta conta não possui senha. Adicione uma passkey para usar funcionalidades protegidas.",
|
|
1360
|
+
// Admin settings — sudo_mode card (pt-BR).
|
|
1361
|
+
"admin.settings.sudo_mode_section": "Modo sudo (confirmação de identidade)",
|
|
1362
|
+
"admin.settings.sudo_mode_intro": "Quando habilitado, ações sensíveis (troca de senha, troca de e-mail, exclusão de conta, gerência de MFA/passkey, criação/revogação de PAT) exigem que o usuário confirme sua senha. A confirmação é válida por um período de graça configurável.",
|
|
1363
|
+
"admin.settings.sudo_mode_from_config": "Fonte: padrão",
|
|
1364
|
+
"admin.settings.sudo_mode_from_setting": "Fonte: setting em runtime",
|
|
1365
|
+
"admin.settings.sudo_mode_grace_label": "Período de graça (minutos)",
|
|
1366
|
+
// E-mail de desbloqueio do fator OTP (pt-BR).
|
|
1367
|
+
"mail.otp_unlock.subject": "Desbloqueio da verificação em duas etapas",
|
|
1368
|
+
"mail.otp_unlock.heading": "Desbloqueie sua verificação em duas etapas",
|
|
1369
|
+
"mail.otp_unlock.intro": "Sua verificação em duas etapas foi bloqueada após muitas tentativas incorretas. Clique no botão abaixo para desbloquear.",
|
|
1370
|
+
"mail.otp_unlock.cta": "Desbloquear verificação",
|
|
1371
|
+
"mail.otp_unlock.fallback": "Se você não tentou fazer login, sua conta pode estar em risco — altere sua senha imediatamente.",
|
|
1372
|
+
// Tela de desbloqueio OTP (pt-BR).
|
|
1373
|
+
"otp_unlock.page_title": "Desbloqueio da verificação em duas etapas",
|
|
1374
|
+
"otp_unlock.ok_title": "Verificação em duas etapas desbloqueada",
|
|
1375
|
+
"otp_unlock.ok_body": "Sua verificação em duas etapas foi desbloqueada. Você pode entrar novamente.",
|
|
1376
|
+
"otp_unlock.login_link": "Voltar ao login",
|
|
1377
|
+
"otp_unlock.invalid_title": "Link inválido ou expirado",
|
|
1378
|
+
"otp_unlock.invalid_body": "O link de desbloqueio é inválido ou já foi usado. Tente fazer login novamente para receber um novo link.",
|
|
1379
|
+
"otp_unlock.expired_body": "O link de desbloqueio expirou. Tente fazer login novamente para receber um novo link.",
|
|
1380
|
+
// Admin settings — otp_lockout card (pt-BR).
|
|
1381
|
+
"admin.settings.otp_lockout_section": "Bloqueio do fator OTP",
|
|
1382
|
+
"admin.settings.otp_lockout_intro": "Bloqueia o fator TOTP/recovery (não a conta) após N falhas consecutivas. Envia um link de desbloqueio por e-mail. Requer @adonisjs/limiter. Controlado por accountId.",
|
|
1383
|
+
"admin.settings.otp_lockout_from_config": "Fonte: padrão",
|
|
1384
|
+
"admin.settings.otp_lockout_from_setting": "Fonte: setting em runtime",
|
|
1385
|
+
"admin.settings.otp_lockout_max_attempts_label": "Máximo de tentativas antes do bloqueio",
|
|
1386
|
+
"admin.settings.otp_lockout_unlock_ttl_label": "Validade do link de desbloqueio (horas)",
|
|
1387
|
+
// Admin settings — email_change card.
|
|
1388
|
+
"admin.settings.email_change_section": "Troca de e-mail",
|
|
1389
|
+
"admin.settings.email_change_intro": "Controla o fluxo de troca de e-mail verificada. Quando habilitado, usuários podem solicitar troca de e-mail em /account/security; um link de confirmação é enviado para o novo endereço e um aviso de segurança para o atual.",
|
|
1390
|
+
"admin.settings.email_change_ttl_label": "Validade do token (horas)",
|
|
1391
|
+
"admin.settings.email_change_require_password_label": "Exigir senha atual",
|
|
1392
|
+
"admin.settings.email_change_from_config": "Fonte: padrão",
|
|
1393
|
+
"admin.settings.email_change_from_setting": "Fonte: setting em runtime",
|
|
1394
|
+
// Admin settings — security_notifications card.
|
|
1395
|
+
"admin.settings.security_notifications_section": "Notificações de segurança",
|
|
1396
|
+
"admin.settings.security_notifications_intro": "Envia alerta por e-mail à conta quando eventos de segurança ocorrem (troca de senha, MFA ligado/desligado, passkey adicionada/removida, e-mail alterado). Cada tipo pode ser habilitado individualmente.",
|
|
1397
|
+
"admin.settings.security_notifications_kinds_label": "Notificar em",
|
|
1398
|
+
"admin.settings.security_notifications_from_config": "Fonte: padrão",
|
|
1399
|
+
"admin.settings.security_notifications_from_setting": "Fonte: setting em runtime",
|
|
1400
|
+
"admin.settings.security_notifications_kind_password_changed": "Senha alterada",
|
|
1401
|
+
"admin.settings.security_notifications_kind_mfa_enabled": "MFA habilitado",
|
|
1402
|
+
"admin.settings.security_notifications_kind_mfa_disabled": "MFA desabilitado",
|
|
1403
|
+
"admin.settings.security_notifications_kind_passkey_added": "Passkey adicionada",
|
|
1404
|
+
"admin.settings.security_notifications_kind_passkey_removed": "Passkey removida",
|
|
1405
|
+
"admin.settings.security_notifications_kind_email_changed": "E-mail alterado",
|
|
1406
|
+
// Admin settings — session_policy card (pt-BR).
|
|
1407
|
+
"admin.settings.session_policy_section": "Política de sessão",
|
|
1408
|
+
"admin.settings.session_policy_intro": 'Controla o tempo de vida da sessão e a imposição de sessão única. "Manter conectado" permite que o usuário opte por uma sessão mais longa. Sessão única revoga todas as outras sessões OIDC ativas no login. O timeout por inatividade encerra a sessão do console de conta após inatividade (tokens OIDC não são afetados).',
|
|
1409
|
+
"admin.settings.session_policy_from_config": "Fonte: padrão",
|
|
1410
|
+
"admin.settings.session_policy_from_setting": "Fonte: setting em runtime",
|
|
1411
|
+
"admin.settings.session_policy_remember_enabled_label": 'Exibir checkbox "Manter conectado"',
|
|
1412
|
+
"admin.settings.session_policy_remember_days_label": 'Duração do "manter conectado" (dias)',
|
|
1413
|
+
"admin.settings.session_policy_remember_days_hint": "Duração da sessão OIDC persistente quando o checkbox está marcado.",
|
|
1414
|
+
"admin.settings.session_policy_default_hours_label": "Duração padrão da sessão (horas)",
|
|
1415
|
+
"admin.settings.session_policy_default_hours_hint": "Duração máxima da sessão transiente (checkbox desmarcado ou desabilitado). Derivado de config.ttl.session quando não definido.",
|
|
1416
|
+
"admin.settings.session_policy_single_session_label": "Sessão única por conta",
|
|
1417
|
+
"admin.settings.session_policy_single_session_hint": "Quando habilitado, o login revoga todas as outras sessões OIDC ativas da conta. Tokens emitidos em sessões anteriores ficam inválidos.",
|
|
1418
|
+
"admin.settings.session_policy_idle_timeout_label": "Timeout de inatividade no console de conta (minutos, 0 = desligado)",
|
|
1419
|
+
"admin.settings.session_policy_idle_timeout_hint": "Encerra a sessão do console de conta após este número de minutos de inatividade. Não afeta sessões OIDC ou tokens.",
|
|
1420
|
+
"admin.settings.session_policy_idle_warn": "Aviso de timeout de inatividade: idleTimeoutMinutes excede defaultSessionHours. O timeout de inatividade nunca irá disparar.",
|
|
1421
|
+
"admin.settings.session_policy_remember_days_warn": 'Os dias de "manter conectado" excedem 365. Isso é incomumente longo.',
|
|
1422
|
+
// Admin settings — seções.
|
|
1423
|
+
"admin.settings.section_authentication": "Autenticação",
|
|
1424
|
+
"admin.settings.section_security": "Segurança",
|
|
1425
|
+
"admin.settings.section_sessions": "Sessões",
|
|
1426
|
+
"admin.settings.section_communications": "Comunicações",
|
|
1427
|
+
"admin.settings.section_advanced": "Avançado",
|
|
1428
|
+
// Admin settings — lockout.
|
|
1429
|
+
"admin.settings.lockout_section": "Bloqueio de conta",
|
|
1430
|
+
"admin.settings.lockout_intro": "Bloqueio progressivo de conta por e-mail (anti-força-bruta). Requer @adonisjs/limiter. Campos de política gerenciados aqui; `store` permanece no config estático.",
|
|
1431
|
+
"admin.settings.lockout_from_config": "Fonte: config estático / defaults",
|
|
1432
|
+
"admin.settings.lockout_from_setting": "Fonte: runtime setting",
|
|
1433
|
+
"admin.settings.lockout_max_attempts_label": "Tentativas antes do bloqueio",
|
|
1434
|
+
"admin.settings.lockout_window_sec_label": "Janela deslizante (segundos)",
|
|
1435
|
+
"admin.settings.lockout_base_lockout_sec_label": "Duração do primeiro bloqueio (segundos)",
|
|
1436
|
+
"admin.settings.lockout_max_lockout_sec_label": "Duração máxima do bloqueio (segundos)",
|
|
1437
|
+
// Admin settings — rate_limit.
|
|
1438
|
+
"admin.settings.rate_limit_section": "Rate limit",
|
|
1439
|
+
"admin.settings.rate_limit_intro": "Buckets de rate-limit para login/signup/forgot/reset (por IP) e introspecção de PAT. NOTA: o middleware de throttle de rota usa os valores do boot; esta setting afeta apenas o lockout-side em runtime.",
|
|
1440
|
+
"admin.settings.rate_limit_from_config": "Fonte: config estático / defaults",
|
|
1441
|
+
"admin.settings.rate_limit_from_setting": "Fonte: runtime setting",
|
|
1442
|
+
"admin.settings.rate_limit_login_points_label": "Bucket de login: requests permitidos",
|
|
1443
|
+
"admin.settings.rate_limit_login_duration_label": 'Bucket de login: duração da janela (ex.: "1 min")',
|
|
1444
|
+
"admin.settings.rate_limit_introspection_points_label": "Bucket de introspecção: requests permitidos",
|
|
1445
|
+
"admin.settings.rate_limit_introspection_duration_label": "Bucket de introspecção: duração da janela",
|
|
1446
|
+
"admin.settings.rate_limit_limitation_note": "LIMITAÇÃO: o middleware de throttle de rota usa o config do boot. Esta setting afeta apenas o lockout-side em runtime.",
|
|
1447
|
+
// Admin settings — password_policy.
|
|
1448
|
+
"admin.settings.password_policy_section": "Política de senha",
|
|
1449
|
+
"admin.settings.password_policy_intro": "Requisitos de complexidade para senhas novas. checkPwned verifica contra HaveIBeenPwned (k-anonymity, fail-safe). Campos antes no config do store; gerenciar aqui evita redeploy.",
|
|
1450
|
+
"admin.settings.password_policy_from_config": "Fonte: config estático / defaults",
|
|
1451
|
+
"admin.settings.password_policy_from_setting": "Fonte: runtime setting",
|
|
1452
|
+
"admin.settings.password_policy_min_length_label": "Comprimento mínimo",
|
|
1453
|
+
"admin.settings.password_policy_require_uppercase_label": "Exigir letra maiúscula",
|
|
1454
|
+
"admin.settings.password_policy_require_lowercase_label": "Exigir letra minúscula",
|
|
1455
|
+
"admin.settings.password_policy_require_numbers_label": "Exigir número",
|
|
1456
|
+
"admin.settings.password_policy_require_symbols_label": "Exigir símbolo",
|
|
1457
|
+
"admin.settings.password_policy_check_pwned_label": "Verificar contra HaveIBeenPwned (k-anonymity, fail-safe)",
|
|
1458
|
+
"admin.settings.password_policy_block_common_label": "Bloquear senhas comuns (lista offline com ~10 000 senhas mais usadas, sem distinção de maiúsculas/minúsculas)",
|
|
1459
|
+
// Admin settings — notifications.
|
|
1460
|
+
"admin.settings.notifications_section": "Notificações de login",
|
|
1461
|
+
"admin.settings.notifications_intro": "Alertas de e-mail para novos logins (novo IP) e logins de novo dispositivo. Best-effort, fire-and-forget.",
|
|
1462
|
+
"admin.settings.notifications_from_config": "Fonte: config estático / defaults",
|
|
1463
|
+
"admin.settings.notifications_from_setting": "Fonte: runtime setting",
|
|
1464
|
+
"admin.settings.notifications_new_login_label": "Enviar alerta de novo login (novo IP)",
|
|
1465
|
+
"admin.settings.notifications_new_device_label": "Enviar alerta de login de novo dispositivo",
|
|
1466
|
+
// Admin settings — trusted_devices.
|
|
1467
|
+
"admin.settings.trusted_devices_section": "Dispositivos confiáveis (pular MFA)",
|
|
1468
|
+
"admin.settings.trusted_devices_intro": "Quando habilitado, um cookie encriptado marca o dispositivo como confiável por N dias após verificação MFA. Step-up (acr_values) sempre ignora. Nome do cookie e segredos permanecem no config estático.",
|
|
1469
|
+
"admin.settings.trusted_devices_from_config": "Fonte: config estático / defaults",
|
|
1470
|
+
"admin.settings.trusted_devices_from_setting": "Fonte: runtime setting",
|
|
1471
|
+
"admin.settings.trusted_devices_days_label": "Duração da confiança (dias)",
|
|
1472
|
+
// Admin settings — token_ttl.
|
|
1473
|
+
"admin.settings.token_ttl_section": "TTL de tokens",
|
|
1474
|
+
"admin.settings.token_ttl_intro": "Tempo de vida dos tokens OIDC. Mudanças entram em vigor imediatamente via holder mutável (sem redeploy). O TTL de sessão é gerenciado em Política de sessão. Em segundos.",
|
|
1475
|
+
"admin.settings.token_ttl_from_config": "Fonte: config estático / defaults",
|
|
1476
|
+
"admin.settings.token_ttl_from_setting": "Fonte: runtime setting",
|
|
1477
|
+
"admin.settings.token_ttl_access_token_label": "TTL do access token (segundos)",
|
|
1478
|
+
"admin.settings.token_ttl_id_token_label": "TTL do ID token (segundos)",
|
|
1479
|
+
"admin.settings.token_ttl_refresh_token_label": "TTL do refresh token (segundos)",
|
|
1480
|
+
// Admin settings — admin_impersonation.
|
|
1481
|
+
"admin.settings.admin_impersonation_section": "Impersonation admin",
|
|
1482
|
+
"admin.settings.admin_impersonation_intro": "Exibe o painel de impersonation (RFC 8693 token exchange) na página do usuário no console admin. NÃO é bypass de auth — o exchange exige um access token admin. Altere sem redeploy.",
|
|
1483
|
+
"admin.settings.admin_impersonation_from_config": "Fonte: config estático / defaults",
|
|
1484
|
+
"admin.settings.admin_impersonation_from_setting": "Fonte: runtime setting",
|
|
1485
|
+
// Admin settings — organizations_policy.
|
|
1486
|
+
"admin.settings.organizations_policy_section": "Política de organizações",
|
|
1487
|
+
"admin.settings.organizations_policy_intro": "Política de runtime para organizações (multi-tenancy). A role `owner` é sempre incluída (invariante de governança). Habilitação é determinada por capability-probing e config estático.",
|
|
1488
|
+
"admin.settings.organizations_policy_from_config": "Fonte: config estático / defaults",
|
|
1489
|
+
"admin.settings.organizations_policy_from_setting": "Fonte: runtime setting",
|
|
1490
|
+
"admin.settings.organizations_policy_allow_self_create_label": "Permitir que usuários criem suas próprias organizações",
|
|
1491
|
+
"admin.settings.organizations_policy_invitation_ttl_label": "TTL dos convites (horas)",
|
|
1492
|
+
"admin.settings.organizations_policy_roles_label": "Roles disponíveis (separadas por vírgula; owner sempre incluída)",
|
|
1493
|
+
// Console admin — catálogo de roles (admin/roles) — pt-BR.
|
|
1494
|
+
"admin.roles.page_title": "Catálogo de roles",
|
|
1495
|
+
"admin.roles.title": "Catálogo de roles",
|
|
1496
|
+
"admin.roles.create_section": "Criar role",
|
|
1497
|
+
"admin.roles.create_intro": "Os nomes de role devem usar apenas letras maiúsculas e underscores (ex.: EDITOR, GESTOR_CONTEUDO). A role ADMIN é sempre presente e não pode ser removida.",
|
|
1498
|
+
"admin.roles.name_placeholder": "NOME_DA_ROLE",
|
|
1499
|
+
"admin.roles.name_pattern_hint": "Apenas letras maiúsculas, dígitos e underscores. Deve começar com uma letra.",
|
|
1500
|
+
"admin.roles.description_placeholder": "Descrição (opcional)",
|
|
1501
|
+
"admin.roles.create_submit": "Criar role",
|
|
1502
|
+
"admin.roles.empty": "Nenhuma role no catálogo.",
|
|
1503
|
+
"admin.roles.protected_badge": "Protegida",
|
|
1504
|
+
"admin.roles.save_description": "Salvar",
|
|
1505
|
+
"admin.roles.delete": "Remover",
|
|
1506
|
+
"admin.roles.delete_confirm": "Remover a role {name} do catálogo? Os usuários que já têm esta role continuarão com ela — ela apenas deixará de aparecer no catálogo para novas atribuições.",
|
|
1507
|
+
"admin.roles.delete_note": "Remover uma role do catálogo NÃO a remove dos usuários que já a possuem. Use a página de usuários para atualizar as roles individualmente.",
|
|
1508
|
+
"admin.roles.created": "Role criada.",
|
|
1509
|
+
"admin.roles.updated": "Descrição da role atualizada.",
|
|
1510
|
+
"admin.roles.deleted": "Role removida do catálogo.",
|
|
1511
|
+
"admin.roles.name_invalid": "Nome de role inválido. Use apenas letras maiúsculas, dígitos e underscores, começando com uma letra (ex.: EDITOR, GESTOR_CONTEUDO).",
|
|
1512
|
+
"admin.roles.name_taken": "Já existe uma role com este nome no catálogo.",
|
|
1513
|
+
"admin.roles.admin_protected": "A role ADMIN não pode ser removida — ela é o gate de acesso ao console admin.",
|
|
1514
|
+
"admin.roles.no_settings_table": "A tabela `auth_settings` não existe. O catálogo de roles requer configurações em runtime — crie a tabela primeiro.",
|
|
1515
|
+
"admin.roles.unknown_role": "Uma ou mais roles selecionadas não estão no catálogo. Gerencie o catálogo em /admin/roles.",
|
|
1516
|
+
// Console admin — usuários: seção de roles (UI atualizada) — pt-BR.
|
|
1517
|
+
"admin.users.roles_section": "Roles globais",
|
|
1518
|
+
"admin.users.out_of_catalog_label": "Roles fora do catálogo:",
|
|
1519
|
+
"admin.users.out_of_catalog_badge": "fora do catálogo",
|
|
1520
|
+
// Expiração de conta por inatividade — erro de login (pt-BR).
|
|
1521
|
+
"errors.account_expired": "Sua conta foi desativada por inatividade. Para reativá-la, redefina sua senha.",
|
|
1522
|
+
// Admin settings — account_expiration card (pt-BR).
|
|
1523
|
+
"admin.settings.account_expiration_section": "Expiração de conta por inatividade",
|
|
1524
|
+
"admin.settings.account_expiration_intro": 'Bloqueia o login de contas inativas há mais de N dias (medido pelo último login bem-sucedido no audit). Requer um audit sink queryável (método `list`). Reativação: o usuário redefine a senha. Sem novas colunas — "última atividade" é lida do audit.',
|
|
1525
|
+
"admin.settings.account_expiration_from_config": "Fonte: padrão",
|
|
1526
|
+
"admin.settings.account_expiration_from_setting": "Fonte: setting em runtime",
|
|
1527
|
+
"admin.settings.account_expiration_inactive_days_label": "Limiar de inatividade (dias)",
|
|
1528
|
+
"admin.settings.account_expiration_warn_days_label": "Avisar N dias antes de expirar (0 = desligado)",
|
|
1529
|
+
"admin.settings.account_expiration_no_audit": "Audit sink queryável não disponível. A expiração de conta requer um audit sink com o método `list` (ex.: lucidAuditSink). Habilite o audit primeiro.",
|
|
1530
|
+
// E-mail de aviso de expiração iminente (pt-BR).
|
|
1531
|
+
"mail.account_expiration_warn.subject": "Sua conta será desativada por inatividade",
|
|
1532
|
+
"mail.account_expiration_warn.heading": "Aviso de inatividade de conta",
|
|
1533
|
+
"mail.account_expiration_warn.intro": "Sua conta será desativada em {days} dia(s) por inatividade. Entre na plataforma para manter sua conta ativa.",
|
|
1534
|
+
"mail.account_expiration_warn.cta": "Entrar agora",
|
|
1535
|
+
"mail.account_expiration_warn.fallback": "Se você não usa mais esta conta, pode ignorar este e-mail.",
|
|
1536
|
+
};
|
|
1537
|
+
/**
|
|
1538
|
+
* Locales embutidos no host-kit. O `en` é o default; o `pt-BR` está disponível
|
|
1539
|
+
* com `i18n: { locale: 'pt-BR' }` sem nenhuma config de mensagens extra. Os
|
|
1540
|
+
* overrides/locales do host (via `I18nConfig.messages`) são mesclados por cima.
|
|
1541
|
+
*/
|
|
1542
|
+
export const BUILTIN_MESSAGES = {
|
|
1543
|
+
en: DEFAULT_MESSAGES,
|
|
1544
|
+
"pt-BR": PT_BR_MESSAGES,
|
|
1545
|
+
};
|
|
1546
|
+
/**
|
|
1547
|
+
* Resolve o catálogo ativo. Começa do catálogo embutido do locale selecionado
|
|
1548
|
+
* (ou do default `en` quando o locale não é embutido), depois mescla os
|
|
1549
|
+
* overrides do host por cima. Sem config, retorna o default `en` intacto.
|
|
1550
|
+
* Chaves omitidas caem no default `en` (fallback de cobertura).
|
|
1551
|
+
*/
|
|
1552
|
+
export function resolveMessages(i18n) {
|
|
1553
|
+
const locale = i18n?.locale ?? DEFAULT_LOCALE;
|
|
1554
|
+
// Base: sempre o default `en` para garantir cobertura total das chaves; o
|
|
1555
|
+
// catálogo embutido do locale (ex.: pt-BR) é mesclado por cima.
|
|
1556
|
+
const base = {
|
|
1557
|
+
...DEFAULT_MESSAGES,
|
|
1558
|
+
...(BUILTIN_MESSAGES[locale] ?? {}),
|
|
1559
|
+
};
|
|
1560
|
+
const overrides = i18n?.messages?.[locale];
|
|
1561
|
+
if (!overrides)
|
|
1562
|
+
return base;
|
|
1563
|
+
// Mescla só valores definidos (o `Partial` permite undefined); chaves omitidas
|
|
1564
|
+
// seguem caindo no catálogo base.
|
|
1565
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
1566
|
+
if (value !== undefined)
|
|
1567
|
+
base[key] = value;
|
|
1568
|
+
}
|
|
1569
|
+
return base;
|
|
1570
|
+
}
|
|
1571
|
+
/**
|
|
1572
|
+
* Retorna a string para `key` (cai na própria `key` quando ausente) com
|
|
1573
|
+
* interpolação no estilo `{name}`. Mantém placeholders sem valor intactos.
|
|
1574
|
+
*/
|
|
1575
|
+
export function translate(messages, key, params) {
|
|
1576
|
+
const template = messages[key] ?? key;
|
|
1577
|
+
if (!params)
|
|
1578
|
+
return template;
|
|
1579
|
+
return template.replace(/\{(\w+)\}/g, (match, name) => {
|
|
1580
|
+
const value = params[name];
|
|
1581
|
+
return value === undefined ? match : String(value);
|
|
1582
|
+
});
|
|
1583
|
+
}
|