Files
TREK/shared/src/i18n/br/admin.ts
T
Maurice e12ae950df feat(places): send a search to Google, once or always
Since 4.3.0 the TREK index and OpenStreetMap answer every search first and
Google is only asked when they find nothing, so a list with the wrong place
on it never reached Google, whatever key the instance had, and the provider
choice only decided who fills the empty case.

Two ways to change that, both only where Google holds the key slot. Under a
result list that did not come from Google, one quiet line sends the same
query to Google Places alone (`provider: 'google'` on the search contract,
the MCP search tool takes it too). And beside the key, an admin switch
"Search with Google only" hands every search and every suggestion to Google
and asks nothing of the index or OpenStreetMap; off by default, read by the
search after the keyed provider so an install without a key, or one on Amap
or OpenStreetMap, is untouched. The panel says so beside the switch.

Both shells share the one rule for when the line is offered (placeSource),
and the wiki names both switches.
2026-09-21 22:14:44 +02:00

809 lines
57 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': 'De onde vêm os dados de locais. O índice do TREK não precisa de chave; os dois provedores abaixo são opcionais.',
'admin.trekApi.badgeDefault': 'Padrão recomendado',
'admin.googleCaveat.badge': 'Não recomendado',
'admin.googleCaveat.body':
'O TREK é código aberto e aqui não somos neutros. Nesta escala, avaliações e fotos de estabelecimentos comuns só existem no Google, e isso é um monopólio. O campo está aqui por falta de alternativa, não porque o recomendamos. Aí cada consulta vai para o Google.',
'admin.trekApi.tagline':
'O índice de locais do próprio TREK. Pesquisar sem chave do Google, sem cota e sem que ninguém conte as suas buscas.',
'admin.trekApi.factPlaces':
'73,6 milhões de locais no mundo',
'admin.trekApi.factNoKey':
'Sem chave, sem cota',
'admin.trekApi.factOffline':
'Os pacotes por país funcionam offline',
'admin.trekApi.factPrivacy':
'As buscas nunca são registadas',
'admin.trekApi.more':
'O que vem dentro',
'admin.trekApi.fieldPhone':
'Telefone',
'admin.trekApi.fieldStableId':
'Identificador estável',
'admin.trekApi.includedNote':
'As descrições vêm do site do próprio local; os horários, do OpenStreetMap onde estiverem preenchidos.',
'admin.trekApi.notRatings':
'Avaliações',
'admin.trekApi.notPhotos':
'Fotos de estabelecimentos comuns',
'admin.trekApi.notIncludedNote':
'Nenhuma fonte aberta tem uma nem outra, a preço nenhum. Para essas duas uma chave do Google continua sendo o único caminho.',
'admin.trekApi.sourcesLabel':
'Fontes',
'admin.trekApi.sourcesNote':
'Cada campo de uma resposta diz de qual delas veio.',
'admin.trekApi.included':
'Incluído',
'admin.trekApi.notIncluded':
'Não incluído',
'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 do Google é usada a API do TREK recomendada. Com uma chave é possível carregar além disso fotos, avaliações e horários. Crie uma em console.cloud.google.com.',
'admin.recommended': 'Recomendado',
'admin.weatherKey': 'Chave OpenWeatherMap',
'admin.weatherKeyHint': 'Para dados meteorológicos. Grátis em openweathermap.org',
'admin.unsplashKey': 'Chave de API do Unsplash',
'admin.unsplashKeyHint': 'Para busca de imagens. Grátis em unsplash.com/developers',
'admin.amapKey': 'Chave de API do Amap (高德地图)',
'admin.amapKeyHint':
'Para a busca de lugares na China continental, onde o Google é inacessível e o OpenStreetMap tem poucos dados. Exige uma chave do tipo "Web 服务" (serviço web), não uma chave da API JS. Obtenha em console.amap.com.',
'admin.placesProvider.title': 'Provedor de busca de lugares',
'admin.placesProvider.subtitle': 'O índice do próprio TREK e o OpenStreetMap respondem a cada busca. Aqui se escolhe quem mais é consultado quando eles não acham nada: Automático prefere o Google se houver chave, depois Amap.',
'admin.placesProvider.auto': 'Automático',
'admin.placesProvider.google': 'Google Places',
'admin.placesProvider.amap': 'Amap (高德地图)',
'admin.placesProvider.openstreetmap': 'OpenStreetMap',
'admin.placesProvider.missingKey': 'O provedor selecionado não tem chave de API configurada, então a busca de lugares é respondida apenas pelo índice do TREK e pelo OpenStreetMap.',
'admin.placesProvider.saved': 'Provedor de busca de lugares salvo',
'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.googleOptions': 'Para que a chave é usada',
'admin.googleOptionsSummary': '{on} de {total} ativados',
'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.placesEnrich.title': 'Enriquecimento de lugares',
'admin.placesEnrich.subtitle':
'Mostra imagens e uma descrição ao adicionar um lugar. Wikipédia e OpenStreetMap são sempre usados; o Google entra quando Fotos de lugares ou Detalhes de lugares estão ativos.',
'admin.placesGoogleOnly.title': 'Pesquisar apenas com o Google',
'admin.placesGoogleOnly.subtitle': 'Toda pesquisa e toda sugestão vão para o Google Places. Desligado, o índice do TREK e o OpenStreetMap respondem primeiro, e o Google só é consultado se eles não encontrarem nada.',
'admin.placesGoogleOnly.missingKey': 'Precisa de uma chave de API do Google Maps. Sem ela, a pesquisa usa o índice do TREK e o OpenStreetMap, independentemente desta chave.',
'admin.transitProvider.title': 'Provedor de transporte público',
'admin.transitProvider.subtitle': 'Qual serviço responde à busca de transporte público.',
'admin.transitProvider.transitous': 'Transitous (grátis)',
'admin.transitProvider.google': 'Google',
'admin.transitProvider.transitousHint': 'Feeds GTFS da comunidade. Gratuito e sem chave, com a melhor cobertura na Europa.',
'admin.transitProvider.googleHint': 'Usa a chave do Google acima, para regiões sem dados no Transitous. Cobrado por busca — o Transitous é usado enquanto nenhuma chave estiver configurada.',
'admin.transitProvider.noKeyWarning': 'O Google está selecionado, mas nenhuma chave do Google está configurada — a busca de transporte ainda usa o Transitous. Adicione uma chave em Chaves de API acima.',
'admin.transitProvider.personalKeyWarning': 'Apenas a sua própria chave do Google está definida, então a busca dos outros membros ainda cai no Transitous. Salve a chave acima como admin para aplicá-la a toda a instância.',
'admin.placeShadow.title': 'Registo de pesquisas de locais',
'admin.placeShadow.subtitle':
'Registar qual resultado de pesquisa foi escolhido, para que outro índice de locais possa ser avaliado depois com pesquisas reais. Nada sai desta instância e um administrador pode exportar ou apagar o registo a qualquer momento.',
'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.deleteCategoryError': 'Falha ao excluir a categoria',
'admin.packingTemplates.deleteItemError': 'Falha ao excluir o item',
'admin.packingTemplates.saveError': 'Falha ao salvar',
'admin.tabs.addons': 'Complementos',
'admin.tabs.plugins': 'Plugins',
'admin.tabs.storage': 'Armazenamento',
'admin.plugins.rescan': 'Reescanear',
'admin.plugins.rescanned': 'Pasta de plugins reescaneada',
'admin.plugins.upload': 'Enviar plugin',
'admin.plugins.dropToUpload': 'Solte um .zip de plugin para instalar',
'admin.plugins.uploaded': 'Plugin “{name}” enviado — ative para executar',
'admin.plugins.sideloaded': 'Carregado manualmente',
'admin.plugins.devLinkBadge': 'Dev-Link',
'admin.plugins.devLinkHint':
'Carregado de um diretório de build local e recarregado a quente com dados reais — apenas para desenvolvimento',
'admin.plugins.devLinkTitle': 'Vincular um plugin local',
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
'admin.plugins.devLinkButton': 'Vincular',
'admin.plugins.devLinkLinked': '{id} vinculado — ative-o para executar',
'admin.plugins.sideloadedHint': 'Enviado manualmente — não é do registro, sem assinatura e sem revisão',
'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.allowedHosts': 'Hosts permitidos',
'admin.plugins.allowedHosts.hint':
'Este plugin fala com um serviço que só você pode nomear (um servidor auto-hospedado). Adicione os hosts que ele pode alcançar — nenhum outro.',
'admin.plugins.allowedHosts.none': 'Nenhum host adicionado ainda.',
'admin.plugins.allowedHosts.unsupported':
'Este plugin não usa hosts fornecidos pelo operador. Seus hosts permitidos são fixos no manifesto.',
'admin.plugins.allowedHosts.restartNote': 'Salvar reinicia o plugin para que ele use a nova lista.',
'admin.plugins.allowedHosts.add': 'Adicionar host permitido',
'admin.plugins.allowedHosts.count': '{n} host(s) permitido(s)',
'admin.plugins.operatorEgressPill': '+ hosts que você adicionar',
'admin.plugins.operatorEgressHint':
'Este plugin fala com um serviço que só você pode nomear (um servidor auto-hospedado). Após instalar, adicione os hosts que ele pode alcançar em ⋯ → Hosts permitidos. Nenhum outro.',
'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.type.trip-page': 'Página da viagem',
'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',
'plugins.frameLoadFailed': 'This plugin could not be loaded.',
'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.reportIssue': 'Relatar um problema',
'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.db:read:costs': 'Ler despesas (itens de orçamento) às quais o usuário atual tem acesso',
'admin.plugins.perm.db:read:packing': 'Ler listas de bagagem de viagens às quais o usuário atual tem acesso',
'admin.plugins.perm.db:write:packing':
'Criar, editar e remover itens da lista de bagagem em viagens que o usuário atual pode editar',
'admin.plugins.perm.weather:read': 'Ler a previsão do tempo em cache do host (por coordenadas)',
'admin.plugins.perm.db:read:categories': 'Ler a lista global de categorias de locais',
'admin.plugins.perm.db:read:tags': 'Ler as etiquetas do usuário atual',
'admin.plugins.perm.db:write:tags': 'Criar, editar e remover as etiquetas do usuário atual',
'admin.plugins.perm.db:read:todos': 'Ler as tarefas de viagens às quais o usuário atual tem acesso',
'admin.plugins.perm.db:write:todos': 'Criar, editar e remover tarefas em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:atlas':
'Marcar países e regiões como visitados e gerenciar a lista de desejos do usuário atual (requer o complemento Atlas)',
'admin.plugins.perm.db:write:vacay':
'Alternar dias de férias e feriados da empresa no plano ativo do usuário atual (requer o complemento Vacay)',
'admin.plugins.perm.db:write:journal':
'Criar, editar e remover entradas de diário em diários que o usuário atual pode editar (requer o complemento Journey)',
'admin.plugins.perm.db:write:collections':
'Criar e editar coleções e salvar locais nelas, com o papel de coleção do usuário atual (requer o complemento Collections)',
'admin.plugins.perm.db:write:files':
'Anexar arquivos a viagens que o usuário atual pode editar (limite de 10 MB, extensões bloqueadas recusadas) e gerenciar seus vínculos',
'admin.plugins.perm.db:write:collab':
'Publicar notas, enquetes e mensagens de chat em viagens que o usuário atual pode editar (requer o complemento Collab)',
'admin.plugins.perm.db:write:members':
'Adicionar usuários a viagens — concede acesso à viagem; protegido pelo direito de gerenciar membros do usuário atual',
'admin.plugins.perm.notify:send':
'Enviar uma notificação (caixa do sino + e-mail/ntfy) ao usuário atual ou a uma viagem à qual ele pertence — nunca a um destinatário arbitrário',
'admin.plugins.perm.ai:invoke':
'Usar o provedor de IA configurado pelo administrador (conclusão de texto + extração de documentos) em nome do usuário atual — o complemento nunca guarda uma chave',
'admin.plugins.perm.oauth:client':
'Conectar-se a um serviço de terceiros em seu nome via OAuth intermediado pelo host (o host guarda os tokens, o plugin nunca os vê)',
'admin.plugins.perm.db:read:files': 'Ler arquivos de viagens às quais o usuário atual tem acesso',
'admin.plugins.perm.db:write:reservations':
'Criar, editar e remover reservas em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:accommodations':
'Criar, editar e remover acomodações em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:read:journal': 'Ler os diários de viagem do usuário atual (requer o complemento Journey)',
'admin.plugins.perm.db:read:atlas':
'Ler os países e regiões visitados pelo usuário atual (requer o complemento Atlas)',
'admin.plugins.perm.db:read:vacay': 'Ler o plano de férias do usuário atual (requer o complemento Vacay)',
'admin.plugins.perm.db:read:daynotes': 'Ler as notas do dia de viagens às quais o usuário atual tem acesso',
'admin.plugins.perm.db:read:collections':
'Ler as coleções de locais salvos do usuário atual (requer o complemento Collections)',
'admin.plugins.perm.db:write:daynotes':
'Criar, editar e remover notas do dia em viagens que o usuário atual pode editar',
'admin.plugins.perm.jobs:run':
'Executar seus jobs em segundo plano de forma agendada (sem contexto de usuário — não pode ler dados do usuário)',
'admin.plugins.perm.db:write:costs': 'Criar despesas (itens de orçamento) em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:places': 'Adicionar, editar e remover locais em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:days': 'Adicionar, editar e remover dias em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:itinerary':
'Atribuir e remover locais em dias de viagens que o usuário atual pode editar',
'admin.plugins.perm.db:write:trips':
'Editar detalhes da viagem (título, datas, moeda…) em viagens que o usuário atual pode editar',
'admin.plugins.perm.db:meta':
'Anexar seus próprios dados privados a viagens, locais e dias que o usuário atual pode acessar',
'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.hook:place-detail-provider':
'Contribuir com detalhes extras (avaliações, notas, links) para um local',
'admin.plugins.perm.hook:search-provider':
'Responder buscas de lugares a partir de um índice próprio, ao lado dos resultados do TREK',
'admin.plugins.perm.hook:trip-warning-provider': 'Emitir avisos de validação em uma viagem (exibidos no planejador)',
'admin.plugins.perm.hook:table-contributor':
'Adicionar colunas e ações às visualizações da viagem (reservas, locais, dias)',
'admin.plugins.perm.hook:map-marker-provider':
'Adicionar marcadores ao mapa da viagem (ex. mostrar reservas ou POIs)',
'admin.plugins.perm.hook:map-layer-provider': 'Desenhar rotas, corredores e zonas no mapa da viagem',
'admin.plugins.perm.hook:route-provider':
'Oferecer perfis de roteamento com os quais o planejador calcula os dias (ex. rotas para carro elétrico com paradas de recarga)',
'admin.plugins.perm.hook:day-schedule-provider':
'Anexar entradas de horário ao plano do dia (paradas de recarga, margens de segurança)',
'admin.plugins.perm.hook:day-tint-provider':
'Colorir os dias no plano do dia (por exemplo, a qual trecho da viagem um dia pertence)',
'admin.plugins.cap.mcpTools': 'Publica ferramentas de IA',
'admin.plugins.mcpToolsTitle': 'Ferramentas de IA publicadas',
'admin.plugins.mcpToolsHint': 'Um assistente pode executá-las em nome de um usuário. Cada uma age com o acesso concedido acima.',
'admin.plugins.perm.mcp:tools':
'Publicar ferramentas que um assistente de IA pode executar em seu nome (ele age com o acesso que você concede ao plugin aqui, não com o dele)',
'admin.plugins.perm.geolocation:read':
'Consultar sua localização em tempo real enquanto uma das visualizações dele estiver aberta (o TREK a lê com a permissão de localização deste site, não com uma permissão própria do plugin)',
'admin.plugins.perm.hook:pdf-section-provider': 'Anexar seções de texto à exportação em PDF da viagem',
'admin.plugins.perm.hook:atlas-layer-provider':
'Destacar países no mapa-múndi do Atlas (ex. listas de desejos ou avisos de viagem)',
'admin.plugins.perm.hook:journal-entry-provider':
'Adicionar linhas extras (links, estatísticas) às entradas do diário',
'admin.plugins.perm.hook:user-data':
'Apagar ou exportar os dados que armazena sobre um usuário (LGPD/GDPR: exclusão de conta e solicitações de dados)',
'admin.plugins.perm.hook:trip-card-provider':
'Adicionar pequenos selos (status, contagens) aos cartões de viagem do painel',
'admin.plugins.perm.hook:notification-channel': 'Entregar suas notificações por um canal adicional',
'admin.plugins.perm.events:subscribe':
'Reagir a eventos de atividade do núcleo (apenas nome do evento + viagem, nunca o conteúdo)',
'admin.plugins.perm.http:outbound': 'Fazer requisições de saída para os hosts declarados',
'admin.plugins.perm.db:read:collab':
'Ler notas, enquetes e mensagens de chat de viagens às quais o usuário atual tem acesso (requer o complemento Collab)',
'admin.plugins.perm.db:read:files:content':
'Ler o conteúdo (bytes) dos arquivos de viagens às quais o usuário atual tem acesso',
'admin.plugins.perm.db:create:trips': 'Criar novas viagens pertencentes ao usuário atual',
'admin.plugins.perm.rates:read': 'Ler as taxas de câmbio em cache do host',
'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.signedTitle': 'O que significa "Assinado"',
'admin.plugins.security.signedBody':
'A soma de verificação que o TREK confere em toda instalação prova que os arquivos são exatamente aqueles pelos quais o registro responde. Uma assinatura prova algo diferente: que eles vieram do autor, assinados com uma chave que só ele possui. Um plugin assinado tem as duas coisas. Um plugin sem assinatura não é inseguro — ele apenas carrega uma garantia a menos, e hoje a maioria dos plugins do registro não é assinada.',
'admin.plugins.signed': 'Assinado',
'admin.plugins.signedHint': 'Verificado contra a chave de assinatura do autor no momento da instalação',
'admin.plugins.unsigned': 'Sem assinatura',
'admin.plugins.unsignedHint':
'Os arquivos correspondem àquilo pelo qual o registro responde, mas nada os liga ao autor. Uma garantia a menos — não é inseguro.',
'admin.plugins.updateBlocked': 'Atualização bloqueada — {reason}',
'admin.plugins.reviewBlock': 'Revisar',
'admin.plugins.retrusted': 'Nova chave de assinatura confiada — o plugin foi atualizado',
'admin.plugins.sig.title': 'Não foi possível verificar a assinatura de {name}',
'admin.plugins.sig.keyChangedBody':
'A chave de assinatura do autor não é aquela com a qual este plugin foi instalado. Autores realmente trocam de chave — mas um invasor que tivesse assumido o plugin se pareceria exatamente com isto.',
'admin.plugins.sig.invalidBody':
'Os arquivos não correspondem à assinatura do autor. Eles não são o que o autor assinou — ou foram corrompidos, ou foram adulterados. Isso não pode ser ignorado.',
'admin.plugins.sig.missingBody':
'Este plugin estava assinado quando você o instalou, mas a nova versão não traz assinatura alguma. O TREK não vai aceitar essa perda em silêncio. Isso não pode ser ignorado.',
'admin.plugins.sig.incompleteBody':
'A entrada no registro está assinada pela metade: ela declara uma chave do autor, mas a versão não traz assinatura (ou o contrário). Isso é um erro do lado do plugin. Isso não pode ser ignorado.',
'admin.plugins.sig.pinnedKey': 'Chave com que foi instalado',
'admin.plugins.sig.newKey': 'Chave que ele está oferecendo agora',
'admin.plugins.sig.confirmOutOfBand':
'O TREK não consegue distinguir uma troca legítima de chave de um sequestro do plugin — daqui, as duas coisas são idênticas. Confirme a nova chave com o autor por um canal em que você já confia antes de aceitá-la. Assim que aceitar, o plugin é atualizado e a nova chave passa a ser lembrada.',
'admin.plugins.sig.retrustConfirm': 'Confiar na nova chave e atualizar',
'admin.plugins.sig.cancel': 'Não confiar',
'admin.plugins.sig.consentUnsigned':
'Nada liga esta versão ao seu autor — os arquivos correspondem ao registro, mas não trazem assinatura do autor.',
'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.plugins.runtimeOn': 'Runtime ativo',
'admin.plugins.tabDiscover': 'Descobrir',
'admin.plugins.searchPlaceholder': 'Buscar plugins…',
'admin.plugins.filterType': 'Tipo',
'admin.plugins.filterStatus': 'Status',
'admin.plugins.sortBy': 'Ordenar',
'admin.plugins.allTypes': 'Todos os tipos',
'admin.plugins.allStatuses': 'Todos',
'admin.plugins.stateOff': 'Desligado',
'admin.plugins.filterUpdate': 'Atualização disponível',
'admin.plugins.sortName': 'Nome',
'admin.plugins.sortRecent': 'Atualizados recentemente',
'admin.plugins.sortUpdates': 'Atualizações primeiro',
'admin.plugins.sortDownloads': 'Mais baixados',
'admin.plugins.updatesAvailable': '{count} atualizações disponíveis para seus plugins.',
'admin.plugins.newerNeedsTrek': 'v{version} disponível — requer TREK {range}',
'admin.plugins.versionsTitle': 'Versões',
'admin.plugins.versionPickerTitle': 'Alterar versão — {name}',
'admin.plugins.versionSwitch': 'Mudar para {version}',
'admin.plugins.versionNeedsTrek': 'requer TREK {range}',
'admin.plugins.changeVersion': 'Alterar versão…',
'admin.plugins.noVersions': 'Nenhuma versão publicada encontrada no registro.',
'admin.plugins.downgradeTitle': 'Reverter este plugin?',
'admin.plugins.downgradeBody': 'Mudando de v{from} para v{to}: os dados gravados pela versão mais recente permanecem no lugar, e a versão mais antiga pode não entendê-los.',
'admin.plugins.downgradeConfirm': 'Reverter',
'admin.plugins.updatesHeld': 'Atualizações pausadas em v{version}',
'admin.plugins.resumeUpdates': 'Retomar atualizações',
'admin.plugins.updatesResumed': 'Atualizações retomadas',
'admin.plugins.updateAll': 'Atualizar todos',
'admin.plugins.noMatchInstalled': 'Nenhum plugin instalado corresponde à sua busca.',
'admin.plugins.noMatchRegistry': 'Nenhum plugin no registro corresponde à sua busca.',
'admin.plugins.restart': 'Reiniciar',
'admin.plugins.restarted': 'Plugin reiniciado',
'admin.plugins.instanceSettings': 'Configurações da instância',
'admin.plugins.settingsSaved': 'Configurações salvas',
'admin.plugins.settingsSavedRestarted': 'Configurações salvas — plugin reiniciado',
'admin.plugins.actions': 'Ações',
'admin.plugins.actions.confirm': 'Executar esta ação?',
'admin.plugins.actions.inactive': 'Ative o plugin para executar suas ações',
'admin.plugins.requiredMissing': '"{field}" é obrigatório',
'admin.plugins.cap.readsTrips': 'Lê suas viagens',
'admin.plugins.cap.readsUsers': 'Lê perfis básicos',
'admin.plugins.cap.readsCosts': 'Lê suas despesas',
'admin.plugins.cap.readsPacking': 'Lê listas de bagagem',
'admin.plugins.cap.readsFiles': 'Lê arquivos de viagem',
'admin.plugins.cap.writesCosts': 'Adiciona despesas',
'admin.plugins.cap.writesPlaces': 'Edita locais',
'admin.plugins.cap.writesDays': 'Edita dias',
'admin.plugins.cap.writesItinerary': 'Edita o itinerário',
'admin.plugins.cap.writesTrips': 'Edita viagens',
'admin.plugins.cap.metadata': 'Adiciona metadados',
'admin.plugins.cap.widget': 'Widget do painel',
'admin.plugins.cap.heroWidget': 'Widget de cartão de embarque',
'admin.plugins.cap.placeSlot': 'Detalhe do local',
'admin.plugins.cap.daySlot': 'Detalhe do dia',
'admin.plugins.cap.reservationSlot': 'Detalhe da reserva',
'admin.plugins.cap.replacesTabs': 'Substitui abas do planejador',
'admin.plugins.cap.realtime': 'Atualizações em tempo real',
'admin.plugins.cap.notificationChannel': 'Canal de notificação',
'admin.plugins.cap.photos': 'Fornece fotos',
'admin.plugins.cap.calendar': 'Fornece eventos de calendário',
'admin.plugins.cap.placeDetails': 'Enriquece locais',
'admin.plugins.cap.search': 'Responde buscas',
'admin.plugins.cap.warnings': 'Sinaliza problemas',
'admin.plugins.cap.mapLayers': 'Desenha no mapa',
'admin.plugins.cap.routing': 'Oferece roteamento',
'admin.plugins.cap.daySchedule': 'Adiciona horários ao plano',
'admin.plugins.cap.dayTint': 'Colore os dias',
'admin.plugins.cap.geolocation': 'Lê sua localização',
'admin.plugins.cap.events': 'Reage a atividades',
'admin.plugins.cap.requiresAddon': 'Requer {addon}',
'admin.plugins.cap.dependsOn': 'Requer {id} {version}',
'admin.plugins.dep.addonDisabledToast': 'Ative primeiro os complementos necessários: {addons}',
'admin.plugins.dep.autoEnabled': 'Plugins necessários ativados primeiro: {plugins}',
'admin.plugins.dep.downloaded': '{id} baixado',
'admin.plugins.dep.resolveTitle': 'Dependências ausentes',
'admin.plugins.dep.resolveBody': '“{name}” precisa que estes plugins estejam instalados antes de ser ativado.',
'admin.plugins.dep.requires': 'Requer {version}',
'admin.plugins.dep.mismatch': 'Requer {wanted} — {installed} está instalado',
'admin.plugins.dep.download': 'Baixar',
'admin.plugins.dep.update': 'Atualizar',
'admin.plugins.dep.resolveHint': 'Baixa a versão compatível mais recente, incluindo suas próprias dependências.',
'admin.plugins.dep.trekIncompatible': 'Requer TREK {range} — este servidor executa {host}',
'admin.plugins.dep.trekUnknown': 'Não informa quais versões do TREK são compatíveis',
'admin.plugins.installCompatible': 'Instalar {version}',
'admin.plugins.installAnyway': 'Instalar mesmo assim',
'admin.plugins.rangeBypass.pill': 'Verificações de versão desligadas',
'admin.plugins.rangeBypass.pillHint':
'TREK_PLUGINS_IGNORE_TREK_RANGE está definido — plugins podem ser instalados e executados fora das versões do TREK declaradas por seus autores',
'admin.plugins.rangeBypass.title': 'Fora das versões do TREK suportadas',
'admin.plugins.rangeBypass.noticeTitle': 'Instalado fora das versões do TREK suportadas',
'admin.plugins.rangeBypass.body':
'“{name}” declara suporte ao TREK {range}, e este servidor executa {host}. O TREK só o deixa passar porque TREK_PLUGINS_IGNORE_TREK_RANGE está definido. O autor não atualizou o intervalo de versões do plugin para este TREK, então não há garantia de que funcione — e, em casos raros, um plugin incompatível pode corromper os dados do TREK. Continue apenas se aceitar esse risco.',
'admin.plugins.rangeBypass.bodyUnknown':
'“{name}” não declara quais versões do TREK suporta; este servidor executa {host}. O TREK só o deixa passar porque TREK_PLUGINS_IGNORE_TREK_RANGE está definido. Nada indica que o autor o tenha testado neste TREK, então não há garantia de que funcione — e, em casos raros, um plugin incompatível pode corromper os dados do TREK. Continue apenas se aceitar esse risco.',
'admin.plugins.dep.trekBypassed':
'Fora do seu intervalo TREK ({range}) — verificações de versão desligadas',
'admin.plugins.dep.trekBypassedUnknown':
'Não declara nenhum intervalo TREK — verificações de versão desligadas',
'admin.plugins.incompatible': 'Incompatível',
'admin.plugins.accessTitle': 'O que ele pode acessar',
'admin.plugins.connectsTitle': 'Conecta-se a',
'admin.plugins.detailsTitle': 'Detalhes',
'admin.plugins.noAccess': 'Não precisa de acesso especial.',
'admin.plugins.metaVersion': 'Versão',
'admin.plugins.metaSize': 'Tamanho',
'admin.plugins.metaRequires': 'Requer',
'admin.plugins.metaReviewed': 'Revisado em',
'admin.plugins.downloads': 'Downloads',
'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': 'Custos',
'admin.addons.catalog.budget.description': 'Acompanhe as despesas da viagem e divida-as entre os viajantes',
'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, chat e sugestões para planejar em grupo',
'admin.addons.catalog.roadtrip.name': 'Viagem de carro',
'admin.addons.catalog.roadtrip.description': 'Planeje trajetos com paradas; tempos de direção e horários de chegada se recalculam sozinhos',
'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.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': 'Importe lugares de uma lista compartilhada do Naver Maps',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'Sincronize voos da sua instância AirTrail',
'admin.addons.catalog.dawarich.name': 'Dawarich',
'admin.addons.catalog.dawarich.description':
'Leia visitas e rotas gravadas de uma instância do Dawarich que cada leitor conecta por conta própria',
'admin.addons.catalog.llm_parsing.name': 'Análise por IA',
'admin.addons.catalog.llm_parsing.description': 'Lê reservas que o analisador integrado não entende, usando um modelo de IA à sua escolha',
'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.group.count': '{enabled} de {total} ativados',
'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': 'Reúna lugares de qualquer viagem em listas nomeadas e reutilize-os',
'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.defaultSettings.cartoKey': 'Chave CARTO compartilhada',
'admin.defaultSettings.cartoKeyHint':
"Usada para todos os usuários que não inseriram a própria chave, assim toda a instância recebe blocos do CARTO sem marca d'água. Armazenada de forma criptografada.",
'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}',
'admin.placesUsageTitle': 'Para que a chave é usada',
'admin.mapsKeyHintShort': 'Adiciona fotos, avaliações e horários. Cada consulta passa então pelo Google.',
'admin.amapKeyHintShort': 'Para busca de lugares na China continental. Precisa de uma chave de serviço web, não de API JS.',
'admin.collab.links.subtitle': 'Ligações partilhadas e marcadores',
};
export default admin;