From b5960fc952461f1aa9a9305acbf8dfef54866dba Mon Sep 17 00:00:00 2001 From: magisph Date: Thu, 30 Oct 2025 22:49:56 -0300 Subject: [PATCH 1/2] fix: Complete Portuguese (Brazil) translation with missing fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🎯 Goal Ensure complete and accurate localization for Portuguese (Brazil) (pt-BR), resolving translation gaps from the initial implementation. ✅ Changes Made * Updated `messages/pt-BR.json` to be fully synchronized with the `en.json` source file. * Translated all missing keys, including critical sections that were previously untranslated (e.g., `settings.audio`, `recording`, `editor`, `footer`, and `article.editor.toolbar`). * Ensured 100% key-for-key parity with the source language file to prevent UI fallbacks. 🔍 Context The initial Portuguese translation (PR #726) was incomplete. This caused the UI to fall back to other languages (like Chinese Traditional) or display raw translation keys for Brazilian users. This PR provides the correct and complete translations to ensure a fully native experience. 🧪 Ready for Testing All translation keys are properly mapped and ready for integration. Thank you for reviewing this contribution! 🚀 --- messages/pt-BR.json | 250 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 195 insertions(+), 55 deletions(-) diff --git a/messages/pt-BR.json b/messages/pt-BR.json index bcdad9bd..e0d49751 100644 --- a/messages/pt-BR.json +++ b/messages/pt-BR.json @@ -20,7 +20,7 @@ "language": "Idioma", "confirm": "Confirmar", "selectPrompt": "Selecionar Prompt", - "prompt": "Prompt", + "prompt": "Instrução", "success": "Sucesso", "error": "Falha", "defaultFileName": "Sem Título" @@ -73,6 +73,13 @@ "button": "Configurar", "dialogTitle": "Configurar Barra de Ferramentas do Chat", "dialogDesc": "Arraste as ferramentas para ajustar a ordem, use as chaves para mostrar ou ocultar" + }, + "recordToolbar": { + "title": "Barra de Ferramentas de Registro", + "desc": "Personalize a ordem de exibição e a visibilidade dos botões da barra de ferramentas de registro", + "button": "Configurar", + "dialogTitle": "Configurar Barra de Ferramentas de Registro", + "dialogDesc": "Arraste as ferramentas para ajustar a ordem, use as chaves para mostrar ou ocultar" } } }, @@ -155,7 +162,7 @@ "title": "Editor Markdown", "desc": "Aqui, você pode personalizar o editor Markdown, criando uma experiência de escrita adaptada às suas necessidades.", "typewriterMode": "Modo Máquina de Escrever", - "typewriterModeDesc": "No modo máquina de escrever, o editor simulará um efeito de máquina de escrever, ajudando você a mergulhar melhor na escrita.", + "typewriterModeDesc": "No modo máquina de escrever, o editor simula o efeito de uma máquina de escrever, permitindo que você se concentre melhor na escrita.", "outlineEnable": "Sumário habilitado por padrão", "outlineEnableDesc": "Habilitar esta opção tornará o sumário visível por padrão.", "outlinePosition": "Posição do Sumário", @@ -174,12 +181,12 @@ "enableLineNumberDesc": "Habilitar esta opção tornará o número da linha visível nos blocos de código." }, "uploadStore": { - "uploadConfirm": "Configuração de upload: por favor, garanta que o repositório de sincronização é privado, caso contrário os dados vazarão!", - "downloadConfirm": "Baixar configuração irá sobrescrever a configuração local e reiniciar para ter efeito!", + "uploadConfirm": "Configuração de Carregamento: Por favor, certifique-se de que o repositório de sincronização é privado, caso contrário, seus dados serão expostos!", + "downloadConfirm": "Baixar a configuração irá sobrescrever a configuração local e exigirá um reinício para ter efeito!", "uploadSuccess": "Upload bem-sucedido", "downloadSuccess": "Download bem-sucedido", - "upload": "Upload", - "download": "Download" + "upload": "Carregar", + "download": "Baixar" }, "about": { "title": "Sobre", @@ -216,7 +223,7 @@ }, "issues": { "title": "Feedback de Problemas", - "buttonName": "Feedback", + "buttonName": "Comentários", "desc": "Se você encontrar um bug no NoteGen, por favor, reporte aqui." }, "discussions": { @@ -260,18 +267,33 @@ } } }, - "readAloud": { - "title": "Ler em Voz Alta", - "desc": "Aqui, você pode configurar definições relacionadas à leitura em voz alta para fornecer funcionalidade de reprodução de voz para o conteúdo do chat.", - "noModel": "Não usar", - "options": { - "audioModel": { - "title": "Modelo de Áudio", + "audio": { + "title": "Configurações de Áudio", + "desc": "Aqui, você pode configurar as definições de áudio, incluindo as funções de conversão de texto em fala (TTS) e fala em texto (STT).", + "tts": { + "title": "Texto para Fala (TTS)", + "desc": "Configure a funcionalidade de leitura em voz alta para fornecer reprodução de voz para o conteúdo do chat.", + "model": { + "title": "Modelo TTS", "desc": "Selecione o modelo de IA para conversão de texto em fala, suportando vários tipos de voz e configurações de parâmetros." }, "speed": { "title": "Velocidade da Fala", - "desc": "Ajuste a velocidade de reprodução da voz, variando de 0.25x a 4x, sendo 1x a velocidade normal." + "desc": "Ajuste a velocidade de reprodução da voz, variando de 0.5x a 2x, sendo 1x a velocidade normal." + } + }, + "stt": { + "title": "Fala para Texto (STT)", + "desc": "Configure o reconhecimento de voz para converter fala em registros de texto.", + "mode": { + "title": "Modo de Reconhecimento", + "desc": "Escolha entre o reconhecimento embutido do navegador ou o reconhecimento por modelo de IA", + "builtin": "Embutido", + "model": "Modelo de IA" + }, + "model": { + "title": "Modelo STT", + "desc": "Selecione o modelo de IA para reconhecimento de fala, suportando conversão de voz em texto em tempo real." } } }, @@ -334,6 +356,15 @@ "selfHostedDesc": "Insira o endereço do seu servidor GitLab auto-hospedado (ex: https://gitlab.example.com)" }, "gitlabAccessTokenDesc": "Crie um token de acesso pessoal em {instanceDisplayName}, requer permissão 'api'", + "giteaInstanceType": "Tipo de Instância Gitea", + "giteaInstanceTypeDesc": "Selecione o tipo de instância Gitea para conectar", + "giteaInstanceTypePlaceholder": "Selecione o Tipo de Instância Gitea", + "giteaInstanceTypeOptions": { + "selfHosted": "Instância Auto-hospedada", + "selfHostedDesc": "Insira o endereço do seu servidor Gitea auto-hospedado (ex: https://gitea.example.com)" + }, + "giteaAccessTokenDesc": "Crie um token de acesso pessoal em {instanceDisplayName}, requer permissão total de repositório", + "autoSync": "Sincronização Automática", "autoSyncOptions": { "placeholder": "Selecione o tempo de sincronização automática", "disabled": "Desabilitado", @@ -530,12 +561,12 @@ } }, "template": { - "title": "Template", + "title": "Modelo", "desc": "Aqui você pode criar e gerenciar templates de organização personalizados para ajudar a IA a organizar o conteúdo dos registros de acordo com suas necessidades.", "customTemplate": "Template Personalizado", "addTemplate": "Adicionar Template Personalizado", "deleteConfirm": "Tem certeza de que deseja excluir este template?", - "status": "Status", + "status": "Estado", "name": "Nome", "content": "Conteúdo", "scope": "Escopo", @@ -614,10 +645,11 @@ "modelType": { "title": "Tipo de Modelo", "desc": "Selecione o tipo de modelo de IA com base em sua capacidade", - "chat": "Chat", + "chat": "Bate-papo", "image": "Imagem", "video": "Vídeo", - "audio": "Áudio", + "tts": "Texto para Fala (TTS)", + "stt": "Fala para Texto (STT)", "embedding": "Embedding", "rerank": "Reordenação" }, @@ -631,7 +663,7 @@ "modelProviderDesc": "Modelos personalizados suportam apenas modelos de IA com protocolo OpenAI.", "modelTitleDesc": "Nome personalizado, usado para identificar modelos de IA, por favor, não repita.", "modelBaseUrlDesc": "Você só precisa configurar o número da versão, por exemplo: https://api.openai.com/v1, o sufixo será adicionado automaticamente.", - "modelDesc": "Alguns modelos suportam a obtenção da lista de modelos, se não for suportado, por favor, configure manually.", + "modelDesc": "Alguns modelos suportam a obtenção da lista de modelos, se não for suportado, por favor, configure manualmente.", "temperatureDesc": "Controla a aleatoriedade da saída. Valores mais baixos tornam o conteúdo gerado mais determinístico.", "topPDesc": "Um método de amostragem nucleus, onde o modelo considera os resultados dos tokens com massa de probabilidade top_p. Então, 0.1 significa considerar apenas os 10% superiores da massa de probabilidade. Geralmente, sugerimos alterar este ou a temperatura, mas não ambos.", "customHeaders": "Cabeçalhos Personalizados", @@ -754,8 +786,9 @@ "image": "Imagem", "screenshot": "Captura de Tela", "text": "Texto", + "recording": "Gravação", "file": "Arquivo", - "link": "Link", + "link": "Vínculo", "upload": "Upload de Registro", "download": "Download de Registro" }, @@ -850,20 +883,12 @@ "error": "Falha" }, "empty": { - "features": [ - { - "chat": "Converse com o bot de IA" - }, - { - "linked": "Vinculado aos seus registros ou notas" - }, - { - "clipboard": "Reconhecer registros ou imagens da área de transferência" - }, - { - "organize": "Organize seus registros em notas" - } - ] + "features": { + "linked": "Vinculado aos seus registros ou notas", + "chat": "Converse com o bot de IA", + "organize": "Organize seus registros em notas", + "clipboard": "Reconhecer registros ou imagens da área de transferência" + } }, "content": { "organize": "Organize seus registros em um artigo:" @@ -877,7 +902,14 @@ "rootDirectory": "Diretório raiz", "deleteTag": "Excluir tag atual, registros e notas (pode ser restaurado da lixeira)", "warning": "Após a conversão, você será redirecionado para a página de escrita.", - "convert_button": "Converter" + "convert_button": "Converter", + "organizeAs": "Organize seus registros em um artigo:", + "templateContent": "Conteúdo do template", + "recordRange": "Intervalo de registros", + "filterThinkingContent": "Remover conteúdo de 'pensamento' dos registros", + "startOrganize": "Começar a organizar", + "manageTemplate": "Gerenciar template", + "cancel": "Cancelar" }, "mark": { "recorded": "Gravado", @@ -949,25 +981,23 @@ "selectedCount": "{count} itens selecionados", "moveSelectedTags": "Mover {count} itens selecionados", "deleteSelected": "Excluir {count} itens selecionados", - "deleteSelectedForever": "Excluir {count} itens selecionados permanentemente" + "deleteSelectedForever": "Excluir {count} itens selecionados permanentemente", + "text": "Gravar Texto", + "recording": "Gravação de Áudio", + "scan": "Digitalizar Imagem", + "image": "Carregar Imagem", + "link": "Gravar Link", + "file": "Carregar Arquivo" } }, "chat": { "empty": { - "features": [ - { - "chat": "Converse com o bot de IA" - }, - { - "linked": "Vinculado aos seus registros ou notas" - }, - { - "clipboard": "Reconhecer registros ou imagens da área de transferência" - }, - { - "organize": "Organize seus registros em notas" - } - ] + "features": { + "linked": "Vinculado aos seus registros ou notas", + "chat": "Converse com o bot de IA", + "organize": "Organize seus registros em notas", + "clipboard": "Reconhecer registros ou imagens da área de transferência" + } }, "newChat": "Novo Chat com Nova Tag", "removeChat": "Remover Chat com Tag Atual", @@ -1003,7 +1033,7 @@ }, "input": { "organize": "Organizar", - "chat": "Chat", + "chat": "Bate-papo", "placeholder": { "default": "Digite uma mensagem...", "noApiKey": "Nenhuma Chave de API configurada, não é possível usar o chat de IA...", @@ -1041,6 +1071,9 @@ "clearContext": { "tooltip": "Limpar contexto" }, + "mcp": { + "tooltip": "Servidor MCP" + }, "chatLanguage": { "tooltip": "Selecionar idioma do chat", "placeholder": "Pesquisar idioma" @@ -1139,12 +1172,12 @@ } }, "navigation": { - "chat": "Chat", + "chat": "Bate-papo", "record": "Registrar", "write": "Escrever", "search": "Pesquisar", "githubImageHosting": "Hospedagem de Imagens Github", - "login": "Login", + "login": "Entrar", "loading": "Carregando", "view": "Ver", "logout": "Sair", @@ -1367,6 +1400,113 @@ "tools": "ferramentas", "connecting": "Conectando", "disconnected": "Desconectado" + }, + "recording": { + "title": "Gravação de Voz", + "description": "Clique no botão do microfone para iniciar a gravação, o sistema reconhecerá automaticamente e converterá para texto", + "recording": "Gravando", + "paused": "Pausado", + "ready": "Pronto", + "processing": "Processando...", + "cancel": "Cancelar", + "error": "Erro", + "success": "Sucesso", + "noModelConfigured": "Modelo de reconhecimento de fala não configurado, configure nas configurações primeiro", + "startError": "Não é possível iniciar a gravação", + "noAudioData": "Nenhum dado de áudio gravado", + "transcriptionSuccess": "Reconhecimento de fala concluído", + "transcriptionEmpty": "Resultado do reconhecimento está vazio", + "transcriptionError": "Falha no reconhecimento de fala", + "noContentDetected": "Nenhum conteúdo detectado", + "doubleClickToSelectFile": "Clique duas vezes para selecionar o arquivo de áudio", + "mode": { + "builtin": "Reconhecimento do Navegador", + "builtinDesc": "Gratuito, reconhecimento em tempo real", + "model": "Reconhecimento por Modelo de IA", + "modelDesc": "Requer modelo STT, mais preciso" + } + }, + "editor": { + "copySuccess": "Cópia Bem-sucedida", + "copySuccessDescription": "Copiado para a área de transferência", + "floatbar": { + "readAloud": { + "start": "Ler em Voz Alta", + "stop": "Parar Leitura", + "loading": "Carregando..." + } + }, + "toolbar": { + "mark": { + "title": "Registros", + "tooltip": "Registros", + "description": "Converta registros em conteúdo para inserir no artigo.", + "noRecords": "Nenhum registro", + "ocrNoContent": "OCR não reconheceu nenhum conteúdo" + }, + "question": { + "tooltip": "Perguntas e Respostas", + "selectContent": "Por favor, selecione o conteúdo primeiro", + "promptTemplate": "Texto de referência: \n{content}\nCom base na pergunta: \n{question}\n, forneça diretamente o conteúdo da resposta." + }, + "continue": { + "tooltip": "Continuar", + "promptTemplate": "Com base no texto anterior: \n{content}\n continue escrevendo e retorne um conteúdo que não exceda 100 palavras.\nVocê pode referenciar o seguinte texto: \n{endContent}\n, mas evite duplicar seu conteúdo." + }, + "polish": { + "tooltip": "Polir", + "selectContent": "Por favor, selecione o conteúdo primeiro", + "promptTemplate": "Polir este texto: \n{content}\n, mantenha o idioma inalterado, corrija erros de digitação e gramaticais, retorne diretamente o resultado polido." + }, + "eraser": { + "tooltip": "Simplificar", + "selectContent": "Por favor, selecione o conteúdo primeiro", + "promptTemplate": "Simplificar este texto: \n{content}\n, este texto está muito verboso, reduza a contagem de palavras pela metade, mantenha o idioma inalterado, retorne diretamente o resultado otimizado." + }, + "expansion": { + "tooltip": "Expandir", + "selectContent": "Por favor, selecione o conteúdo primeiro", + "promptTemplate": "Expandir este texto: \n{content}\n, este texto está muito curto, aumente a contagem de palavras pela metade, mantenha o idioma inalterado, retorne diretamente o resultado expandido." + }, + "translation": { + "tooltip": "Traduzir", + "description": "Traduzir o texto selecionado", + "selectContent": "Por favor, selecione o conteúdo primeiro", + "promptTemplate": "Traduzir este texto: \n{content}\n, para {language}, retorne diretamente o resultado traduzido." + } + }, + "upload": { + "error": "Falha no upload", + "needToken": "O upload de imagens precisa configurar o accessToken", + "uploading": "Enviando imagem" + } + }, + "footer": { + "wordCount": "Palavras", + "sync": { + "sync": "Sincronizar", + "synced": "Sincronizado", + "syncing": "Sincronizando", + "syncFailed": "Falha na Sincronização", + "checkNetworkOrToken": "Por favor, verifique a conexão de rede ou o token", + "quickSync": "Sincronização Rápida" + }, + "history": { + "loadingHistory": "Carregando histórico", + "historyRecords": "Registros do Histórico", + "noHistory": "Nenhum Histórico", + "loading": "Carregando", + "recordsCount": "registros", + "filterQuickSync": "Filtrar Sincronizações Rápidas", + "committedAt": "enviado em", + "pull": "Pull", + "quickSync": "Sincronização Rápida" + }, + "vectorCalc": { + "tooltip": "Cálculo Vetorial: Cálculo automático 30s após a edição, ou clique para calcular agora", + "calculating": "Calculando", + "pending": "Pendente {progress}%", + "synced": "Sincronizado" + } } } - From 79e52e8d01792dbcdd18027a06481ad66693f623 Mon Sep 17 00:00:00 2001 From: MagisPH Date: Sat, 31 Jan 2026 12:04:37 -0300 Subject: [PATCH 2/2] fix(i18n): update pt-BR translations --- messages/pt-BR.json | 324 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 291 insertions(+), 33 deletions(-) diff --git a/messages/pt-BR.json b/messages/pt-BR.json index e63a93ac..8fd899e9 100644 --- a/messages/pt-BR.json +++ b/messages/pt-BR.json @@ -25,7 +25,22 @@ "success": "Sucesso", "error": "Falha", "defaultFileName": "Sem Título", - "restartToApply": ", por favor reinicie o aplicativo para que a configuração entre em vigor" + "restartToApply": ", por favor reinicie o aplicativo para que a configuração entre em vigor", + "close": "Fechar", + "open": "Abrir", + "add": "Adicionar", + "remove": "Remover", + "search": "Pesquisar", + "filter": "Filtrar", + "sort": "Ordenar", + "export": "Exportar", + "import": "Importar", + "refresh": "Atualizar", + "loading": "Carregando", + "warning": "Aviso", + "info": "Informação", + "unsaved": "Não salvo", + "saving": "Salvando" }, "settings": { "others": "Avançado", @@ -79,6 +94,100 @@ "title": "Habilitar Bandeja", "desc": "Escolher minimizar para bandeja ou fechar aplicativo ao fechar janela" } + }, + "customTheme": { + "title": "Cores do tema personalizado", + "desc": "Personalize as cores do tema do aplicativo, incluindo cor de fundo, cor do texto, cor da borda e outras.", + "button": "Editar cores", + "dialogTitle": "Cores do tema personalizado", + "dialogDesc": "Configure cores personalizadas do tema. As alterações são salvas e aplicadas em tempo real, substituindo os temas claro e escuro.", + "close": "Fechar", + "reset": "Redefinir tudo", + "tabs": { + "custom": "Personalizar", + "presets": "Predefinições", + "importExport": "Importar/Exportar" + }, + "export": { + "title": "Exportar configuração", + "button": "Exportar", + "placeholder": "Cole aqui a configuração exportada" + }, + "import": { + "title": "Importar configuração", + "button": "Importar", + "placeholder": "Cole aqui a configuração para importar", + "error": "Falha ao importar: formato inválido", + "success": "Importado com sucesso" + }, + "presets": { + "title": "Predefinições", + "desc": "Escolha uma paleta de cores pronta", + "apply": "Aplicar", + "reset": { + "name": "Restaurar padrão" + }, + "default": { + "name": "Branco padrão" + }, + "ocean": { + "name": "Azul oceano" + }, + "forest": { + "name": "Verde floresta" + }, + "sunset": { + "name": "Vermelho pôr do sol" + }, + "lavender": { + "name": "Roxo lavanda" + }, + "midnight": { + "name": "Meia-noite escuro" + }, + "deepSea": { + "name": "Azul mar profundo" + }, + "darkForest": { + "name": "Verde floresta escuro" + }, + "darkViolet": { + "name": "Violeta escuro" + }, + "coralWarm": { + "name": "Coral quente" + }, + "slateGray": { + "name": "Cinza ardósia" + }, + "darkGold": { + "name": "Dourado escuro" + }, + "beigeWarm": { + "name": "Bege quente" + }, + "beigeDark": { + "name": "Bege escuro" + } + }, + "colors": { + "background": "Cor de fundo", + "foreground": "Cor do texto", + "card": "Cor de fundo do cartão", + "cardForeground": "Cor do texto do cartão", + "primary": "Cor principal", + "primaryForeground": "Cor do texto (principal)", + "secondary": "Cor secundária", + "secondaryForeground": "Cor do texto (secundária)", + "third": "Cor terciária", + "thirdForeground": "Cor do texto (terciária)", + "muted": "Cor suave", + "mutedForeground": "Cor do texto (suave)", + "accent": "Cor de destaque", + "accentForeground": "Cor do texto (destaque)", + "border": "Cor da borda", + "shadow": "Cor da sombra" + } } }, "tools": { @@ -124,7 +233,8 @@ "similarityThreshold": "Limiar de Similaridade", "similarityThresholdDesc": "O limiar mínimo de similaridade entre documentos e consultas. Apenas documentos que excederem este limiar serão retornados. O valor varia de 0.0 a 1.0; quanto maior o limiar, mais rigoroso o requisito.", "resetToDefaults": "Redefinir para Padrões", - "deleteVector": "Limpar Base de Conhecimento" + "deleteVector": "Limpar Base de Conhecimento", + "topPDesc": "O parâmetro Top P controla a diversidade do texto gerado pelo modelo: quanto menor o valor, mais determinístico; quanto maior, mais variado." }, "mcp": { "title": "MCP", @@ -193,7 +303,9 @@ "jsonImportSuccess": "Importado com sucesso {count} servidor(es)", "jsonImportSkipped": "Ignorado {count} servidor(es) existente(s)", "jsonImportNoServers": "Nenhum servidor foi importado", - "import": "Importar" + "import": "Importar", + "enableTitle": "Ativar MCP", + "enableDesc": "Quando ativado, a IA pode chamar as ferramentas fornecidas pelos servidores MCP configurados." }, "editor": { "title": "Editor Markdown", @@ -312,7 +424,8 @@ "title": "Modelo de Reordenação", "desc": "Usado para reordenar e otimizar resultados de busca." } - } + }, + "mainModel": "Modelo principal" }, "audio": { "title": "Configurações de Áudio", @@ -438,7 +551,8 @@ "downloadSuccess": "Configurações baixadas com sucesso", "downloadFailed": "Falha ao baixar configurações", "autoSync": "As configurações serão sincronizadas automaticamente durante o upload/download (excluindo configurações específicas do dispositivo como o caminho do workspace)" - } + }, + "jsdelivrSettingDesc": "Use jsDelivr para acelerar o acesso às imagens." }, "imageHosting": { "title": "Hospedagem de Imagens", @@ -536,6 +650,10 @@ "vlm": { "title": "Modelo de Linguagem Visual", "desc": "Use o modelo de linguagem visual para reconhecer o conteúdo da imagem." + }, + "enable": { + "title": "Ativar reconhecimento de imagens", + "desc": "Quando ativado, ao registrar uma captura de tela ou inserir uma imagem, o reconhecimento será feito automaticamente. Quando desativado, a etapa de reconhecimento de imagem será ignorada." } }, "backupSync": { @@ -698,7 +816,8 @@ "tts": "Texto para Fala (TTS)", "stt": "Fala para Texto (STT)", "embedding": "Embedding", - "rerank": "Reordenação" + "rerank": "Reordenação", + "audio": "Áudio" }, "modelList": { "error": { @@ -750,7 +869,17 @@ "desc": "Usado para gerar automaticamente mensagens de commit Git, gerando inteligentemente mensagens de commit descritivas com base nas alterações do conteúdo do arquivo." }, "poweredBy": "Fornecido por SiliconFlow" - } + }, + "connectionFailed": "Falha na conexão", + "enableStream": "Resposta em streaming", + "enableStreamDesc": "Ativar resposta em streaming permite mostrar o conteúdo gerado em tempo real, mas alguns modelos podem não oferecer suporte a este recurso.", + "selectConfig": "Selecione uma configuração", + "models": "Lista de modelos", + "modelsDesc": "Gerencie aqui todos os modelos da configuração atual. Cada modelo pode ter tipos e parâmetros diferentes.", + "addModel": "Adicionar modelo", + "newModel": "Novo modelo", + "checkConnection": "Testar conexão", + "model": "Modelo" }, "ocr": { "title": "OCR", @@ -813,6 +942,79 @@ "desc": "Abrir rapidamente a janela principal e alternar para a gravação de texto." } } + }, + "skills": { + "title": "Skills", + "desc": "Skills são pacotes reutilizáveis de capacidades de IA, permitindo que o assistente aplique automaticamente comportamentos específicos conforme a tarefa.", + "enable": "Ativar Skills", + "enableDesc": "Quando ativado, a IA pode usar as Skills configuradas.", + "autoMatch": "Combinar Skills automaticamente", + "autoMatchDesc": "Seleciona automaticamente Skills adequadas com base no que você digitar.", + "project": "Skills do workspace", + "global": "Skills globais", + "globalPath": "Local de armazenamento das Skills globais", + "openInFileManager": "Abrir no gerenciador de arquivos", + "createSkill": "Criar Skill", + "editSkill": "Editar Skill", + "deleteSkill": "Excluir Skill", + "exportSkill": "Exportar Skill", + "importSkill": "Importar Skill", + "selectSkillZip": "Selecionar arquivo .zip de Skill", + "importHelp": "Suporta importar Skill em formato .zip. O arquivo .zip precisa conter um arquivo SKILL.md.", + "importing": "Importando...", + "imported": "Importado", + "importSuccess": "Importado com sucesso", + "importError": "Falha ao importar", + "noSkills": "Ainda não há Skills", + "noSkillsDesc": "Crie ou importe Skills para começar a usar.", + "noSkillsGlobal": "Ainda não há Skills globais", + "noSkillsGlobalDesc": "Crie ou importe Skills para usar em todos os projetos.", + "emptyWorkspace": "Não há Skills neste workspace", + "emptyWorkspaceDesc": "Crie um arquivo SKILL.md na pasta skills para adicionar uma Skill.", + "installedGlobalSkills": "Skills globais instaladas", + "basicSettings": "Configurações básicas", + "metadata": "Metadados", + "skillName": "Nome da Skill", + "skillDescription": "Descrição", + "skillVersion": "Versão", + "skillAuthor": "Autor", + "nameRequired": "Informe o nome da Skill", + "descriptionRequired": "Informe a descrição", + "namePlaceholder": "note-organizer", + "versionPlaceholder": "1.0.0", + "descriptionPlaceholder": "Organiza e otimiza automaticamente a estrutura das notas...", + "authorPlaceholder": "Seu nome", + "descriptionHelp": "Usado para a IA combinar; descreva a função desta Skill e quando ela deve ser aplicada.", + "allowedTools": "Ferramentas permitidas", + "allowedToolsHelp": "Essas ferramentas podem ser usadas sem confirmação do usuário.", + "userInvocable": "Mostrar no menu de barra (/)", + "userInvocableHelp": "O usuário pode acionar manualmente via /nome-da-skill", + "instructions": "Conteúdo das instruções", + "instructionsHelp": "Instruções detalhadas para a IA (suporta Markdown).", + "instructionsPlaceholder": "Digite instruções detalhadas para a IA...", + "content": "Conteúdo das instruções", + "deleteSkillTitle": "Excluir Skill", + "deleteSkillDesc": "Tem certeza de que deseja excluir esta Skill? Esta ação não pode ser desfeita.", + "skillDeleted": "Skill excluída com sucesso" + }, + "readAloud": { + "title": "Leitura em voz alta", + "desc": "Aqui você pode configurar opções de leitura em voz alta para reproduzir o conteúdo do chat em áudio.", + "noModel": "Não usar modelo", + "alert": { + "title": "Você está usando a leitura do sistema", + "description": "Nenhum modelo de áudio foi configurado. Usando a leitura do próprio sistema." + }, + "options": { + "audioModel": { + "title": "Modelo de áudio", + "desc": "Escolha o modelo de IA para texto-para-fala (TTS). Suporta diferentes vozes e parâmetros." + }, + "speed": { + "title": "Velocidade", + "desc": "Ajuste a velocidade da voz (de 0,25× a 4×). O padrão é 1×." + } + } } }, "record": { @@ -831,7 +1033,8 @@ "recording": "Gravando...", "recorded": "Gravado", "record": "Gravar", - "detected": "Detectado" + "detected": "Detectado", + "save": "Salvar" }, "mark": { "empty": "Nenhum registro ainda", @@ -955,11 +1158,15 @@ }, "placeholder": { "default": "Faça perguntas ou organize suas notas em um artigo...", - "noApiKey": "Chave de API não configurada, recurso de chat com IA indisponível..." + "noApiKey": "Chave de API não configurada, recurso de chat com IA indisponível...", + "on": "Sugestão da IA: ligado", + "off": "Sugestão da IA: desligado" }, "header": { "configApiKey": "Configurar CHAVE DE API", - "clearChat": "Limpar Chat" + "clearChat": "Limpar Chat", + "configPrompt": "Configurar Prompt", + "selectPrompt": "Selecionar Prompt" }, "clipboard": { "image": { @@ -997,7 +1204,9 @@ "currentMode": "Modo de Conversa", "noModel": "Nenhum modelo definido", "noPrompt": "Nenhum prompt definido", - "configureModel": "Configurar Modelo" + "configureModel": "Configurar Modelo", + "modeHint": "Toque no botão à esquerda do campo de entrada", + "modeHintSuffix": "para alternar o modo de conversa" }, "content": { "organize": "Organize seus registros em um artigo:" @@ -1101,10 +1310,24 @@ "image": "Carregar Imagem", "link": "Gravar Link", "file": "Carregar Arquivo", - "todo": "Registro Todo" + "todo": "Registro Todo", + "closeTrash": "Fechar lixeira" }, "list": { "title": "Registros" + }, + "note": { + "organizeAs": "Organizar como", + "template": "Modelo", + "setting": "Configurações", + "confirm": "Confirmar", + "cancel": "Cancelar", + "removeThinking": "Remover processo de raciocínio", + "stop": "Parar" + }, + "imageGallery": { + "expand": "Expandir", + "collapse": "Recolher" } }, "chat": { @@ -1116,7 +1339,23 @@ "noModel": "Nenhum modelo definido", "noPrompt": "Nenhum prompt definido", "modeHint": "Clique no botão", - "modeHintSuffix": "à esquerda da caixa de entrada para alternar o modo de conversa" + "modeHintSuffix": "à esquerda da caixa de entrada para alternar o modo de conversa", + "currentMode": "Modo de conversa", + "configureModel": "Configurar modelo", + "features": [ + { + "chat": "Converse com o assistente de IA" + }, + { + "linked": "Vinculado aos seus registros ou notas" + }, + { + "clipboard": "Reconhece texto e imagens da área de transferência" + }, + { + "organize": "Organiza seus registros em notas" + } + ] }, "newChat": "Novo Chat com Nova Tag", "removeChat": "Remover Chat com Tag Atual", @@ -1127,11 +1366,6 @@ "content": { "organize": "Organize seus registros em um artigo:" }, - "quote": { - "lineSingle": "Citado de {fileName} linha {line}", - "lineRange": "Citado de {fileName} linhas {startLine}-{endLine}", - "noLine": "Citado de {fileName}" - }, "note": { "organize": "Organizar", "writing": "Escrever", @@ -1149,7 +1383,8 @@ "filterThinkingContent": "Remover conteúdo de 'pensamento' dos registros", "startOrganize": "Começar a organizar", "manageTemplate": "Gerenciar template", - "cancel": "Cancelar" + "cancel": "Cancelar", + "stop": "Parar" }, "mark": { "recorded": "Gravado", @@ -1233,7 +1468,9 @@ "tool": "Ferramenta", "parameters": "Parâmetros", "cancel": "Cancelar", - "confirm": "Confirmar" + "confirm": "Confirmar", + "confirmed": "Confirmado", + "cancelled": "Cancelado" } }, "imageSelector": { @@ -1252,13 +1489,15 @@ "searchPlaceholder": "Pesquisar arquivos...", "noFiles": "Nenhum arquivo encontrado", "loading": "Carregando..." - } + }, + "stopped": "A conversa foi encerrada" }, "header": { "configApiKey": "Configurar CHAVE DE API", "clearChat": "Limpar Chat", "selectPrompt": "Selecionar Prompt", - "noModel": "Modelo de IA não selecionado" + "noModel": "Modelo de IA não selecionado", + "configPrompt": "Configurar Prompt" }, "clipboard": { "image": { @@ -1317,6 +1556,10 @@ "article": "Artigo", "matches": "{count} correspondências", "scanType": "digitalização" + }, + "mode": { + "fuzzy": "Aproximada", + "exact": "Exata" } }, "image": { @@ -1346,7 +1589,9 @@ "showLeftSidebar": "Mostrar Barra Lateral Esquerda", "hideRightSidebar": "Ocultar Barra Lateral Direita", "showRightSidebar": "Mostrar Barra Lateral Direita", - "searchPlaceholder": "Pesquisar notas ou registros..." + "searchPlaceholder": "Pesquisar notas ou registros...", + "showCenterPanel": "Mostrar editor", + "hideCenterPanel": "Ocultar editor" }, "marks": { "types": { @@ -1559,8 +1804,10 @@ "description": "Traduzir o texto selecionado", "selectContent": "Por favor, selecione o conteúdo primeiro", "promptTemplate": "Traduzir este texto: \n{content}\n, para {language}, retorne diretamente o resultado traduzido." - } - } + }, + "notSupported": "Esta ação não é suportada" + }, + "deleteConfirm": "Confirmar exclusão deste arquivo?" }, "editor": { "copySuccess": "Cópia Bem-sucedida", @@ -1630,6 +1877,15 @@ "error": "Falha no upload", "needToken": "O upload de imagens precisa configurar o accessToken", "uploading": "Enviando imagem" + }, + "saveDialog": { + "title": "Salvar arquivo", + "emptyContent": "Conteúdo vazio", + "emptyContentDesc": "Digite algum conteúdo antes de salvar.", + "success": "Salvo com sucesso", + "successDesc": "O arquivo foi salvo.", + "error": "Falha ao salvar", + "errorDesc": "Não foi possível salvar o arquivo. Tente novamente." } }, "footer": { @@ -1650,7 +1906,9 @@ "syncing": "Sincronizando", "syncFailed": "Falha na Sincronização", "checkNetworkOrToken": "Por favor, verifique a conexão de rede ou o token", - "quickSync": "Sincronização Rápida" + "quickSync": "Sincronização Rápida", + "push": "Enviar", + "pushed": "Enviado" }, "history": { "loadingHistory": "Carregando histórico", @@ -1807,13 +2065,13 @@ "footer": { "wordCount": "Palavras", "sync": { - "push": "Push", - "pushed": "Enviado", - "syncing": "Enviando", - "syncFailed": "Falha no Push", - "checkNetworkOrToken": "Por favor, verifique a conexão de rede ou o token", - "quickSync": "Sincronização Rápida" - }, + "push": "Push", + "pushed": "Enviado", + "syncing": "Enviando", + "syncFailed": "Falha no Push", + "checkNetworkOrToken": "Por favor, verifique a conexão de rede ou o token", + "quickSync": "Sincronização Rápida" + }, "history": { "loadingHistory": "Carregando histórico", "historyRecords": "Registros do Histórico",