mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-21 22:46:32 +00:00
12745cd03c
Reworks how the plugins panel talks about safety, since the old copy oversold it. Drops the "install at your own risk" banner and the generic trust note, and replaces them with: - a collapsible security section that lays out plainly how a plugin is contained, what the permissions actually mean (a hard limit on what a plugin CAN do, not a promise of what it does), where the limits are, and what a hostile plugin could do at worst. - a short note on what "Reviewed" means: a maintainer scanned it for malware each version, not for quality — not a guarantee it's harmless. - the consent dialog for the update flow: when an update asks for rights you never granted, it lists the new permissions and outbound hosts and makes you approve before the plugin turns back on. Full copy in all 22 locales.
457 lines
30 KiB
TypeScript
457 lines
30 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const admin: TranslationStrings = {
|
|
'admin.notifications.title': 'Notificações',
|
|
'admin.notifications.hint': 'Escolha um canal de notificação. Apenas um pode estar ativo por vez.',
|
|
'admin.notifications.none': 'Desativado',
|
|
'admin.notifications.email': 'E-mail (SMTP)',
|
|
'admin.notifications.webhook': 'Webhook',
|
|
'admin.notifications.save': 'Salvar configurações de notificação',
|
|
'admin.notifications.saved': 'Configurações de notificação salvas',
|
|
'admin.notifications.testWebhook': 'Enviar webhook de teste',
|
|
'admin.notifications.testWebhookSuccess': 'Webhook de teste enviado com sucesso',
|
|
'admin.notifications.testWebhookFailed': 'Falha ao enviar webhook de teste',
|
|
'admin.smtp.title': 'E-mail e notificações',
|
|
'admin.smtp.hint': 'Configuração SMTP para envio de notificações por e-mail.',
|
|
'admin.smtp.testButton': 'Enviar e-mail de teste',
|
|
'admin.webhook.hint': 'Enviar notificações para um webhook externo (Discord, Slack, etc.).',
|
|
'admin.smtp.testSuccess': 'E-mail de teste enviado com sucesso',
|
|
'admin.smtp.testFailed': 'Falha ao enviar e-mail de teste',
|
|
'admin.title': 'Administração',
|
|
'admin.subtitle': 'Gestão de usuários e configurações do sistema',
|
|
'admin.tabs.users': 'Usuários',
|
|
'admin.tabs.categories': 'Categorias',
|
|
'admin.tabs.backup': 'Backup',
|
|
'admin.stats.users': 'Usuários',
|
|
'admin.stats.trips': 'Viagens',
|
|
'admin.stats.places': 'Lugares',
|
|
'admin.stats.photos': 'Fotos',
|
|
'admin.stats.files': 'Arquivos',
|
|
'admin.table.user': 'Usuário',
|
|
'admin.table.email': 'E-mail',
|
|
'admin.table.role': 'Função',
|
|
'admin.table.created': 'Criado',
|
|
'admin.table.lastLogin': 'Último acesso',
|
|
'admin.table.actions': 'Ações',
|
|
'admin.you': '(Você)',
|
|
'admin.editUser': 'Editar usuário',
|
|
'admin.newPassword': 'Nova senha',
|
|
'admin.newPasswordHint': 'Deixe em branco para manter a senha atual',
|
|
'admin.deleteUser': 'Excluir o usuário "{name}"? Todas as viagens serão excluídas permanentemente.',
|
|
'admin.deleteUserTitle': 'Excluir usuário',
|
|
'admin.newPasswordPlaceholder': 'Digite a nova senha…',
|
|
'admin.toast.loadError': 'Falha ao carregar dados do admin',
|
|
'admin.toast.userUpdated': 'Usuário atualizado',
|
|
'admin.toast.updateError': 'Falha ao atualizar',
|
|
'admin.toast.userDeleted': 'Usuário excluído',
|
|
'admin.toast.deleteError': 'Falha ao excluir',
|
|
'admin.toast.cannotDeleteSelf': 'Não é possível excluir a própria conta',
|
|
'admin.toast.userCreated': 'Usuário criado',
|
|
'admin.toast.createError': 'Falha ao criar usuário',
|
|
'admin.toast.fieldsRequired': 'Nome de usuário, e-mail e senha são obrigatórios',
|
|
'admin.createUser': 'Criar usuário',
|
|
'admin.invite.title': 'Links de convite',
|
|
'admin.invite.subtitle': 'Crie links de cadastro de uso único',
|
|
'admin.invite.create': 'Criar link',
|
|
'admin.invite.createAndCopy': 'Criar e copiar',
|
|
'admin.invite.empty': 'Nenhum link de convite criado ainda',
|
|
'admin.invite.maxUses': 'Máx. usos',
|
|
'admin.invite.expiry': 'Expira após',
|
|
'admin.invite.uses': 'usado(s)',
|
|
'admin.invite.expiresAt': 'expira',
|
|
'admin.invite.createdBy': 'por',
|
|
'admin.invite.active': 'Ativo',
|
|
'admin.invite.expired': 'Expirado',
|
|
'admin.invite.usedUp': 'Esgotado',
|
|
'admin.invite.copied': 'Link de convite copiado para a área de transferência',
|
|
'admin.invite.copyLink': 'Copiar link',
|
|
'admin.invite.deleted': 'Link de convite excluído',
|
|
'admin.invite.createError': 'Falha ao criar link de convite',
|
|
'admin.invite.deleteError': 'Falha ao excluir link de convite',
|
|
'admin.tabs.settings': 'Configurações',
|
|
'admin.allowRegistration': 'Permitir cadastro',
|
|
'admin.allowRegistrationHint': 'Novos usuários podem se cadastrar sozinhos',
|
|
'admin.authMethods': 'Authentication Methods',
|
|
'admin.passwordLogin': 'Password Login',
|
|
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
|
'admin.passwordRegistration': 'Password Registration',
|
|
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
|
'admin.oidcLogin': 'SSO Login',
|
|
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
|
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
|
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
|
'admin.envOverrideHint':
|
|
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
|
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
|
'admin.requireMfa': 'Exigir autenticação em dois fatores (2FA)',
|
|
'admin.requireMfaHint': 'Usuários sem 2FA precisam concluir a configuração em Configurações antes de usar o app.',
|
|
'admin.apiKeys': 'Chaves de API',
|
|
'admin.apiKeysHint': 'Opcional. Habilita dados estendidos de lugares, como fotos e clima.',
|
|
'admin.mapsKey': 'Chave da API Google Maps',
|
|
'admin.mapsKeyHint': 'Necessária para busca de lugares. Obtenha em console.cloud.google.com',
|
|
'admin.mapsKeyHintLong':
|
|
'Sem chave de API, o OpenStreetMap é usado na busca. Com uma chave Google, também podem ser carregadas fotos, avaliações e horários. Obtenha em console.cloud.google.com.',
|
|
'admin.recommended': 'Recomendado',
|
|
'admin.weatherKey': 'Chave OpenWeatherMap',
|
|
'admin.weatherKeyHint': 'Para dados meteorológicos. Grátis em openweathermap.org',
|
|
'admin.validateKey': 'Testar',
|
|
'admin.keyValid': 'Conectado',
|
|
'admin.keyInvalid': 'Inválida',
|
|
'admin.keySaved': 'Chaves de API salvas',
|
|
'admin.oidcTitle': 'Login Único (OIDC)',
|
|
'admin.oidcSubtitle': 'Permitir login via provedores externos como Google, Apple, Authentik ou Keycloak.',
|
|
'admin.oidcDisplayName': 'Nome exibido',
|
|
'admin.oidcIssuer': 'URL do emissor',
|
|
'admin.oidcIssuerHint': 'URL do emissor OpenID Connect do provedor, ex.: https://accounts.google.com',
|
|
'admin.oidcSaved': 'Configuração OIDC salva',
|
|
'admin.oidcOnlyMode': 'Desativar login por senha',
|
|
'admin.oidcOnlyModeHint': 'Quando ativado, só é permitido login SSO. Login e cadastro por senha ficam bloqueados.',
|
|
'admin.fileTypes': 'Tipos de arquivo permitidos',
|
|
'admin.fileTypesHint': 'Configure quais tipos de arquivo os usuários podem enviar.',
|
|
'admin.fileTypesFormat': 'Extensões separadas por vírgula (ex.: jpg,png,pdf,doc). Use * para permitir todos.',
|
|
'admin.fileTypesSaved': 'Configurações de tipos de arquivo salvas',
|
|
'admin.placesPhotos.title': 'Fotos de Locais',
|
|
'admin.placesPhotos.subtitle':
|
|
'Busca fotos da Google Places API. Desative para economizar cota da API. Fotos do Wikimedia não são afetadas.',
|
|
'admin.placesAutocomplete.title': 'Autocompletar de Locais',
|
|
'admin.placesAutocomplete.subtitle':
|
|
'Usa a Google Places API para sugestões de pesquisa. Desative para economizar cota da API.',
|
|
'admin.placesDetails.title': 'Detalhes do Local',
|
|
'admin.placesDetails.subtitle':
|
|
'Busca informações detalhadas do local (horários, avaliação, site) da Google Places API. Desative para economizar cota da API.',
|
|
'admin.bagTracking.title': 'Rastreamento de malas',
|
|
'admin.bagTracking.subtitle': 'Ativar peso e atribuição de mala para itens da lista',
|
|
'admin.collab.chat.title': 'Chat',
|
|
'admin.collab.chat.subtitle': 'Mensagens em tempo real para colaboração',
|
|
'admin.collab.notes.title': 'Notas',
|
|
'admin.collab.notes.subtitle': 'Notas e documentos compartilhados',
|
|
'admin.collab.polls.title': 'Enquetes',
|
|
'admin.collab.polls.subtitle': 'Enquetes e votações em grupo',
|
|
'admin.collab.whatsnext.title': 'Próximos passos',
|
|
'admin.collab.whatsnext.subtitle': 'Sugestões de atividades e próximos passos',
|
|
'admin.tabs.config': 'Personalização',
|
|
'admin.tabs.defaults': 'Padrões do usuário',
|
|
'admin.defaultSettings.title': 'Configurações padrão do usuário',
|
|
'admin.defaultSettings.description':
|
|
'Defina padrões para toda a instância. Usuários que não alteraram uma configuração verão esses valores. As próprias alterações deles sempre têm prioridade.',
|
|
'admin.defaultSettings.saved': 'Padrão salvo',
|
|
'admin.defaultSettings.reset': 'Redefinir para o padrão integrado',
|
|
'admin.defaultSettings.resetToBuiltIn': 'redefinir',
|
|
'admin.tabs.templates': 'Modelos de mala',
|
|
'admin.packingTemplates.title': 'Modelos de mala',
|
|
'admin.packingTemplates.subtitle': 'Crie listas de mala reutilizáveis para suas viagens',
|
|
'admin.packingTemplates.create': 'Novo modelo',
|
|
'admin.packingTemplates.namePlaceholder': 'Nome do modelo (ex.: Praia)',
|
|
'admin.packingTemplates.empty': 'Nenhum modelo criado ainda',
|
|
'admin.packingTemplates.items': 'itens',
|
|
'admin.packingTemplates.categories': 'categorias',
|
|
'admin.packingTemplates.itemName': 'Nome do item',
|
|
'admin.packingTemplates.itemCategory': 'Categoria',
|
|
'admin.packingTemplates.categoryName': 'Nome da categoria (ex.: Roupas)',
|
|
'admin.packingTemplates.addCategory': 'Adicionar categoria',
|
|
'admin.packingTemplates.created': 'Modelo criado',
|
|
'admin.packingTemplates.deleted': 'Modelo excluído',
|
|
'admin.packingTemplates.loadError': 'Falha ao carregar modelos',
|
|
'admin.packingTemplates.createError': 'Falha ao criar modelo',
|
|
'admin.packingTemplates.deleteError': 'Falha ao excluir modelo',
|
|
'admin.packingTemplates.saveError': 'Falha ao salvar',
|
|
'admin.tabs.addons': 'Complementos',
|
|
'admin.tabs.plugins': 'Plugins',
|
|
'admin.plugins.rescan': 'Reescanear',
|
|
'admin.plugins.rescanned': 'Pasta de plugins reescaneada',
|
|
'admin.plugins.browse': 'Explorar plugins',
|
|
'admin.plugins.installed': 'Instalado',
|
|
'admin.plugins.install': 'Instalar',
|
|
'admin.plugins.registryEmpty': 'Nenhum plugin disponível no registro ainda.',
|
|
'admin.plugins.actionError': 'Falha na ação',
|
|
'admin.plugins.activate': 'Ativar',
|
|
'admin.plugins.activated': 'Plugin ativado',
|
|
'admin.plugins.deactivate': 'Desativar',
|
|
'admin.plugins.deactivated': 'Plugin desativado',
|
|
'admin.plugins.viewErrors': 'Ver registro de erros',
|
|
'admin.plugins.errorLog': 'Registro de erros',
|
|
'admin.plugins.noErrors': 'Nenhum erro registrado.',
|
|
'admin.plugins.uninstalled': 'Plugin desinstalado',
|
|
'admin.plugins.uninstallTitle': 'Desinstalar plugin?',
|
|
'admin.plugins.uninstallBody': 'Isso interrompe o plugin, remove seu código e exclui todos os dados dele. Esta ação não pode ser desfeita.',
|
|
'admin.plugins.status.starting': 'Iniciando…',
|
|
'admin.plugins.type.widget': 'Widget',
|
|
'admin.plugins.type.page': 'Página',
|
|
'admin.plugins.type.integration': 'Integração',
|
|
'admin.plugins.reviewed': 'Revisado',
|
|
'admin.plugins.unreviewed': 'Não revisado',
|
|
'admin.plugins.updated': 'Plugin atualizado',
|
|
'admin.plugins.updateTo': 'Atualizar → v{version}',
|
|
'admin.plugins.enabledToggle': 'Ativar plugin',
|
|
'plugins.notFound': 'Plugin não encontrado',
|
|
'admin.plugins.title': 'Plugins',
|
|
'admin.plugins.subtitle': 'Instale e gerencie plugins de terceiros na sua instância.',
|
|
'admin.plugins.disabledTitle': 'Os plugins estão desativados',
|
|
'admin.plugins.disabledBody': 'O runtime de plugins está desligado (TREK_PLUGINS_ENABLED). Nenhum plugin pode ser executado até que um admin o ative na configuração do servidor.',
|
|
'admin.plugins.empty': 'Nenhum plugin instalado ainda.',
|
|
'admin.plugins.loadError': 'Não foi possível carregar os plugins.',
|
|
'admin.plugins.scaffoldNote': 'A instalação e ativação de plugins chegarão em uma atualização futura. Este painel atualmente lista apenas os plugins instalados.',
|
|
'admin.plugins.status.active': 'Ativo',
|
|
'admin.plugins.status.inactive': 'Inativo',
|
|
'admin.plugins.status.disabled': 'Desativado',
|
|
'admin.plugins.status.error': 'Erro',
|
|
'admin.plugins.status.incompatible': 'Incompatível',
|
|
'admin.plugins.details': 'Detalhes',
|
|
'admin.plugins.detailError': 'Não foi possível carregar os detalhes do plugin.',
|
|
'admin.plugins.permissionsTitle': 'Permissões',
|
|
'admin.plugins.noPermissions': 'Este plugin não solicita permissões especiais.',
|
|
'admin.plugins.egressNote': 'Pode se conectar a: {hosts}',
|
|
'admin.plugins.setupTitle': 'Configuração',
|
|
'admin.plugins.noSetup': 'Funciona imediatamente — nada a configurar.',
|
|
'admin.plugins.scope.instance': 'Em toda a instância',
|
|
'admin.plugins.scope.user': 'Por usuário',
|
|
'admin.plugins.fieldRequired': 'Obrigatório',
|
|
'admin.plugins.sourceRepo': 'Repositório de origem',
|
|
'admin.plugins.homepage': 'Página inicial',
|
|
'admin.plugins.requiresTrek': 'Requer TREK {version}+',
|
|
'admin.plugins.reviewedOn': 'Revisado em {date}',
|
|
'admin.plugins.perm.db:own': 'Armazenar seus próprios dados em um banco de dados isolado',
|
|
'admin.plugins.perm.db:read:trips': 'Ler viagens às quais o usuário atual tem acesso',
|
|
'admin.plugins.perm.db:read:users': 'Ler informações básicas de perfil (nome, avatar — nunca credenciais)',
|
|
'admin.plugins.perm.ws:broadcast:trip': 'Enviar atualizações em tempo real aos membros da viagem',
|
|
'admin.plugins.perm.ws:broadcast:user': 'Enviar atualizações em tempo real a usuários individuais',
|
|
'admin.plugins.perm.hook:photo-provider': 'Fornecer fotos para as Memórias',
|
|
'admin.plugins.perm.hook:calendar-source': 'Fornecer eventos para o calendário',
|
|
'admin.plugins.perm.http:outbound': 'Fazer requisições de saída para os hosts declarados',
|
|
'admin.plugins.updateConsentTitle': 'Esta atualização precisa de novas permissões',
|
|
'admin.plugins.updateConsentBody':
|
|
'{name} v{version} está solicitando permissões que você ainda não concedeu. A nova versão está instalada, mas permanece desativada até que você a aprove.',
|
|
'admin.plugins.updateNewPermissions': 'Novas permissões solicitadas',
|
|
'admin.plugins.updateNewEgress': 'Novas conexões de saída',
|
|
'admin.plugins.updateApprove': 'Aprovar e ativar',
|
|
'admin.plugins.updateLater': 'Manter desativado por enquanto',
|
|
'admin.plugins.updateKeptOff': 'Atualização instalada — desativada até você aprovar as novas permissões',
|
|
'admin.plugins.reviewedMeaning':
|
|
'"Revisado" significa que um mantenedor do TREK verificou este plugin em busca de malware em cada versão — não quanto à qualidade ou se ele funciona. Não é garantia de que um plugin seja inofensivo.',
|
|
'admin.plugins.security.title': 'Como os plugins são isolados — e os limites',
|
|
'admin.plugins.security.isolationTitle': 'Todo plugin roda isolado',
|
|
'admin.plugins.security.isolationBody':
|
|
'Um plugin roda como seu próprio processo restrito, que só consegue ler os próprios arquivos. Ele não pode ler seu banco de dados, seu segredo de login ou sua chave de criptografia, não pode iniciar outros programas e não pode gravar arquivos em lugar nenhum. Sua interface roda em um frame de navegador isolado, que não consegue ler o cookie da sua sessão nem interferir na página do TREK ao redor.',
|
|
'admin.plugins.security.permsTitle': 'O que as permissões significam',
|
|
'admin.plugins.security.permsBody':
|
|
'As permissões exibidas antes da instalação são um limite rígido que o TREK impõe enquanto o plugin roda — ele literalmente não consegue fazer nada que não esteja na lista. Mas elas dizem o que um plugin pode fazer, não o que ele de fato faz. Um plugin autorizado a ler suas viagens e a acessar um servidor pode enviar suas viagens para esse servidor, então leia as permissões e os hosts de saída, não apenas a descrição.',
|
|
'admin.plugins.security.limitsTitle': 'O que não podemos garantir',
|
|
'admin.plugins.security.limitsBody':
|
|
'O isolamento é uma barreira de software forte, mas não absoluta. Um plugin age exatamente com as permissões que você aprova, então, dentro dessas permissões, ele pode se comportar de forma diferente do que a descrição sugere e pode enviar dados que legitimamente possui aos hosts que declarou. O TREK não lê nem julga o que o código de um plugin de fato faz.',
|
|
'admin.plugins.security.worstTitle': 'O pior cenário',
|
|
'admin.plugins.security.worstBody':
|
|
'Um plugin hostil que você ativa pode fazer mau uso dos dados e das conexões que você concedeu a ele — por exemplo, vazar as viagens que ele tem permissão para ler. Ele não pode roubar senhas, forjar um login de admin, executar comandos no seu servidor nem acessar dados que você não concedeu. O dano fica restrito ao que você aprovou, e desativar o plugin o interrompe.',
|
|
'admin.plugins.security.reviewedTitle': 'O que significa "Revisado"',
|
|
'admin.plugins.security.reviewedBody':
|
|
'Um plugin revisado foi verificado manualmente em busca de malware por um mantenedor do TREK em cada versão — checado quanto a código malicioso, não quanto a funcionar bem. Não é uma promessa de que o plugin seja inofensivo.',
|
|
'admin.plugins.security.trustTitle': 'Em resumo',
|
|
'admin.plugins.security.trustBody':
|
|
'Instalar um plugin é como instalar qualquer app de terceiros: adicione apenas código de autores em quem você confia e, em caso de dúvida, inspecione-o você mesmo antes. O TREK não assume nenhuma responsabilidade por plugins de terceiros.',
|
|
'admin.addons.title': 'Complementos',
|
|
'admin.addons.subtitle': 'Ative ou desative recursos para personalizar sua experiência no TREK.',
|
|
'admin.addons.catalog.memories.name': 'Memórias',
|
|
'admin.addons.catalog.memories.description': 'Álbuns de fotos compartilhados em cada viagem',
|
|
'admin.addons.catalog.packing.name': 'Listas',
|
|
'admin.addons.catalog.packing.description': 'Listas de bagagem e tarefas a fazer para suas viagens',
|
|
'admin.addons.catalog.budget.name': 'Orçamento',
|
|
'admin.addons.catalog.budget.description': 'Acompanhe despesas e planeje o orçamento da viagem',
|
|
'admin.addons.catalog.documents.name': 'Documentos',
|
|
'admin.addons.catalog.documents.description': 'Armazene e gerencie documentos de viagem',
|
|
'admin.addons.catalog.vacay.name': 'Férias',
|
|
'admin.addons.catalog.vacay.description': 'Planejador de férias pessoal com visão em calendário',
|
|
'admin.addons.catalog.atlas.name': 'Atlas',
|
|
'admin.addons.catalog.atlas.description': 'Mapa mundial com países visitados e estatísticas',
|
|
'admin.addons.catalog.collab.name': 'Colab',
|
|
'admin.addons.catalog.collab.description': 'Notas, enquetes e chat em tempo real para planejar a viagem',
|
|
'admin.addons.catalog.mcp.name': 'MCP',
|
|
'admin.addons.catalog.mcp.description': 'Model Context Protocol para integração com assistentes de IA',
|
|
'admin.addons.subtitleBefore': 'Ative ou desative recursos para personalizar sua ',
|
|
'admin.addons.subtitleAfter': ' experiência.',
|
|
'admin.addons.enabled': 'Ativado',
|
|
'admin.addons.disabled': 'Desativado',
|
|
'admin.addons.type.trip': 'Viagem',
|
|
'admin.addons.type.global': 'Global',
|
|
'admin.addons.type.integration': 'Integração',
|
|
'admin.addons.tripHint': 'Disponível como aba em cada viagem',
|
|
'admin.addons.globalHint': 'Disponível como seção própria na navegação principal',
|
|
'admin.addons.toast.updated': 'Complemento atualizado',
|
|
'admin.addons.toast.error': 'Falha ao atualizar complemento',
|
|
'admin.addons.noAddons': 'Nenhum complemento disponível',
|
|
'admin.addons.integrationHint': 'Serviços de backend e integrações de API sem página dedicada',
|
|
'admin.weather.title': 'Dados meteorológicos',
|
|
'admin.weather.badge': 'Desde 24 de março de 2026',
|
|
'admin.weather.description':
|
|
'O TREK usa Open-Meteo como fonte de clima. Open-Meteo é um serviço gratuito e de código aberto — sem chave de API.',
|
|
'admin.weather.forecast': 'Previsão de 16 dias',
|
|
'admin.weather.forecastDesc': 'Antes eram 5 dias (OpenWeatherMap)',
|
|
'admin.weather.climate': 'Dados climáticos históricos',
|
|
'admin.weather.climateDesc': 'Médias dos últimos 85 anos para dias além da previsão de 16 dias',
|
|
'admin.weather.requests': '10.000 requisições / dia',
|
|
'admin.weather.requestsDesc': 'Grátis, sem chave de API',
|
|
'admin.weather.locationHint':
|
|
'O clima usa o primeiro lugar com coordenadas de cada dia. Se nenhum lugar estiver atribuído ao dia, qualquer lugar da lista serve como referência.',
|
|
'admin.tabs.audit': 'Auditoria',
|
|
'admin.audit.subtitle': 'Eventos sensíveis de segurança e administração (backups, usuários, 2FA, configurações).',
|
|
'admin.audit.empty': 'Nenhum registro de auditoria.',
|
|
'admin.audit.refresh': 'Atualizar',
|
|
'admin.audit.loadMore': 'Carregar mais',
|
|
'admin.audit.showing': '{count} carregados · {total} no total',
|
|
'admin.audit.col.time': 'Hora',
|
|
'admin.audit.col.user': 'Usuário',
|
|
'admin.audit.col.action': 'Ação',
|
|
'admin.audit.col.resource': 'Recurso',
|
|
'admin.audit.col.ip': 'IP',
|
|
'admin.audit.col.details': 'Detalhes',
|
|
'admin.tabs.github': 'GitHub',
|
|
'admin.github.title': 'Histórico de versões',
|
|
'admin.github.subtitle': 'Últimas atualizações de {repo}',
|
|
'admin.github.latest': 'Mais recente',
|
|
'admin.github.prerelease': 'Pré-lançamento',
|
|
'admin.github.showDetails': 'Mostrar detalhes',
|
|
'admin.github.hideDetails': 'Ocultar detalhes',
|
|
'admin.github.loadMore': 'Carregar mais',
|
|
'admin.github.loading': 'Carregando...',
|
|
'admin.github.error': 'Falha ao carregar versões',
|
|
'admin.github.by': 'por',
|
|
'admin.github.support': 'Ajuda a continuar desenvolvendo o TREK',
|
|
'admin.update.available': 'Atualização disponível',
|
|
'admin.update.text': 'O TREK {version} está disponível. Você está na {current}.',
|
|
'admin.update.button': 'Ver no GitHub',
|
|
'admin.update.install': 'Instalar atualização',
|
|
'admin.update.confirmTitle': 'Instalar atualização?',
|
|
'admin.update.confirmText':
|
|
'O TREK será atualizado de {current} para {version}. O servidor reiniciará automaticamente em seguida.',
|
|
'admin.update.dataInfo':
|
|
'Todos os seus dados (viagens, usuários, chaves de API, envios, Vacay, Atlas, orçamentos) serão preservados.',
|
|
'admin.update.warning': 'O app ficará brevemente indisponível durante o reinício.',
|
|
'admin.update.confirm': 'Atualizar agora',
|
|
'admin.update.installing': 'Atualizando…',
|
|
'admin.update.success': 'Atualização instalada! O servidor está reiniciando…',
|
|
'admin.update.failed': 'Falha na atualização',
|
|
'admin.update.backupHint': 'Recomendamos criar um backup antes de atualizar.',
|
|
'admin.update.backupLink': 'Ir para Backup',
|
|
'admin.update.howTo': 'Como atualizar',
|
|
'admin.update.dockerText': 'Sua instância TREK roda no Docker. Para atualizar para {version}, execute no servidor:',
|
|
'admin.update.nonDockerText':
|
|
'Esta instância do TREK não está rodando no Docker. Para atualizar para {version}, execute novamente o método de instalação ou atualização que você usou — por exemplo, no Proxmox Community Scripts, execute a atualização a partir do console do LXC:',
|
|
'admin.update.wikiLink': 'Abrir o guia de atualização',
|
|
'admin.update.reloadHint': 'Recarregue a página em alguns segundos.',
|
|
'admin.tabs.permissions': 'Permissões',
|
|
'admin.tabs.mcpTokens': 'Acesso MCP',
|
|
'admin.mcpTokens.title': 'Acesso MCP',
|
|
'admin.mcpTokens.subtitle': 'Gerenciar sessões OAuth e tokens de API de todos os usuários',
|
|
'admin.mcpTokens.sectionTitle': 'Tokens de API',
|
|
'admin.mcpTokens.owner': 'Proprietário',
|
|
'admin.mcpTokens.tokenName': 'Nome do Token',
|
|
'admin.mcpTokens.created': 'Criado',
|
|
'admin.mcpTokens.lastUsed': 'Último uso',
|
|
'admin.mcpTokens.never': 'Nunca',
|
|
'admin.mcpTokens.empty': 'Nenhum token MCP foi criado ainda',
|
|
'admin.mcpTokens.deleteTitle': 'Excluir Token',
|
|
'admin.mcpTokens.deleteMessage':
|
|
'Isso revogará o token imediatamente. O usuário perderá o acesso MCP por este token.',
|
|
'admin.mcpTokens.deleteSuccess': 'Token excluído',
|
|
'admin.mcpTokens.deleteError': 'Falha ao excluir token',
|
|
'admin.mcpTokens.loadError': 'Falha ao carregar tokens',
|
|
'admin.oauthSessions.sectionTitle': 'Sessões OAuth',
|
|
'admin.oauthSessions.clientName': 'Cliente',
|
|
'admin.oauthSessions.owner': 'Proprietário',
|
|
'admin.oauthSessions.scopes': 'Permissões',
|
|
'admin.oauthSessions.created': 'Criado',
|
|
'admin.oauthSessions.empty': 'Nenhuma sessão OAuth ativa',
|
|
'admin.oauthSessions.revokeTitle': 'Revogar sessão',
|
|
'admin.oauthSessions.revokeMessage': 'Esta sessão OAuth será revogada imediatamente. O cliente perderá o acesso MCP.',
|
|
'admin.oauthSessions.revokeSuccess': 'Sessão revogada',
|
|
'admin.oauthSessions.revokeError': 'Falha ao revogar sessão',
|
|
'admin.oauthSessions.loadError': 'Falha ao carregar sessões OAuth',
|
|
'admin.notifications.emailPanel.title': 'Email (SMTP)',
|
|
'admin.notifications.webhookPanel.title': 'Webhook',
|
|
'admin.notifications.inappPanel.title': 'In-App',
|
|
'admin.notifications.inappPanel.hint':
|
|
'As notificações no aplicativo estão sempre ativas e não podem ser desativadas globalmente.',
|
|
'admin.notifications.adminWebhookPanel.title': 'Webhook de admin',
|
|
'admin.notifications.adminWebhookPanel.hint':
|
|
'Este webhook é usado exclusivamente para notificações de admin (ex. alertas de versão). É independente dos webhooks de usuários e dispara automaticamente quando uma URL está configurada.',
|
|
'admin.notifications.adminWebhookPanel.saved': 'URL do webhook de admin salva',
|
|
'admin.notifications.adminWebhookPanel.testSuccess': 'Webhook de teste enviado com sucesso',
|
|
'admin.notifications.adminWebhookPanel.testFailed': 'Falha no webhook de teste',
|
|
'admin.notifications.adminWebhookPanel.alwaysOnHint':
|
|
'O webhook de admin dispara automaticamente quando uma URL está configurada',
|
|
'admin.notifications.ntfy': 'Ntfy',
|
|
'admin.ntfy.hint':
|
|
'Permite que os usuários configurem seus próprios tópicos ntfy para notificações push. Configure o servidor padrão abaixo para preencher as configurações do usuário.',
|
|
'admin.notifications.testNtfy': 'Enviar Ntfy de teste',
|
|
'admin.notifications.testNtfySuccess': 'Ntfy de teste enviado com sucesso',
|
|
'admin.notifications.testNtfyFailed': 'Falha ao enviar Ntfy de teste',
|
|
'admin.notifications.adminNtfyPanel.title': 'Ntfy de admin',
|
|
'admin.notifications.adminNtfyPanel.hint':
|
|
'Este tópico Ntfy é usado exclusivamente para notificações de admin (ex. alertas de versão). É independente dos tópicos por usuário e sempre dispara quando configurado.',
|
|
'admin.notifications.adminNtfyPanel.serverLabel': 'URL do servidor Ntfy',
|
|
'admin.notifications.adminNtfyPanel.serverHint':
|
|
'Também usado como servidor padrão para notificações ntfy dos usuários. Deixe em branco para usar ntfy.sh. Os usuários podem substituir isso em suas próprias configurações.',
|
|
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
|
'admin.notifications.adminNtfyPanel.topicLabel': 'Tópico de admin',
|
|
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
|
'admin.notifications.adminNtfyPanel.tokenLabel': 'Token de acesso (opcional)',
|
|
'admin.notifications.adminNtfyPanel.tokenCleared': 'Token de acesso admin removido',
|
|
'admin.notifications.adminNtfyPanel.saved': 'Configurações de Ntfy de admin salvas',
|
|
'admin.notifications.adminNtfyPanel.test': 'Enviar Ntfy de teste',
|
|
'admin.notifications.adminNtfyPanel.testSuccess': 'Ntfy de teste enviado com sucesso',
|
|
'admin.notifications.adminNtfyPanel.testFailed': 'Falha ao enviar Ntfy de teste',
|
|
'admin.notifications.adminNtfyPanel.alwaysOnHint': 'O Ntfy de admin sempre dispara quando um tópico está configurado',
|
|
'admin.notifications.adminNotificationsHint':
|
|
'Configure quais canais entregam notificações de admin (ex. alertas de versão). O webhook dispara automaticamente se uma URL de webhook de admin estiver definida.',
|
|
'admin.notifications.tripReminders.title': 'Lembretes de viagem',
|
|
'admin.notifications.tripReminders.hint':
|
|
'Envia uma notificação de lembrete antes do início de uma viagem (requer dias de lembrete definidos na viagem).',
|
|
'admin.notifications.tripReminders.enabled': 'Lembretes de viagem ativados',
|
|
'admin.notifications.tripReminders.disabled': 'Lembretes de viagem desativados',
|
|
'admin.tabs.notifications': 'Notificações',
|
|
'admin.addons.catalog.journey.name': 'Jornada',
|
|
'admin.addons.catalog.journey.description':
|
|
'Rastreamento de viagens e diário de viajante com check-ins, fotos e histórias diárias',
|
|
'admin.addons.catalog.collections.name': 'Coleções',
|
|
'admin.addons.catalog.collections.description':
|
|
'Biblioteca pessoal de lugares — salve lugares entre viagens em listas nomeadas, copie para qualquer viagem, compartilhe com outras pessoas',
|
|
'admin.passkey.title': 'Login com passkey',
|
|
'admin.passkey.cardHint': 'Permite que os usuários entrem com passkeys (WebAuthn). Desativado por padrão.',
|
|
'admin.passkey.login': 'Ativar login com passkey',
|
|
'admin.passkey.loginHint':
|
|
'Mostra a opção "Entrar com uma passkey" e permite que os usuários cadastrem passkeys nas configurações.',
|
|
'admin.passkey.notConfigured':
|
|
'Nenhum domínio WebAuthn é resolvido para esta instalação ainda. Defina APP_URL ou o Relying Party ID abaixo — as passkeys ficam ocultas até lá.',
|
|
'admin.passkey.rpId': 'Relying Party ID (domínio)',
|
|
'admin.passkey.rpIdHint':
|
|
'O domínio puro ao qual as passkeys ficam vinculadas, ex.: trek.example.org. Deixe vazio para derivá-lo de APP_URL. Alterá-lo depois invalida as passkeys existentes.',
|
|
'admin.passkey.origins': 'Origens permitidas',
|
|
'admin.passkey.originsHint':
|
|
'Origens completas separadas por vírgula, ex.: https://trek.example.org. Deixe vazio para usar APP_URL.',
|
|
'admin.passkey.reset': 'Redefinir passkeys',
|
|
'admin.passkey.resetHint':
|
|
'Remove todas as passkeys deste usuário (ex.: em caso de perda do dispositivo). Ele ainda poderá entrar com a senha.',
|
|
'admin.passkey.resetConfirm': 'Remover todas as passkeys de {name}?',
|
|
'admin.passkey.resetDone': 'Removida(s) {count} passkey(s)',
|
|
'admin.defaultSettings.mapProvider': 'Motor de mapas',
|
|
'admin.defaultSettings.mapProviderHint':
|
|
'O mapa padrão para todos nesta instância. Cada usuário ainda pode substituí-lo nas próprias configurações.',
|
|
'admin.defaultSettings.providerLeaflet': 'Padrão (gratuito)',
|
|
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
|
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
|
|
'admin.defaultSettings.mapboxToken': 'Token compartilhado do Mapbox',
|
|
'admin.defaultSettings.mapboxTokenHint':
|
|
'Usado para todos os usuários que não inseriram o próprio token — assim toda a instância usa o Mapbox sem compartilhar a chave individualmente. Armazenado de forma criptografada.',
|
|
'admin.defaultSettings.mapboxStyle': 'Estilo do mapa',
|
|
'admin.defaultSettings.mapboxStylePlaceholder': 'Escolha um estilo…',
|
|
'admin.defaultSettings.mapbox3d': 'Edifícios & relevo em 3D',
|
|
'admin.defaultSettings.mapboxQuality': 'Modo de alta qualidade',
|
|
'admin.group.users': 'Users',
|
|
'admin.group.config': 'Configuration',
|
|
'admin.group.integration': 'Integrations',
|
|
'admin.group.maintenance': 'Maintenance',
|
|
'admin.invite.tripLabel': 'Adicionar à viagem (opcional)',
|
|
'admin.invite.tripNone': 'Nenhuma viagem',
|
|
'admin.invite.tripHint': 'O novo usuário é adicionado automaticamente a esta viagem ao se registrar pelo link.',
|
|
'admin.invite.boundTo': 'adiciona a {trip}',
|
|
};
|
|
export default admin;
|