diff --git a/src/lib/i18n/pt-PT.json b/src/lib/i18n/pt-PT.json new file mode 100644 index 0000000..b160d87 --- /dev/null +++ b/src/lib/i18n/pt-PT.json @@ -0,0 +1,531 @@ +{ + "nav.recording": "Gravação", + "nav.hardware": "Hardware", + "nav.storage": "Armazenamento", + "nav.calendar": "Calendário", + "nav.sync": "Sincronização", + "nav.ai": "IA", + "nav.mcp": "Servidor MCP", + "nav.privacy": "Privacidade", + "nav.about": "Acerca de", + "nav.language": "Idioma", + + "settings.language.title": "Idioma", + "settings.language.display": "Idioma da interface", + "settings.language.display_hint": "O idioma da interface da aplicação. Adicionar um idioma é tão simples como colocar um único ficheiro de tradução.", + + "settings.transcription.title": "Idioma de transcrição", + "settings.transcription.label": "Idioma", + "settings.transcription.auto": "Deteção automática", + "settings.transcription.applies_hint": "Aplica-se à próxima gravação. O idioma efetivamente utilizado é mostrado depois em cada reunião.", + "settings.transcription.english_only": "Apenas inglês", + "settings.transcription.model_english_only": "«{model}» é apenas em inglês.", + "settings.transcription.no_model": "Nenhum modelo selecionado.", + "settings.transcription.switch_multilingual": "Mude para um modelo multilingue acima para escolher um idioma.", + + "settings.hardware.title": "Hardware", + "settings.hardware.active_backend": "Backend ativo", + "settings.hardware.model_meta": "· modelo {size}", + "settings.hardware.preferred_backend": "Backend preferido", + "settings.hardware.auto_backend": "Automático (o melhor disponível)", + "settings.hardware.not_available": "não disponível", + "settings.hardware.fallback_hint": "Recorre automaticamente (NPU → NVIDIA → AMD → Intel → CPU) se o backend escolhido não carregar.", + "settings.hardware.audio_devices": "Dispositivos de áudio", + "settings.hardware.recording_device": "Dispositivo de gravação", + "settings.hardware.default_system_audio": "Áudio do sistema predefinido", + "settings.hardware.recording_device_hint": "O WhispAssist grava o que este dispositivo reproduz (loopback) — o outro lado da chamada. Escolha uma saída específica se não quiser que siga a predefinição do sistema do Windows.", + "settings.hardware.microphone": "Microfone", + "settings.hardware.mic_off": "Desativado — não capturar o meu microfone", + "settings.hardware.default_mic": "Microfone predefinido", + "settings.hardware.mic_hint": "Adiciona a sua própria voz à transcrição em direto para que ambos os lados da reunião sejam captados. Permanece no seu dispositivo — nada é carregado. Escolha «Desativado» para transcrever apenas o áudio do sistema acima.", + "settings.hardware.npu_detected": "Acelerador NPU detetado", + "settings.hardware.ready": "Pronto", + "settings.hardware.downloading": "A transferir…", + "settings.hardware.package_needed": "Pacote necessário", + "settings.hardware.npu_hint": "A sua NPU precisa de um pacote de aceleração único (modelo Whisper ONNX{extra}). É transferido em segundo plano; também pode iniciá-lo agora.", + "settings.hardware.plus_openvino": " + ambiente de execução OpenVINO", + "settings.hardware.download_npu": "Transferir pacote NPU", + "settings.hardware.dml_title": "Aceleração de GPU (DirectML)", + "settings.hardware.dml_hint": "A sua GPU pode ser acelerada sem Vulkan através do DirectML — um pacote único (modelo Whisper ONNX{extra}).", + "settings.hardware.plus_directml": " + ambiente de execução DirectML", + "settings.hardware.download_dml": "Transferir pacote DirectML", + "settings.hardware.detection_unavailable": "Deteção de hardware indisponível.", + "settings.hardware.low_overhead": "Predefinição de baixo consumo", + "settings.hardware.low_overhead_note": "CPU + modelo mais pequeno, para uso com bateria/em segundo plano", + "settings.hardware.models": "Modelos", + "settings.hardware.downloading_model": "A transferir {name}", + "settings.hardware.active_badge": "Ativo", + "settings.hardware.installed": "Instalado", + "settings.hardware.use": "Usar", + "settings.hardware.remove": "Remover", + "settings.hardware.cant_remove_active": "Não é possível remover o modelo ativo", + "settings.hardware.download": "Transferir", + "settings.hardware.diarization": "Diarização de oradores", + "settings.hardware.diarization_hint": "Instale ambos os modelos para que as gravações concluídas sejam separadas por orador (Orador 1, Orador 2, …) em vez de uma única transcrição contínua. Funciona totalmente offline, uma vez por reunião após terminar. Sem eles, cada linha é atribuída a um único orador.", + + "settings.storage.title": "Armazenamento", + "settings.storage.location_label": "Localização", + "settings.storage.location_hint": "Alterar a localização de armazenamento ainda não é suportado — é aqui que residem atualmente as reuniões, os modelos e a base de dados.", + "settings.storage.retention_title": "Retenção", + "settings.storage.retention_hint": "Elimina automaticamente as reuniões mais antigas acima de um limite. Verificado uma vez no arranque; vazio significa sem limite. Nunca afeta uma reunião que esteja a ser gravada.", + "settings.storage.max_age": "Idade máxima (dias)", + "settings.storage.max_size": "Tamanho máximo (GB)", + "settings.storage.no_limit": "sem limite", + "settings.storage.export_import_title": "Exportar e importar", + "settings.storage.export_hint_1": "Mova gravações entre computadores como pastas de pacote portáteis (áudio, transcrição, notas, resumo e um", + "settings.storage.export_hint_2": "manifesto). Exporte para qualquer pasta — uma unidade sincronizada, uma pen USB ou o ponto de montagem local de um destino de sincronização — e depois importe-o na outra máquina. As reuniões importadas recebem um novo id, pelo que reimportar nunca substitui nada.", + "settings.storage.export_dialog_title": "Exportar todas as reuniões para…", + "settings.storage.import_dialog_title": "Importar um pacote (ou uma pasta de pacotes)…", + "settings.storage.exporting": "A exportar…", + "settings.storage.export_all": "Exportar todas as reuniões…", + "settings.storage.importing": "A importar…", + "settings.storage.import_all": "Importar reuniões…", + "settings.storage.exported_one": "{n} reunião exportada.", + "settings.storage.exported_many": "{n} reuniões exportadas.", + "settings.storage.imported_one": "{n} reunião importada.", + "settings.storage.imported_many": "{n} reuniões importadas.", + + "settings.calendar.title": "Calendário e Outlook .pst", + "settings.calendar.intro_1": "Importe eventos e participantes de uma cópia de segurança local do Outlook", + "settings.calendar.intro_2": "— apenas leitura, nada é reescrito no ficheiro. Nada sai deste dispositivo.", + "settings.calendar.pst_file": "Ficheiro .pst", + "settings.calendar.no_file": "Nenhum ficheiro selecionado", + "settings.calendar.browse": "Procurar…", + "settings.calendar.password": "Palavra-passe", + "settings.calendar.password_note": "raramente necessária", + "settings.calendar.optional": "opcional", + "settings.calendar.import_range": "Intervalo de importação", + "settings.calendar.range_30": "Últimos 30 dias", + "settings.calendar.range_90": "Últimos 90 dias", + "settings.calendar.range_180": "Últimos 6 meses", + "settings.calendar.range_365": "Último ano", + "settings.calendar.range_all": "Todo o período", + "settings.calendar.range_hint": "Uma caixa de correio de longa duração pode conter anos de entradas recorrentes/de feriados — reduzir o intervalo mantém o calendário importado no que é realmente relevante. Aplica-se tanto a este botão de importar como à reimportação automática no arranque.", + "settings.calendar.importing": "A importar…", + "settings.calendar.import": "Importar", + "settings.calendar.import_progress": "{processed}/{total} eventos", + "settings.calendar.auto_reimport": "Reimportar este ficheiro automaticamente no arranque", + "settings.calendar.auto_reimport_hint": "Executa uma vez no arranque, não num temporizador — a reimportação pode ser repetida em segurança (os eventos existentes são correspondidos e atualizados, não duplicados).", + "settings.calendar.import_failed": "Falha na importação: {error} — o próprio ficheiro não é tocado; verifique o caminho e tente novamente.", + "settings.calendar.cleanup_title": "Limpar", + "settings.calendar.cleanup_hint": "Os eventos já associados a uma reunião gravada são sempre mantidos, independentemente da opção escolhida abaixo.", + "settings.calendar.cleanup_30": "Mais antigos que 30 dias", + "settings.calendar.cleanup_90": "Mais antigos que 90 dias", + "settings.calendar.cleanup_180": "Mais antigos que 6 meses", + "settings.calendar.cleanup_365": "Mais antigos que 1 ano", + "settings.calendar.cleanup_all": "Eliminar tudo", + "settings.calendar.cleaning": "A limpar…", + "settings.calendar.cleanup_btn": "Limpar calendário", + "settings.calendar.cleanup_result": "{deleted}{extra} eliminados.", + "settings.calendar.cleanup_kept": ", {n} mantidos (associados a uma reunião)", + "settings.calendar.cleanup_failed": "Falha na limpeza: {error}", + "settings.calendar.imported_events": "Eventos importados", + "settings.calendar.no_events": "Ainda não foram importados eventos.", + "settings.calendar.search_title": "Procurar título", + "settings.calendar.search_placeholder": "Nome da reunião…", + "settings.calendar.date_label": "Data", + "settings.calendar.events_count": "{shown} de {total} eventos", + "settings.calendar.untitled": "(sem título)", + + "settings.dialog_title": "Definições", + "settings.close": "Fechar", + "settings.close_title": "Fechar (Esc)", + + "settings.sync.stub": "Modo de pré-visualização — o backend de sincronização ainda não está implementado (Fase 9). As alterações são mantidas apenas na interface.", + "settings.sync.title": "Sincronização e carregamento", + "settings.sync.enable_label": "Ativar o carregamento de artefactos de reuniões para os destinos configurados", + "settings.sync.enable_hint": "Desativado por predefinição. Nada é carregado a menos que isto esteja ativado e um destino esteja ativado. Os destinos auto-alojados mantêm os dados no seu próprio servidor; as nuvens de terceiros estão claramente identificadas.", + "settings.sync.targets_title": "Destinos", + "settings.sync.no_targets": "Ainda não há destinos. Adicione um abaixo.", + "settings.sync.third_party": "terceiros", + "settings.sync.your_server": "o seu servidor", + "settings.sync.edit": "Editar", + "settings.sync.remove": "Remover", + "settings.sync.edit_target": "Editar destino", + "settings.sync.add_target": "Adicionar um destino", + "settings.sync.webdav_hint": "O WebDAV cobre Nextcloud, ownCloud, Cloudreve, Seafile e Synology. (Seafile: ative o SeafDAV no servidor.)", + "settings.sync.name": "Nome", + "settings.sync.name_placeholder": "Nextcloud de casa", + "settings.sync.provider": "Fornecedor", + "settings.sync.server_url": "URL do servidor", + "settings.sync.server_url_note_1": "Apenas o URL do seu servidor — o WhispAssist adiciona", + "settings.sync.server_url_note_2": "automaticamente.", + "settings.sync.remote_folder": "Pasta remota", + "settings.sync.username": "Nome de utilizador", + "settings.sync.app_password": "Palavra-passe da aplicação", + "settings.sync.pw_keep": "deixe em branco para manter a palavra-passe atual", + "settings.sync.pw_store": "armazenada no gestor de credenciais do sistema operativo", + "settings.sync.upload_legend": "Carregar", + "settings.sync.artifact_transcript": "transcrição", + "settings.sync.artifact_notes": "notas", + "settings.sync.artifact_summary": "resumo", + "settings.sync.artifact_recording": "gravação (.wav, se retida)", + "settings.sync.allow_plaintext": "Permitir http em texto simples para um endereço LAN (não recomendado)", + "settings.sync.encrypt_before": "Cifrar antes de carregar (o destino armazena apenas texto cifrado)", + "settings.sync.requires_vault": "— requer um cofre desbloqueado", + "settings.sync.test_connection": "Testar ligação", + "settings.sync.save_changes": "Guardar alterações", + "settings.sync.add_target_btn": "Adicionar destino", + "settings.sync.cancel": "Cancelar", + "settings.sync.third_party_banner": "{kind} é uma nuvem de terceiros — carregar envia os seus dados para fora do seu dispositivo para {kind}.", + "settings.sync.link_account": "Associar conta {kind}…", + "settings.sync.oauth_hint": "Abre um início de sessão OAuth (redirecionamento loopback); o token é armazenado no gestor de credenciais do sistema operativo.", + "settings.sync.footnote": "As credenciais nunca são escritas nas definições nem na base de dados — apenas no gestor de credenciais do sistema operativo. O TLS é obrigatório para destinos fora da LAN.", + + "settings.ai.title": "Fornecedor de resumos de IA", + "settings.ai.intro_1": "Os resumos são executados num LLM local por predefinição. Aponte isto para o Ollama neste PC ou noutra máquina da sua LAN (por ex.", + "settings.ai.intro_2": "— ambos contam como local, por isso nada sai da sua rede. Os fornecedores alojados (Anthropic) são opcionais, desativados por predefinição, e enviam a transcrição para um terceiro assim que ativar um.", + "settings.ai.provider": "Fornecedor", + "settings.ai.off": "Desativado", + "settings.ai.provider_ollama": "Ollama (local / LAN)", + "settings.ai.provider_custom": "Personalizado (compatível com OpenAI)", + "settings.ai.provider_anthropic": "Anthropic (Claude) — alojado, sai deste dispositivo", + "settings.ai.endpoint": "Ponto de extremidade", + "settings.ai.model": "Modelo", + "settings.ai.api_key": "Chave API", + "settings.ai.api_key_set_placeholder": "•••••••••••••••• (já definida — deixe em branco para a manter)", + "settings.ai.show_api_key": "Mostrar chave API", + "settings.ai.hide_api_key": "Ocultar chave API", + "settings.ai.anthropic_banner": "A Anthropic é um serviço alojado de terceiros — a transcrição desta reunião sai do seu dispositivo quando gera um resumo.", + "settings.ai.endpoint_banner": "Este ponto de extremidade não está na sua máquina nem na sua LAN — a sua transcrição sairia da sua rede.", + "settings.ai.saving": "A guardar…", + "settings.ai.save": "Guardar", + "settings.ai.test_connection": "Testar ligação", + "settings.ai.this_hosted_provider": "este fornecedor alojado", + "settings.ai.reachable": "Acessível", + "settings.ai.unreachable": "Inacessível", + "settings.ai.model_count_one": "· {n} modelo", + "settings.ai.model_count_many": "· {n} modelos", + "settings.ai.on_lan": "· na sua máquina / LAN", + "settings.ai.leaves_network": "· sai da sua rede", + "settings.ai.advanced_title": "Configuração avançada do Ollama", + "settings.ai.changed": "{n} alterados", + "settings.ai.reset_all": "Repor tudo para as predefinições", + "settings.ai.system_prompt": "Prompt do sistema", + "settings.ai.system_prompt_placeholder": "por ex. É um resumidor de reuniões conciso.", + "settings.ai.system_prompt_hint": "Adicionado antes do formato de saída exigido pelo WhispAssist, para que as suas instruções não possam quebrar a análise do resumo/tarefas.", + "settings.ai.think": "Raciocinar", + "settings.ai.think_help": "Esforço de raciocínio (apenas modelos de raciocínio).", + "settings.ai.keep_alive": "Manter ativo", + "settings.ai.keep_alive_help": "Quanto tempo o modelo permanece na RAM. por ex. 5m, 1h, 0 (descarregar), -1 (para sempre).", + "settings.ai.runtime_hardware": "Execução e hardware", + "settings.ai.rarely_needed": "— raramente necessário", + "settings.ai.save_advanced": "Guardar avançado", + "settings.ai.saved": "Guardado", + "settings.ai.turn_off": "Desativar", + "settings.ai.default_value": "Predefinição {value}.", + "settings.ai.reset_default": "Repor para a predefinição", + "settings.ai.reset_field": "Repor {name}", + + "settings.mcp.title": "Servidor MCP", + "settings.mcp.banner_1": "Isto permite que o seu próprio agente de programação (Claude Code, Codex, Copilot, OpenCode, …) obtenha o contexto da reunião na sua máquina local. Uma vez ligado,", + "settings.mcp.banner_agent": "esse agente", + "settings.mcp.banner_2": "pode reencaminhar o que lê para a nuvem do seu próprio fornecedor de modelo — fora do controlo do WhispAssist. O próprio WhispAssist nunca envia estes dados para lado nenhum; o servidor apenas escuta neste dispositivo (", + "settings.mcp.banner_3": ") e cada leitura é registada abaixo.", + "settings.mcp.enable": "Ativar o servidor MCP", + "settings.mcp.enable_hint": "Desativado por predefinição. Apenas loopback, protegido por token — nada é acessível a partir da rede.", + "settings.mcp.transport": "Transporte", + "settings.mcp.transport_http": "HTTP em streaming", + "settings.mcp.transport_stdio": "stdio (o agente inicia um processo)", + "settings.mcp.port": "Porta", + "settings.mcp.transport_change_hint": "Para mudar o transporte/porta, desligue primeiro o servidor e volte a ligá-lo.", + "settings.mcp.scope_title": "Âmbito", + "settings.mcp.expose": "Expor", + "settings.mcp.scope_none": "Nenhum — nada é partilhado", + "settings.mcp.scope_selected": "Selecionados — apenas os resumos de funcionalidades que marcou como partilhados", + "settings.mcp.scope_all": "Todos — reuniões, transcrições, tarefas e resumos partilhados", + "settings.mcp.expose_recordings": "Permitir também reuniões com uma gravação guardada (desativado por predefinição — a transcrição de uma reunião gravada é retida mesmo no âmbito «Todos» até isto ser ativado)", + "settings.mcp.token_title": "Novo token de autenticação — mostrado uma vez, copie-o agora", + "settings.mcp.token_hint": "Isto não será mostrado novamente. É armazenado no gestor de credenciais do sistema operativo; se o perder, desligue e volte a ligar o servidor para gerar um novo.", + "settings.mcp.copied": "Copiado", + "settings.mcp.copy": "Copiar", + "settings.mcp.endpoint": "Ponto de extremidade", + "settings.mcp.endpoint_hint": "Aponte a configuração do cliente MCP do seu agente para {kind}, com o token acima como credencial bearer.", + "settings.mcp.kind_command": "comando", + "settings.mcp.kind_url": "URL", + "settings.mcp.access_log": "Registo de acessos", + "settings.mcp.access_log_hint": "Cada leitura de ferramenta que um agente faz, permitida ou negada (FR-MCP-5).", + "settings.mcp.no_reads": "Nenhum agente leu nada ainda.", + "settings.mcp.log_meeting": "reunião {id}", + "settings.mcp.refresh": "Atualizar", + + "settings.privacy.title": "Privacidade", + "settings.privacy.intro": "O que o WhispAssist está realmente autorizado a enviar para fora deste dispositivo neste momento. Com tudo desativado (a predefinição), nada sai do dispositivo.", + "settings.privacy.llm_endpoint": "Ponto de extremidade LLM", + "settings.privacy.off": "desativado", + "settings.privacy.local_only": "apenas local", + "settings.privacy.leaves_device": "sai deste dispositivo", + "settings.privacy.sync_label": "Sincronização", + "settings.privacy.enabled": "ativada", + "settings.privacy.mcp_label": "Servidor MCP", + "settings.privacy.mcp_on": "ativado · {scope}", + "settings.privacy.mcp_loopback_note": "Entrada apenas em loopback — não acrescenta nada à lista de saída acima. Um agente ligado pode ainda reencaminhar o que lê para o seu próprio fornecedor de modelo; consulte o separador do servidor MCP.", + "settings.privacy.egress_title": "Lista de permissões de saída", + "settings.privacy.no_egress": "Nenhum host está na lista de permissões — o WA não faz qualquer saída de conteúdo.", + "settings.privacy.sync_targets_title": "Destinos de sincronização", + "settings.privacy.third_party": "terceiros", + "settings.privacy.your_server": "o seu servidor", + "settings.privacy.tls": "TLS", + "settings.privacy.no_tls": "sem TLS", + "settings.privacy.refresh": "Atualizar", + "settings.privacy.unavailable": "Autoverificação de privacidade indisponível.", + "settings.privacy.vault_title": "Cofre de cifragem", + "settings.privacy.vault_intro": "Cifre notas, transcrições e resumos em repouso com uma palavra-passe. (Os ficheiros de áudio ainda não são cifrados.)", + "settings.privacy.vault_password": "Palavra-passe do cofre", + "settings.privacy.enable_vault": "Ativar cofre", + "settings.privacy.vault_pw_hint": "Use pelo menos 8 caracteres. Se a esquecer, o conteúdo cifrado não poderá ser recuperado.", + "settings.privacy.vault_locked_1": "O cofre está ", + "settings.privacy.locked_word": "bloqueado", + "settings.privacy.vault_locked_2": ". Desbloqueie para ler as reuniões cifradas.", + "settings.privacy.password": "Palavra-passe", + "settings.privacy.unlock": "Desbloquear", + "settings.privacy.vault_unlocked_1": "O cofre está ", + "settings.privacy.unlocked_word": "desbloqueado", + "settings.privacy.vault_unlocked_2": ". As novas notas, transcrições e resumos são cifrados em repouso.", + "settings.privacy.lock_now": "Bloquear agora", + "settings.privacy.change_password": "Alterar palavra-passe", + "settings.privacy.current_password": "Palavra-passe atual", + "settings.privacy.new_password": "Nova palavra-passe", + + "settings.about.title": "Acerca de", + "settings.about.tagline": "Um assistente de reuniões totalmente local, de código aberto e nativo do Windows.", + "settings.about.build_commit": "Commit de compilação", + + "consent.heading": "Antes de gravar", + "consent.body": "Gravar conversas sem o consentimento dos participantes pode ser ilegal na sua região. Verifique as leis locais sobre gravação. Isto é uma advertência, não aconselhamento jurídico.", + "consent.accept": "Compreendo — ativar a gravação", + "consent.cancel": "Cancelar", + + "hosted.heading": "Antes de usar {provider}", + "hosted.body_1": "Gerar com", + "hosted.body_2": "envia a transcrição desta reunião para os seus servidores — sai deste dispositivo e fica sujeita à sua política de privacidade. O WhispAssist não tem controlo sobre o tratamento dos dados depois de saírem do seu dispositivo. Isto está desativado por predefinição; está a escolhê-lo agora.", + "hosted.accept": "Compreendo — continuar", + "hosted.cancel": "Cancelar", + + "theme.group": "Tema", + "theme.system": "Acompanhar o sistema", + "theme.light": "Claro", + "theme.dark": "Escuro", + + "import.dialog_label": "Adicionar uma reunião a partir de um ficheiro ou URL", + "import.title": "Adicionar uma reunião", + "import.close": "Fechar", + "import.close_title": "Fechar (Esc)", + "import.body": "Importe uma gravação existente — um ficheiro de áudio/vídeo local ou uma ligação (YouTube, uma página de streaming ou um URL de média direto). É transcrita e diarizada tal como uma gravação em direto.", + "import.file_or_url": "Ficheiro ou URL", + "import.source_placeholder": "Cole um URL ou procure um ficheiro…", + "import.choose_file": "Escolher um ficheiro local", + "import.browse": "Procurar…", + "import.title_label": "Título", + "import.optional": "opcional", + "import.title_placeholder": "Por predefinição, o nome do ficheiro", + "import.filter_av": "Áudio / vídeo", + "import.requires_1": "Requer", + "import.requires_2": "instalado e no seu PATH (mais", + "import.requires_3": "para URLs). O WhispAssist não os inclui.", + "import.importing": "A importar… isto pode demorar um pouco", + "import.import": "Importar", + "import.cancel": "Cancelar", + + "tagchip.filter": "Filtrar reuniões etiquetadas com «{tag}»", + "tagchip.remove": "Remover etiqueta {tag}", + + "levelmeter.system_mic": "Nível de entrada do sistema e do microfone", + "levelmeter.system": "Nível de entrada do sistema", + + "app.tagline": "local · privado", + "app.note_template": "Modelo de notas", + "app.no_template": "Sem modelo", + "app.add_meeting": "Adicionar reunião", + "app.add_meeting_title": "Adicionar uma reunião a partir de um ficheiro ou URL", + "app.record": "Gravar", + "app.record_title": "Iniciar gravação (Ctrl+Shift+R)", + "app.stop": "Parar", + "app.stop_title": "Parar gravação (Ctrl+Shift+R)", + "app.cancel": "Cancelar", + "app.cancel_title": "Descartar esta gravação e eliminá-la", + "app.recording": "A gravar…", + "app.backend_title": "Backend de transcrição ativo", + "app.retention_title": "Guardar o áudio como .wav para esta reunião", + "app.saving": "a guardar", + "app.not_saved": "não guardado", + "app.reconnecting": "a reconectar o dispositivo de áudio…", + "app.settings": "Definições", + "app.settings_title": "Definições (Ctrl+,)", + "app.discard_confirm": "Descartar esta gravação? O seu áudio e transcrição serão eliminados.", + "app.announce_started": "Gravação iniciada", + "app.announce_paused": "Gravação em pausa", + "app.announce_stopped": "Gravação parada", + "app.consent_dialog": "Consentimento de gravação", + "app.vault_dialog": "Desbloquear o cofre de cifragem", + "app.vault_title": "Desbloquear o cofre de cifragem", + "app.vault_desc": "As suas reuniões estão cifradas em repouso. Introduza a sua palavra-passe para as ler.", + "app.vault_password": "Palavra-passe do cofre", + "app.vault_incorrect": "Palavra-passe incorreta", + "app.unlock": "Desbloquear", + "app.continue_locked": "Continuar bloqueado", + "app.show_meetings": "Mostrar lista de reuniões", + "app.hide_meetings": "Ocultar lista de reuniões", + "app.show_summary": "Mostrar painel de resumo", + "app.hide_summary": "Ocultar painel de resumo", + "app.resize_meetings": "Redimensionar lista de reuniões", + "app.resize_summary": "Redimensionar painel de resumo", + + "meetings.search_placeholder": "Procurar reuniões…", + "meetings.search_aria": "Procurar reuniões", + "meetings.filter_tag_aria": "Filtrar por etiqueta", + "meetings.all_tags": "Todas as etiquetas", + "meetings.from_date_aria": "Da data", + "meetings.to_date_aria": "Até à data", + "meetings.bulk_format_aria": "Formato de exportação em massa", + "meetings.bulk_export": "Exportação em massa", + "meetings.bulk_export_title": "Exportar todas as reuniões que correspondam aos filtros de etiqueta/data acima", + "meetings.exporting": "A exportar…", + "meetings.exported_one": "{n} reunião exportada.", + "meetings.exported_many": "{n} reuniões exportadas.", + "meetings.searching": "A procurar…", + "meetings.loading": "A carregar reuniões…", + "meetings.no_matches": "Sem correspondências.", + "meetings.empty": "Ainda não há reuniões — clique em Gravar acima para começar.", + "meetings.status.recording": "a gravar", + "meetings.status.transcribing": "a transcrever", + "meetings.status.recovering": "a recuperar", + "meetings.status.error": "erro", + "meetings.resume": "Retomar transcrição", + "meetings.delete_aria": "Eliminar reunião", + "meetings.delete_confirm": "Eliminar esta reunião? Isto remove a sua gravação, transcrição e notas.", + + "transcript.heading": "Transcrição", + "transcript.title_aria": "Título da reunião", + "transcript.lang_title": "Idioma de transcrição", + "transcript.lang_auto": "a detetar…", + "transcript.show": "Mostrar transcrição", + "transcript.hide": "Ocultar transcrição", + "transcript.empty": "Não há transcrição para esta reunião.", + "transcript.will_appear": "A transcrição aparecerá aqui à medida que grava.", + "transcript.play_from_here": "Reproduzir a partir daqui", + "transcript.resize": "Redimensionar transcrição e notas", + "transcript.reprocess_placeholder": "Voltar a transcrever com…", + "transcript.reprocess_lang_aria": "Idioma de reprocessamento", + "transcript.reprocess_keep_lang": "Manter o idioma atual", + "transcript.reprocess_go": "Avançar", + "transcript.retranscribing": "A voltar a transcrever…", + "transcript.has_note": "Tem uma nota", + "transcript.note_placeholder": "Adicionar uma nota para este momento…", + "transcript.note_aria": "Nota para esta linha da transcrição", + "transcript.filter_md": "Markdown", + "transcript.filter_pdf": "PDF", + "transcript.filter_docx": "Documento do Word", + "transcript.filter_obsidian": "Nota do Obsidian", + + "notes.heading": "Notas", + "notes.show": "Mostrar notas", + "notes.hide": "Ocultar notas", + "notes.placeholder": "Notas…", + "notes.live_placeholder": "Escreva notas enquanto fala…", + "notes.toolbar_aria": "Formatação de notas", + "notes.bold": "Negrito", + "notes.italic": "Itálico", + "notes.h1": "Título 1", + "notes.h2": "Título 2", + "notes.bullet": "Lista com marcadores", + "notes.checkbox_title": "Caixa de verificação", + "notes.checkbox_aria": "Item de lista com caixa de verificação", + "notes.edit_raw": "Editar o markdown em bruto", + "notes.render": "Compor o markdown", + "notes.editor": "Editor", + "notes.preview": "Pré-visualização", + "notes.export_md_title": "Exportar notas como .md", + "notes.export_pdf_title": "Exportar notas como .pdf", + "notes.export_docx_title": "Exportar notas como .docx", + "notes.export_bundle_title": "Exportar áudio + transcrição + notas para uma pasta", + "notes.export_obsidian_title": "Exportar uma nota do Obsidian (notas + resumo + transcrição, sem áudio)", + + "summary.recording_heading": "Gravação", + "summary.loading_recording": "A carregar gravação…", + "summary.sync_heading": "Sincronização", + "summary.uploading": "A carregar…", + "summary.upload_now": "Carregar agora", + "summary.no_uploads": "Ainda não há carregamentos para esta reunião.", + "summary.retry": "repetir", + "summary.tags_heading": "Etiquetas", + "summary.tags_select": "Selecione uma reunião para a etiquetar.", + "summary.tag_add_placeholder": "Adicionar etiqueta…", + "summary.tag_first_placeholder": "projeto, cliente, tema…", + "summary.generating": "A gerar…", + "summary.generate_tags": "Gerar etiquetas", + "summary.saving": "A guardar…", + "summary.save_tags": "Guardar etiquetas", + "summary.summary_heading": "Resumo", + "summary.ai_provider": "Fornecedor de IA", + "summary.provider_off": "Desativado", + "summary.provider_custom": "Personalizado", + "summary.local": "local", + "summary.leaves_device": "sai deste dispositivo", + "summary.this_hosted_provider": "este fornecedor alojado", + "summary.select_generate": "Selecione uma reunião para gerar um resumo.", + "summary.decisions_heading": "Decisões", + "summary.regenerate": "Regenerar", + "summary.generated_hint": "Gerado localmente após a reunião (requer um fornecedor de LLM local).", + "summary.no_provider": "Nenhum fornecedor de IA configurado — ative um nas Definições.", + "summary.generate_summary": "Gerar resumo", + "summary.briefs_heading": "Resumos de funcionalidades", + "summary.briefs_select": "Selecione uma reunião para criar ou ver resumos de funcionalidades.", + "summary.briefs_desc": "Destila esta reunião numa especificação pronta para agentes (requer um fornecedor de LLM local) — entregue-a a um agente de programação, ou disponibilize-a através do servidor MCP quando este estiver ativado.", + "summary.brief_repo_placeholder": "Repositório de destino (opcional), por ex. acme/reporting-web", + "summary.distilling": "A destilar…", + "summary.create_brief": "Criar resumo de funcionalidade", + "summary.brief_mcp_title": "Disponível quando o servidor MCP está ativado", + "summary.copied": "Copiado", + "summary.copy_md": "Copiar como Markdown", + "summary.copy_json": "Copiar como JSON", + "summary.brief_problem": "Problema", + "summary.brief_outcome": "Resultado desejado", + "summary.brief_criteria": "Critérios de aceitação", + "summary.brief_none": "Nada capturado.", + "summary.brief_context": "Contexto", + "summary.action_items_heading": "Tarefas", + "summary.ai_select": "Selecione uma reunião para ver as suas tarefas.", + "summary.ai_empty": "Ainda nenhuma — adicione uma abaixo, ou gere um resumo para as extrair automaticamente.", + "summary.confirmed": "Confirmada", + "summary.ai_text_placeholder": "Tarefa…", + "summary.ai_text_aria": "Texto da tarefa", + "summary.owner": "Responsável", + "summary.due_date": "Data-limite", + "summary.reminder_title": "Agendar um lembrete local para esta data-limite", + "summary.ai_delete_title": "Eliminar esta tarefa", + "summary.ai_delete_aria": "Eliminar tarefa", + "summary.add_action_item": "Adicionar tarefa", + "summary.save_action_items": "Guardar tarefas", + "summary.calendar_heading": "Evento do calendário", + "summary.cal_select": "Selecione uma reunião para a associar a um evento do calendário.", + "summary.event_search_placeholder": "Procurar título do evento…", + "summary.linked_event": "Evento associado", + "summary.change_event": "Mudar evento…", + "summary.link_event": "Associar um evento…", + "summary.untitled_event": "(sem título)", + "summary.no_events_1": "Ainda não foram importados eventos — importe um", + "summary.no_events_2": "em Definições → Calendário.", + "summary.no_events_match": "Nenhum evento corresponde a esta procura/data — tente limpar uma.", + "summary.organizer_label": "Organizador: {name}", + "summary.participants_heading": "Participantes", + "summary.participants_hint": "Preenchido a partir do evento do calendário associado.", + "summary.speakers_heading": "Oradores", + "summary.speakers_select": "Selecione uma reunião para nomear os seus oradores.", + "summary.no_speakers": "Ainda não foram detetados oradores.", + "summary.speaker_name_placeholder": "Nome do orador", + "summary.save": "Guardar", + "summary.cancel": "Cancelar", + "summary.name_speaker": "Nomear este orador…", + "summary.add_new_name": "+ Adicionar novo nome…", + + "settings.recording.title": "Gravação", + "settings.recording.record_default": "Gravar reuniões por predefinição", + "settings.recording.save_audio_as": "guardar áudio como", + "settings.recording.default_hint": "Desativado por predefinição. Quando desativado, o áudio é usado apenas para produzir a transcrição e é eliminado quando a reunião é finalizada. Também pode alternar a gravação por reunião.", + "settings.recording.consent_label": "Consentimento: {status}.", + "settings.recording.consent_ack": "confirmado", + "settings.recording.consent_not": "ainda não confirmado", + "settings.recording.auto_label": "Iniciar a gravação automaticamente quando um evento do calendário começa", + "settings.recording.auto_hint": "Apenas enquanto o WhispAssist estiver aberto. Quando chega a hora de início de um evento do calendário importado, uma gravação começa automaticamente (usando a sua definição de retenção predefinida acima). Nada é executado em segundo plano — o temporizador só é armado enquanto a aplicação está em execução. Importe eventos em Definições → Calendário." +}