/** * Brazilian Portuguese — translated from locales/en.js. * * Register: formal. In Brazilian Portuguese that is "você" with polite phrasing, * not "o senhor / a senhora" — the latter reads as stiff in software and is * reserved for addressing someone markedly senior. * `hub`, `node` and `GEK` are left in English: they name the CLI * (`meshbay-node`), node.toml and the docs, which are English throughout. */ export default { // Nav 'nav.toggle_menu': 'Exibir o menu', 'nav.light_mode': 'Tema claro', 'nav.dark_mode': 'Tema escuro', 'nav.logout': 'Sair', 'nav.login': 'Entrar', 'nav.minimize_tray': 'Minimizar na bandeja', 'tray.show': 'Mostrar o MeshBay', 'tray.quit': 'Sair', 'tray.start_node': 'Iniciar o nó', 'tray.stop_node': 'Parar o nó', // Sidebar 'sidebar.my_groups': 'Meus grupos', 'sidebar.no_groups': 'Nenhum grupo ainda', 'sidebar.legal': 'Informações legais', 'sidebar.discover': 'Descobrir', 'sidebar.public_groups': 'Grupos públicos', // Login 'login.title': 'Entrar', 'login.username': 'Nome de usuário', 'login.password': 'Senha', 'login.submit': 'Entrar', 'login.loading': 'Entrando...', 'login.no_account': 'Ainda não tem conta?', 'login.register_link': 'Criar uma conta', 'login.forgot': 'Esqueceu sua frase secreta?', 'login.show_password': 'Mostrar a frase secreta', 'login.hide_password': 'Ocultar a frase secreta', 'reset.title': 'Redefinir a frase secreta', 'reset.request_intro': 'Digite seu nome de usuário e o e-mail da conta. Se coincidirem, um código de redefinição é enviado para esse endereço.', 'reset.send_code': 'Enviar código', 'reset.form_intro': 'Digite o código do seu e-mail e escolha uma nova frase secreta. Se você tem sua chave de recuperação, adicione-a para também restaurar o acesso aos seus grupos.', 'reset.code': 'Código de redefinição', 'reset.recovery_key': 'Chave de recuperação (opcional)', 'reset.recovery_key_hint': 'Deixe em branco se não a tiver. Sem ela, seu acesso é restaurado, mas é preciso reingressar em cada grupo.', 'reset.new_pass': 'Nova frase secreta', 'reset.new_pass_repeat': 'Repetir a nova frase secreta', 'reset.submit': 'Redefinir a frase secreta', 'reset.working': 'Restaurando suas identidades de grupo…', 'reset.signin_restored': 'Seu acesso foi restaurado.', 'reset.groups_restored': 'Suas identidades de grupo foram restauradas em todos os nós alcançáveis.', 'reset.no_recovery': 'Suas identidades de grupo não foram restauradas. Para cada grupo, peça ao operador dele para remover sua fixação e enviar um novo código de convite, e então reingresse.', 'reset.needs_operator': 'Estes grupos ainda precisam de ação — peça a cada operador para remover sua fixação e enviar um novo código:', 'reset.go_app': 'Ir para o aplicativo', 'reset.back_to_login': 'Voltar para o login', 'reset.err_unsupported': 'A redefinição da frase secreta precisa do módulo de criptografia do navegador, que não está disponível aqui.', // Register 'register.title': 'Criar uma conta', 'register.username': 'Nome de usuário', 'register.email': 'E-mail', 'register.password': 'Frase secreta (mínimo de 12 caracteres)', 'register.confirm': 'Confirmar a senha', 'register.submit': 'Criar a conta', 'register.loading': 'Criando a conta...', 'register.has_account': 'Já tem uma conta?', 'register.login_link': 'Entrar', 'register.recovery_title': 'Guarde sua chave de recuperação', 'register.recovery_intro': 'Esta chave restaura suas identidades de grupo caso você esqueça sua frase secreta. Guarde-a em um gerenciador de senhas ou em local seguro.', 'register.recovery_copy': 'Copiar', 'register.recovery_copied': 'Copiado', 'register.recovery_warning': 'Se você perder tanto a frase secreta quanto esta chave, seus arquivos permanecem em seus nós, mas você reingressa em cada grupo com uma nova identidade.', 'register.recovery_saved': 'Guardei minha chave de recuperação em um local seguro.', 'register.recovery_continue': 'Continuar', 'register.recovery_email_opt': 'Enviar também esta chave de recuperação para o meu e-mail como backup', 'register.recovery_emailed': 'Uma cópia também foi enviada para o seu e-mail, na mesma mensagem que o seu código de verificação.', 'register.recovery_not_emailed': 'Isto não foi enviado por e-mail. Guarde agora — esta é a única vez que é mostrada.', 'register.success_title': 'Verifique seu e-mail', 'register.success_msg': 'Um código de verificação foi enviado para o seu e-mail. Digite-o abaixo para ativar sua conta.', 'register.go_login': 'Ir para o login', 'register.code_placeholder': 'Código de verificação', 'register.verify_btn': 'Verificar', 'register.verifying': 'Verificando…', 'register.verified_title': 'E-mail verificado', 'register.verified_msg': 'Sua conta está ativa. Agora você pode entrar.', 'register.resend': 'Reenviar código', 'register.resend_sent': 'Um novo código foi enviado.', 'login.pending_verification': 'Seu e-mail ainda não foi verificado. Verifique sua caixa de entrada.', 'login.verify_link': 'Verificar e-mail', 'login.invalid': "Nome de usuário ou frase secreta incorretos.", 'login.locked': "Muitas frases secretas incorretas para esta conta. Tente novamente em {minutes} min ou redefina sua frase secreta.", // Sign-in page: what MeshBay is (browser only) 'welcome.title': 'A internet como deveria ser.', 'welcome.lead': 'O MeshBay é um software de código aberto que dá acesso remoto aos seus arquivos pessoais e executa aplicativos sobre o armazenamento do seu próprio computador:', 'welcome.app_chat': 'Chat', 'welcome.app_photos': 'Fotos', 'welcome.app_media': 'Central de mídia', 'welcome.app_video': 'Player de vídeo', 'welcome.app_music': 'Player de música', 'welcome.groups': 'Crie grupos para dar às pessoas próximas acesso a alguns desses aplicativos.', 'welcome.e2e': 'Seus dados são criptografados de ponta a ponta e trafegam ponto a ponto, direto de cada dispositivo para o computador que os hospeda: o seu nó. Eles nunca passam pelo hub meshbay.org.', 'welcome.uses_title': 'O que você pode fazer com ele', 'welcome.use_chat': 'Mensagens instantâneas dentro de um grupo', 'welcome.use_photos': 'Compartilhar álbuns de fotos com a família e os amigos', 'welcome.use_media': 'Acessar de qualquer lugar a sua central de mídia, para você e sua casa, com streaming e Chromecast pelo app para desktop', 'welcome.use_apps': 'Criar seus próprios aplicativos no nó que você hospeda', 'welcome.hub_title': 'O que o meshbay.org faz', 'welcome.hub_body': 'O meshbay.org é apenas um serviço de sinalização: ele autentica você e conecta as partes entre si, plug-and-play, através de redes domésticas.', 'welcome.hub_never': 'Seu conteúdo nunca chega até ele:', 'welcome.never_transit': 'Nada passa por ele: nenhum conteúdo, nenhuma indexação', 'welcome.never_stored': 'Nenhum dos seus arquivos ou mensagens fica armazenado nele', 'welcome.never_e2e': 'Criptografia de ponta a ponta, de cada dispositivo até o seu nó', 'welcome.hub_free': 'O serviço é gratuito. Não há modelo de negócio (de propósito), rastreamento nem anúncios. Aproveite!', 'welcome.download': 'Baixar (beta)', 'welcome.legal': 'Informações legais', 'register.err_mismatch': 'As senhas não coincidem', 'register.err_username_len': 'O nome de usuário deve ter pelo menos {n} caracteres.', 'register.err_min_len': { one: 'Use pelo menos {n} caractere', other: 'Use pelo menos {n} caracteres', }, 'register.err_too_weak': 'Fácil demais de adivinhar. Sua frase secreta é o que ' + 'protege suas chaves onde elas ficam guardadas — algumas palavras sem relação ' + 'entre si funcionam muito bem.', 'register.strength': 'Robustez: cerca de {bits} bits. Ela protege a cópia das suas ' + 'chaves mantida nos nodes dos quais você participa, então vale a pena caprichar.', 'captcha.required': 'Por favor, complete o captcha.', 'captcha.failed': 'Verificação do captcha falhou — tente novamente.', // Home 'home.welcome': 'Bem-vindo ao MeshBay', 'home.no_groups': 'Você ainda não participa de nenhum grupo.', 'home.browse_prefix': 'Explore os ', 'home.browse_link': 'grupos públicos', 'home.browse_suffix': ' ou peça a um administrador de grupo que o convide.', 'home.invite_only': 'Peça a um administrador de grupo que o convide.', 'home.my_groups': 'Meus grupos', // Explore 'explore.title': 'Grupos públicos', 'explore.search': 'Pesquisar grupos...', 'explore.loading': 'Carregando...', 'explore.empty': 'Nenhum grupo público disponível.', 'explore.create_group': 'Criar um grupo', 'explore.join': 'Participar', 'explore.member': 'Participando', 'explore.disabled': "This hub does not have public groups.", // Group page 'group.default_name': 'Grupo', 'group.tab_files': 'Arquivos', 'group.tab_chat': 'Conversa', 'group.tab_video': 'Vídeos', 'group.tab_music': 'Música', 'group.tab_photos': 'Fotos', 'group.tab_helloworld': 'HelloWorld', 'helloworld.greeting': 'Olá, mundo!', 'helloworld.no_directory': 'Nenhuma pasta escolhida. Escolha uma nas configurações.', 'helloworld.counted': '{n} arquivo(s)', 'settings_app.helloworld_directory_label': 'Pasta', 'settings_app.helloworld_directory_hint': 'A pasta que este aplicativo de referência lista. Existe para mostrar que adicionar um aplicativo não exige nada além de seus dois arquivos.', 'group.tab_members': 'Membros', 'group.tab_settings': "Configurações", 'members.danger_leave_hint': "Você perderá o acesso aos arquivos e ao chat deste grupo.", 'members.uploads_title': "Envios", 'members.uploads_on': "Os membros podem adicionar arquivos", 'members.uploads_off': "Somente você pode adicionar arquivos", 'members.uploads_disable': "Desativar", 'members.uploads_enable': "Ativar", 'members.uploads_hint': "Vale para todos menos você. O nó recusa o envio por conta própria: não se trata de esconder um botão.", 'members.apps_title': "Aplicativos", 'members.apps_hint': "Quais partes deste grupo os membros veem. Pelo menos um deve permanecer ativado.", 'members.apps_need_one': "Pelo menos um aplicativo deve permanecer ativado.", 'members.danger_delete_hint': "O grupo desaparece para todos os membros. Não há como desfazer.", 'group.filter': 'Filtrar arquivos...', 'group.refresh_index': 'Atualizar a lista', 'group.col_name': 'Nome', 'group.col_size': 'Tamanho', 'group.col_type': 'Tipo', 'group.col_date': 'Data', 'group.empty_filter': 'Nenhum arquivo corresponde ao filtro', 'group.empty_dir': 'Esta pasta está vazia', 'group.download': 'Baixar', 'group.play': 'Reproduzir', 'group.offline_title': 'Nenhum node está on-line para este grupo no momento.', 'group.offline_hint': 'Os arquivos aparecerão quando um node que hospeda este grupo ' + 'se conectar.', 'group.upload': 'Enviar', 'group.drop_here': 'Solte para enviar para {dir}', 'group.drop_not_here': 'Só é possível soltar arquivos em uma pasta com permissão de escrita.', 'group.drop_conflict': 'Envio cancelado — já existe nesta pasta: {names}. Renomeie ou remova primeiro.', 'group.drop_invalid': 'Envio cancelado — o nó não pode armazenar estes nomes: {names}', 'group.drop_unreadable': 'Envio cancelado — não foi possível ler os itens soltos.', 'group.drop_mkdir_failed': 'Envio cancelado — não foi possível criar uma pasta ({detail}).', 'group.mkdir': 'Nova pasta', 'group.mkdir_prompt': 'Nome da nova pasta', 'group.mkdir_offline': 'Sem conexão com o nó.', 'group.download_offline': 'Sem conexão com o nó — o download não pode começar. Ele reconecta sozinho; tente de novo em instantes.', 'group.download_write_stalled': 'O arquivo parou de ser gravado no disco ({seconds}s sem progresso). O download foi interrompido em vez de ficar travado; tente de novo.', 'device.add_title': 'This browser is not linked to this node yet', 'device.add_hint': 'Your account is known here, but this browser holds a different key. Approve it from a device already linked — no operator needed.', 'device.add_btn': 'Get a linking code', 'device.add_show': 'Type this code into a device already linked to this node, within the hour:', 'device.mine_title': 'Your devices on this node', 'device.mine_hint': 'Each browser or client you use here holds its own key. They are separate from your devices on other nodes.', 'device.mine_empty': 'No device is linked here yet.', 'device.this_one': 'this one', 'device.revoke': 'Remove', 'device.revoke_confirm': 'Remove this device? It will lose access to this node until it is linked again.', 'device.approve_hint': 'Linking a new device? Enter the code it is showing.', 'device.approve_btn': 'Approve', 'device.approved': 'Device linked.', 'group.root_unavailable': '(indisponível — a unidade está desconectada)', 'group.root_plug': 'Conectar', 'group.root_eject': 'Ejetar', 'group.root_writable': 'Leitura/Escrita', 'group.root_ejected': '(ejetado)', 'group.view': 'Visualizar', 'group.delete': 'Excluir', 'group.delete_confirm': 'Excluir {name}?', 'group.delete_group': 'Excluir o grupo', 'group.delete_group_confirm': 'Excluir "{name}" definitivamente e remover todos os ' + 'membros? Os arquivos que estão no node são preservados.', 'group.err_transport': 'Módulo de transporte não carregado', // Status 'status.idle': 'Ocioso', 'status.discovering': 'Procurando nodes...', 'status.connecting': 'Conectando via WebRTC...', 'status.connecting_short': 'Conectando…', 'status.fetching': 'Obtendo o índice...', 'status.files': { one: '{n} arquivo', other: '{n} arquivos', }, 'status.offline': 'Nenhum node on-line', 'status.error': 'Falha na conexão', // Chat 'chat.empty': 'Ainda não há mensagens. Comece a conversa!', 'chat.placeholder': 'Escreva uma mensagem...', 'chat.send': 'Enviar', 'chat.attach': 'Anexar arquivo', 'chat.attach_read_only': 'Nenhum diretório compartilhado gravável — anexos desativados', // Video player 'video.loading': 'Carregando {name}...', 'video.buffering': 'Armazenando em buffer...', 'video.resumed_at': "Retomado em {time}", 'video.from_start': "Começar do início", 'video.audio_track': 'Faixa de áudio', 'video.audio_track_n': 'Faixa {n}', 'video.subtitles': 'Legendas', 'video.subtitles_off': 'Nenhuma', 'video.subtitle_track_n': 'Faixa {n}', 'video.subtitles_forced': 'forçadas (apenas letreiros)', 'video.subtitles_sdh': 'para surdos', 'video.err_subtitle': 'Não foi possível carregar esta faixa de legendas', 'video.close': 'Fechar (Esc)', 'preview.pdf_fallback': 'Este navegador não exibirá o PDF na própria página. Baixe ' + 'o arquivo — de todo modo ele foi descriptografado aqui.', 'preview.too_large': 'Este arquivo tem {size}, mais do que esta página consegue manter na memória ({limit}). Baixe-o em vez disso — um download é gravado direto no disco.', 'download.too_large_for_memory': '"{name}" tem {size}. Este navegador só consegue salvar um arquivo desse tamanho gravando-o direto no disco, e aqui ele não tem como — precisaria manter o arquivo inteiro na memória. Recarregue a página e tente novamente; se não resolver, use o aplicativo para computador.', 'group.upload_indexing': 'indexando…', 'video.err_transport': 'Transporte não conectado', 'video.err_mse': 'Codec sem suporte para transmissão: {codec}', 'video.mode_poster': 'Pôsteres', 'video.mode_flat': 'Lista simples', 'video.filter_all': 'All', 'video.filter_movies': 'Movies', 'video.filter_series': 'Series', 'pager.range': '{from}–{to} de {total}', 'pager.previous': 'Página anterior', 'pager.next': 'Próxima página', 'video.empty': 'Nenhum vídeo encontrado.', 'video.no_root_configured': 'Ainda não há uma pasta raiz de Vídeos definida para este grupo — um operador pode escolher uma em Configurações.', 'music.no_root_configured': 'Ainda não há uma pasta raiz de Música definida para este grupo — um operador pode escolher uma em Configurações.', 'video.director': 'Diretor', 'video.specials': 'Especiais', 'video.season_n': 'Temporada {n}', 'video.episode_n': 'Episódio {n}', 'video.n_episodes': { one: '{n} episódio', other: '{n} episódios', }, 'video.fix_match': 'Corrigir correspondência…', 'video.search_title': 'Corrigir a correspondência do TMDB', 'video.search_placeholder': 'Pesquisar no TMDB…', 'video.search_button': 'Pesquisar', 'video.search_no_results': 'Nenhuma correspondência encontrada.', 'video.search_apply_hint': 'Aplica-se a todos os arquivos atualmente agrupados sob este título.', 'video.search_apply_hint_movie': 'Aplica-se somente a este arquivo.', 'video.source_file': 'Arquivo: {name}', 'video.no_match': 'Sem correspondência confiável no TMDB — exibindo o nome do arquivo.', 'video.rematch_one': 'Combinar de novo', 'video.read_more': 'Ler mais', 'video.read_less': 'Mostrar menos', // Música 'music.mode_grid': 'Álbuns', 'music.mode_flat': 'Lista simples', 'music.empty': 'Nenhuma música encontrada.', 'music.unknown_album': 'Álbum desconhecido', 'music.unknown_artist': 'Artista desconhecido', 'music.various': 'Diversos', 'music.play_all': 'Reproduzir tudo', 'music.menu_more': 'Mais…', 'music.menu_play': 'Reproduzir', 'music.menu_play_next': 'Reproduzir em seguida', 'music.menu_enqueue': 'Adicionar à fila', 'music.n_tracks': { one: '{n} faixa', other: '{n} faixas', }, 'music.err_transport': 'Transporte não conectado', 'music.err_playback': 'Erro de reprodução', 'music.err_transcode': 'Falha na conversão de formato', 'music.player_play': 'Reproduzir', 'music.player_pause': 'Pausar', 'music.player_prev': 'Anterior', 'music.player_next': 'Próxima', 'music.player_shuffle': 'Aleatório', 'music.player_repeat_off': 'Repetição desativada', 'music.player_repeat_all': 'Repetir tudo', 'music.player_repeat_one': 'Repetir faixa', 'music.player_volume': 'Volume', 'music.player_close': 'Fechar player', 'playlists.menu': 'Playlists', 'playlists.load': 'Carregar uma playlist', 'playlists.create': 'Nova playlist…', 'playlists.delete': 'Excluir uma playlist', 'playlists.remove_track': 'Remover uma faixa', 'playlists.sync_now': 'Sincronizar agora', 'playlists.add_to': 'Adicionar à playlist', 'playlists.favorites': 'Favoritos', 'playlists.none_yet': 'Nenhuma playlist ainda', 'playlists.empty_playlist': 'Esta playlist está vazia', 'playlists.added': '{n} adicionadas', 'playlists.already_there': 'Já está nessa playlist', 'playlists.name_placeholder': 'Nome da playlist', 'playlists.err_duplicate': 'Já existe uma playlist com esse nome', 'playlists.confirm_delete': 'Excluir a playlist "{name}"? Isso não pode ser desfeito.', 'playlists.deleted': '"{name}" excluída', 'playlists.synced': 'Playlists sincronizadas', 'playlists.sync_failed': 'Não foi possível sincronizar', 'playlists.err_no_key': 'Saia e entre com sua senha uma vez para sincronizar as playlists entre dispositivos.', 'playlists.err_too_large': '"{name}" é grande demais para sincronizar com seus outros dispositivos. Divida-a em playlists de cerca de {n} faixas.', 'playlists.track_removed': 'Faixa removida', 'playlists.save_queue': 'Salvar a fila como playlist…', 'playlists.cancel': 'Cancelar', 'playlists.save': 'Salvar', 'music.player_queue': 'Fila atual', 'music.queue_title': 'Tocando agora', // Photos 'photo.empty': 'Nenhuma foto encontrada.', 'photo.no_roots_configured': 'Ainda não há pastas raiz de Fotos definidas para este grupo — um operador pode escolher algumas em Configurações.', 'photo.root_album': '(nível superior)', 'photo.n_photos': { one: '{n} foto', other: '{n} fotos', }, 'photo.back': 'Voltar', 'photo.prev': 'Anterior (←)', 'photo.next': 'Próxima (→)', 'photo.zip_album': 'Baixar álbum como zip', 'photo.zoom_in': 'Aumentar zoom', 'photo.zoom_out': 'Diminuir zoom', 'photo.zoom_fit_title': 'Ajustar à janela', 'photo.zoom_fit_label': 'Ajustar', 'photo.zoom_100': 'Tamanho real (100%)', // LAN cast 'cast.start': 'Transmitir para dispositivo', 'cast.stop': 'Parar transmissão', 'cast.copy_url': 'Copiar URL do stream', 'cast.copied': 'URL copiada', 'cast.scanning': 'Procurando dispositivos…', 'cast.no_devices': 'Nenhum dispositivo encontrado', // Settings 'settings.title': 'Configurações', 'settings.coming_soon': 'Em breve.', 'settings.downloads': 'Downloads', 'settings.dl_auto': 'Salvar automaticamente', 'settings.dl_auto_hint': 'Os arquivos vão direto para a pasta escolhida abaixo, sem ' + 'nenhuma caixa de diálogo. Baixar vinte arquivos coloca vinte arquivos lá.', 'settings.dl_ask': 'Perguntar sempre', 'settings.dl_ask_hint': 'Uma caixa "Salvar como" por arquivo — uma para cada ' + 'arquivo, inclusive quando você baixa uma seleção.', 'settings.dl_folder': 'Pasta: {name}', 'settings.dl_no_folder': 'Nenhuma pasta escolhida — os downloads vão para onde o ' + 'seu navegador os colocar, e não podem ser pausados', 'settings.dl_choose': 'Escolher pasta', 'settings.dl_change': 'Alterar', 'settings.dl_forget': 'Esquecer', 'settings.profile': 'Perfil', 'settings.username': 'Nome de usuário', 'settings.email': 'Email', 'settings.email_save': 'Salvar', 'settings.email_saved': 'E-mail atualizado', 'settings.email_code_sent': 'Um código de verificação foi enviado para o seu novo endereço de e-mail.', 'settings.email_code_placeholder': 'Código de verificação', 'settings.email_verify_btn': 'Verificar', 'settings.email_verifying': 'Verificando…', 'settings.email_verified': 'Endereço de e-mail alterado com sucesso.', 'settings.notif_global_disable': 'Desativar todas as notificações', 'settings.notif_global_hint': 'Quando ativado, nenhuma notificação é criada para nenhum grupo.', 'settings.defaults': 'Padrões', 'settings.default_tab': 'Default tab', 'settings.default_tab_hint': 'Which tab opens first when you enter a group.', 'settings.media_page_size': 'Itens por página em Vídeos e Música', 'settings.media_page_size_hint': 'Quantos pôsteres ou álbuns são exibidos de uma vez; as setas na barra de ferramentas passam para o próximo lote.', 'settings.music_keep_screen_on': 'Keep screen on during music playback', 'settings.music_keep_screen_on_hint': 'Prevents the phone from locking on its own while a track is playing.', 'settings.node_pins': 'Identidades dos nodes', 'settings.node_pins_hint': 'A chave de identidade de cada node é memorizada na ' + 'primeira conexão. Se ela mudar, a conexão é recusada — o que só é esperado ' + 'quando um operador reinstala um node. Confirme com ele antes de limpar.', 'settings.node_pins_count': { one: '{n} fixada', other: '{n} fixadas', }, 'settings.node_pins_clear': 'Limpar as identidades fixadas', 'settings.passphrase': 'Frase secreta', 'settings.passphrase_hint': 'Altera a frase secreta desta conta. Suas chaves de identidade são recriptografadas em cada grupo cujo nó esteja on-line; um grupo cujo nó esteja off-line terá de ser reingressado depois.', 'settings.passphrase_change': 'Alterar a frase secreta', 'settings.passphrase_current': 'Frase secreta atual', 'settings.passphrase_new': 'Nova frase secreta', 'settings.passphrase_new_repeat': 'Repetir a nova frase secreta', 'settings.continue': 'Continuar', 'settings.done': 'Concluído', 'settings.passphrase_confirm_intro': 'Suas chaves de identidade serão recriptografadas agora em cada grupo cujo nó possa ser alcançado:', 'settings.passphrase_reachable': 'Atualizado agora', 'settings.passphrase_unreachable': 'Não pode ser alcançado', 'settings.passphrase_fallback_note': 'Para um grupo que não pode ser alcançado, peça ao operador dele para remover sua fixação e enviar um novo código de convite, e então reingresse. Seus arquivos e mensagens não são perdidos.', 'settings.passphrase_confirm_btn': 'Alterar', 'settings.passphrase_working': 'Recriptografando suas chaves…', 'settings.passphrase_done': 'Frase secreta alterada.', 'settings.passphrase_needs_operator': 'Estes grupos ainda precisam de ação — peça a cada operador para remover sua fixação e enviar um novo código:', 'settings.pw_too_short': 'A nova frase secreta deve ter pelo menos 12 caracteres.', 'settings.pw_mismatch': 'As duas novas frases secretas não coincidem.', 'settings.pw_same': 'A nova frase secreta deve ser diferente da atual.', 'settings.pw_wrong_current': 'A frase secreta atual não está correta. Nada foi alterado.', 'settings.recovery': 'Chave de recuperação', 'settings.recovery_hint': 'Adiciona a cada grupo uma cópia da sua identidade criptografada com a sua chave de recuperação. Faça isso uma vez em cada navegador que usar; sem ela, uma frase secreta perdida obriga a reingressar em cada grupo manualmente.', 'settings.recovery_loaded': 'Carregada neste navegador — grupos novos ficam cobertos automaticamente.', 'settings.recovery_open': 'Inserir a chave de recuperação', 'settings.recovery_input_ph': 'Cole a sua chave de recuperação', 'settings.recovery_submit': 'Adicionar cópias de backup', 'settings.recovery_working': 'Atualizando os seus grupos…', 'settings.recovery_done': 'Os seus grupos agora têm uma cópia de recuperação.', 'settings.recovery_partial': 'Não foi possível alcançar estes grupos. Abra-os mais tarde, ou execute isto de novo:', 'settings.recovery_need_relogin': 'Saia e entre novamente, depois tente de novo.', 'settings.danger': 'Excluir a conta', 'settings.sessions_heading': 'Sessões', 'settings.sign_out_everywhere': 'Sair em todos os lugares', 'settings.sign_out_everywhere_hint': 'Encerra todas as sessões da sua conta, inclusive esta: útil se você ficou conectado em um computador que não é seu. Um aplicativo desktop entra de novo com a chave do dispositivo até você remover esse dispositivo.', 'settings.sign_out_everywhere_confirm': 'Sair de todos os navegadores e aplicativos, inclusive este?', 'settings.delete_hint': 'Remove sua conta, suas participações em grupos e suas ' + 'notificações do hub, e libera seu nome de usuário. Não alcança o que está nos ' + 'nodes: os arquivos que você enviou permanecem onde o operador deles os guarda, e ' + 'cada node mantém a identidade que fixou para você até que o operador a remova. ' + 'Os registros de conexão são guardados por um ano, como a lei exige.', 'settings.delete_account': 'Excluir minha conta', 'settings.delete_confirm': 'Digite sua frase secreta para confirmar. Esta ação não ' + 'pode ser desfeita.', 'settings.delete_confirm_btn': 'Excluir definitivamente', 'settings.cancel': 'Cancelar', 'settings.appearance': 'Aparência', 'settings.theme': 'Tema', 'settings.theme_light': 'Claro', 'settings.theme_dark': 'Escuro', 'settings.theme_system': 'Sistema', 'settings.language': 'Idioma', 'settings.about': 'Sobre', 'firstrun.title': 'Which hub?', 'firstrun.hint': 'A hub holds your account and introduces you to nodes. It never sees your files, your messages or your keys.', 'firstrun.btn': 'Continue', 'firstrun.checking': 'Checking…', 'firstrun.note': 'There is no default on purpose: this application only trusts a hub for its API, never for the interface, which ships with the application itself.', 'device.this_device': 'This device', 'settings.keys_heading': 'Keys on this device', 'settings.hub_heading': 'Hub', 'settings.hub_current': 'Currently', 'settings.hub_hint': 'Changing this signs you out and restarts the window.', 'settings.hub_change': 'Change', 'settings.keys_where': 'Protected by', 'settings.keys_unprotected': 'No system keyring is running, so your keys are encrypted with a key that is not a secret. Anyone who can read this machine’s files can read them. Start a keyring, or treat this device as untrusted.', 'settings.keys_unavailable': 'This system offers no key storage at all, so this device cannot be remembered — you will be asked for your passphrase each time. That is the safe outcome: nothing was stored unprotected.', 'settings.version': 'Versão', 'settings.protocol': 'Protocolo', 'settings.role': 'Função', 'settings.groups': 'Notificações de grupo', 'settings.notifications': 'Notificações', 'settings.node_key': 'Vincular um node', 'settings.node_key_desc': 'Se você opera um node MeshBay, cole aqui a chave pública ' + 'Ed25519 dele para vinculá-lo à sua conta. Execute `meshbay-node status` na ' + 'máquina que hospeda o node para ler a chave, ou copie-a em ' + 'Node → Overview no cliente desktop.', 'settings.node_key_placeholder': 'Cole a chave pública Ed25519 do node (base64)', 'settings.node_key_submit': 'Vincular o node', 'settings.node_key_success': 'Node vinculado com sucesso', 'settings.node_key_current': 'Chave do node vinculado', // Sidebar 'sidebar.create_group': 'Criar um grupo', 'sidebar.settings': 'Configurações', 'sidebar.admin': 'Administração', // User menu 'usermenu.language': 'Idioma', 'usermenu.settings': 'Configurações', 'usermenu.theme_light': 'Tema claro', 'usermenu.theme_dark': 'Tema escuro', 'usermenu.logout': 'Sair', // Admin panel 'admin.title': 'Administração', 'admin.tab_stats': 'Estatísticas', 'admin.tab_users': 'Usuários', 'admin.tab_groups': 'Grupos', 'admin.tab_nodes': 'Nodes', 'admin.tab_logs': 'Registros', 'admin.col_observed_ip': 'Visto de', 'admin.col_hint': 'Endereço anunciado', 'admin.col_last_seen': 'Último anúncio', 'admin.node_online': 'on-line', 'admin.node_offline': 'off-line', 'admin.no_nodes': 'Nenhum node registrado', 'admin.nodes_hint': '"Visto de" é o endereço de onde o anúncio chegou, em uma ' + 'requisição assinada com a chave do node — é esse que serve para responder a uma ' + 'requisição judicial. O endereço anunciado é o que o node acredita ser o seu, ' + 'aprendido de um servidor STUN e enviado a nós; serve para alcançar o node e não ' + 'prova coisa alguma.', 'admin.tab_blocklist': 'Lista de bloqueio', 'admin.tab_general': "General", 'admin.general_groups_heading': "Groups", 'admin.allow_public_groups_label': "Allow members to create public groups", 'admin.allow_public_groups_hint': "When off, new groups can only be private and invite-only. Existing public groups are left as they are — suspend them one by one from the Groups tab.", 'admin.mail_heading': "Correio de saída", 'admin.mail_hint': "O que este hub envia, e quanto. Os dois que importam são o orçamento por hora, que nenhum número de contas aumenta, e o limite diário por destinatário, que é o que alguém sendo inundado realmente sente.", 'admin.mail_this_hour': "Enviados nesta hora", 'admin.mail_remaining': "Restam {general} para cadastros e trocas de endereço, {recovery} para redefinições de senha e convites.", 'admin.mail_hourly_budget': "Mensagens por hora (instância inteira)", 'admin.mail_hourly_reserved_for_recovery': "Destas, reservadas para redefinições e convites", 'admin.mail_destination_daily_cap': "Mensagens por dia para um mesmo destinatário", 'admin.mail_destination_cooldown_seconds': "Segundos entre mensagens ao mesmo destinatário", 'admin.mail_invite_link_daily_cap': 'E-mails de link de convite por dia por conta', 'admin.mail_verification_resend_cooldown': "Segundos entre dois códigos de cadastro", 'admin.mail_reset_cooldown': "Segundos entre dois códigos de redefinição", 'admin.mail_email_change_cooldown': "Segundos até uma conta poder propor outro endereço", 'admin.mail_save': "Salvar limites de correio", 'admin.mail_reset_defaults': "Restaurar padrões", 'admin.login_heading': "Login", 'admin.login_hint': "Após este número de frases secretas incorretas para um mesmo nome de usuário, o login com frase secreta é recusado pelo tempo definido. Sessões já abertas e dispositivos registrados continuam funcionando, e redefinir a frase secreta encerra o bloqueio. 0 desativa.", 'admin.session_heading': 'Sessões', 'admin.session_hint': 'Um navegador encerra a sessão após o primeiro número de horas sem interação e sem reprodução em andamento; o aplicativo desktop não. Uma sessão sem uso pelo segundo número deixa de ser renovada, e nenhuma dura além do terceiro.', 'admin.session_browser_idle_hours': 'Saída do navegador após inatividade (horas)', 'admin.session_refresh_idle_hours': 'Sessão sem uso expira após (horas)', 'admin.session_max_hours': 'Duração máxima da sessão (horas)', 'admin.session_save': 'Salvar configurações de sessão', 'admin.login_max_failures': "Frases incorretas antes do bloqueio", 'admin.login_lockout_minutes': "Duração do bloqueio (minutos)", 'admin.login_save': "Salvar limites de login", 'admin.mail_state_is_in_stats': "O consumo da hora atual aparece em Estatísticas.", 'admin.mail_state_hint': "Redefinições e convites podem gastar todo o orçamento; cadastros e trocas de endereço não podem usar a parte reservada. Os administradores são avisados uma vez por hora quando qualquer um dos limites é atingido.", 'admin.mail_left_signups': "Restante para cadastros", 'admin.mail_left_recovery': "Restante para redefinições e convites", 'admin.mail_recipients': "Destinatários contados hoje", 'admin.mail_alert_all': "Este hub parou de enviar e-mail nesta hora. Redefinições e convites também são recusados.", 'admin.mail_alert_general': "A parte para cadastros e trocas de endereço acabou nesta hora. Redefinições e convites continuam saindo.", 'admin.settings_readonly': "Only an admin can change these settings.", // Admin stats 'admin.stat_users': 'Usuários', 'admin.stat_groups': 'Grupos', 'admin.stat_nodes': 'Nodes', 'admin.stat_online': 'Nodes on-line', // Admin users 'admin.users_search': 'Pesquisar usuários...', 'admin.col_username': 'Nome de usuário', 'admin.col_role': 'Função', 'admin.col_status': 'Status', 'admin.col_created': 'Criação', 'admin.col_actions': 'Ações', 'admin.col_email': 'E-mail', 'admin.col_groups': 'Grupos', 'admin.no_users': 'Nenhum usuário encontrado', 'admin.btn_suspend': 'Suspender', 'admin.btn_unsuspend': 'Reativar', 'admin.btn_revoke': "Revoke", 'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.", 'admin.btn_details': 'Detalhes', 'admin.btn_delete': 'Excluir', 'admin.delete_confirm': 'Excluir a conta "{user}" e todos os grupos dela? Esta ação não pode ser desfeita. ' + 'Os arquivos que essa pessoa enviou permanecem nos nodes que os hospedam, e cada ' + 'node mantém a identidade que fixou até que o operador dele a remova. Suspender é ' + 'a opção reversível.', 'admin.user_detail': 'Detalhes do usuário', 'admin.btn_close': 'Fechar', 'admin.self_note': '(você)', // Admin groups 'admin.col_name': 'Nome', 'admin.col_visibility': 'Visibilidade', 'admin.col_members': 'Membros', 'admin.no_groups': 'Nenhum grupo encontrado', // Admin logs 'admin.col_time': 'Horário', 'admin.col_event': 'Evento', 'admin.col_user': 'Usuário', 'admin.col_ip': 'IP', 'admin.col_detail': 'Detalhe', 'admin.filter_all': 'Todos os eventos', 'admin.no_logs': 'Nenhum registro encontrado', 'admin.btn_load_more': 'Carregar mais', // Admin blocklist 'admin.col_hash': 'Hash', 'admin.col_reason': 'Motivo', 'admin.col_date': 'Data', 'admin.col_added_by': 'Adicionado por', 'admin.no_blocked': 'Nenhum hash bloqueado', 'admin.add_hash': 'Adicionar um hash à lista de bloqueio', 'admin.hash_placeholder': 'hash blake3 (64 caracteres hexadecimais)', 'admin.reason_placeholder': 'Motivo', 'admin.btn_block': 'Bloquear', 'admin.btn_unblock': 'Desbloquear', // Notifications // Create group 'create_group.title': 'Criar um grupo', 'create_group.name': 'Nome do grupo', 'create_group.name_placeholder': 'ex.: Fotos da família, Arquivos do projeto...', 'create_group.join_policy': 'Política de entrada', 'create_group.invite': 'Somente por convite', 'create_group.invite_desc': "Os membros precisam ser convidados por um administrador. O grupo não aparece na lista pública.", 'create_group.open': 'Aberto (qualquer pessoa pode entrar)', 'create_group.open_desc': "Aparece nos grupos públicos — qualquer pessoa pode encontrá-lo e entrar sem aprovação.", 'create_group.description': 'Descrição', 'create_group.description_hint': 'Sobre o que é este grupo? (opcional)', 'create_group.submit': 'Criar', 'create_group.hint': 'Um grupo precisa de um node para hospedar os arquivos. Você ' + 'pode criar o grupo agora e conectar um node depois.', 'create_group.creating': 'Criando...', // Members 'members.col_role': 'Função', 'members.group_role': 'Função no grupo', 'members.admin': 'Administrador', 'members.group_admin': 'Administrador do grupo', 'members.owner': 'Proprietário', 'members.member': 'Membro', 'members.invite_title': 'Convidar um membro', 'members.username_placeholder': 'Nome de usuário', 'members.invite_btn': 'Convidar', 'members.invite_needs_pairing': 'Os convites são assinados com a chave que este node ' + 'fixou para o seu navegador, então faça o pareamento abaixo antes de convidar ' + 'alguém.', 'members.invite_ask_operator': 'Só o operador do node que hospeda este grupo pode ' + 'convidar, a partir de um navegador pareado com ele.', 'members.remove': 'Remover', 'members.remove_confirm': 'Remover {user} deste grupo? A conta dessa pessoa, os ' + 'outros grupos dela e os arquivos que ela enviou não são afetados.', 'members.remove_hint': 'Remover alguém retira a participação dessa pessoa e faz o ' + 'node parar de entregar a ela a chave do grupo. Não exclui a conta dela, e não ' + 'recupera a chave que ela já tem em mãos — rotacione a chave no node ' + '(meshbay-node gek-init) se isso importar.', 'members.pair_title': 'Parear este navegador com o seu node', 'members.pair_hint': 'O seu node só aceita ações de operador — convites, exclusão de ' + 'arquivos — de um navegador com o qual foi pareado. Execute ' + '`meshbay-node operator pair` no node e digite o código aqui. O código nunca ' + 'passa pelo hub.', 'members.pair_btn': 'Parear', 'members.pair_success': 'Este navegador agora está pareado com o node.', 'members.invite_code_ready': 'Código de convite para {user}:', 'members.invite_email_sent': 'Um e-mail com o código foi enviado a este membro.', 'members.invite_email_failed': 'Não foi possível enviar o e-mail — compartilhe o código manualmente.', 'members.invite_email_opt': 'Enviar o convite por e-mail (pode cair no spam)', 'members.link_title': "Convidar por link", 'members.link_hint': "Para alguém que talvez ainda não tenha conta. O link funciona uma vez, e só para uma conta registrada com este endereço.", 'members.link_email_placeholder': "Endereço de e-mail", 'members.link_btn': "Criar link", 'members.link_ready': "Link de convite para {email}:", 'members.link_copy': "Copiar", 'members.link_copied': "Copiado", 'members.link_email_sent': "O link foi enviado por e-mail.", 'members.link_email_refused': "Não foi possível enviar o e-mail — compartilhe o link você mesmo.", 'members.links_pending': "Links de convite", 'members.link_status_expired': "expirado", 'members.link_expires': "expira em {date}", 'members.link_cancel': "Cancelar", 'invite.title': "Você foi convidado", 'invite.none': "Não há convite aguardando nesta aba. Abra novamente o link que recebeu.", 'invite.signed_out': "Alguém convidou você para um grupo neste hub. Crie uma conta com o endereço de e-mail para o qual o convite foi enviado, ou entre se já tiver uma.", 'invite.register': "Criar uma conta", 'invite.signin': "Entrar", 'invite.confirm': "{inviter} convida você para participar de {group}.", 'invite.join': "Participar", 'invite.ignore': "Ignorar", 'invite.open': "Abrir o grupo", 'invite.already_member': "Você já é membro de {group}.", 'invite.other_account': "Este convite foi enviado para outro endereço de e-mail. Entre com a conta registrada com esse endereço — aliases e pontos devem coincidir exatamente.", 'invite.invalid': "Este convite não é mais válido: foi usado, cancelado ou expirou. Peça um novo.", 'invite.joining': "Entrando…", 'invite.after_register': "Entre para participar do grupo para o qual foi convidado.", 'invite.paste_title': "Participar com um link de convite", 'invite.paste_placeholder': "Cole o link aqui", 'invite.paste_btn': "Continuar", 'invite.paste_invalid': "Isso não é um link de convite.", 'invite.paste_other_hub': "Este convite é para outro hub.", 'group.link_spent': "Este link de convite não é mais válido na máquina que hospeda o grupo. Peça um novo.", 'members.invite_code_hint': 'Você também pode compartilhar este código por outro canal (ex: SMS). ' + 'O código funciona uma única vez e nunca passa pelo hub.', 'transfers.title': 'Transferências', 'transfers.clear': 'Limpar as concluídas', 'transfers.cancel': 'Cancelar', 'transfers.open': 'Abrir', 'transfers.done': 'Concluída', 'transfers.cancelled': 'Cancelada', 'transfers.preparing': 'Preparando…', 'transfers.waiting_own_slots': 'Aguardando — seus espaços estão ocupados', 'transfers.waiting_node': 'Aguardando — {n} na frente', 'transfers.summary': '{running} em andamento · {waiting} aguardando', 'transfers.group_running': 'Em andamento', 'transfers.group_waiting': 'Aguardando', 'transfers.group_paused': 'Pausados', 'transfers.group_finished': 'Concluídos', 'transfers.cancel_one': 'Cancelar {name}', 'transfers.pause': 'Pausar', 'transfers.resume': 'Retomar', 'transfers.paused': 'Pausado', 'transfers.not_pausable': 'Não pode ser pausado — escolha uma pasta de downloads em Configurações', 'transfers.pause_one': 'Pausar {name}', 'transfers.resume_one': 'Retomar {name}', 'transfers.eta_seconds': 'faltam {n} s', 'transfers.eta_minutes': 'faltam {n} min', 'transfers.eta_hours': 'faltam {n} h', 'transfers.failed': 'Falhou', 'group.select': 'Selecionar', 'group.select_done': 'Concluir', 'group.actions': 'Ações ({n})', 'group.download_n': 'Baixar ({n})', 'group.download_zip_n': 'Baixar as pastas em zip ({n})', 'group.download_zip_one': 'Baixar a pasta em zip', 'group.delete_n': 'Excluir ({n})', 'group.delete_n_confirm': { one: 'Excluir {n} item? {names}', other: 'Excluir {n} itens? {names}', }, 'group.download_zip': { one: 'Baixar em zip ({n} arquivo)', other: 'Baixar em zip ({n} arquivos)', }, 'group.zip_empty': 'Essa pasta não tem nada para baixar.', 'group.zip_no_stream': 'Este navegador não consegue escrever um download direto no ' + 'disco, então {name} ({size}) precisa ser montado antes na memória. Em um arquivo ' + 'grande isso pode falhar. Continuar?', 'group.zip_too_large': '"{name}" tem {size}, e uma pasta só pode ser baixada em zip até {limit}. ' + 'Baixe uma subpasta por vez, ou os arquivos individualmente.', 'group.rmdir': 'Excluir a pasta', 'group.rmdir_confirm': 'Excluir a pasta "{name}"? Ela precisa estar vazia.', 'group.rmdir_not_empty': 'Essa pasta não está vazia. Exclua antes o que está dentro ' + 'dela — nada aqui apaga arquivos que você não vê.', 'group.desc_edit': 'Editar a descrição', 'group.desc_add': 'Adicionar uma descrição', 'group.desc_save': 'Salvar', 'group.desc_cancel': 'Cancelar', 'group.desc_placeholder': 'Para que serve este grupo — os membros veem isto na ' + 'página inicial deles.', 'group.join_code_title': 'Este node precisa reconhecer você', 'group.join_code_hint': 'Peça o código de uso único a quem convidou você e digite-o ' + 'aqui. Depois disso este navegador fica reconhecido e a pergunta não se repete.', 'group.join_code_btn': 'Participar', 'group.pass_title': 'Digite a sua frase secreta', 'group.pass_hint': 'Este navegador ainda não desbloqueou as suas chaves. Digite a sua frase secreta uma vez para abrir os seus grupos aqui.', 'group.pass_btn': 'Desbloquear', 'notif.purge': 'Limpar tudo', 'notif.title': 'Notificações', 'notif.empty': 'Nenhuma notificação', 'notif.mark_all_read': 'Marcar tudo como lido', // Sidebar 'sidebar.search': 'Pesquisar arquivos', // Status // Search 'search.placeholder': 'Pesquisar em todos os grupos...', 'search.no_results': 'Nenhum arquivo corresponde à sua pesquisa.', 'search.col_group': 'Grupo', 'search.result_count': { one: '{n} arquivo encontrado', other: '{n} arquivos encontrados', }, 'search.hint': 'Digite um termo para pesquisar em todos os seus grupos.', 'search.indexing': 'Indexando {done} / {total} grupos…', 'search.unreachable': { one: '{n} grupo inacessível', other: '{n} grupos inacessíveis' }, 'search.n_sources': { one: '{n} fonte', other: '{n} fontes' }, 'search.view_files': 'Arquivos', 'search.view_videos': 'Vídeos', 'search.view_music': 'Música', 'search.view_photos': 'Fotos', 'search.connecting': 'Conectando aos grupos…', // Presence, chat paging, leaving a group, the profile page 'presence.online': 'Um node que hospeda este grupo está on-line', 'presence.offline': 'Nenhum node acessível para este grupo', 'presence.unknown': 'Ainda não verificado', 'presence.indexing': 'Indexando — {pct}%', 'indexdock.kind_scan': "Indexando", 'indexdock.kind_rescan': "Relendo", 'indexdock.kind_reconcile': "Atualizando", 'indexdock.kind_watch': "Indexando arquivos novos", 'indexdock.waiting': "Aguardando indexação", 'indexdock.done': "Indexação concluída", 'indexdock.listing': "Listando arquivos…", 'indexdock.percent': "{pct}%", 'indexdock.files': "{done} / {total} arquivos", 'indexdock.next': "Em seguida: {roots}", 'indexdock.next_count': "Na fila: {count}", 'indexdock.open': "Abrir as configurações deste grupo", 'indexdock.hide': "Ocultar até a próxima indexação", 'chat.load_older': 'Carregar {n} mensagens anteriores', 'chat.start_of_history': 'Início da conversa', 'chat.today': 'Hoje', 'chat.yesterday': 'Ontem', 'chat.unread': 'Mensagens novas', 'chat.jump_latest': 'Ir para a mais recente', 'chat.jump_new': 'Mensagens novas', 'chat.unreadable': 'Não foi possível ler esta mensagem', 'chat.unreadable_signature': 'Mensagem não verificada — a assinatura não corresponde ao remetente', 'chat.unreadable_epoch': 'Escrita antes de este dispositivo poder ler esta conversa', 'chat.unreadable_keys': 'Chaves do chat indisponíveis — reconecte-se para ler isto', 'chat.unreadable_decrypt': 'Não foi possível descriptografar esta mensagem', 'chat.unreadable_envelope': 'Esta mensagem chegou incompleta', 'chat.unreadable_format': 'Esta mensagem exige uma versão mais recente do MeshBay', 'chat.key_changed': 'Esta conta está usando uma chave que você nunca viu', 'chat.key_changed_hint': 'O nó diz que esta mensagem veio desta conta, mas a chave do dispositivo não é uma que você aceitou e nada a assinou. Pode ser um novo dispositivo adicionado em outro lugar — ou o nó apontando a pessoa errada.', 'chat.encrypted_needs_newer': 'Esta conversa é criptografada e este cliente não consegue lê-la — atualize o MeshBay', 'chat.encrypted_cannot_send': 'Esta conversa é criptografada e este dispositivo ainda não pode escrever nela', 'group.leave': 'Sair do grupo', 'group.leave_confirm': 'Sair de “{name}”? Você perderá o acesso aos arquivos e à conversa. Os arquivos que você enviou permanecem no node, e ele mantém a identidade que fixou para você até que o operador dele a remova.', 'group.mute': 'Mute notifications', 'group.unmute': 'Unmute notifications', 'profile.title': 'Perfil', 'usermenu.profile': 'Perfil', // First-run setup wizard 'setup.welcome_title': 'Bem-vindo ao MeshBay', 'setup.welcome_message': 'Seu node hospeda seus arquivos — criptografados, na sua máquina. Vamos iniciá-lo e criar seu primeiro grupo.', 'setup.node_detected': 'Node local detectado e em execução.', 'setup.node_not_running': 'Seu node está instalado mas não está em execução.', 'setup.node_start': 'Iniciar node', 'setup.node_starting': 'Iniciando node…', 'setup.node_started': 'Node iniciado.', 'setup.node_not_installed': 'meshbay-node não está instalado nesta máquina.', 'setup.node_install_hint': 'Instale-o com seu gerenciador de pacotes e volte aqui.', 'setup.node_startup_hint': 'Assim que seu node estiver em execução, acesse "Node" na barra lateral a qualquer momento para fazê-lo iniciar automaticamente ao entrar, ou rodar como um serviço em segundo plano.', 'setup.skip': 'Pular — criar um grupo sem node local', 'setup.create_group': 'Criar seu primeiro grupo', 'setup.dismiss': 'Pular configuração', // Group misc 'group.retry': 'Tentar novamente', // Sidebar 'sidebar.node': 'Node', // Node admin 'node.title': 'Node', 'node.service_checking': 'Verificando o serviço do nó…', 'node.service_not_installed': 'Não instalado como serviço', 'node.service_state_active': 'Em execução', 'node.service_state_inactive': 'Parado', 'node.service_state_failed': 'Falhou', 'node.service_state_activating': 'Iniciando…', 'node.service_state_deactivating': 'Parando…', 'node.service_state_unknown': 'Desconhecido', 'node.service_start': 'Iniciar', 'node.service_starting': 'Iniciando…', 'node.service_stop': 'Parar', 'node.service_stopping': 'Parando…', 'node.service_restart': 'Reiniciar', 'node.service_restarting': 'Reiniciando…', 'node.service_mode_hint': 'Em execução como serviço em segundo plano — inicia na inicialização, antes do login.', 'node.startup_mode_label': 'Iniciar automaticamente:', 'node.startup_mode_off': 'Desativado (iniciar manualmente)', 'node.startup_mode_signin': 'Ao entrar na sessão', 'node.startup_mode_service': 'Como serviço em segundo plano (inicia na inicialização)', 'node.startup_mode_updating': 'Alternando modo — verifique se aparece um aviso de administrador…', 'node.startup_mode_service_unavailable_hint': 'O modo de serviço em segundo plano requer uma versão instalada. Para testes locais, execute "meshbay-node service install" em um PowerShell com privilégios de administrador.', 'node.not_operator': 'Não foi possível alcançar seu node. Verifique se ele está em execução.', 'node.offline': 'Node está off-line', 'node.retry': 'Tentar novamente', 'node.pair_needed': 'Nenhum operador pareado. Insira um código de pareamento para habilitar operações administrativas (convites, exclusão de arquivos).', 'node.pair_code_placeholder': 'Código de pareamento', 'node.pair_button': 'Parear este navegador', 'node.pair_success': 'Pareamento realizado com sucesso.', 'node.reload': 'Recarregar configuração', 'node.reloaded': 'Configuração recarregada. Alterações de diretórios em grupos existentes estão ativas.', 'node.restart_needed': 'Após adicionar: inicialize a chave do grupo (meshbay-node gek-init --group ).', 'node.no_groups': 'Nenhum grupo configurado neste node.', 'node.stale': 'fora do hub', 'node.settings': 'Node settings', 'node.settings_edit_hint': 'Changes are applied immediately and saved to node.toml.', 'node.settings_save': 'Save', 'node.settings_saving': 'Saving…', 'node.settings_saved': 'Settings saved.', 'node.setting_invite_ttl': 'Invitation TTL', 'node.setting_pair_ttl': 'Pairing code TTL', 'node.setting_device_ttl': 'Device request TTL', 'node.setting_max_streams': 'Max concurrent streams', 'node.setting_max_downloads': 'Máximo de downloads simultâneos', 'node.setting_max_uploads': 'Máximo de envios simultâneos', 'node.setting_transcode': 'Transcode incompatible video', 'node.setting_max_upload': 'Maior envio individual', 'node.setting_unit_gb': 'GB', 'node.setting_unit_hours': 'hours', 'node.setting_unit_minutes': 'min', 'node.setting_on': 'On', 'node.setting_off': 'Off', 'node.unavailable': 'indisponível', 'node.files': { one: '1 arquivo', other: '{n} arquivos' }, 'node.peers': { one: '1 par', other: '{n} pares' }, 'node.roots': 'Diretórios', 'node.add_root': 'Adicionar diretório', 'node.remove_root': 'Remover', 'node.root_no_signing_key': 'Nenhuma chave de assinatura disponível — pareie este dispositivo com o nó primeiro', 'node.root_no_route': 'Sem rota até o nó — conecte-se a ele ou use o aplicativo na máquina que o hospeda', 'node.root_remove_last': 'Um grupo precisa de pelo menos um diretório', 'node.root_path_hint': 'O caminho como o nó o vê, na máquina que hospeda este grupo.', 'node.root_path_placeholder': '/home/user/Media', 'node.root_path': 'Caminho', 'node.directory': 'Diretório', 'node.root_added': 'Diretório adicionado.', 'node.root_remove_confirm': 'Remover "{name}" deste grupo?', 'node.root_removed': 'Diretório removido. Reinicialização recomendada para atualizar o índice.', 'node.attach_group': 'Adicionar grupo', 'node.attach_pick': 'Grupo a hospedar', 'node.attach_dir': 'Diretório compartilhado', 'node.attach_upload_dir': 'Diretório de upload', 'node.attach_upload_label': 'Diretório de upload (para envio de arquivos e anexos do chat)', 'node.attached': 'Grupo adicionado e carregado. Execute meshbay-node gek-init --group {name} se ainda não o fez.', 'node.detach_group': 'Remover grupo', 'node.detach_confirm': 'Remover "{name}" deste node?', 'node.detached': 'Grupo removido.', 'node.gek': 'Chave do grupo', 'node.no_gek': 'Sem chave de grupo', 'node.gek_init_hint': 'Ainda não há chave de grupo. Execute GEK init na CLI para configurá-la.', 'node.gek_public_hint': 'A rotação de chave não está disponível para grupos públicos.', 'node.gek_rotate': 'Rotacionar chave do grupo', 'node.gek_rotate_confirm': 'Rotacionar a chave do grupo? Os membros conectados receberão a nova chave automaticamente. O conteúdo já baixado não é afetado.', 'node.gek_rotated': 'Chave do grupo rotacionada.', 'node.roster': 'Cadastro', 'node.roster_load': 'Carregar cadastro', 'node.roster_empty': 'Nenhum membro fixado ainda.', 'node.roster_user': 'Usuário', 'node.roster_role': 'Função', 'node.roster_status': 'Status', 'node.roster_via': 'Fixado via', 'node.roster_invites': { one: '1 convite pendente', other: '{n} convites pendentes' }, 'node.unpin': 'Desfixar', 'node.unpin_confirm': 'Desfixar "{name}"? A pessoa precisará parear novamente.', 'node.unpin_done': 'Identidade desfixada.', 'node.denylist': 'Lista de bloqueio', 'node.denylist_load': 'Carregar lista de bloqueio', 'node.denylist_empty': 'A lista de bloqueio está vazia.', 'node.denylist_count': { one: '1 entrada', other: '{n} entradas' }, 'node.denylist_remove': 'Remover', 'node.denylist_clear_all': 'Limpar tudo', 'node.denylist_clear_confirm': 'Remover "{subject}" da lista de bloqueio?', 'node.denylist_cleared': 'Entrada removida da lista de bloqueio.', // Settings — node 'settings_node.detach_failed_continue': 'Não foi possível desanexar o grupo do node. Excluir do hub mesmo assim?', 'settings_node.roots': 'Diretórios compartilhados', 'settings_node.scan_title': 'Varredura', 'settings_node.scan_hint': 'Com que frequência o node reverifica seus diretórios em busca de mudanças que possa ter perdido, e quanto tempo espera após uma mudança antes de indexar um arquivo.', 'settings_node.search_listed_title': 'Busca', 'settings_node.search_listed_label': 'Mostrar este grupo na busca', 'settings_node.search_listed_hint': 'Desativado, os arquivos deste grupo não aparecem na busca global dos membros. Os membros continuam vendo tudo ao abrir o grupo: isso só o retira da listagem global e não esconde nada de ninguém.', 'settings_node.scan_reconcile_label': 'Intervalo de reverificação (minutos)', 'settings_node.scan_debounce_label': 'Espera após uma mudança (segundos)', 'settings_node.scan_save': 'Salvar', 'settings_node.scan_saving': 'Salvando…', 'settings_node.scan_saved': 'Salvo.', 'settings_node.tmdb_title': 'Metadados do TMDB', 'settings_node.tmdb_hint': 'Permite que o app de Vídeos mostre pôsteres, sinopses e elenco do TMDB. Desativado significa navegação apenas com miniaturas, sem nenhuma solicitação a terceiros.', 'settings_node.tmdb_enabled': 'Ativado', 'settings_node.tmdb_disabled': 'Desativado', 'settings_node.tmdb_token_label': 'Token de API personalizado (opcional)', 'settings_node.tmdb_token_placeholder': 'Deixe em branco para usar o token padrão', 'settings_node.tmdb_token_customized': 'Um token personalizado está definido.', 'settings_node.tmdb_token_default': 'Usando o token padrão.', 'settings_node.tmdb_save': 'Salvar', 'settings_node.tmdb_language_label': 'Idioma', 'settings_node.tmdb_language_hint': 'Aplica-se a todos — um cache compartilhado, não uma solicitação por espectador.', 'settings_node.video_root_title': 'Pasta raiz de Vídeos', 'settings_node.video_root_hint': 'Qual pasta (ou subpasta) o app Vídeos trata como ponto de entrada para este grupo. Nada é exibido em Vídeos, e nenhuma busca no TMDB é feita, até que uma seja escolhida.', 'settings_node.video_root_none': '— nenhuma escolhida —', 'settings_node.musicbrainz_title': 'Metadados do MusicBrainz', 'settings_node.musicbrainz_hint': 'Permite que o app Música mostre capas e nomes canônicos do MusicBrainz quando uma faixa não tem uma capa incorporada utilizável. Desativado significa navegação apenas por tags/nome de arquivo, sem solicitação a terceiros.', 'settings_node.musicbrainz_enabled': 'Ativado', 'settings_node.musicbrainz_disabled': 'Desativado', 'settings_node.video_root_save': 'Salvar', 'settings_node.video_root_change_confirm': 'Alterar a raiz de Vídeos substitui o que cada membro vê na aba Vídeos. Continuar?', 'settings_node.audio_root_title': 'Pasta raiz de Música', 'settings_node.audio_root_hint': 'Qual pasta (ou subpasta) o app Música trata como ponto de entrada para este grupo. Nada é exibido em Música, e nenhuma leitura de tags/capas é feita, até que uma seja escolhida.', 'settings_node.audio_root_none': '— nenhuma escolhida —', 'settings_node.audio_root_save': 'Salvar', 'settings_node.audio_root_change_confirm': 'Alterar a raiz de Música substitui o que cada membro vê na aba Música. Continuar?', 'settings_node.photo_roots_title': 'Pastas raiz de Fotos', 'settings_node.photo_roots_hint': 'Quais pastas o app Fotos trata como pontos de entrada para este grupo — uma biblioteca de fotos costuma estar espalhada em várias pastas, então mais de uma pode ser escolhida. Nada é exibido em Fotos até que ao menos uma seja adicionada.', 'settings_node.photo_roots_none': '— nenhuma escolhida —', 'settings_node.photo_roots_add_placeholder': 'Adicionar uma pasta…', 'settings_node.photo_roots_add': 'Adicionar', 'settings_node.photo_roots_remove': 'Remover', 'settings_node.photo_roots_save': 'Salvar', 'settings_node.shared_directories_title': 'Diretórios compartilhados', 'settings_node.shared_directories_hint': 'Pastas compartilhadas com este grupo. Alterne leitura-escrita para permitir uploads, marque como removível para unidades externas.', 'folder_tree.title_single': 'Escolher uma pasta', 'folder_tree.title_multi': 'Escolher pastas', 'folder_tree.choose': 'Escolher…', 'folder_tree.remove': 'Remover', 'folder_tree.add': 'Adicionar uma pasta…', 'folder_tree.confirm': 'Usar', 'folder_tree.expand': 'Expandir', 'folder_tree.collapse': 'Recolher', 'folder_tree.nothing_selected': 'Nada selecionado', 'folder_tree.empty': 'Este grupo ainda não tem diretórios compartilhados.', 'folder_tree.writable_only': 'Aqui só é possível escolher diretórios de leitura e escrita — arquivos são gravados nele.', 'folder_tree.no_writable_root': 'Este grupo não tem diretório gravável. Ative leitura e escrita em Diretórios compartilhados primeiro.', 'folder_tree.read_only_blocked': 'Somente leitura — não é possível gravar', 'settings_app.save': 'Salvar', 'settings_app.saving': 'Salvando…', 'settings_app.disabled_hint': 'Ative este aplicativo para configurá-lo.', 'settings_app.video_directories_label': 'Pastas de vídeo', 'settings_app.video_directories_hint': 'Onde ficam os filmes e séries deste grupo. Nada fora delas aparece na aba Vídeos.', 'settings_app.music_directories_label': 'Pastas de música', 'settings_app.music_directories_hint': 'Onde ficam os álbuns deste grupo. Nada fora delas aparece na aba Música.', 'settings_app.photo_directories_label': 'Pastas de fotos', 'settings_app.photo_directories_hint': 'Onde ficam os álbuns deste grupo. Nada fora delas aparece na aba Fotos.', 'settings_app.chat_directory_label': 'Pasta de anexos', 'settings_app.chat_directory_hint': 'Onde os arquivos enviados no chat são gravados. Precisa ser um diretório de leitura e escrita.', 'settings_app.chat_no_writable_root': 'Este grupo não tem diretório gravável, então os anexos estão desativados.', 'settings_app.chat_link_preview_label': 'Prévias de links', 'settings_app.chat_link_preview_hint': 'Quando alguém publica um link, o nó busca o título e a imagem da página. É uma requisição da sua máquina para um site escolhido por outra pessoa.', 'settings_app.chat_encrypted_always': 'O chat deste grupo é sempre criptografado. Não é possível desativar.', 'settings_app.chat_rotate_epoch': 'Girar a chave do chat', 'settings_app.chat_rotate_epoch_hint': 'Os membros continuam lendo todo o histórico. Quem foi removido do grupo não conseguirá ler o que for escrito daqui em diante. Remover um membro ou dispositivo já faz isso sozinho.', 'settings_app.tmdb_token_prompt': 'Cadastre-se no TMDB para gerar sua própria chave de API.', 'settings_app.tmdb_token_link': 'Obter uma chave', 'settings_node.roots_offline_hint': 'Sem conexão com o nó — as alterações passam pelo nó local e entram em vigor no próximo recarregamento.', 'settings_node.directories_title': 'Diretórios de apps', 'settings_node.directories_hint': 'Pastas compartilhadas, e qual delas os apps Vídeos, Música e Fotos tratam como seu(s) próprio(s) ponto(s) de entrada.', // Create group wizard 'wizard.title': 'Criar grupo', 'wizard.detecting': 'Detectando node local…', 'wizard.node_not_found': 'Nenhum node local detectado. Verifique se o meshbay-node está em execução.', 'wizard.node_offline_warning': 'O node não está em execução. O grupo será criado apenas no hub. Você pode conectar o node posteriormente pela página Node.', 'wizard.retry': 'Tentar novamente', 'wizard.wrong_account': 'O node está em execução, mas o nome de usuário configurado não corresponde à sua conta. Verifique hub.username em node.toml.', 'wizard.skip_node': 'Continuar sem node', 'wizard.directories': 'Diretórios compartilhados', 'wizard.directories_hint': 'Escolha os diretórios que este grupo compartilhará. Pelo menos um é obrigatório.', 'wizard.add_directory': 'Adicionar diretório', 'wizard.remove': 'Remover', 'wizard.set_upload': 'Definir como destino de upload', 'wizard.upload_target': 'destino de upload', 'wizard.create_and_setup': 'Criar e configurar', 'wizard.create_hub_only': 'Criar apenas no hub', 'wizard.setting_up': 'Configurando seu grupo…', 'wizard.step_create_hub': 'Criando grupo no hub', 'wizard.step_attach': 'Anexando ao node', 'wizard.step_apps': 'Escolhendo aplicativos', 'wizard.step_add_roots': 'Adicionando diretórios', 'wizard.step_gek': 'Inicializando chave de criptografia', 'wizard.step_pair': 'Configurando pareamento', 'wizard.step_index': 'Indexando arquivos', 'wizard.indexing_progress': 'Indexando… {pct}%', 'wizard.indexing_current_dir': 'Analisando: {dir}', 'wizard.done_title': 'Grupo criado', 'wizard.done_message': 'Seu grupo está pronto — seu node o está hospedando e a criptografia está configurada. Agora convide membros pela aba Configurações.', 'wizard.go_to_group': 'Ir para o grupo', 'wizard.finish_later': 'Finalizar configuração depois', 'node.stun_servers': 'STUN Servers', 'node.stun_hint': 'Servers used for WebRTC NAT traversal (ICE candidate gathering).', 'node.stun_add': 'Add', 'node.stun_add_placeholder': 'stun:host:port', 'node.stun_remove': 'Remove', 'node.stun_move_up': 'Move up', 'node.stun_move_down': 'Move down', 'node.stun_save': 'Save', 'node.stun_saving': 'Saving…', 'node.stun_saved': 'STUN servers saved.', 'node.stun_reset': 'Reset to defaults', 'node.stun_empty': 'No STUN servers configured. NAT traversal will not work.', 'node.stun_duplicate': 'This server is already in the list.', 'node.stun_invalid': 'STUN URL must start with stun:', 'node.ice_interfaces': 'ICE Interfaces', 'node.ice_auto_hint': 'Auto mode — virtual and VPN interfaces (Tailscale, Docker, libvirt, etc.) are excluded automatically.', 'node.ice_manual_hint': 'Manual mode — only the listed interfaces are used for ICE candidate gathering.', 'node.ice_add': 'Add', 'node.ice_add_placeholder': 'e.g. eth0, wlp0s20f3', 'node.ice_remove': 'Remove', 'node.ice_save': 'Save', 'node.ice_saving': 'Saving…', 'node.ice_saved': 'ICE interfaces saved.', 'node.ice_reset_auto': 'Switch to auto', 'node.ice_duplicate': 'This interface is already in the list.', 'node.overview': 'Overview', 'node.overview_version': 'Version', 'node.overview_node_id': 'Node ID', 'node.overview_node_key': 'Chave do node', 'node.overview_node_key_copy': 'Copiar', 'node.overview_node_key_copied': 'Copiada', 'node.overview_quic_port': 'QUIC port', 'node.overview_hub': 'Hub', 'node.node_roster': 'Node roster', 'node.node_roster_hint': 'Every identity this node recognises, across all groups.', 'node.roster_scope': 'Scope', 'node.roster_scope_node': 'node-wide', 'node.peers_title': 'Connected peers', 'node.peers_empty': 'No peers connected.', 'node.peers_user': 'User', 'node.peers_ip': 'IP', 'node.peers_group': 'Group', 'node.peers_state': 'State', 'node.audit_title': 'Audit log', 'node.audit_all_events': 'All events', 'node.audit_empty': 'No audit entries.', 'node.audit_time': 'Time', 'node.audit_event': 'Event', 'node.audit_user': 'User', 'node.audit_ip': 'IP', 'node.audit_group': 'Group', 'node.audit_detail': 'Detail', 'node.maintenance': 'Maintenance', 'node.maintenance_cache': 'Index cache: {n} path(s) remembered.', 'node.maintenance_prune': 'Prune stale entries', 'node.maintenance_pruned': 'Pruned {n} stale cache entries.', 'node.loading': 'Loading…', 'node.audit_export': 'Export CSV', 'node.audit_exporting': 'Exporting…', 'node.audit_prev': 'Previous', 'node.audit_next': 'Next', 'node.audit_page': 'Page {n}', 'node.audit_exported': 'Exported {n} entries.', 'node.unlink_title': 'Unlink from hub', 'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.', 'node.unlink_button': 'Unlink this node', 'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.', 'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.', 'node.tab_overview': 'Overview', 'node.tab_groups': 'Groups', 'node.tab_roster': 'Roster', 'node.tab_peers': 'Peers', 'node.tab_audit': 'Audit', 'node.tab_settings': 'Settings', 'node.root_rw': 'leitura-escrita', 'node.root_ro': 'somente leitura', 'node.removable': 'removível', // In-page confirm/alert (ask.js) 'dialog.ok': 'OK', 'dialog.cancel': 'Cancelar', };