"""VoxCast UI strings: Portuguese (neutral pt, leaning pt-BR).

Key/placeholder parity with en.py enforced. No em-dash in values.
"""

STRINGS: dict[str, str] = {
    # ── Panel (main.qml) ────────────────────────────────────────────────
    "panel_ready": "Pronto",
    "panel_transcribing": "Transcrevendo...",
    "panel_correcting": "Corrigindo...",
    "panel_enhancing": "Aprimorando (IA)…",
    "panel_converting": "Convertendo...",
    "panel_error": "Erro",
    "panel_drop_file": "Solte o arquivo → Markdown",
    "panel_acc_ai_mode": "Modo IA",
    "panel_acc_settings": "Configurações",
    "panel_acc_undock": "Desencaixar",
    "panel_acc_hide": "Ocultar",

    # ── Settings window ─────────────────────────────────────────────────
    "settings_title": "Configurações",
    "sec_interface": "INTERFACE",
    "row_ui_language": "Idioma",
    "sec_audio": "ÁUDIO",
    "row_microphone": "Microfone",
    "opt_system_default": "Padrão do sistema",
    "row_voice_test": "Teste de voz",
    "btn_test": "Testar",
    "btn_stop": "Parar",
    "btn_play": "Reproduzir",
    "sec_recognition": "RECONHECIMENTO",
    "row_model": "Modelo",
    "model_swift": "Swift",
    "model_precise": "Precise",
    "model_ultra": "Ultra",
    "hint_model_swift": "Rápido e leve, a escolha certa para laptops e PCs sem placa de vídeo.",
    "hint_model_precise": "Precisão equilibrada, boa escolha para o dia a dia, roda bem na maioria dos PCs.",
    "hint_model_ultra": "Máxima precisão, ideal com placa de vídeo (4 GB); bem mais lento sem uma.",
    "compat_gpu_ok": "Vai rodar na sua placa de vídeo ({vram} GB).",
    "compat_gpu_low": "Sua placa de vídeo ({vram} GB) tem pouca memória para este modelo, ele vai rodar no processador (mais lento).",
    "compat_cpu": "Nenhuma placa de vídeo compatível detectada, este modelo vai rodar no processador.",
    "compat_cpu_forced": "Vai rodar no processador (definido nas configurações).",
    "row_language": "Idioma",
    "row_lang_auto": "Detectar idioma automaticamente",
    "hint_lang_auto": "Detecta o idioma a cada ditado. Um idioma fixo é mais rápido e preciso.",
    "row_live_mode": "Transcrição ao vivo",
    "hint_live_mode": "O texto aparece no cursor enquanto você fala, em vez de só depois de parar. Sem aprimoramento por IA neste modo; o texto é digitado no cursor.",
    "hint_output_live": "A transcrição ao vivo está ativada: o texto é digitado no cursor enquanto você fala, então essas opções de saída não se aplicam.",
    "hint_live_cpu": "Funciona melhor com placa de vídeo; no processador pode ficar atrás da sua fala.",
    "live_cpu_warning": "O modo ao vivo está rodando no processador e pode atrasar; recomenda-se uma placa de vídeo.",
    "sec_output": "SAÍDA",
    "row_text_output": "Saída de texto",
    "opt_clipboard": "Área de transferência",
    "opt_type_at_cursor": "Digitar no cursor",
    "opt_both": "Ambos",
    "row_insert_method": "Método de inserção",
    "opt_paste": "Colar (Ctrl+V)",
    "opt_typing": "Digitação",
    "hint_typing": "Simula a digitação no teclado. Funciona em terminais.",
    "sec_controls": "CONTROLES",
    "row_hotkey": "Atalho",
    "row_mode": "Modo",
    "opt_hold": "Segurar",
    "opt_toggle": "Alternar",
    "sec_performance": "DESEMPENHO",
    "row_compute": "Processamento",
    "opt_auto": "Automático",
    "opt_gpu": "GPU",
    "opt_cpu": "CPU",
    "hint_cpu_slow": "O modo CPU é mais lento.",
    "sec_system": "SISTEMA",
    "row_autostart": "Iniciar com o Windows",
    "row_startup_sound": "Som de inicialização",
    "row_recording_sound": "Som de gravação",
    "row_shutdown_sound": "Som de encerramento",
    "row_always_on_top": "Sempre em primeiro plano",
    "row_small_panel": "Painel pequeno",
    "sec_file_conversion": "CONVERSÃO DE ARQUIVOS",
    "row_save_mode": "Modo de salvamento",
    "opt_ask": "Perguntar",
    "opt_beside_file": "Ao lado do arquivo",
    "opt_folder": "Pasta",
    "row_folder": "Pasta",
    "btn_browse": "Procurar",
    "row_timestamps": "Marcas de tempo",
    "row_open_after": "Abrir depois",
    "row_context_menu": "Menu de contexto",
    "hint_context_menu": "Adiciona 'Converter para Markdown' ao menu de contexto do Explorer.",
    "sec_ai": "APRIMORAMENTO POR IA",
    "row_enable": "Ativar",
    "hint_ai": "Aprimore ditados com IA (limpar, e-mail, resposta…). Escolha o modo ativo clicando com o botão direito no painel ou pelo botão de IA do painel.",
    "row_provider": "Provedor",
    "row_api_key": "Chave de API",
    "ph_api_key": "Cole a chave de API",
    "ph_api_key_saved": "•••••••• salva, digite para substituir",
    "btn_save": "Salvar",
    "hint_key_stored": "Chave armazenada com segurança no Gerenciador de Credenciais do Windows.",
    "btn_clear": "Remover",
    "btn_load": "Carregar",
    "btn_loading": "Carregando",
    "row_active_mode": "Modo ativo",
    "mode_normal": "Normal (sem IA)",
    # Display names of the built-in AI modes (shown while the user hasn't
    # renamed them; the stored name stays the English default).
    "mode_cleanup": "Limpar",
    "mode_email": "E-mail",
    "mode_reply": "Resposta",
    "mode_todo": "Lista de tarefas",
    "mode_notes": "Notas",
    "mode_formal": "Formal",
    "lbl_custom_modes": "Modos personalizados",
    "sec_license": "LICENÇA",
    "row_status": "Status",
    "lic_activated": "● Ativado",
    "lic_not_activated": "○ Não ativado",
    "btn_activate": "Ativar",
    "sec_updates": "ATUALIZAÇÕES",
    "row_version": "Versão",
    "btn_check_updates": "Verificar atualizações",
    "btn_checking": "Verificando",
    "btn_downloading_pct": "{pct}%  baixando…",
    "btn_download_install": "Baixar e instalar v{version}",
    "btn_reset": "Redefinir",
    "reset_title": "Redefinir configurações",
    "reset_question": "Redefinir todas as configurações para os padrões?",
    "dlg_model_dl_title": "Download necessário",
    "dlg_model_dl_text": "O modelo selecionado ainda não está instalado. O VoxCast vai baixar cerca de {size} de dados de voz e mudar em seguida. Iniciar o download agora?",

    # ── Mode editor ─────────────────────────────────────────────────────
    "ph_mode_name": "Nome do modo",
    "tip_remove_mode": "Remover modo",
    "ph_system_prompt": "Prompt de sistema, diz à IA como transformar a transcrição.",
    "btn_add_mode": "Adicionar modo",
    "mode_new": "Novo modo",

    # ── Mode menu (panel) ───────────────────────────────────────────────
    "menu_ai_mode": "MODO IA",
    "menu_ai_mode_off": "MODO IA  ·  DESLIGADO",
    "menu_ai_settings": "Configurações…",
    "menu_copy_raw": "Copiar transcrição original",
    "tray_raw_copied": "A transcrição original foi copiada para a área de transferência.",

    # ── Activation overlay ──────────────────────────────────────────────
    "act_title": "Ativar o VoxCast",
    "act_intro": "Digite sua chave de licença para ativar este dispositivo. A ativação é uma etapa online única; depois disso, o VoxCast funciona totalmente offline.",
    "act_enter_key": "Digite sua chave de licença.",
    "act_button": "Ativar",
    "act_button_busy": "Ativando…",
    "act_update_available": "A versão {version} está disponível.",
    "act_update_now": "Atualizar agora",
    "act_device": "Dispositivo: ",
    "act_quit": "Sair",

    # ── First-run overlay ───────────────────────────────────────────────
    "fr_title": "Configuração do VoxCast",
    "fr_pick_language": "Selecione seu idioma para o reconhecimento de voz.\nIsso evita a detecção automática lenta a cada uso.",
    "fr_continue": "Continuar",
    "fr_preparing": "Preparando modelos...",
    "fr_hint_label": "Dica:",
    "status_hw_check": "Verificando o hardware...",
    "fr_hw_gpu": "Placa de vídeo detectada ({vram} GB): o modelo {model} será configurado.",
    "fr_hw_cpu": "Nenhuma placa de vídeo dedicada detectada: o modelo {model} será configurado.",
    "fr_hint_download": "Os modelos são baixados uma única vez e ficam no seu dispositivo, sem precisar de nuvem.",
    "fr_hint_hotkey": "Pressione Ctrl+Shift+Space para começar a ditar, pressione de novo para parar.",
    "fr_hint_ai": "Clique com o botão direito no painel para escolher um modo de IA (ex.: E-mail, Resposta).",
    "fr_hint_dragfile": "Arraste um arquivo para o painel para transformá-lo em Markdown.",
    "fr_hint_audio": "Solte um arquivo de áudio (mp3, ogg, m4a…) para transcrevê-lo.",
    "fr_hint_explorer": "No Explorer, clique com o botão direito em um arquivo → “Converter para Markdown”.",
    "fr_hint_dock": "Encaixe o painel em uma borda da tela, ele desliza para fora até você precisar dele.",
    "fr_hint_settings": "Abra as Configurações para mudar modelo, idioma ou atalho a qualquer momento.",

    # ── Status messages (Python → panel) ────────────────────────────────
    "status_init_services": "Inicializando serviços...",
    "status_loading_vad": "Carregando detecção de atividade de voz...",
    "status_loading_model": "Carregando modelo de reconhecimento de voz...",
    "status_init_models": "Inicializando modelos...",
    "status_loading": "Carregando modelo...",
    "status_switching_model": "Trocando de modelo...",
    "status_downloading_engine": "Baixando mecanismo de reconhecimento de voz...",
    "status_engine_ready": "Mecanismo de reconhecimento de voz pronto",
    "status_downloading_correction": "Baixando modelo de correção...",
    "status_correction_ready": "Modelo de correção baixado",

    # ── Meeting recording ────────────────────────────────────────────────
    "menu_meeting_start": "Gravar reunião",
    "menu_meeting_stop": "Parar gravação da reunião",
    "meeting_consent_title": "Gravar reuniões",
    "meeting_consent_body": "O VoxCast grava o áudio do sistema e o seu microfone para que você possa transcrever chamadas e reuniões.\n\nCertifique-se de que todos os participantes concordam com a gravação; em muitos países (incluindo a Alemanha), gravar uma chamada sem consentimento é crime.",
    "meeting_consent_accept": "Entendi, iniciar gravação",
    "meeting_consent_cancel": "Cancelar",
    "status_meeting_recording": "Gravando reunião",
    "status_meeting_transcribing": "Transcrevendo reunião… {pct}%",
    "meeting_done_title": "Reunião transcrita",
    "meeting_done_body": "A transcrição foi salva, clique aqui para abri-la.",
    "meeting_resume_note": "Foi encontrada uma gravação de reunião inacabada, ela está sendo transcrita agora.",
    "menu_meeting_folder": "Abrir pasta de reuniões",
    "meeting_source_title": "O que gravar?",
    "meeting_source_system": "Sistema inteiro",
    "meeting_source_empty": "Nenhum aplicativo está reproduzindo áudio no momento",
    "meeting_app_fallback": "A captura do aplicativo não pôde iniciar, gravando o sistema inteiro no lugar.",
    "md_meeting_source": "Fonte",
    "meeting_partial_note": "A gravação terminou antes do previsto, a parte gravada foi processada mesmo assim.",
    "meeting_system_silent": "Nenhum áudio do sistema foi capturado, verifique seu dispositivo de reprodução. Alguns headsets reproduzem o áudio de um modo que o Windows não consegue gravar; trocar o dispositivo de saída padrão ajuda.",
    "meeting_summary_failed": "O resumo por IA falhou, a transcrição foi salva sem ele.",
    "err_meeting_folder": "A pasta de reuniões não pôde ser criada. Verifique a pasta nas Configurações.",
    "err_meeting_disk": "Espaço livre em disco insuficiente, gravação da reunião interrompida.",
    "err_meeting_maxlen": "Duração máxima de reunião atingida (4 h), gravação interrompida.",
    "err_meeting_capture": "A gravação da reunião falhou, nenhum áudio pôde ser capturado.",
    "err_meeting_transcribe": "A transcrição da reunião falhou. O arquivo de áudio foi mantido para você tentar de novo.",
    "md_meeting_title": "Reunião",
    "md_meeting_date": "Data",
    "md_meeting_duration": "Duração",
    "md_meeting_summary": "Resumo",
    "md_meeting_transcript": "Transcrição",
    "sec_remote": "Servidor remoto",
    "row_remote_enable": "Usar servidor remoto",
    "hint_remote": "Execute a transcrição em outro computador com uma GPU ou CPU mais potente. Ditado, conversão de arquivos e reuniões são processados no servidor.",
    "hint_recognition_remote": "O servidor remoto cuida do reconhecimento, por isso o modelo local abaixo está desativado. Escolha o modelo no servidor.",
    "row_remote_url": "Endereço do servidor",
    "ph_remote_url": "http://192.168.1.10:8590",
    "row_remote_key": "Chave de API",
    "ph_remote_key": "Cole a chave de API do servidor",
    "btn_remote_test": "Testar conexão",
    "remote_testing": "Testando...",
    "btn_remote_discover": "Procurar servidor",
    "remote_discovering": "Procurando...",
    "remote_discover_none": "Nenhum servidor encontrado. Verifique se o servidor está em execução, se os dois dispositivos estão na mesma rede e se o firewall do servidor permite o VoxCast Server na rede local.",
    "remote_enhance_available": "Aprimoramento por IA disponível",
    "remote_update_available": "Atualização do servidor disponível: {version}",
    "row_tls_mode": "Certificado",
    "tls_verify": "Exigir um certificado válido",
    "tls_pinned": "Confiar neste servidor",
    "tls_insecure": "Permitir qualquer certificado",
    "btn_trust_cert": "Verificar certificado",
    "tls_trust_title": "Confiar neste servidor?",
    "tls_trust_body": "O servidor apresentou esta impressão digital do certificado. Confirme que corresponde ao seu servidor antes de confiar nele.",
    "tls_trust_confirm": "Confiar",
    "tls_trust_failed": "Não foi possível ler o certificado do servidor. Verifique o endereço e se o HTTPS está ativado.",
    "tls_insecure_warning": "A conexão não é verificada. Use isto apenas em uma rede em que você confia.",
    "row_enhance_source": "Aprimoramento por IA",
    "enhance_own": "Minha própria chave de API",
    "enhance_server": "Usar o servidor",
    "hint_enhance_server": "O servidor aprimora com a própria chave de IA, portanto você não precisa inserir nenhuma aqui.",
    "lbl_server_modes": "Modos da empresa (do servidor)",
    "managed_locked": "Gerenciado pela sua organização",
    "remote_http_warn": "Esta conexão não é criptografada. Use-a apenas em uma rede local confiável.",
    "remote_live_hint": "As legendas ao vivo são executadas neste dispositivo; elas precisam de um modelo instalado localmente.",
    "remote_connected": "Conectado: {model} em {where}",
    "remote_on_gpu": "GPU ({vram} GB)",
    "remote_on_cpu": "CPU",
    "err_remote_unreachable": "Não foi possível acessar o servidor remoto. Verifique o endereço e sua rede.",
    "err_remote_auth": "O servidor remoto rejeitou a chave de API.",
    "err_remote_busy": "O servidor remoto está ocupado. Tente novamente em um instante.",
    "err_remote_failed": "O servidor remoto não conseguiu processar este áudio.",
    "sec_meeting": "REUNIÃO",
    "row_meeting_mic": "Gravar microfone",
    "hint_meeting_mic": "Também captura a sua própria voz, não só a dos outros participantes.",
    "row_meeting_language": "Idioma",
    "lang_meeting_auto": "Detecção automática",
    "row_convert_language": "Idioma do áudio",
    "lang_convert_auto": "Detecção automática",
    "err_convert_engine_loading": "O mecanismo de voz ainda está carregando. Tente a conversão novamente em instantes.",
    "err_convert_no_speech": "Nenhuma fala foi reconhecida neste arquivo. Nenhum arquivo Markdown foi criado.",
    "err_convert_engine_error": "O mecanismo de voz relatou um erro durante a transcrição.",
    "tray_convert_failed": "Não foi possível converter {name}: {error}",
    "hint_meeting_language": "A detecção automática lida com reuniões em qualquer idioma, mesmo quando ele muda no meio da conversa. Escolha um idioma apenas se a detecção tiver dificuldades.",
    "row_meeting_keep": "Manter arquivo de áudio",
    "hint_meeting_keep": "Salva a gravação como um arquivo .wav ao lado da transcrição.",
    "row_meeting_summary": "Resumo por IA",
    "hint_meeting_summary": "Adiciona um resumo gerado por IA no início da transcrição (requer o aprimoramento por IA configurado).",
    "hint_meeting_summary_nokey": "O aprimoramento por IA não está configurado, os resumos serão ignorados.",
    "row_meeting_folder": "Salvar em",
    "meeting_folder_default": "Documentos\\VoxCast\\Meetings",
    "btn_open": "Abrir",

    # ── Errors / tray (Python) ──────────────────────────────────────────
    "err_audio_lib": "Biblioteca de áudio não disponível",
    "err_gpu_oom": "Memória da GPU esgotada. Reinicie no modo CPU.",
    "err_gpu_fallback": "Placa de vídeo não disponível, rodando no processador (mais lento).",
    "err_hotkey_init": "Sistema de atalhos não inicializado",
    "err_mic": "Erro no microfone. Verifique seu dispositivo de áudio.",
    "err_mic_test_busy": "Já existe uma gravação em andamento. Pare-a antes de testar o microfone.",
    "err_model_switch": "A troca de modelo falhou. Tente novamente.",
    "err_model_download": "O download do modelo de voz falhou. Verifique sua conexão com a internet.",
    "err_speech_start": "O reconhecimento de voz não pôde ser iniciado.",
    "err_transcription": "A transcrição falhou. Tente novamente.",
    "err_model_missing": "Modelo de voz não encontrado. Selecione um modelo nas Configurações.",
    "tray_cpu_fallback": "Nenhuma GPU compatível encontrada. Rodando na CPU.\nA transcrição será mais lenta do que com aceleração por GPU.",
    "tray_cpu_configured": "Rodando na CPU conforme definido nas configurações.",
    "tray_cpu_detected": "Nenhuma GPU compatível detectada. Rodando na CPU.\nPara uma transcrição mais rápida, recomenda-se uma GPU compatível.",
    "tray_file_not_found": "Arquivo não encontrado.",
    "tray_no_supported_files": "Nenhum arquivo compatível para converter.",
    "tray_still_starting": "O VoxCast ainda está iniciando, tente de novo.",
    "tray_no_output_folder": "Pasta de destino não definida, escolha onde salvar.",
    "tray_context_menu_failed": "Não foi possível atualizar o menu de contexto.",
    "tray_need_api_key": "Insira e salve uma chave de API primeiro.",
    "tray_models_load_failed": "Não foi possível carregar os modelos.",
    "tray_show_hide": "Mostrar/Ocultar",

    # ── License (Python user messages) ──────────────────────────────────
    "lic_enter_key": "Digite sua chave de licença.",
    "lic_saved_failed": "Ativado, mas a licença não pôde ser salva neste PC.",
    "lic_success": "VoxCast ativado. Obrigado!",
    "lic_check_failed": "A ativação falhou. Verifique sua chave.",
    "lic_no_server": "Não foi possível acessar o servidor de ativação. Verifique sua conexão com a internet.",
    "lic_unexpected": "A ativação falhou de forma inesperada. Tente novamente.",

    # ── Updates (Python user messages) ──────────────────────────────────
    "upd_checking": "Verificando atualizações…",
    "upd_latest": "Você está na versão mais recente.",
    "upd_available": "A versão {version} está disponível.",
    "upd_dialog_title": "Atualização disponível",
    "upd_whats_new": "Novidades",
    "upd_required": "Obrigatória",
    "upd_no_notes": "Melhorias gerais e correções.",
    "upd_later": "Mais tarde",
    "upd_install_now": "Baixar e instalar",
    "upd_install_note": "A atualização substitui sua versão atual automaticamente, você não precisa fazer mais nada.",
    "upd_downloading": "Baixando a versão {version}…",
    "upd_failed": "A atualização falhou. Tente novamente.",
    "upd_starting_installer": "Iniciando o instalador…",
    "upd_installer_failed": "Não foi possível iniciar o instalador.",
    "upd_err_filename": "Nome de arquivo do instalador inesperado no manifesto de atualização.",
    "upd_err_https": "O download da atualização precisa usar HTTPS.",
    "upd_err_response": "O servidor de atualizações retornou uma resposta inválida.",
    "upd_err_no_url": "Nenhuma URL de download fornecida.",
    "upd_err_no_checksum": "Falta a soma de verificação no manifesto de atualização. Cancelado.",
    "upd_err_redirect": "O servidor de atualizações retornou um redirecionamento inesperado.",
    "upd_err_integrity": "O arquivo baixado falhou na verificação de integridade. Cancelado.",
    "upd_err_check": "Não foi possível verificar atualizações: {error}",
    "upd_err_download": "O download falhou: {error}",
    "upd_err_save": "Não foi possível salvar a atualização: {error}",
    "upd_err_host": "Download de atualização recusado: host não confiável '{host}'.",

    # ── LLM (user messages) ─────────────────────────────────────────────
    # ── Late additions (review sweep) ───────────────────────────────────
    "act_first": "Ative o VoxCast primeiro.",
    "llm_enhance_failed": "O aprimoramento por IA falhou: {error}",
    "llm_truncated": "A resposta da IA foi cortada, a transcrição original foi usada no lugar.",
    "llm_mode_needs_key": "Modo de IA selecionado, adicione uma chave de API nas Configurações para ativar o aprimoramento.",
    "tt_recording": "Gravando...",
    "tray_saved": "Salvo: {name}",
    "tray_converted": "{n} arquivos convertidos para Markdown.",
    "hk_press_key": "Pressione uma tecla...",
    "hk_acc_record": "Pressione as teclas do atalho",
    "no_folder": "Nenhuma pasta selecionada",
    "llm_load_models_ph": "Carregar modelos →",

    "llm_no_key": "Nenhuma chave de API fornecida.",
    "llm_no_key_configured": "Nenhuma chave de API configurada.",
    "llm_bad_key": "Chave de API inválida ou não autorizada.",
    "llm_rate_limit": "Limite de requisições atingido. Tente novamente em instantes.",
    "llm_provider_down": "O provedor de IA está temporariamente indisponível.",
    "llm_request_failed": "A solicitação falhou ({code}).",
    "llm_network": "Erro de rede: {error}",
    "llm_no_model": "Nenhum modelo de IA utilizável encontrado para esta chave de API.",
}
