CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Canceled after 0s
Ordered by what the group hits, not by string count.
- Chat system messages ("X added Y to the group") and their sidebar
preview twin. These are content, not chrome, so they sat in English in
the middle of conversations.
- Login, register and the invite landing page — the first screen anyone
invited to the instance sees.
- Voice — controls, connection info, the mobile join sheet, settings tab.
- Mobile screens.
- Settings navigation across space, user and instance, plus Discovery and
join requests.
Three call sites build strings outside a component and so read the locale
directly rather than through the hook: the sidebar preview formatter, the
connection-info track labels, and MobileShell's screen map — which holds
plain functions that are *called*, not rendered, where a hook would run
under whichever component invoked the map. Each says so at the definition;
all three re-render often enough that a language switch shows through
promptly.
Adds a test for a mistake made three times in this series: a file with an
exported component plus a private sub-component, where only the exported one
got the hook. tsc catches it, but only after a full build and without naming
the component. The test names it, and also flags the inverse — a hook placed
below an early return, which tsc accepts and React breaks at runtime (this
project shipped that once, as error #310). Verified by mutation: removing a
hook makes it fail and print the component.
Dictionary is at 856 keys, en and pt-BR at exact parity.
Verified: web build (tsc + vite), 492 web tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1022 lines
53 KiB
TypeScript
1022 lines
53 KiB
TypeScript
import type { Dictionary } from './en';
|
|
|
|
/**
|
|
* Partial on purpose. Translation happens one system per update, and anything
|
|
* absent here falls back to English — so a half-migrated interface is never
|
|
* broken, just partly in English.
|
|
*/
|
|
export const ptBR: Partial<Dictionary> = {
|
|
// Configurações — navegação
|
|
'settings.tab.account': 'Conta',
|
|
'settings.tab.voice': 'Voz e Vídeo',
|
|
'settings.tab.privacy': 'Privacidade',
|
|
'settings.tab.connections': 'Conexões',
|
|
'settings.tab.keybinds': 'Atalhos',
|
|
'settings.tab.desktop': 'Desktop',
|
|
'settings.tab.instance': 'Instância',
|
|
'settings.tab.language': 'Idioma',
|
|
|
|
// Configurações — idioma
|
|
'settings.language.title': 'Idioma',
|
|
'settings.language.description': 'Escolha o idioma da interface. O que ainda não foi traduzido continua em inglês.',
|
|
'settings.language.en': 'Inglês',
|
|
'settings.language.ptBR': 'Português (Brasil)',
|
|
|
|
// Configurações — voz: entrada
|
|
'settings.voice.input.title': 'Dispositivo de entrada',
|
|
'settings.voice.input.volume': 'Volume de entrada',
|
|
'settings.voice.micTest.start': 'Testar microfone',
|
|
'settings.voice.micTest.stop': 'Parar teste',
|
|
'settings.voice.micTest.playing': 'Devolvendo seu microfone para você — fale alguma coisa.',
|
|
'settings.voice.micTest.inCall': 'O medidor fica ativo enquanto você está numa call.',
|
|
'settings.voice.micTest.idle': 'Teste seu microfone sem entrar numa call.',
|
|
'settings.voice.micTest.failed': 'Não foi possível abrir o microfone. Verifique o dispositivo e a permissão.',
|
|
|
|
// Soundboard
|
|
'soundboard.title': 'Soundboard',
|
|
'soundboard.empty': 'Nenhum som ainda.',
|
|
'soundboard.add': 'Adicionar som',
|
|
'soundboard.adding': 'Enviando...',
|
|
'soundboard.remove': 'Remover',
|
|
'soundboard.namePrompt': 'Nome deste som',
|
|
'soundboard.confirm': 'Adicionar',
|
|
'soundboard.cancel': 'Cancelar',
|
|
'soundboard.joinFirst': 'Entre num canal de voz para usar o soundboard.',
|
|
'soundboard.tooLarge': 'O som precisa ter menos de 2 MB e poucos segundos.',
|
|
'soundboard.uploadFailed': 'Não foi possível enviar esse arquivo. Tente outro.',
|
|
|
|
// Menu da conta (próprio nome na barra de usuário)
|
|
'accountMenu.editProfile': 'Editar perfil',
|
|
'accountMenu.status': 'Status',
|
|
'accountMenu.status.online': 'Disponível',
|
|
'accountMenu.status.idle': 'Ausente',
|
|
'accountMenu.status.dnd': 'Não perturbe',
|
|
'accountMenu.status.offline': 'Invisível',
|
|
'accountMenu.copyId': 'Copiar ID do usuário',
|
|
'accountMenu.copied': 'Copiado',
|
|
|
|
// Notificações no app
|
|
'notify.attachment': 'Enviou um anexo',
|
|
'notify.jump': 'Abrir',
|
|
|
|
// Atualização do app
|
|
'update.ready': 'Atualização pronta',
|
|
'update.readyVersion': 'A versão {version} está pronta para instalar.',
|
|
'update.restart': 'Reiniciar para atualizar',
|
|
'update.later': 'Depois',
|
|
|
|
// Emojis e figurinhas
|
|
'expressions.title': 'Emojis e figurinhas',
|
|
'expressions.emojis': 'Emojis',
|
|
'expressions.stickers': 'Figurinhas',
|
|
'expressions.addEmoji': 'Adicionar emoji',
|
|
'expressions.addSticker': 'Adicionar figurinha',
|
|
'expressions.emptyEmojis': 'Nenhum emoji próprio ainda.',
|
|
'expressions.emptyStickers': 'Nenhuma figurinha ainda.',
|
|
'expressions.namePrompt': 'Nome',
|
|
'expressions.nameHintEmoji': 'Letras, números e sublinhado. Usado como :nome: nas mensagens.',
|
|
'expressions.confirm': 'Adicionar',
|
|
'expressions.cancel': 'Cancelar',
|
|
'expressions.remove': 'Remover',
|
|
'expressions.tooLarge': 'A imagem precisa ter menos de 512 KB.',
|
|
'expressions.uploadFailed': 'Não foi possível adicionar essa imagem. Tente outra.',
|
|
'expressions.nameTaken': 'Esse nome já está em uso neste servidor.',
|
|
'expressions.uploading': 'Enviando…',
|
|
'expressions.pickerTitle': 'Figurinhas',
|
|
'expressions.pickerEmpty': 'Este servidor ainda não tem figurinhas.',
|
|
|
|
// Busca
|
|
'search.placeholder': 'Buscar mensagens…',
|
|
'search.filters': 'Filtros',
|
|
'search.from': 'De',
|
|
'search.fromPlaceholder': 'nome de usuário',
|
|
'search.has': 'Contém',
|
|
'search.hasAny': 'Qualquer',
|
|
'search.hasFile': 'Arquivo',
|
|
'search.hasImage': 'Imagem',
|
|
'search.hasLink': 'Link',
|
|
'search.before': 'Antes de',
|
|
'search.after': 'Depois de',
|
|
'search.hint': 'Dica: digite de:nome, contém:imagem, antes:2026-01-31 direto no campo de busca.',
|
|
|
|
// Mensagens fixadas
|
|
'pins.pin': 'Fixar mensagem',
|
|
'pins.unpin': 'Desafixar mensagem',
|
|
'pins.title': 'Mensagens fixadas',
|
|
'pins.empty': 'Nenhuma mensagem fixada neste canal ainda.',
|
|
'pins.limit': 'Este canal atingiu o limite de mensagens fixadas.',
|
|
|
|
// Barra lateral — servidores, canais e membros
|
|
'sidebar.friends': 'Amigos',
|
|
'sidebar.directMessages': 'Mensagens diretas',
|
|
'sidebar.noChannels': 'Nenhum canal',
|
|
'sidebar.comingSoon': 'Em breve',
|
|
'sidebar.loadingChannels': 'Carregando canais',
|
|
'sidebar.loadingMembers': 'Carregando membros',
|
|
'sidebar.groupOnline': 'DISPONÍVEIS',
|
|
'sidebar.groupOwner': 'DONO',
|
|
'sidebar.createChannel': 'Criar canal',
|
|
'sidebar.createCategory': 'Criar categoria',
|
|
'sidebar.categorySettings': 'Configurações da categoria',
|
|
'sidebar.deleteCategory': 'Excluir categoria',
|
|
'sidebar.invitePeople': 'Convidar pessoas',
|
|
'sidebar.spaceSettings': 'Configurações do servidor',
|
|
'sidebar.leaveGroup': 'Sair do grupo',
|
|
'sidebar.voiceSettings': 'Configurações de voz',
|
|
'sidebar.inputDevice': 'Dispositivo de entrada',
|
|
'sidebar.inputVolume': 'Volume de entrada',
|
|
'sidebar.outputDevice': 'Dispositivo de saída',
|
|
'sidebar.outputVolume': 'Volume de saída',
|
|
|
|
// Chat — composer e mensagens
|
|
'chat.composer.placeholder': 'Conversar em {channel}',
|
|
'chat.composer.attach': 'Anexar arquivo',
|
|
'chat.composer.emoji': 'Emoji',
|
|
'chat.composer.gif': 'GIF',
|
|
'chat.composer.gifPicker': 'Seletor de GIF',
|
|
'chat.composer.emojiPicker': 'Seletor de emoji',
|
|
'chat.composer.send': 'Enviar',
|
|
'chat.composer.sendMessage': 'Enviar mensagem',
|
|
'chat.composer.uploading': 'Enviando',
|
|
'chat.composer.uploadingEllipsis': 'Enviando…',
|
|
'chat.composer.removeAttachment': 'Remover anexo',
|
|
'chat.composer.failedAttachment': 'Remova ou tente de novo o anexo que falhou para poder enviar',
|
|
'chat.composer.replyingTo': 'Respondendo a',
|
|
'chat.composer.cancelReply': 'Cancelar resposta',
|
|
'chat.message.addReaction': 'Adicionar reação',
|
|
'chat.message.edit': 'Editar',
|
|
'chat.message.reply': 'Responder',
|
|
|
|
// Estatísticas
|
|
'stats.title': 'Estatísticas',
|
|
'stats.range.7': 'Últimos 7 dias',
|
|
'stats.range.30': 'Últimos 30 dias',
|
|
'stats.range.365': 'Último ano',
|
|
'stats.voice.title': 'Tempo em call',
|
|
'stats.messages.title': 'Mensagens enviadas',
|
|
'stats.empty': 'Nada registrado neste período ainda.',
|
|
'stats.total.voice': '{value} no total',
|
|
'stats.total.messages': '{value} mensagens no total',
|
|
'stats.hours': '{hours}h {minutes}min',
|
|
'stats.minutes': '{minutes}min',
|
|
'stats.note': 'A contagem começou quando esta funcionalidade foi instalada — atividade anterior não entra.',
|
|
|
|
// Registro de auditoria
|
|
'audit.title': 'Registro de auditoria',
|
|
'audit.empty': 'Nada registrado ainda. Mudanças no servidor aparecem aqui.',
|
|
'audit.loadMore': 'Carregar mais',
|
|
'audit.unknownActor': 'Conta excluída',
|
|
'audit.action.space.update': '{actor} alterou as configurações do servidor',
|
|
'audit.action.space.transfer_ownership': '{actor} transferiu a propriedade do servidor',
|
|
'audit.action.channel.create': '{actor} criou o canal {name}',
|
|
'audit.action.channel.update': '{actor} alterou o canal {name}',
|
|
'audit.action.channel.delete': '{actor} excluiu o canal {name}',
|
|
'audit.action.member.kick': '{actor} removeu um membro',
|
|
'audit.action.member.leave': '{actor} saiu do servidor',
|
|
'audit.action.member.ban': '{actor} baniu um membro',
|
|
'audit.action.member.unban': '{actor} removeu o banimento de um membro',
|
|
'audit.action.role.create': '{actor} criou o cargo {name}',
|
|
'audit.action.role.update': '{actor} alterou o cargo {name}',
|
|
'audit.action.role.delete': '{actor} excluiu um cargo',
|
|
'audit.action.invite.create': '{actor} criou um convite',
|
|
'audit.action.message.delete': '{actor} excluiu uma mensagem',
|
|
'audit.action.unknown': '{actor} realizou uma ação',
|
|
|
|
// Seletor de GIF
|
|
'gif.search': 'Buscar GIFs',
|
|
'gif.tab.favorites': 'Favoritos',
|
|
'gif.tab.trending': 'Em alta',
|
|
'gif.empty.search': 'Nenhum GIF encontrado',
|
|
'gif.empty.trending': 'Nenhum GIF em alta',
|
|
'gif.empty.favorites': 'Nenhum favorito ainda — toque na estrela de um GIF.',
|
|
'gif.favorite.add': 'Adicionar aos favoritos',
|
|
'gif.favorite.remove': 'Remover dos favoritos',
|
|
'gif.category.hello': 'oi',
|
|
'gif.category.lol': 'risada',
|
|
'gif.category.love': 'amor',
|
|
'gif.category.birthday': 'feliz aniversário',
|
|
'gif.category.dance': 'dança',
|
|
'gif.category.facepalm': 'vergonha alheia',
|
|
|
|
// Configurações — privacidade
|
|
'privacy.title': 'Privacidade',
|
|
'privacy.discoverable.label': 'Permitir que me encontrem',
|
|
'privacy.discoverable.description': 'Quando ativado, seu perfil aparece em Descobrir Pessoas. Qualquer um sempre pode te adicionar pelo nome de usuário exato.',
|
|
'privacy.activity.label': 'Compartilhar atividade',
|
|
'privacy.activity.description': 'Permite que os outros vejam o que você está fazendo, como jogos que está jogando ou música que está ouvindo.',
|
|
|
|
// Configurações — conexões
|
|
'connections.title': 'Conexões',
|
|
'connections.spotify.description': 'Mostre no seu perfil o que você está ouvindo.',
|
|
'connections.spotify.connect': 'Conectar Spotify',
|
|
'connections.spotify.disconnect': 'Desconectar',
|
|
'connections.spotify.connected': 'Conectado',
|
|
'connections.spotify.notConfigured': 'Esta instância não tem credenciais do Spotify configuradas.',
|
|
'connections.spotify.hint': 'Só é lido o que está tocando — não é possível controlar a reprodução.',
|
|
'connections.spotify.error.denied': 'A autorização foi cancelada no Spotify.',
|
|
'connections.spotify.error.invalid_state': 'O link de autorização expirou. Tente de novo.',
|
|
'connections.spotify.error.exchange_failed': 'O Spotify recusou a autorização. Tente de novo.',
|
|
|
|
// Cartão de perfil
|
|
'profile.aboutMe': 'Sobre mim',
|
|
'profile.memberSince': 'Membro desde',
|
|
'profile.sendMessage': 'Enviar mensagem',
|
|
'profile.activity.playing': 'Jogando',
|
|
'profile.activity.listening': 'Ouvindo',
|
|
'profile.activity.watching': 'Assistindo',
|
|
'profile.activity.streaming': 'Transmitindo',
|
|
'profile.activity.elapsed': '{time} decorrido',
|
|
// Configurações do canal
|
|
'channel.settings.title': 'Configurações do canal',
|
|
'channel.tab.overview': 'Visão geral',
|
|
'channel.tab.permissions': 'Permissões',
|
|
'channel.name.label': 'Nome do canal',
|
|
'channel.name.placeholder': 'novo-canal',
|
|
'channel.name.willBecome': 'Será salvo como {name}',
|
|
'channel.name.empty': 'O nome não pode ficar vazio.',
|
|
'channel.topic.label': 'Tópico',
|
|
'channel.topic.placeholder': 'Sobre o que é este canal?',
|
|
'channel.save': 'Salvar alterações',
|
|
'channel.saving': 'Salvando...',
|
|
'channel.saved': 'Salvo',
|
|
'channel.discard': 'Descartar',
|
|
'channel.saveFailed': 'Não foi possível salvar o canal.',
|
|
'channel.private.title': 'Canal privado',
|
|
'channel.private.description': 'Só os membros e cargos escolhidos vão conseguir ver este canal.',
|
|
'channel.private.note': 'Este canal fica escondido de quem não tem acesso explícito. Quem tem a permissão de Administrador e os donos do servidor sempre veem todos os canais.',
|
|
'channel.private.loadFailed': 'Não foi possível carregar as permissões do canal',
|
|
'channel.private.updateFailed': 'Não foi possível alterar a privacidade do canal',
|
|
'channel.danger': 'Zona de perigo',
|
|
'channel.delete': 'Excluir canal',
|
|
'channel.delete.title': 'Excluir #{name}?',
|
|
'channel.delete.body': 'Isto apaga o #{name} e todas as mensagens dele para sempre.',
|
|
'channel.delete.voiceNote': 'Quem estiver neste canal de voz agora será desconectado.',
|
|
'channel.delete.irreversible': 'Não dá para desfazer.',
|
|
'channel.delete.failed': 'Não foi possível excluir o canal',
|
|
|
|
// Amigos — abas e listas
|
|
'friends.title': 'Amigos',
|
|
'friends.tab.online': 'Online',
|
|
'friends.tab.all': 'Todos',
|
|
'friends.tab.pending': 'Pendentes',
|
|
'friends.tab.add': 'Adicionar amigo',
|
|
'friends.tab.activity': 'Atividade',
|
|
'friends.status.online': 'Online',
|
|
'friends.status.idle': 'Ausente',
|
|
'friends.status.dnd': 'Não perturbe',
|
|
'friends.status.offline': 'Offline',
|
|
'friends.heading.online': 'Online — {count}',
|
|
'friends.heading.all': 'Todos os amigos — {count}',
|
|
'friends.heading.pending': 'Pendentes — {count}',
|
|
'friends.heading.active': 'Ativos — {count}',
|
|
'friends.heading.offline': 'Offline — {count}',
|
|
'friends.empty.online': 'Ninguém online agora.',
|
|
'friends.empty.all': 'Nenhum amigo ainda — chama alguém!',
|
|
'friends.empty.pending': 'Nenhum pedido pendente — o Nori está tirando um cochilo.',
|
|
'friends.empty.activity': 'Tudo quieto por aqui... Quando um amigo começar alguma coisa, aparece aqui!',
|
|
'friends.request.incoming': 'Pedido de amizade recebido',
|
|
'friends.request.outgoing': 'Pedido de amizade enviado',
|
|
'friends.action.message': 'Mensagem',
|
|
'friends.action.accept': 'Aceitar',
|
|
'friends.action.decline': 'Recusar',
|
|
'friends.action.cancel': 'Cancelar pedido',
|
|
'friends.action.remove': 'Remover amigo',
|
|
'friends.remove.title': 'Remover amigo',
|
|
'friends.remove.body': 'Quer mesmo remover {name} dos seus amigos? Dá para mandar um novo pedido depois.',
|
|
'friends.remove.someone': 'esta pessoa',
|
|
'friends.remove.confirm': 'Remover',
|
|
|
|
// Amigos — aba de adicionar
|
|
'friends.add.title': 'Encontrar pessoas',
|
|
'friends.add.hint': 'Busque pelo nome de usuário ou use {handle} para adicionar alguém direto.',
|
|
'friends.add.searchPlaceholder': 'Buscar ou adicionar por nome de usuário...',
|
|
'friends.add.directTo': 'Enviar pedido de amizade para',
|
|
'friends.add.send': 'Enviar pedido',
|
|
'friends.add.sending': 'Enviando...',
|
|
'friends.add.sent': 'Pedido de amizade enviado!',
|
|
'friends.add.discover': 'Descobrir pessoas',
|
|
'friends.add.empty.search': 'Nenhum usuário encontrado.',
|
|
'friends.add.empty.discover': 'Ninguém para descobrir ainda — chame o pessoal!',
|
|
'friends.add.sendRequest': 'Enviar pedido de amizade',
|
|
'friends.add.cancelling': 'Cancelando...',
|
|
'friends.add.pending': 'Pedido pendente',
|
|
'friends.add.failed': 'Não foi possível enviar o pedido',
|
|
'friends.accept.failed': 'Não foi possível aceitar o pedido',
|
|
'friends.decline.failed': 'Não foi possível recusar o pedido',
|
|
'friends.cancel.failed': 'Não foi possível cancelar o pedido',
|
|
|
|
// Lista de membros da DM em grupo
|
|
'dm.remove.title': 'Remover do grupo',
|
|
'dm.remove.body': 'Remover {name} deste grupo? A pessoa não vai mais ver as mensagens novas.',
|
|
'dm.remove.confirm': 'Remover',
|
|
'dm.remove.failed': 'Não foi possível remover o membro',
|
|
'dm.transfer.title': 'Transferir propriedade',
|
|
'dm.transfer.body': 'Transferir a propriedade para {name}? Você perde os privilégios de dono.',
|
|
'dm.transfer.confirm': 'Transferir',
|
|
'dm.transfer.failed': 'Não foi possível transferir a propriedade',
|
|
'dm.removeFriend.failed': 'Não foi possível remover o amigo',
|
|
|
|
// Modal de convite
|
|
'invite.title': 'Convidar amigos',
|
|
'invite.subtitle': 'Envie para amigos ou compartilhe um link.',
|
|
'invite.requestOnly': 'Este servidor usa pedidos de entrada — as pessoas entram pedindo aprovação a um moderador, então não há link de convite para compartilhar.',
|
|
'invite.gotIt': 'Entendi',
|
|
'invite.searchPlaceholder': 'Buscar amigos...',
|
|
'invite.remove': 'Remover {name}',
|
|
'invite.alreadyInSpace': 'Já está no servidor',
|
|
'invite.noMatch': 'Nenhum amigo encontrado',
|
|
'invite.noFriends': 'Nenhum amigo ainda',
|
|
'invite.select': 'Escolha os amigos',
|
|
'invite.send': 'Enviar {count} convite',
|
|
'invite.sendPlural': 'Enviar {count} convites',
|
|
'invite.sending': 'Enviando...',
|
|
'invite.sent': 'Enviado',
|
|
'invite.retryFailed': 'Tentar de novo',
|
|
'invite.done': 'Pronto',
|
|
'invite.orLink': 'Ou compartilhe um link',
|
|
'invite.generating': 'Gerando...',
|
|
'invite.copy': 'Copiar',
|
|
'invite.copied': 'Copiado!',
|
|
'invite.linkFailed': 'Não foi possível gerar o link de convite',
|
|
'invite.fail.invite_invalid': 'O link de convite não vale mais',
|
|
'invite.fail.not_a_friend': 'Não é seu amigo',
|
|
'invite.fail.user_not_found': 'Usuário não encontrado',
|
|
'invite.fail.already_member': 'Já é membro',
|
|
'invite.fail.upstream': 'Não deu para verificar o convite — tente de novo',
|
|
'invite.fail.cannot_invite_self': 'Você não pode se convidar',
|
|
'invite.fail.invalid_body': 'Pedido inválido',
|
|
'invite.fail.invalid_target': 'Destino inválido',
|
|
'invite.fail.network': 'Não deu para falar com a sua instância',
|
|
'invite.fail.generic': 'Não deu para enviar (erro no servidor)',
|
|
// Configurações — área de trabalho
|
|
'settings.desktop.title': 'Área de trabalho',
|
|
'settings.desktop.startAtBoot': 'Abrir junto com o sistema',
|
|
'settings.desktop.startAtBoot.description': 'Inicia o Backspace sozinho quando você faz login',
|
|
'settings.desktop.startMinimized': 'Abrir minimizado',
|
|
'settings.desktop.startMinimized.description': 'Começa escondido na bandeja em vez de abrir a janela',
|
|
'settings.desktop.version': 'Versão {version}',
|
|
'settings.desktop.appName': 'Backspace Desktop',
|
|
'settings.desktop.update.description': 'Procurar versões novas do aplicativo',
|
|
'settings.desktop.update.check': 'Procurar atualizações',
|
|
'settings.desktop.update.checking': 'Procurando...',
|
|
'settings.desktop.instance.current': 'Instância conectada agora',
|
|
'settings.desktop.instance.change': 'Trocar de instância',
|
|
|
|
// Configurações — voz: saída
|
|
'settings.output.title': 'Dispositivo de saída',
|
|
'settings.output.checking': 'Verificando o acesso ao áudio…',
|
|
'settings.output.systemDefault': 'Padrão do sistema',
|
|
'settings.output.unsupported': 'Este navegador não deixa escolher o dispositivo de saída. O áudio toca no padrão do sistema.',
|
|
'settings.output.needPermission': 'Dê permissão de microfone para listar os dispositivos de saída (os navegadores escondem os nomes de saída atrás do acesso ao microfone).',
|
|
'settings.output.enableAccess': 'Liberar acesso ao áudio',
|
|
'settings.output.volume': 'Volume de saída',
|
|
'settings.output.testSound': 'Tocar som de teste',
|
|
|
|
// Configurações — atalhos
|
|
'settings.keybinds.title': 'Atalhos',
|
|
'settings.keybinds.section.voice': 'Atalhos de voz',
|
|
'settings.keybinds.pressCombo': 'Aperte a combinação...',
|
|
'settings.keybinds.notBound': 'Sem atalho',
|
|
'settings.keybinds.edit': 'Editar',
|
|
'settings.keybinds.record': 'Gravar',
|
|
'settings.keybinds.delete': 'Excluir',
|
|
'settings.keybinds.escToCancel': 'ESC para cancelar',
|
|
'settings.keybinds.accessibility.title': 'Precisa da permissão de Acessibilidade',
|
|
'settings.keybinds.accessibility.description': 'O Backspace precisa da permissão de Acessibilidade para os atalhos funcionarem fora do aplicativo.',
|
|
'settings.keybinds.accessibility.grant': 'Conceder permissão',
|
|
'settings.keybinds.hookError.title': 'Atalhos globais indisponíveis',
|
|
'settings.keybinds.hookError.description': 'Não foi possível iniciar o leitor de entrada. No Linux, talvez o seu usuário precise estar no grupo {group}.',
|
|
'settings.keybinds.webNote': 'Os atalhos funcionam enquanto esta aba estiver em foco. Para atalhos que funcionam em outros programas, use o aplicativo.',
|
|
'settings.keybinds.conflict.suffix': '. Substituir?',
|
|
'settings.keybinds.conflict.boundTo': 'já está ligado a',
|
|
'settings.keybinds.conflict.overwrite': 'Substituir',
|
|
'settings.keybinds.conflict.cancel': 'Cancelar',
|
|
'settings.keybinds.action.toggleMute': 'Ligar/desligar microfone',
|
|
'settings.keybinds.action.toggleDeafen': 'Ligar/desligar som',
|
|
'settings.keybinds.action.pushToTalk': 'Apertar para falar',
|
|
'settings.keybinds.action.toggleCamera': 'Ligar/desligar câmera',
|
|
'settings.keybinds.action.toggleScreenShare': 'Ligar/desligar transmissão',
|
|
'settings.keybinds.action.disconnect': 'Desconectar',
|
|
|
|
// Configurações — conta
|
|
'settings.account.title': 'Minha conta',
|
|
'settings.account.detached.lead': 'Esta conta está desligada da instância de origem.',
|
|
'settings.account.detached.body': 'A {instance} foi reiniciada ou não existe mais, então esta conta agora funciona localmente nesta instância — o perfil e a senha são gerenciados aqui.',
|
|
'settings.account.detached.relink': 'Como {username} em {instance}, dá para religar esta conta — o perfil e a presença voltam a sincronizar de lá.',
|
|
'settings.account.detached.reattaching': 'Religando…',
|
|
'settings.account.detached.confirm': 'Confirmar religação como {username}',
|
|
'settings.account.detached.reattach': 'Religar a {instance}',
|
|
'settings.account.detached.failed': 'Não foi possível religar',
|
|
'settings.account.section.profile': 'Personalização do perfil',
|
|
'settings.account.section.account': 'Conta',
|
|
'settings.account.section.password': 'Senha',
|
|
'settings.account.section.danger': 'Zona de perigo',
|
|
'settings.account.avatar': 'Foto de perfil',
|
|
'settings.account.avatar.change': 'Trocar foto',
|
|
'settings.account.banner': 'Banner',
|
|
'settings.account.banner.change': 'Trocar banner',
|
|
'settings.account.banner.chooseGif': 'Escolher GIF',
|
|
'settings.account.remove': 'Remover',
|
|
'settings.account.clear': 'Limpar',
|
|
'settings.account.avatarColor': 'Cor da foto',
|
|
'settings.account.bannerColor': 'Cor do banner',
|
|
'settings.account.aboutMe': 'Sobre mim',
|
|
'settings.account.aboutMe.placeholder': 'Conte alguma coisa sobre você...',
|
|
'settings.account.status': 'Status',
|
|
'settings.account.status.online': 'Online',
|
|
'settings.account.status.idle': 'Ausente',
|
|
'settings.account.status.dnd': 'Não perturbe',
|
|
'settings.account.displayName': 'Nome de exibição',
|
|
'settings.account.customStatus': 'Status personalizado',
|
|
'settings.account.customStatus.placeholder': 'O que você está fazendo?',
|
|
'settings.account.password.current': 'Senha atual',
|
|
'settings.account.password.current.placeholder': 'Digite a senha atual',
|
|
'settings.account.password.new': 'Senha nova',
|
|
'settings.account.password.new.placeholder': 'Mínimo de 6 caracteres',
|
|
'settings.account.password.confirm': 'Confirmar a senha nova',
|
|
'settings.account.password.confirm.placeholder': 'Confirme a senha nova',
|
|
'settings.account.password.change': 'Trocar senha',
|
|
'settings.account.password.changing': 'Trocando...',
|
|
'settings.account.password.changed': 'Senha trocada',
|
|
'settings.account.password.tooShort': 'A senha nova precisa ter pelo menos 8 caracteres',
|
|
'settings.account.password.mismatch': 'As senhas não batem',
|
|
'settings.account.password.failed': 'Não foi possível trocar a senha',
|
|
'settings.account.sync.synced': 'Sincronizado',
|
|
'settings.account.sync.failed': 'Falhou — sincroniza quando reconectar',
|
|
'settings.account.delete.warning': 'Depois de excluir a conta não tem volta. Suas mensagens continuam lá, mas passam a aparecer como "Usuário excluído".',
|
|
'settings.account.delete': 'Excluir conta',
|
|
'settings.account.reset': 'Desfazer',
|
|
'settings.account.save': 'Salvar',
|
|
'settings.account.saving': 'Salvando...',
|
|
'settings.account.saved': 'Perfil atualizado',
|
|
'settings.account.saveFailed': 'Não foi possível atualizar o perfil',
|
|
'settings.account.avatar.uploadFailed': 'Não foi possível enviar a foto',
|
|
'settings.account.banner.uploadFailed': 'Não foi possível enviar o banner',
|
|
'settings.account.crop.avatar': 'Recortar a foto',
|
|
'settings.account.crop.banner': 'Recortar o banner',
|
|
|
|
// Explorar servidores
|
|
'explore.title': 'Explorar',
|
|
'explore.searchPlaceholder': 'Buscar servidores...',
|
|
'explore.disabled': 'A descoberta de servidores está desativada pelo administrador da instância.',
|
|
'explore.empty.search': 'Nenhum servidor encontrado.',
|
|
'explore.empty.none': 'Nenhum servidor para descobrir ainda.',
|
|
'explore.allJoined': 'Você já está em todos os servidores visíveis',
|
|
'explore.joined': 'Você participa',
|
|
'explore.badge.public': 'Público',
|
|
'explore.badge.request': 'Por pedido',
|
|
'explore.noDescription': 'Sem descrição',
|
|
'explore.member': 'membro',
|
|
'explore.members': 'membros',
|
|
'explore.view': 'Ver servidor',
|
|
'explore.join': 'Entrar no servidor',
|
|
'explore.joining': 'Entrando...',
|
|
'explore.requestPending': 'Pedido pendente',
|
|
'explore.requestToJoin': 'Pedir para entrar',
|
|
'explore.request.placeholder': 'Por que você quer entrar? (opcional)',
|
|
'explore.request.send': 'Enviar pedido',
|
|
'explore.request.sending': 'Enviando...',
|
|
'explore.request.cancel': 'Cancelar',
|
|
// Configurações — voz: vídeo
|
|
'settings.video.title': 'Vídeo',
|
|
'settings.video.checking': 'Verificando o acesso à câmera…',
|
|
'settings.video.needPermission': 'Dê permissão de câmera para escolher uma.',
|
|
'settings.video.promptNeeded': 'Precisa da permissão de câmera para escolher uma e ver a prévia.',
|
|
'settings.video.enablePreview': 'Ligar a prévia da câmera',
|
|
'settings.video.tryAgain': 'Tentar de novo',
|
|
'settings.video.testCamera': 'Testar câmera',
|
|
'settings.video.stopPreview': 'Parar prévia',
|
|
'settings.video.auto': 'Automático (padrão do sistema)',
|
|
'settings.video.currentlyUsing': 'Usando agora: {label}',
|
|
'settings.video.detectedCamera': 'câmera detectada',
|
|
'settings.video.noCameras': 'Nenhuma câmera detectada.',
|
|
'settings.video.error.inUse': 'A câmera está sendo usada por outro programa.',
|
|
'settings.video.error.unavailable': 'A câmera escolhida não está disponível.',
|
|
'settings.video.error.notFound': 'Nenhuma câmera encontrada.',
|
|
'settings.video.error.generic': 'Não foi possível iniciar a prévia da câmera.',
|
|
'settings.video.blocked.mac': 'Libere a câmera em Ajustes do Sistema → Privacidade e Segurança → Câmera e reinicie o aplicativo.',
|
|
'settings.video.blocked.windows': 'Libere a câmera em Configurações → Privacidade e Segurança → Câmera e reinicie o aplicativo.',
|
|
'settings.video.blocked.browser': 'A permissão de câmera foi negada. Redefina no aviso do navegador e tente de novo.',
|
|
|
|
// Criar canal / categoria / servidor
|
|
'create.cancel': 'Cancelar',
|
|
'create.creating': 'Criando...',
|
|
'create.channel.title': 'Criar canal',
|
|
'create.channel.submit': 'Criar canal',
|
|
'create.channel.type': 'Tipo de canal',
|
|
'create.channel.type.text': 'Texto',
|
|
'create.channel.type.voice': 'Voz',
|
|
'create.channel.type.text.description': 'Enviar mensagens, imagens e arquivos',
|
|
'create.channel.type.voice.description': 'Conversar por voz e vídeo',
|
|
'create.channel.name': 'Nome do canal',
|
|
'create.channel.name.placeholder': 'novo-canal',
|
|
'create.channel.name.required': 'O nome do canal é obrigatório',
|
|
'create.channel.topic': 'Tópico (opcional)',
|
|
'create.channel.topic.placeholder': 'Sobre o que é este canal?',
|
|
'create.channel.category': 'Categoria',
|
|
'create.channel.category.none': 'Sem categoria',
|
|
'create.channel.failed': 'Não foi possível criar o canal',
|
|
'create.category.title': 'Criar categoria',
|
|
'create.category.submit': 'Criar categoria',
|
|
'create.category.name': 'Nome da categoria',
|
|
'create.category.name.placeholder': 'nova-categoria',
|
|
'create.category.name.required': 'O nome da categoria é obrigatório',
|
|
'create.category.failed': 'Não foi possível criar a categoria',
|
|
'create.noSpace': 'Nenhum servidor selecionado',
|
|
'create.space.title': 'Criar um servidor',
|
|
'create.space.submit': 'Criar',
|
|
'create.space.upload': 'Enviar',
|
|
'create.space.remove': 'Remover',
|
|
'create.space.iconColor': 'Cor do ícone',
|
|
'create.space.name': 'Nome do servidor',
|
|
'create.space.name.placeholder': 'Meu servidor incrível',
|
|
'create.space.name.required': 'O nome do servidor é obrigatório',
|
|
'create.space.description': 'Descrição',
|
|
'create.space.description.placeholder': 'Uma descrição curta do seu servidor...',
|
|
'create.space.visibility': 'Visibilidade',
|
|
'create.space.visibility.private': 'Privado',
|
|
'create.space.visibility.private.description': 'Só entra quem tiver um link de convite',
|
|
'create.space.visibility.request': 'Por pedido',
|
|
'create.space.visibility.request.description': 'Aparece no Explorar — as pessoas pedem para entrar',
|
|
'create.space.visibility.public': 'Público',
|
|
'create.space.visibility.public.description': 'Aparece no Explorar — qualquer um entra na hora',
|
|
'create.space.iconFailed': 'Não foi possível enviar o ícone',
|
|
'create.space.failed': 'Não foi possível criar o servidor',
|
|
'create.space.cropIcon': 'Recortar o ícone do servidor',
|
|
|
|
// DMs em grupo
|
|
'groupDm.newDm.title': 'Nova mensagem direta',
|
|
'groupDm.newDm.search': 'Buscar um usuário...',
|
|
'groupDm.newDm.failed': 'Não foi possível criar a DM',
|
|
'groupDm.add.title': 'Adicionar amigos à DM',
|
|
'groupDm.add.search': 'Buscar amigos...',
|
|
'groupDm.add.alreadyIn': 'Já está nesta DM',
|
|
'groupDm.add.noMatch': 'Nenhum amigo encontrado',
|
|
'groupDm.add.noFriends': 'Nenhum amigo ainda',
|
|
'groupDm.add.select': 'Escolha os amigos',
|
|
'groupDm.add.submit': 'Adicionar {count} amigo',
|
|
'groupDm.add.submitPlural': 'Adicionar {count} amigos',
|
|
'groupDm.add.adding': 'Adicionando...',
|
|
'groupDm.add.failed': 'Não foi possível adicionar os membros',
|
|
'groupDm.fallbackName': 'DM em grupo',
|
|
'groupDm.icon.change': 'Trocar o ícone do grupo',
|
|
'groupDm.icon.label': 'Ícone do grupo',
|
|
'groupDm.icon.crop': 'Recortar o ícone do grupo',
|
|
'groupDm.name': 'Nome do grupo',
|
|
'groupDm.tab.general': 'Geral',
|
|
'groupDm.tab.overview': 'Visão geral',
|
|
'groupDm.tab.members': 'Membros',
|
|
'groupDm.back': 'Voltar ao menu de configurações do grupo',
|
|
'groupDm.save': 'Salvar',
|
|
'groupDm.saving': 'Salvando...',
|
|
'groupDm.cancel': 'Cancelar',
|
|
'groupDm.close': 'Fechar',
|
|
'groupDm.saveFailed': 'Não foi possível salvar as configurações',
|
|
'groupDm.members.title': 'Membros',
|
|
'groupDm.members.add': 'Adicionar membro',
|
|
'groupDm.members.full': 'O grupo está cheio',
|
|
'groupDm.leave': 'Sair do grupo',
|
|
'groupDm.leaving': 'Saindo...',
|
|
'groupDm.leave.description': 'Você para de receber as mensagens desta conversa. Os outros membros veem um aviso.',
|
|
'groupDm.leave.confirm': 'Sair de "{name}"? Você para de receber as mensagens desta conversa.',
|
|
'groupDm.leave.button': 'Sair',
|
|
'groupDm.leave.failed': 'Não foi possível sair do grupo',
|
|
|
|
// Entrar num servidor
|
|
'join.title': 'Entrar num servidor',
|
|
'join.discover.lead': 'Descubra servidores para entrar, ou veja todos no Explorar.',
|
|
'join.discover.error': 'Não deu para carregar os servidores agora. Você ainda pode entrar com um código de convite abaixo.',
|
|
'join.discover.empty': 'Nenhum servidor para descobrir ainda — tente um código de convite abaixo, ou volte mais tarde.',
|
|
'join.discover.browse': 'Ver todos no Explorar',
|
|
'join.haveCode': 'Tem um código de convite?',
|
|
'join.code.placeholder': 'ex.: abc123 ou https://instancia.com/join/abc123',
|
|
'join.cancel': 'Cancelar',
|
|
'join.back': 'Voltar',
|
|
'join.submit': 'Entrar no servidor',
|
|
'join.joining': 'Entrando...',
|
|
'join.failed': 'Não foi possível entrar no servidor',
|
|
'join.connect.lead': 'Conecte-se a {host} para entrar neste servidor.',
|
|
'join.connect.password': 'Digite a sua senha para conectar',
|
|
'join.connect.password.placeholder': 'A senha da sua conta',
|
|
'join.connect.note': 'A sua senha é verificada aqui e depois usada para criar ou acessar a sua conta na outra instância.',
|
|
'join.connect.submit': 'Conectar e entrar',
|
|
'join.connect.connecting': 'Conectando...',
|
|
'join.fallback.lead': 'Já existe uma conta em {host} com outra senha. Digite os dados que você usou naquela instância.',
|
|
'join.fallback.username': 'Nome de usuário',
|
|
'join.fallback.username.placeholder': 'Seu nome de usuário nessa instância',
|
|
'join.fallback.password': 'Senha desta instância',
|
|
'join.fallback.password.placeholder': 'Senha na instância remota',
|
|
'join.fallback.submit': 'Entrar e participar',
|
|
'join.fallback.loggingIn': 'Entrando...',
|
|
|
|
// Excluir conta / transferir propriedade / tela de erro
|
|
'danger.delete.title': 'Excluir conta',
|
|
'danger.delete.lead': 'Isto apaga a sua conta para sempre.',
|
|
'danger.delete.item.spaces': 'Você sai de todos os servidores',
|
|
'danger.delete.item.friends': 'Todas as amizades são desfeitas',
|
|
'danger.delete.item.dms': 'Você sai de todas as DMs',
|
|
'danger.delete.item.messages': 'Suas mensagens continuam, mas passam a aparecer como "Usuário excluído"',
|
|
'danger.delete.owned': 'Você é dono de {count} servidor. Resolva antes de continuar:',
|
|
'danger.delete.ownedPlural': 'Você é dono de {count} servidores. Resolva cada um antes de continuar:',
|
|
'danger.delete.transfer': 'Transferir',
|
|
'danger.delete.deleteSpace': 'Excluir servidor',
|
|
'danger.delete.selectOwner': 'Escolha o novo dono...',
|
|
'danger.delete.continue': 'Continuar',
|
|
'danger.delete.processing': 'Processando...',
|
|
'danger.delete.spacesFailed': 'Não foi possível resolver os servidores',
|
|
'danger.delete.permanent': 'Isto é permanente e não dá para desfazer.',
|
|
'danger.delete.password': 'Senha',
|
|
'danger.delete.password.placeholder': 'Digite a sua senha',
|
|
'danger.delete.back': 'Voltar',
|
|
'danger.delete.confirm': 'Excluir minha conta',
|
|
'danger.delete.deleting': 'Excluindo...',
|
|
'danger.delete.usernameMismatch': 'O nome de usuário não confere',
|
|
'danger.delete.failed': 'Não foi possível excluir a conta',
|
|
'danger.delete.federating': 'Removendo a sua conta das instâncias conectadas...',
|
|
'danger.delete.now': 'Excluir a conta agora',
|
|
'danger.delete.done': 'Conta excluída',
|
|
'danger.delete.redirecting': 'Voltando para a tela de login...',
|
|
'danger.transfer.title': 'Transferir propriedade',
|
|
'danger.transfer.lead': 'Escolha quem vai ser o novo dono de {space}',
|
|
'danger.transfer.confirm': 'Transferir a propriedade de {space} para {member}?',
|
|
'danger.transfer.note': 'Você passa a ser um membro comum.',
|
|
'danger.transfer.search': 'Buscar membros...',
|
|
'danger.transfer.loading': 'Carregando membros...',
|
|
'danger.transfer.empty': 'Nenhum membro encontrado',
|
|
'danger.transfer.cancel': 'Cancelar',
|
|
'danger.transfer.submit': 'Transferir',
|
|
'danger.transfer.transferring': 'Transferindo...',
|
|
'danger.transfer.failed': 'Não foi possível transferir a propriedade',
|
|
'error.title': 'Alguma coisa deu errado',
|
|
'error.tryAgain': 'Tentar de novo',
|
|
'error.reload': 'Recarregar a página',
|
|
// Rótulos de permissão — usados pelo painel de cargos e pelos editores de
|
|
// exceção de canal e categoria, então renomear aqui vale nos três.
|
|
'perm.group.general': 'Geral',
|
|
'perm.group.text': 'Texto',
|
|
'perm.group.voice': 'Voz',
|
|
'perm.administrator': 'Administrador',
|
|
'perm.viewChannel': 'Ver canal',
|
|
'perm.viewChannels': 'Ver canais',
|
|
'perm.manageChannels': 'Gerenciar canais',
|
|
'perm.manageRoles': 'Gerenciar cargos',
|
|
'perm.manageSpace': 'Gerenciar servidor',
|
|
'perm.createInvite': 'Criar convite',
|
|
'perm.kickMembers': 'Expulsar membros',
|
|
'perm.banMembers': 'Banir membros',
|
|
'perm.sendMessages': 'Enviar mensagens',
|
|
'perm.manageMessages': 'Gerenciar mensagens',
|
|
'perm.attachFiles': 'Anexar arquivos',
|
|
'perm.readHistory': 'Ler histórico de mensagens',
|
|
'perm.addReactions': 'Adicionar reações',
|
|
'perm.connect': 'Conectar',
|
|
'perm.speak': 'Falar',
|
|
'perm.stream': 'Transmitir',
|
|
'perm.muteMembers': 'Silenciar membros',
|
|
'perm.deafenMembers': 'Ensurdecer membros',
|
|
'perm.moveMembers': 'Mover membros',
|
|
'perm.disconnectMembers': 'Desconectar membros',
|
|
|
|
// Configurações do servidor — visão geral
|
|
'space.overview.title': 'Visão geral',
|
|
'space.overview.identity': 'Identidade do servidor',
|
|
'space.overview.icon': 'Ícone do servidor',
|
|
'space.overview.iconAlt': 'Ícone do servidor',
|
|
'space.overview.iconColor': 'Cor do ícone',
|
|
'space.overview.banner': 'Banner do servidor',
|
|
'space.overview.bannerAlt': 'Banner do servidor',
|
|
'space.overview.bannerUpload': 'Enviar banner (16:9)',
|
|
'space.overview.bannerRemove': 'Remover banner',
|
|
'space.overview.remove': 'Remover',
|
|
'space.overview.name': 'Nome do servidor',
|
|
'space.overview.save': 'Salvar',
|
|
'space.overview.saving': 'Salvando...',
|
|
'space.overview.discard': 'Descartar',
|
|
'space.overview.saved': 'Configurações salvas',
|
|
'space.overview.saveFailed': 'Não foi possível salvar',
|
|
'space.overview.iconFailed': 'Não foi possível enviar o ícone',
|
|
'space.overview.bannerFailed': 'Não foi possível enviar o banner',
|
|
'space.overview.cropIcon': 'Recortar o ícone do servidor',
|
|
'space.overview.cropBanner': 'Recortar o banner do servidor',
|
|
'space.overview.danger': 'Zona de perigo',
|
|
'space.overview.transfer.description': 'Passe a propriedade para outro membro. Você vira um membro comum.',
|
|
'space.overview.transfer.button': 'Transferir propriedade',
|
|
'space.overview.transfer.confirm': 'Transferir a propriedade para',
|
|
'space.overview.transfer.search': 'Buscar membros...',
|
|
'space.overview.transfer.empty': 'Nenhum membro encontrado',
|
|
'space.overview.transfer.back': 'Voltar',
|
|
'space.overview.transfer.cancel': 'Cancelar',
|
|
'space.overview.transfer.submit': 'Transferir',
|
|
'space.overview.transfer.transferring': 'Transferindo...',
|
|
'space.overview.transfer.failed': 'Não foi possível transferir a propriedade',
|
|
'space.overview.delete.description': 'Apaga este servidor e todos os dados dele para sempre. Não dá para desfazer.',
|
|
'space.overview.delete': 'Excluir servidor',
|
|
'space.overview.delete.confirm': 'Clique de novo para confirmar',
|
|
'space.overview.delete.failed': 'Não foi possível excluir o servidor',
|
|
|
|
// Configurações do servidor — membros e banimentos
|
|
'space.members.title': 'Membros',
|
|
'space.members.description': 'Gerencie os membros do servidor. Clique num membro para editar os cargos dele.',
|
|
'space.members.count': 'Membros ({count})',
|
|
'space.members.noRoles': 'Sem cargo',
|
|
'space.members.save': 'Salvar',
|
|
'space.members.cancel': 'Cancelar',
|
|
'space.members.kick': 'Expulsar',
|
|
'space.members.ban': 'Banir',
|
|
'space.members.kick.title': 'Expulsar {name}',
|
|
'space.members.kick.description': 'A pessoa pode voltar com um link de convite.',
|
|
'space.members.ban.title': 'Banir {name}',
|
|
'space.members.ban.description': 'A pessoa fica banida deste servidor até alguém desfazer o banimento.',
|
|
'space.members.rolesFailed': 'Não foi possível atualizar os cargos',
|
|
'space.members.kickFailed': 'Não foi possível expulsar o membro',
|
|
'space.members.banFailed': 'Não foi possível banir o membro',
|
|
'space.bans.title': 'Banimentos',
|
|
'space.bans.count': 'Banimentos ({count})',
|
|
'space.bans.description': 'Quem está banido não consegue voltar até alguém desfazer o banimento.',
|
|
'space.bans.loading': 'Carregando banimentos...',
|
|
'space.bans.empty': 'Ninguém banido',
|
|
'space.bans.by': 'Banido por {moderator} em {date}',
|
|
'space.bans.unban': 'Desfazer banimento',
|
|
'space.bans.loadFailed': 'Não foi possível carregar os banimentos',
|
|
'space.bans.unbanFailed': 'Não foi possível desfazer o banimento',
|
|
|
|
// Configurações do servidor — cargos
|
|
'space.roles.title': 'Cargos',
|
|
'space.roles.description': 'Os cargos definem o que cada membro pode fazer. Cargos mais altos têm prioridade.',
|
|
'space.roles.create': 'Criar cargo',
|
|
'space.roles.creating': 'Criando...',
|
|
'space.roles.createFailed': 'Não foi possível criar o cargo',
|
|
'space.roles.created': 'Cargo criado — ajuste abaixo',
|
|
'space.roles.back': 'Voltar aos cargos',
|
|
'space.roles.identity': 'Identidade',
|
|
'space.roles.name': 'Nome do cargo',
|
|
'space.roles.name.empty': 'O nome do cargo não pode ficar vazio',
|
|
'space.roles.color': 'Cor do cargo',
|
|
'space.roles.save': 'Salvar',
|
|
'space.roles.saving': 'Salvando...',
|
|
'space.roles.saved': 'Cargo salvo',
|
|
'space.roles.saveFailed': 'Não foi possível salvar o cargo',
|
|
'space.roles.discard': 'Descartar',
|
|
'space.roles.copy': 'Duplicar cargo',
|
|
'space.roles.copying': 'Duplicando...',
|
|
'space.roles.copyFailed': 'Não foi possível duplicar o cargo',
|
|
'space.roles.delete': 'Excluir cargo',
|
|
'space.roles.deleting': 'Excluindo...',
|
|
'space.roles.deleteConfirm': 'Confirma?',
|
|
'space.roles.deleteFailed': 'Não foi possível excluir o cargo',
|
|
|
|
// Configurações da categoria
|
|
'category.settings.title': 'Configurações da categoria',
|
|
'category.tab.overview': 'Visão geral',
|
|
'category.tab.permissions': 'Permissões',
|
|
'category.label': 'Categoria',
|
|
'category.private.title': 'Categoria privada',
|
|
'category.private.description': 'Só os membros e cargos escolhidos vão ver os canais desta categoria.',
|
|
'category.private.note': 'Esta categoria fica escondida de quem não tem acesso explícito. Os canais dentro dela herdam essa restrição, a menos que definam a sua própria.',
|
|
'category.private.loadFailed': 'Não foi possível carregar as permissões da categoria',
|
|
'category.private.updateFailed': 'Não foi possível alterar a privacidade da categoria',
|
|
'category.renameFailed': 'Não foi possível renomear a categoria',
|
|
'category.danger': 'Zona de perigo',
|
|
'category.delete': 'Excluir categoria',
|
|
'category.delete.title': 'Excluir "{name}"?',
|
|
'category.delete.body': 'Isto apaga a categoria {name} para sempre. Os canais dentro dela vão para o nível de cima. Não dá para desfazer.',
|
|
'category.delete.failed': 'Não foi possível excluir a categoria',
|
|
|
|
// Configurações da instância — geral
|
|
'instance.general.title': 'Geral',
|
|
'instance.general.description': 'Configure a sua instância do Backspace. Estas opções valem para todo mundo.',
|
|
'instance.general.loading': 'Carregando configurações...',
|
|
'instance.general.name': 'Nome da instância',
|
|
'instance.general.name.description': 'O nome que aparece na tela de login e para as instâncias federadas.',
|
|
'instance.general.discovery': 'Descoberta',
|
|
'instance.general.discovery.title': 'Descoberta de servidores',
|
|
'instance.general.discovery.description': 'Permite que os servidores apareçam na página pública do Explorar',
|
|
'instance.general.gif': 'Busca de GIFs',
|
|
'instance.general.gif.description': 'Liga a busca de GIFs pelo Klipy. Pegue uma chave de API gratuita no portal de desenvolvedores do Klipy.',
|
|
'instance.general.gif.keySaved': 'Chave salva — digite outra para substituir',
|
|
'instance.general.gif.keyPlaceholder': 'Chave de API do Klipy',
|
|
'instance.general.gif.enabled': 'Ligado',
|
|
'instance.general.gif.notConfigured': 'Não configurado',
|
|
'instance.general.gif.clearKey': 'Apagar a chave',
|
|
'instance.general.save': 'Salvar',
|
|
'instance.general.saving': 'Salvando...',
|
|
'instance.general.reset': 'Desfazer',
|
|
'instance.general.saved': 'Configurações salvas',
|
|
'instance.general.saveFailed': 'Não foi possível salvar',
|
|
// Mensagens de sistema — linha na conversa e prévia na barra lateral
|
|
'system.unknown': 'Desconhecido',
|
|
'system.someone': 'Alguém',
|
|
'system.aMember': 'Um membro',
|
|
'system.memberAdded': '{actor} adicionou {target} ao grupo',
|
|
'system.memberLeft': '{target} saiu do grupo',
|
|
'system.memberRemoved': '{actor} removeu {target} do grupo',
|
|
'system.ownerChanged': '{owner} agora é dono do grupo',
|
|
'system.nameChanged': '{actor} mudou o nome do grupo para "{name}"',
|
|
'system.nameCleared': '{actor} tirou o nome do grupo',
|
|
'system.iconChanged': '{actor} trocou o ícone do grupo',
|
|
'system.preview.inviteTo': 'Convite enviado para {space}',
|
|
'system.preview.invite': 'Convite de servidor enviado',
|
|
'system.preview.memberAdded': '{actor} adicionou {target}',
|
|
'system.preview.memberRemoved': '{actor} removeu {target}',
|
|
'system.preview.nameChanged': '{actor} mudou o nome do grupo',
|
|
'system.preview.generic': 'Mensagem do sistema',
|
|
// Login, registro e a página de convite
|
|
'auth.username': 'Nome de usuário',
|
|
'auth.password': 'Senha',
|
|
'auth.username.required': 'O nome de usuário é obrigatório',
|
|
'auth.password.required': 'A senha é obrigatória',
|
|
'auth.login.title': 'Que bom te ver!',
|
|
'auth.login.subtitle': 'A gente estava com saudade!',
|
|
'auth.login.submit': 'Entrar',
|
|
'auth.login.loggingIn': 'Entrando...',
|
|
'auth.login.failed': 'Não foi possível entrar',
|
|
'auth.login.rateLimited': 'Tentativas de login demais',
|
|
'auth.retryIn': 'Tente de novo em {seconds}s',
|
|
'auth.needAccount': 'Ainda não tem conta?',
|
|
'auth.register': 'Criar conta',
|
|
'auth.haveAccount': 'Já tem conta?',
|
|
'auth.register.title': 'Criar uma conta',
|
|
'auth.register.confirmPassword': 'Confirmar a senha',
|
|
'auth.register.username.length': 'O nome de usuário precisa ter de 3 a 32 caracteres',
|
|
'auth.register.username.charset': 'O nome de usuário só aceita letras minúsculas, números e sublinhado',
|
|
'auth.register.username.checking': 'Verificando se está livre...',
|
|
'auth.register.username.available': 'Nome de usuário disponível',
|
|
'auth.register.username.taken': 'Este nome de usuário já está em uso',
|
|
'auth.register.password.length': 'A senha precisa ter pelo menos 6 caracteres',
|
|
'auth.register.password.mismatch': 'As senhas não batem',
|
|
'auth.register.failed': 'Não foi possível criar a conta',
|
|
'auth.register.rateLimited': 'Tentativas demais',
|
|
'auth.register.continue': 'Continuar',
|
|
'auth.register.invite': 'Código ou link de convite',
|
|
'auth.register.invite.checking': 'Verificando...',
|
|
'auth.register.invite.validating': 'Validando o convite...',
|
|
'auth.register.invite.expired': 'Este link de convite expirou. Peça um novo ao administrador.',
|
|
'auth.register.invite.exhausted': 'Este convite atingiu o limite de usos. Peça ao administrador para aumentar.',
|
|
'auth.register.invite.invalid': 'Código de convite inválido.',
|
|
'auth.register.invite.invalidLink': 'Link de convite inválido — peça um novo',
|
|
'auth.register.profile.title': 'Deixe com a sua cara',
|
|
'auth.register.profile.subtitle': 'Personalize o perfil, ou faça isso depois',
|
|
'auth.register.displayName': 'Nome de exibição',
|
|
'auth.register.displayName.placeholder': 'Nome de exibição',
|
|
'auth.register.avatarColor': 'Cor da foto',
|
|
'auth.register.submit': 'Começar',
|
|
'auth.register.creating': 'Criando a conta...',
|
|
'auth.register.back': 'Voltar',
|
|
'auth.register.skip': 'Deixar para depois',
|
|
'auth.register.cropAvatar': 'Recortar a foto',
|
|
'join.page.loading': 'Carregando o convite...',
|
|
'join.page.invalid.title': 'Convite inválido',
|
|
'join.page.invalid.body': 'Este link de convite é inválido ou expirou.',
|
|
'join.page.invitedTo': 'Você foi convidado para',
|
|
'join.page.noCode': 'Nenhum código de convite informado',
|
|
'join.page.invalidCode': 'Código de convite inválido',
|
|
'join.page.loadFailed': 'Não foi possível carregar o convite',
|
|
'join.page.joinFailed': 'Não foi possível entrar no servidor',
|
|
'join.page.connectFailed': 'Não foi possível conectar',
|
|
'join.page.loginFailed': 'Não foi possível entrar',
|
|
'join.page.instance.placeholder': 'ex.: minha-instancia.com',
|
|
'join.page.alreadyMember': 'Você já está em {space}!',
|
|
'join.page.goTo': 'Ir para {space}',
|
|
'join.page.redirecting': 'Redirecionando...',
|
|
// Voz — controles, informações de conexão e a folha de entrada no celular
|
|
'voice.title': 'Voz e Vídeo',
|
|
'voice.dmCall': 'Chamada de DM',
|
|
'voice.channel': 'Canal de voz',
|
|
'voice.connected': 'Voz conectada',
|
|
'voice.connecting': 'Conectando...',
|
|
'voice.failed': 'Falha na conexão',
|
|
'voice.goToCall': 'Ir para a call',
|
|
'voice.disconnect': 'Desconectar',
|
|
'voice.camera.on': 'Ligar a câmera',
|
|
'voice.camera.off': 'Desligar a câmera',
|
|
'voice.share.start': 'Compartilhar tela',
|
|
'voice.share.stop': 'Parar de compartilhar',
|
|
'voice.soundboard': 'Soundboard',
|
|
'voice.videoQuality': 'Qualidade do vídeo',
|
|
'voice.noise.enable': 'Ligar a supressão de ruído por IA',
|
|
'voice.noise.disable': 'Desligar a supressão de ruído por IA',
|
|
'voice.info.title': 'Informações da conexão',
|
|
'voice.info.notConnected': 'Desconectado',
|
|
'voice.info.gathering': 'Coletando dados...',
|
|
'voice.info.network': 'Rede',
|
|
'voice.info.ping': 'Ping',
|
|
'voice.info.packetLoss': 'Perda de pacotes',
|
|
'voice.info.jitter': 'Jitter',
|
|
'voice.info.server': 'Servidor',
|
|
'voice.info.protocol': 'Protocolo',
|
|
'voice.info.audio': 'Áudio',
|
|
'voice.info.video': 'Vídeo',
|
|
'voice.info.microphone': 'Microfone',
|
|
'voice.info.camera': 'Câmera',
|
|
'voice.info.screen': 'Tela',
|
|
'voice.info.screenAudio': 'Áudio da tela',
|
|
'voice.info.unknown': 'Desconhecido',
|
|
'voice.info.remote': 'Remoto',
|
|
'voice.join.empty': 'Ninguém neste canal ainda.',
|
|
'voice.join.beFirst': 'Seja o primeiro a entrar!',
|
|
'voice.join.mute': 'Desligar o microfone',
|
|
'voice.join.unmute': 'Ligar o microfone',
|
|
'voice.join.switch': 'Trocar de canal',
|
|
'voice.join.join': 'Entrar na voz',
|
|
'voice.join.close': 'Fechar',
|
|
'voice.join.selectedCamera': 'Câmera escolhida',
|
|
'voice.join.enablePreview': 'Ligar a prévia da câmera',
|
|
'voice.join.checkingCamera': 'Verificando a câmera…',
|
|
'voice.join.tapToPreview': 'Toque para ver a câmera',
|
|
'voice.join.permissionDenied': 'Permissão de câmera negada.',
|
|
'voice.settings.volume': 'Volume',
|
|
'voice.settings.sfxVolume': 'Volume dos efeitos sonoros',
|
|
'voice.settings.messageSound': 'Tocar som em toda mensagem',
|
|
'voice.settings.messageSound.description': 'Desligado (padrão): só DMs e mensagens que mencionam você. Ligado: todos os canais.',
|
|
'voice.settings.processing': 'Processamento de voz',
|
|
'voice.settings.noise': 'Supressão de ruído por IA',
|
|
'voice.settings.noise.description': 'Remoção de ruído por aprendizado de máquina (RNNoise) — filtra teclado, ventilador e barulho de fundo',
|
|
'voice.settings.echo': 'Cancelamento de eco',
|
|
'voice.settings.echo.description': 'Cancela o eco do seu som voltando pelo microfone. Sempre ligado em canais de voz e chamadas.',
|
|
'voice.settings.agc': 'Controle automático de ganho',
|
|
'voice.settings.agc.description': 'Ajusta o volume do microfone sozinho — pode abaixar a sua voz durante transmissões',
|
|
// Navegação das configurações (servidor, usuário e instância)
|
|
'nav.general': 'Geral',
|
|
'nav.management': 'Gerenciamento',
|
|
'nav.overview': 'Visão geral',
|
|
'nav.discovery': 'Descoberta',
|
|
'nav.members': 'Membros',
|
|
'nav.roles': 'Cargos',
|
|
'nav.bans': 'Banimentos',
|
|
'nav.userSettings': 'Configurações do usuário',
|
|
'nav.appSettings': 'Configurações do app',
|
|
'nav.administration': 'Administração',
|
|
'nav.instance': 'Instância',
|
|
'nav.registration': 'Registro',
|
|
'nav.federation': 'Federação',
|
|
'nav.streaming': 'Transmissão',
|
|
'nav.storage': 'Armazenamento',
|
|
'nav.users': 'Usuários',
|
|
'nav.back': 'Voltar ao menu de configurações do servidor',
|
|
'space.discovery.title': 'Descoberta',
|
|
'space.discovery.visibility': 'Visibilidade',
|
|
'space.discovery.visibility.description': 'Escolha quem pode descobrir e entrar neste servidor.',
|
|
'space.discovery.description': 'Descrição',
|
|
'space.discovery.description.hint': 'Um resumo curto que aparece na página do Explorar.',
|
|
'space.discovery.description.placeholder': 'Uma descrição curta para o Explorar...',
|
|
'space.requests.loading': 'Carregando...',
|
|
'space.requests.empty': 'Nenhum pedido de entrada pendente',
|
|
'space.requests.accept': 'Aceitar',
|
|
'space.requests.decline': 'Recusar',
|
|
'space.requests.failed': 'A ação falhou',
|
|
|
|
// Telas do celular
|
|
'mobile.messages': 'Mensagens',
|
|
'mobile.noConversations': 'Nenhuma conversa ainda.',
|
|
'mobile.loadingChannels': 'Carregando canais',
|
|
'mobile.noChannels': 'Nenhum canal ainda.',
|
|
'mobile.groupInfo': 'Informações do grupo',
|
|
'mobile.info': 'Informações',
|
|
'mobile.cancelEdit': 'Cancelar a edição',
|
|
'mobile.removeGroupIcon': 'Remover o ícone do grupo',
|
|
'mobile.federatedGroup': 'Grupo federado',
|
|
'mobile.invitePeople': 'Convidar pessoas',
|
|
'mobile.inviteCopied': 'Link de convite copiado',
|
|
'mobile.inviteFailed': 'Não foi possível gerar o convite',
|
|
'mobile.createFolder': 'Criar pasta',
|
|
'mobile.folderCreated': 'Pasta criada',
|
|
'mobile.moveToFolder': 'Mover para pasta',
|
|
'mobile.movedToFolder': 'Movido para a pasta',
|
|
'mobile.removeFromFolder': 'Tirar da pasta',
|
|
'mobile.removedFromFolder': 'Tirado da pasta',
|
|
'mobile.folderUngrouped': 'Pasta desfeita',
|
|
'mobile.unnamedFolder': 'Pasta sem nome',
|
|
'mobile.leaveSpace': 'Sair do servidor',
|
|
'mobile.leave': 'Sair',
|
|
'mobile.leftSpace': 'Você saiu do servidor',
|
|
'mobile.leaveSpaceFailed': 'Não foi possível sair do servidor',
|
|
'mobile.muteUser': 'Silenciar usuário',
|
|
'mobile.channelSettings': 'Configurações do canal',
|
|
'mobile.deleteChannel': 'Excluir canal',
|
|
'mobile.channelDeleted': 'Canal excluído',
|
|
'mobile.categorySettings': 'Configurações da categoria',
|
|
'mobile.deleteCategory': 'Excluir categoria',
|
|
'mobile.categoryDeleted': 'Categoria excluída',
|
|
'mobile.delete': 'Excluir',
|
|
'mobile.createSpace': 'Criar servidor',
|
|
'mobile.joinSpace': 'Entrar num servidor',
|
|
'mobile.exploreSpaces': 'Explorar servidores',
|
|
'mobile.leaveSpace.confirm': 'Quer mesmo sair deste servidor? Você vai precisar de um novo convite para voltar.',
|
|
'mobile.deleteChannel.confirm': 'Tem certeza? Isto apaga o canal e todas as mensagens dele para sempre.',
|
|
'mobile.deleteCategory.confirm': 'Tem certeza? Os canais desta categoria vão para o nível de cima.',
|
|
'mobile.deleteChannelFailed': 'Não foi possível excluir o canal',
|
|
'mobile.voice.title': 'Chamada de voz',
|
|
'mobile.voice.collapse': 'Minimizar a chamada',
|
|
'mobile.voice.members': 'Ver membros',
|
|
'mobile.voice.unmute': 'Ligar o microfone',
|
|
'mobile.voice.deafen': 'Desligar o som',
|
|
'mobile.voice.undeafen': 'Ligar o som',
|
|
'mobile.voice.cameraOn': 'Ligar a câmera',
|
|
'mobile.voice.cameraOff': 'Desligar a câmera',
|
|
'mobile.voice.switchCamera': 'Trocar de câmera',
|
|
'mobile.voice.selectCamera': 'Escolher a câmera',
|
|
'mobile.voice.shareScreen': 'Compartilhar a tela',
|
|
'mobile.voice.stopSharing': 'Parar de compartilhar',
|
|
'mobile.voice.disconnect': 'Sair da chamada',
|
|
};
|