export const ptBR = { common: { search: "Buscar...", create: "Novo", new: "Novo", cancel: "Cancelar", delete: "Excluir", edit: "Editar", theme: "Tema", signOut: "Sair", noMatches: "Nenhum resultado encontrado", tryDifferentSearch: "Tente usar um termo de busca diferente.", light: "Claro", dark: "Escuro", system: "Sistema", loading: "Carregando...", note: "Nota", insight: "Insight", newSource: "Nova Fonte", newNotebook: "Novo Caderno", newPodcast: "Novo Podcast", language: "Idioma", english: "English", chinese: "简体中文", japanese: "日本語", russian: "Русский", source: "Fonte", notebook: "Caderno", podcast: "Podcast", quickActions: "Ações rápidas", quickActionsDesc: "Navegação, busca, perguntar, tema", appName: "Open Notebook", add: "Adicionar", remove: "Remover", confirm: "Confirmar", warning: "Aviso", error: "Erro", success: "Sucesso", model: "Modelo", back: "Voltar", next: "Próximo", done: "Concluído", processing: "Processando...", creating: "Criando...", linked: "Vinculado", adding: "Adicionando...", addSelected: "Adicionar Selecionados", customModel: "Modelo Personalizado", failed: "falhou", current: "Atual", save: "Salvar", writeNote: "Escrever Nota", batchMode: "Modo em Lote", optional: "Opcional", type: "Tipo", title: "Título", created: "Criado {time}", updated: "Atualizado {time}", actions: "Ações", noResults: "Sem resultados", references: "Referências", refreshPage: "Por favor, tente atualizar a página", refresh: "Atualizar", aiGenerated: "Gerado por IA", human: "Humano", unknown: "Desconhecido", notes: "Notas", chat: "Chat", deleteForever: "Excluir Permanentemente", connectionError: "Erro de Conexão", unableToConnect: "Não foi possível conectar ao servidor da API", retryConnection: "Tentar Novamente", diagnosticInfo: "Informações de Diagnóstico", version: "Versão", built: "Compilado", apiUrl: "URL da API", frontendUrl: "URL do Frontend", checkConsoleLogs: "Verifique o console do navegador para logs detalhados (procure por mensagens 🔧 [Config])", yes: "Sim", no: "Não", saving: "Salvando...", description: "Descrição", saveToNote: "Salvar em nota", copyToClipboard: "Copiar para área de transferência", close: "Fechar", insights: "Insights", progress: "Progresso", deleting: "Excluindo...", created_label: "Criado", updated_label: "Atualizado", download: "Baixar", saveChanges: "Salvar Alterações", name: "Nome", default: "Padrão", nameRequired: "Nome é obrigatório", modelConfiguration: "Configuração do Modelo", resetToDefault: "Restaurar Padrão", reasoning: "Raciocínio", searchTerms: "Termos de Busca", strategy: "Estratégia", individualAnswers: "Respostas Individuais ({count})", finalAnswer: "Resposta Final", notebookLabel: "Caderno: {name}", itemNotFound: "Este {type} não foi encontrado", accessibility: { transformationViews: "Visualizações de transformação", searchKB: "Perguntar ou buscar na base de conhecimento", enterQuestion: "Digite sua pergunta para a base de conhecimento", enterSearch: "Digite sua busca", searchKBBtn: "Buscar na base de conhecimento", podcastViews: "Visualizações de podcast", ytVideo: "Vídeo do YouTube", askResponse: "Resposta da Consulta", searchNotebooks: "Buscar cadernos", }, url: "URL", errorDetails: "Detalhes do Erro", editTransformation: "Editar Transformação", retry: "Tentar Novamente", traditionalChinese: "繁體中文", portuguese: "Português", completed: "concluído", saveSuccess: "Salvo com sucesso", contextModes: { off: "Não incluído no chat", insights: "Apenas insights", full: "Conteúdo completo", clickToCycle: "Clique para alternar", }, clickToEdit: "Clique para editar", }, apiErrors: { notebookNotFound: "Caderno não encontrado", sourceNotFound: "Fonte não encontrada", transformationNotFound: "Transformação não encontrada", fileUploadFailed: "Falha no upload do arquivo", urlRequired: "URL é obrigatória para tipo link", contentRequired: "Conteúdo é obrigatório para tipo texto", invalidSourceType: "Tipo de fonte inválido", processingFailed: "Processamento falhou", failedToQueue: "Falha ao enfileirar processamento", invalidSortBy: "Campo de ordenação deve ser 'created' ou 'updated'", invalidSortOrder: "Ordem deve ser 'asc' ou 'desc'", accessDenied: "Acesso ao arquivo negado", fileNotFoundOnServer: "Arquivo não encontrado no servidor", searchFailed: "Busca falhou", askFailed: "Consulta falhou", pleaseEnterQuestion: "Por favor, digite uma pergunta", pleaseConfigureModels: "Por favor, configure todos os modelos necessários", failedToCreateSession: "Falha ao criar sessão", failedToUpdateSession: "Falha ao atualizar sessão", failedToDeleteSession: "Falha ao excluir sessão", failedToSendMessage: "Falha ao enviar mensagem", unauthorized: "Acesso não autorizado, verifique sua senha", invalidPassword: "Senha inválida", embeddingModelRequired: "Este recurso requer um modelo de embedding. Configure um na seção Modelos.", strategyModelNotFound: "Modelo de estratégia não encontrado", answerModelNotFound: "Modelo de resposta não encontrado", finalAnswerModelNotFound: "Modelo de resposta final não encontrado", noAnswerGenerated: "Nenhuma resposta pôde ser gerada", genericError: "Ocorreu um erro inesperado", }, connectionErrors: { apiTitle: "Não foi possível conectar ao servidor da API", apiDesc: "O servidor da API do Open Notebook não pôde ser alcançado", dbTitle: "Falha na conexão com o banco de dados", dbDesc: "O servidor da API está rodando, mas o banco de dados não está acessível", troubleshooting: "Isso geralmente significa:", apiUnreachable1: "O servidor da API não está rodando", apiUnreachable2: "O servidor da API está rodando em um endereço diferente", apiUnreachable3: "Problemas de conectividade de rede", dbFailed1: "SurrealDB não está rodando", dbFailed2: "Configurações de conexão do banco de dados estão incorretas", dbFailed3: "Problemas de rede entre API e banco de dados", quickFixes: "Soluções rápidas:", setApiUrl: "Defina a variável de ambiente API_URL:", checkSurreal: "Verifique se o SurrealDB está rodando:", seeDocumentation: "Para instruções detalhadas de configuração, veja:", docLink: "Documentação do Open Notebook", showTechnical: "Mostrar Detalhes Técnicos", attemptedUrl: "URL Tentada", message: "Mensagem", technicalDetails: "Detalhes Técnicos", stackTrace: "Stack Trace", retryLabel: "Tentar Conexão Novamente", retryHint: "Pressione R ou clique no botão para tentar novamente", dockerLabel: "Para Docker", localDevLabel: "Para desenvolvimento local", }, auth: { loginTitle: "Open Notebook", loginDesc: "Digite sua senha para acessar o aplicativo", passwordPlaceholder: "Senha", signingIn: "Entrando...", signIn: "Entrar", connectErrorHint: "Não foi possível conectar ao servidor. Verifique se a API está rodando.", }, navigation: { collect: "Coletar", process: "Processar", create: "Criar", manage: "Gerenciar", sources: "Fontes", notebooks: "Cadernos", askAndSearch: "Perguntar e Buscar", podcasts: "Podcasts", models: "Modelos", transformations: "Transformações", transformation: "Transformação", settings: "Configurações", advanced: "Avançado", nav: "Navegação", language: "Alternar idioma", theme: "Tema", ask: "Perguntar", }, notebooks: { title: "Cadernos", newNotebook: "Novo Caderno", searchPlaceholder: "Buscar cadernos...", archived: "Arquivado", archive: "Arquivar", unarchive: "Desarquivar", deleteNotebook: "Excluir Caderno", deleteNotebookDesc: "Tem certeza que deseja excluir \"{name}\"? Esta ação não pode ser desfeita.", deleteNotebookLoading: "Carregando prévia da exclusão...", deleteNotebookNotes: "{count} nota(s) serão permanentemente excluídas.", deleteNotebookNoNotes: "Nenhuma nota para excluir.", deleteNotebookExclusiveSources: "{count} fonte(s) existem apenas neste caderno.", deleteNotebookSharedSources: "{count} fonte(s) são compartilhadas com outros cadernos e serão desvinculadas.", deleteNotebookNoSources: "Nenhuma fonte neste caderno.", deleteExclusiveSourcesLabel: "Excluir fontes exclusivas", keepExclusiveSourcesLabel: "Desvincular e manter", activeNotebooks: "Cadernos Ativos", archivedNotebooks: "Cadernos Arquivados", notFound: "Caderno não encontrado", notFoundDesc: "O caderno solicitado não existe.", updated: "Atualizado", namePlaceholder: "Nome do caderno", addDescription: "Adicionar descrição...", noNotesYet: "Nenhuma nota ainda", deleteNote: "Excluir Nota", deleteNoteConfirm: "Tem certeza que deseja excluir esta nota? Esta ação não pode ser desfeita.", noteCreatedSuccess: "Nota criada com sucesso", failedToCreateNote: "Falha ao criar nota", noteUpdatedSuccess: "Nota atualizada com sucesso", failedToUpdateNote: "Falha ao atualizar nota", noteDeletedSuccess: "Nota excluída com sucesso", failedToDeleteNote: "Falha ao excluir nota", createNew: "Criar Novo Caderno", createNewDesc: "Digite um nome e uma descrição opcional para começar.", descPlaceholder: "Adicione mais informações sobre este caderno aqui...", createSuccess: "Caderno criado com sucesso", updateSuccess: "Caderno atualizado com sucesso", deleteSuccess: "Caderno excluído com sucesso", }, sources: { title: "Fontes", add: "Adicionar Fonte", addNew: "Adicionar Nova Fonte", addExisting: "Adicionar Fonte Existente", delete: "Excluir Fonte", statusPreparing: "Preparando", statusQueued: "Na Fila", statusProcessing: "Processando", statusCompleted: "Concluído", statusFailed: "Falhou", statusPreparingDesc: "Preparando para processar", statusQueuedDesc: "Aguardando processamento", statusProcessingDesc: "Sendo processado", statusCompletedDesc: "Processado com sucesso", statusFailedDesc: "Processamento falhou", failedToLoad: "Falha ao carregar fontes", allSourcesDesc: "Veja todas as suas fontes aqui. Você pode adicionar novas fontes ou gerenciar as existentes.", allSources: "Todas as Fontes", insights: "Insights", yes: "Sim", no: "Não", loadingMore: "Carregando mais...", noSourcesYet: "Nenhuma fonte ainda", allSourcesDescShort: "Veja todas as suas fontes aqui.", cannotSaveNoteNoNotebook: "Não é possível salvar nota: ID do caderno não disponível", createFirstSource: "Adicione sua primeira fonte para começar a construir sua base de conhecimento.", deleteSourceConfirm: "Tem certeza que deseja excluir esta fonte?", deleteConfirm: "Tem certeza que deseja excluir isto?", deleteConfirmWithTitle: "Tem certeza que deseja excluir \"{title}\"?", deleteSuccess: "Fonte excluída com sucesso. Nota: Para excluir o arquivo do armazenamento, você deve habilitar a opção \"excluir arquivo\" na página de configurações.", failedToDelete: "Falha ao excluir fonte", sourceQueued: "Fonte Enfileirada", sourceQueuedDesc: "Fonte enviada para processamento em segundo plano. Você pode monitorar o progresso na lista de fontes.", sourceAddedSuccess: "Fonte adicionada com sucesso", failedToAddSource: "Falha ao adicionar fonte", sourceUpdatedSuccess: "Fonte atualizada com sucesso", failedToUpdateSource: "Falha ao atualizar fonte", sourceDeletedSuccess: "Fonte excluída com sucesso", failedToDeleteSource: "Falha ao excluir fonte", fileUploadedSuccess: "Arquivo enviado com sucesso", failedToUploadFile: "Falha ao enviar arquivo", sourceRequeued: "Fonte Reenfileirada", sourceRequeuedDesc: "A fonte foi reenfileirada para processamento.", failedToRetry: "Falha ao Tentar Novamente", sourcesAddedToNotebook: "{count} fonte(s) adicionada(s) ao caderno", failedToAddSourcesToNotebook: "Falha ao adicionar fontes ao caderno", partialAddSuccess: "{success} fonte(s) adicionada(s), {failed} falhou(aram)", sourceRemovedFromNotebook: "Fonte removida do caderno com sucesso", failedToRemoveSourceFromNotebook: "Falha ao remover fonte do caderno", removeConfirm: "Tem certeza que deseja remover isto do caderno?", checking: "Verificando...", untitledSource: "Fonte Sem Título", maxItems: "máx {count}", insightsCount: "{count} insights", details: "Detalhes", detailsTitle: "Detalhes da Fonte", content: "Conteúdo", metadata: "Metadados", type: { link: "Link", file: "Arquivo", text: "Texto", }, id: "ID da Fonte", topics: "Tópicos", embedded: "Incorporado", notEmbedded: "Não Incorporado", embedContent: "Incorporar Conteúdo", embedding: "Incorporando...", alreadyEmbedded: "Já Incorporado", downloadFile: "Baixar Arquivo", fileUnavailable: "Arquivo indisponível", preparing: "Preparando...", generateNewInsight: "Gerar Novo Insight", selectTransformation: "Selecione uma transformação...", noInsightsYet: "Nenhum insight ainda", createFirstInsight: "Crie seu primeiro insight usando uma transformação acima", viewInsight: "Ver Insight", deleteInsight: "Excluir Insight", deleteInsightConfirm: "Tem certeza que deseja excluir este insight? Esta ação não pode ser desfeita.", insightGenerationStarted: "Geração de insight iniciada. Aparecerá em breve.", editNote: "Editar nota", createNote: "Criar nota", addTitle: "Adicionar título...", untitledNote: "Nota Sem Título", writeNotePlaceholder: "Escreva o conteúdo da sua nota aqui...", saveNote: "Salvar Nota", createNoteBtn: "Criar Nota", createFirstNote: "Crie sua primeira nota para capturar insights e observações.", urlLabel: "URL(s) *", fileLabel: "Arquivo(s) *", textContentLabel: "Conteúdo de Texto *", enterUrlsPlaceholder: "Digite as URLs, uma por linha\nhttps://exemplo.com/artigo1\nhttps://exemplo.com/artigo2", batchUrlHint: "Cole múltiplas URLs (uma por linha) para importação em lote", invalidUrlsDetected: "URLs inválidas detectadas:", lineLabel: "Linha {line}", fixInvalidUrls: "Por favor, corrija ou remova as URLs inválidas para continuar", selectMultipleFilesHint: "Selecione múltiplos arquivos para importação em lote. Suportados: Documentos (PDF, DOC, DOCX, PPT, XLS, EPUB, TXT, MD), Mídia (MP4, MP3, WAV, M4A), Imagens (JPG, PNG), Arquivos (ZIP)", selectedFiles: "Arquivos selecionados:", textPlaceholder: "Cole ou digite seu conteúdo aqui...", htmlDetected: "Conteúdo HTML detectado. Será convertido para Markdown após o processamento.", titlePlaceholder: "Dê um título descritivo para sua fonte", batchTitlesAuto: "Os títulos serão gerados automaticamente para cada fonte.", batchCommonSettings: "Os mesmos cadernos e transformações serão aplicados a todos os itens.", urlsCount: "{count} URL(s)", filesCount: "{count} arquivo(s)", addSource: "Adicionar Fonte", notEmbeddedAlert: "Conteúdo Não Incorporado", notEmbeddedDesc: "Este conteúdo não foi incorporado para busca vetorial. A incorporação habilita recursos avançados de busca e melhor descoberta de conteúdo.", openOnYoutube: "Abrir no YouTube", urlCopied: "URL copiada para área de transferência", viewSource: "Ver Fonte", noInsightSelected: "Nenhum insight selecionado", sourceInsight: "Insight da Fonte", manageNotebooks: "Gerenciar Cadernos", manageNotebooksDesc: "Gerencie quais cadernos contêm esta fonte", noNotebooksAvailable: "Nenhum caderno disponível", loadFailed: "Falha ao carregar detalhes da fonte", removeFromNotebook: "Remover do Caderno", retryProcessing: "Tentar Processamento Novamente", deleteSource: "Excluir Fonte", retry: "Tentar Novamente", addExistingTitle: "Adicionar Fontes Existentes", addExistingDesc: "Selecione fontes existentes de todos os seus cadernos para adicionar ao atual.", searchPlaceholder: "Buscar fontes por nome ou URL...", noNotebooksFound: "Nenhum caderno encontrado.", showingFirst100: "Mostrando as primeiras 100 fontes. Use a busca para encontrar específicas.", selectedCount: "{count} fontes selecionadas", added: "Adicionado em {date}", addUrl: "Adicionar URL", uploadFile: "Enviar Arquivo", enterText: "Inserir Texto", processDescription: "O conteúdo será processado e analisado por IA.", processingFiles: "Processando seus arquivos...", titleRequired: "Um título é obrigatório para conteúdo de texto", titleGenerated: "Se deixado vazio, um título será gerado a partir do conteúdo", batchCount: "{count} {type} serão processados", enableEmbedding: "Habilitar incorporação para busca", embeddingDesc: "Permite que esta fonte seja encontrada em buscas vetoriais e consultas de IA", embeddingAlways: "Incorporação habilitada automaticamente", embeddingAlwaysDesc: "Suas configurações estão definidas para sempre incorporar conteúdo para busca vetorial.", embeddingNever: "Incorporação desabilitada", embeddingNeverDesc: "Suas configurações estão definidas para pular incorporação. Busca vetorial não estará disponível para esta fonte.", changeInSettings: "Você pode alterar isso em Configurações", notFound: "Fonte não encontrada", noContent: "Nenhum conteúdo disponível", insightsDesc: "Insights gerados a partir da análise do modelo", uploadedFile: "Arquivo enviado", fileUnavailableDesc: "Este arquivo está indisponível no momento por razões do sistema de armazenamento.", batchSuccess: "{count} fonte(s) criada(s) com sucesso", batchFailed: "Falha ao criar todas as {count} fontes", batchPartial: "{success} sucesso, {failed} falhou(aram)", submittingSource: "Enviando fonte para processamento...", processingBatchSources: "Processando {count} fontes. Isso pode levar alguns momentos.", processingSource: "Sua fonte está sendo processada. Isso pode levar alguns momentos.", maxFilesAllowed: "Máximo de {count} arquivos permitidos por lote", }, chat: { sessions: "Sessões", sessionTitlePlaceholder: "Digite um título aqui...", noSessions: "Nenhuma sessão de chat ainda", deleteSession: "Excluir Sessão", deleteSessionDesc: "Tem certeza que deseja excluir esta sessão de chat? Esta ação não pode ser desfeita.", sendPlaceholder: "Pergunte qualquer coisa sobre suas fontes...", sessionsTitle: "Sessões de Chat", chatWith: "Conversar com {name}", startConversation: "Inicie uma conversa sobre este {type}", askQuestions: "Faça perguntas para entender melhor o conteúdo", pressToSend: "Pressione {key} para enviar", model: "Modelo", createToStart: "Crie uma sessão para começar.", chatWithNotebook: "Conversar com Caderno", unableToLoadChat: "Não foi possível carregar o chat", noDescription: "Sem descrição", startByCreating: "Comece criando seu primeiro caderno para organizar sua pesquisa.", messagesCount: "{count} mensagens", sessionCreated: "Sessão de chat criada", sessionUpdated: "Sessão atualizada", sessionDeleted: "Sessão excluída", }, searchPage: { askAndSearch: "Perguntar e Buscar", chooseAMode: "Escolha um modo", askBeta: "Perguntar (beta)", search: "Buscar", askYourKb: "Pergunte à Sua Base de Conhecimento (beta)", askYourKbDesc: "O LLM responderá sua consulta com base nos documentos da sua base de conhecimento.", question: "Pergunta", enterQuestionPlaceholder: "Digite sua pergunta...", pressToSubmit: "Pressione Cmd/Ctrl+Enter para enviar", noEmbeddingModel: "Você não pode usar este recurso porque não tem um modelo de embedding selecionado. Configure um na página de Modelos.", usingCustomModels: "Usando Modelos Personalizados", usingDefaultModels: "Usando Modelos Padrão", advanced: "Avançado", strategy: "Estratégia", answer: "Resposta", final: "Final", ask: "Perguntar", processing: "Processando...", saveToNotebooks: "Salvar em Cadernos", searchDesc: "Busque em sua base de conhecimento por palavras-chave ou conceitos específicos", enterSearchPlaceholder: "Digite sua busca...", pressToSearch: "Pressione Enter para buscar", searchType: "Tipo de Busca", vectorSearchWarning: "Busca vetorial requer um modelo de embedding. Apenas busca por texto está disponível.", textSearch: "Busca por Texto", vectorSearch: "Busca Vetorial", searchIn: "Buscar Em", searchSources: "Buscar Fontes", searchNotes: "Buscar Notas", resultsFound: "{count} resultados encontrados", matches: "Correspondências ({count})", noResultsFor: "Nenhum resultado encontrado para \"{query}\"", notSet: "Não definido", saveToNotebook: "Salvar no Caderno", saveSuccess: "Salvo no caderno com sucesso", saveError: "Falha ao salvar no caderno", selectNotebook: "Selecionar Caderno", searchAndAsk: "Buscar e Perguntar", searchResultsFor: "Resultados da busca para \"{query}\"", askAbout: "Perguntar sobre \"{query}\"", orSearchKb: "Ou busque em sua base de conhecimento", saving: "Salvando...", advancedModelTitle: "Seleção Avançada de Modelo", advancedModelDesc: "Escolha modelos específicos para cada etapa do processo de Perguntar", strategyModel: "Modelo de Estratégia", answerModel: "Modelo de Resposta", finalAnswerModel: "Modelo de Resposta Final", selectStrategyPlaceholder: "Selecione o modelo de estratégia", selectAnswerPlaceholder: "Selecione o modelo de resposta", selectFinalPlaceholder: "Selecione o modelo de resposta final", saveChanges: "Salvar Alterações", processingQuestion: "Processando sua pergunta...", }, podcasts: { generateEpisode: "Gerar Episódio de Podcast", generateEpisodeDesc: "Selecione o conteúdo a incluir e configure os detalhes do episódio antes de gerar um novo episódio de podcast.", content: "Conteúdo", contentDesc: "Escolha cadernos, fontes e notas para incluir neste episódio.", itemsSelected: "{count} itens selecionados", tokens: "{count} tokens", chars: "{count} caracteres", loadingNotebooks: "Carregando cadernos...", noNotebooksFoundInPodcasts: "Nenhum caderno encontrado. Crie um caderno e adicione conteúdo antes de gerar um podcast.", noContentSelected: "Nenhum conteúdo selecionado", summary: "Resumo", fullContent: "Conteúdo completo", untitledSource: "Fonte sem título", untitledNote: "Nota sem título", episodeSettings: "Configurações do Episódio", episodeProfile: "Perfil do episódio", episodeProfilePlaceholder: "Selecione um perfil de episódio", episodeName: "Nome do episódio", episodeNamePlaceholder: "ex., IA e o Futuro do Trabalho", additionalInstructions: "Instruções adicionais", instructionsPlaceholder: "Qualquer conselho suplementar para adicionar ao briefing do episódio...", generating: "Gerando...", generate: "Gerar", hostPlaceholder: "Apresentador {number}", profileRequired: "Perfil de Episódio Necessário", profileRequiredDesc: "Selecione um perfil de episódio antes de gerar um podcast.", nameRequired: "Nome do episódio necessário", nameRequiredDesc: "Forneça um nome para o episódio.", addContext: "Adicionar contexto", addContextDesc: "Selecione pelo menos uma fonte ou nota para incluir no episódio.", generationFailed: "Geração do podcast falhou", speakerProfile: "Perfil do Locutor", usesSpeakerProfile: "Usa perfil de locutor", sources: "Fontes", notes: "Notas", noSources: "Nenhuma fonte disponível neste caderno.", noNotes: "Nenhuma nota disponível neste caderno.", selectMode: "Selecionar modo", buildContextFailed: "Falha ao construir contexto. Por favor, revise suas seleções.", podcastTaskStarted: "Tarefa de podcast iniciada", loadingProfiles: "Carregando perfis de episódio...", noProfilesFound: "Nenhum perfil de episódio encontrado. Crie um perfil de episódio antes de gerar um podcast.", listTitle: "Podcasts", listDesc: "Acompanhe episódios gerados e gerencie templates reutilizáveis.", chooseAView: "Escolha uma visualização", episodesTab: "Episódios", templatesTab: "Templates", overviewTitle: "Visão geral dos episódios", overviewDesc: "Monitore trabalhos de geração de podcast e revise os artefatos finais.", generateBtn: "Gerar Podcast", total: "Total", processingLabel: "Processando", completedLabel: "Concluídos", failedLabel: "Falharam", pendingLabel: "Pendentes", loadErrorTitle: "Falha ao carregar episódios", loadErrorDesc: "Não foi possível buscar os episódios de podcast mais recentes. Tente novamente em breve.", loadingEpisodes: "Carregando episódios…", noEpisodesYet: "Nenhum episódio de podcast ainda. Gere seu primeiro a partir das interfaces de chat de caderno ou fonte.", statusRunningTitle: "Processando Atualmente", statusRunningDesc: "Episódios que estão gerando ativos ativamente.", statusPendingTitle: "Na Fila / Pendentes", statusPendingDesc: "Episódios enviados aguardando início do processamento.", statusCompletedTitle: "Episódios Concluídos", statusCompletedDesc: "Prontos para revisar, baixar ou publicar.", statusFailedTitle: "Episódios com Falha", statusFailedDesc: "Episódios que encontraram problemas durante a geração.", templatesWorkspaceTitle: "Área de trabalho de templates", templatesWorkspaceDesc: "Construa configurações de episódio e locutor reutilizáveis para produção rápida de podcasts.", howTemplatesPowerTitle: "Como os templates potencializam a geração de podcasts", howTemplatesPowerDesc: "Templates dividem o fluxo de trabalho do podcast em dois blocos de construção reutilizáveis. Misture e combine-os sempre que gerar um novo episódio.", episodeProfilesSetFormat: "Perfis de episódio definem o formato", episodeProfilesList1: "Delineiam o número de segmentos e como a história flui", episodeProfilesList2: "Escolhem os modelos de linguagem usados para briefing, outline e escrita do roteiro", episodeProfilesList3: "Armazenam briefings padrão para que cada episódio comece com um tom consistente", speakerProfilesBringVoices: "Perfis de locutor dão vida às vozes", speakerProfilesList1: "Escolhem o provedor e modelo de text-to-speech", speakerProfilesList2: "Capturam personalidade, história e notas de pronúncia por locutor", speakerProfilesList3: "Reutilizam as mesmas vozes de apresentador ou convidado em diferentes formatos de episódio", recommendedWorkflow: "Fluxo de trabalho recomendado", workflowStep1: "Crie perfis de locutor para cada voz que você precisa", workflowStep2: "Construa perfis de episódio que referenciam esses locutores pelo nome", workflowStep3: "Gere podcasts selecionando o perfil de episódio que se encaixa na história", workflowHint: "Perfis de episódio referenciam perfis de locutor pelo nome, então começar com locutores evita atribuições de voz faltantes depois.", failedToLoadTemplates: "Falha ao carregar dados de templates", failedToLoadTemplatesDesc: "Certifique-se de que a API está rodando e tente novamente. Algumas seções podem estar incompletas.", loadingTemplates: "Carregando templates…", speakerProfilesTitle: "Perfis de locutor", speakerProfilesDesc: "Configure vozes e personalidades para episódios gerados.", createSpeaker: "Criar locutor", noSpeakerProfiles: "Nenhum perfil de locutor ainda. Crie um para disponibilizar templates de episódio.", noDescription: "Nenhuma descrição fornecida.", usedByCount_one: "Usado por 1 episódio", usedByCount_other: "Usado por {count} episódios", usedByCount: "Usado por {count} episódios", unused: "Não utilizado", voiceId: "ID da Voz", backstory: "História", personality: "Personalidade", edit: "Editar", duplicate: "Duplicar", deleteSpeakerProfileTitle: "Excluir perfil de locutor?", deleteSpeakerProfileDesc: "Excluir \"{name}\" não pode ser desfeito.", deleteSpeakerDisabledHint: "Remova este locutor dos perfis de episódio antes de excluí-lo.", deleting: "Excluindo…", episodeProfilesTitle: "Perfis de episódio", episodeProfilesDesc: "Defina configurações de geração reutilizáveis para seus programas.", createProfile: "Criar perfil", createSpeakerFirst: "Crie um perfil de locutor antes de adicionar um perfil de episódio.", noEpisodeProfiles: "Nenhum perfil de episódio ainda. Crie um para iniciar a geração de podcasts.", speakerCreated: "Locutor Criado", speakerCreatedDesc: "O locutor \"{name}\" foi adicionado com sucesso.", failedToCreateSpeaker: "Falha ao criar perfil de locutor", speakerUpdated: "Locutor Atualizado", speakerUpdatedDesc: "O locutor \"{name}\" foi atualizado com sucesso.", failedToUpdateSpeaker: "Falha ao atualizar perfil de locutor", speakerDeleted: "Locutor Excluído", speakerDeletedDesc: "O locutor \"{name}\" foi removido com sucesso.", failedToDeleteSpeaker: "Falha ao excluir perfil de locutor", speakerDuplicated: "Locutor Duplicado", speakerDuplicatedDesc: "O locutor \"{name}\" foi duplicado com sucesso.", failedToDuplicateSpeaker: "Falha ao duplicar perfil de locutor", generationStarted: "Geração Iniciada", generationStartedDesc: "A geração do podcast foi enfileirada.", failedToStartGeneration: "Falha ao iniciar geração", tryAgainMoment: "Por favor, tente novamente em um momento.", deleteProfileTitle: "Excluir perfil?", deleteProfileDesc: "Isso removerá \"{name}\". Episódios existentes mantêm seus dados, mas novos não usarão mais esta configuração.", profileCreated: "Perfil Criado", profileCreatedDesc: "O perfil de episódio \"{name}\" foi criado com sucesso.", failedToCreateProfile: "Falha ao criar perfil", profileUpdated: "Perfil Atualizado", profileUpdatedDesc: "O perfil de episódio \"{name}\" foi atualizado com sucesso.", failedToUpdateProfile: "Falha ao atualizar perfil", profileDeleted: "Perfil Excluído", profileDeletedDesc: "O perfil de episódio \"{name}\" foi removido com sucesso.", failedToDeleteProfile: "Falha ao excluir perfil", failedToDeleteProfileDesc: "Falha ao remover o perfil de episódio.", profileDuplicated: "Perfil Duplicado", profileDuplicatedDesc: "O perfil de episódio \"{name}\" foi duplicado com sucesso.", failedToDuplicateProfile: "Falha ao duplicar perfil", episodeDeleted: "Episódio Excluído", episodeDeletedDesc: "O episódio foi excluído com sucesso.", failedToDeleteEpisode: "Falha ao excluir episódio", failedToDeleteSpeakerDesc: "Falha ao remover o perfil de locutor.", outlineModel: "Modelo de outline", transcriptModel: "Modelo de transcrição", segments: "Segmentos", defaultBriefingTitle: "Briefing padrão", created: "Criado em {time}", details: "Detalhes", summaryTab: "Resumo", outlineTab: "Outline", transcriptTab: "Transcrição", briefing: "Briefing", noOutline: "Nenhum outline disponível.", noTranscript: "Nenhuma transcrição disponível.", deleteEpisodeTitle: "Excluir episódio?", deleteEpisodeDesc: "Isso removerá \"{name}\" e seu arquivo de áudio permanentemente.", audioUnavailable: "Áudio indisponível", segment: "Segmento", speaker: "Locutor", profile: "Perfil", link: "Link", file: "Arquivo", embedded: "Incorporado", notEmbedded: "Não incorporado", noSpeakerProfilesAvailable: "Nenhum perfil de locutor disponível", noLanguageModelsAvailable: "Nenhum modelo de linguagem disponível", editEpisodeProfile: "Editar Perfil de Episódio", createEpisodeProfile: "Criar Perfil de Episódio", episodeProfileFormDesc: "Defina como os episódios devem ser gerados e qual configuração de locutor usar por padrão.", noSpeakerProfilesDesc: "Crie um perfil de locutor antes de configurar um perfil de episódio.", noLanguageModelsDesc: "Adicione modelos de linguagem na seção Modelos para configurar a geração de outline e transcrição.", profileName: "Nome do perfil", profileNamePlaceholder: "ex., Discussão tech", descriptionPlaceholder: "Breve resumo de quando usar este perfil", speakerConfig: "Configuração de locutor", selectSpeakerProfile: "Selecione um perfil de locutor", outlineGeneration: "Geração de outline", transcriptGeneration: "Geração de transcrição", defaultBriefingPlaceholder: "Delineie a estrutura, tom e objetivos para este formato de episódio", editSpeakerProfile: "Editar Perfil de Locutor", createSpeakerProfile: "Criar Perfil de Locutor", speakerProfileFormDesc: "Configure as configurações de text-to-speech e defina até quatro locutores.", noTtsModelsAvailable: "Nenhum modelo de text-to-speech disponível", noTtsModelsDesc: "Adicione modelos TTS na seção Modelos antes de criar um perfil de locutor.", speakers: "Locutores", speakersDesc: "Configure entre uma e quatro vozes para este perfil.", addSpeaker: "Adicionar locutor", speakerNumber: "Locutor {number}", backstoryPlaceholder: "Breve biografia ou contexto para o locutor", personalityPlaceholder: "Descreva estilo e tom", outlineProviderRequired: "Provedor de outline é obrigatório", outlineModelRequired: "Modelo de outline é obrigatório", transcriptProviderRequired: "Provedor de transcrição é obrigatório", transcriptModelRequired: "Modelo de transcrição é obrigatório", defaultBriefingRequired: "Briefing padrão é obrigatório", segmentsInteger: "Deve ser um número inteiro", segmentsMin: "Mínimo de 3 segmentos", segmentsMax: "Máximo de 20 segmentos", voiceIdRequired: "ID da voz é obrigatório", backstoryRequired: "História é obrigatória", personalityRequired: "Personalidade é obrigatória", speakerCountMin: "Pelo menos um locutor é necessário", speakerCountMax: "Você pode configurar até 4 locutores", delete: "Excluir", failedToDelete: "Falha ao excluir podcast", }, settings: { contentProcessing: "Processamento de Conteúdo", contentProcessingDesc: "Configure como documentos e URLs são processados", docEngine: "Motor de Processamento de Documentos", docEnginePlaceholder: "Selecione o motor de processamento de documentos", urlEngine: "Motor de Processamento de URL", urlEnginePlaceholder: "Selecione o motor de processamento de URL", autoRecommended: "Auto (Recomendado)", simple: "Simples", docling: "Docling", helpMeChoose: "Ajude-me a escolher", docHelp: "· Docling é um pouco mais lento, mas mais preciso, especialmente se os documentos contêm tabelas e imagens. · Simples extrairá qualquer conteúdo do documento sem formatá-lo. · Auto (recomendado) tentará processar através do docling e usará simples como fallback.", firecrawl: "Firecrawl", jina: "Jina", urlHelp: "· Firecrawl é um serviço pago (com tier gratuito), e muito poderoso. · Jina também é uma boa opção e também tem um tier gratuito. · Simples usará extração HTTP básica e perderá conteúdo em sites baseados em javascript. · Auto (recomendado) tentará usar firecrawl, depois Jina, e finalmente fallback para simples.", embeddingAndSearch: "Embedding e Busca", embeddingAndSearchDesc: "Configure opções de busca e embedding", defaultEmbeddingOption: "Opção Padrão de Embedding", embeddingOptionPlaceholder: "Selecione a opção de embedding", ask: "Perguntar", always: "Sempre", never: "Nunca", embeddingHelp: "Incorporar o conteúdo facilitará encontrá-lo por você e seus agentes de IA. Se você está rodando um modelo de embedding local (Ollama, por exemplo), não precisa se preocupar com custo e pode incorporar tudo.", fileManagement: "Gerenciamento de Arquivos", fileManagementDesc: "Configure opções de manipulação e armazenamento de arquivos", autoDeleteFiles: "Excluir Arquivos Automaticamente", autoDeletePlaceholder: "Selecione a opção de exclusão automática", filesHelp: "Uma vez que seus arquivos são enviados e processados, eles não são mais necessários. A maioria dos usuários deve permitir que o Open Notebook exclua arquivos enviados da pasta de upload automaticamente.", loadFailed: "Falha ao carregar configurações", }, advanced: { title: "Ferramentas Avançadas", desc: "Ferramentas e utilitários avançados para usuários avançados", systemInfo: "Informações do Sistema", rebuildEmbeddings: "Reconstruir Embeddings", rebuildEmbeddingsDesc: "Reconstruir índice de busca vetorial para todas as fontes", currentVersion: "Versão Atual", latestVersion: "Última Versão", status: "Status", updateAvailable: "Versão {version} Disponível", updateAvailableDesc: "Uma nova versão do Open Notebook está disponível.", upToDate: "Atualizado", unknown: "Desconhecido", viewOnGithub: "Ver no GitHub", updateCheckFailed: "Não foi possível verificar atualizações. O GitHub pode estar inacessível.", rebuild: { mode: "Modo de Reconstrução", existing: "Existentes", all: "Todos", existingDesc: "Re-incorporar apenas itens que já têm embeddings (mais rápido, para troca de modelo)", allDesc: "Re-incorporar itens existentes + criar embeddings para itens sem nenhum (mais lento, abrangente)", include: "Incluir na Reconstrução", selectOneError: "Por favor, selecione pelo menos um tipo de item para reconstruir", starting: "Iniciando Reconstrução...", startBtn: "🚀 Iniciar Reconstrução", queued: "Na Fila", running: "Enviando jobs...", completed: "Jobs Enviados!", failed: "Falhou", leavePageHint: "Você pode sair desta página pois isso será executado em segundo plano", startNew: "Iniciar Nova Reconstrução", itemsProcessed: "{processed}/{total} jobs enviados ({percent}%)", failedItems: "{count} jobs falharam ao enviar", time: "Tempo", whenToRebuild: "Quando devo reconstruir embeddings?", whenToRebuildAns: "Você deve reconstruir ao trocar modelos, atualizar versões, corrigir corrupção ou após importações em massa.", howLong: "Quanto tempo leva a reconstrução?", howLongAns: "O tempo de processamento depende da quantidade de itens, velocidade do modelo e limites de taxa da API. Modelos locais geralmente são muito rápidos.", isSafe: "É seguro reconstruir enquanto usa o aplicativo?", isSafeAns: "Sim, reconstruir é seguro! Não exclui conteúdo, apenas substitui embeddings, e lida com erros graciosamente.", }, }, transformations: { title: "Transformações", desc: "Transformações são prompts que serão usados pelo LLM para processar uma fonte e extrair insights, resumos, etc.", workspace: "Escolha um espaço de trabalho", playground: "Playground", defaultPrompt: "Prompt de Transformação Padrão", defaultPromptDesc: "Isso será adicionado a todos os seus prompts de transformação", defaultPromptPlaceholder: "Digite suas instruções padrão de transformação...", listTitle: "Transformações Personalizadas", createNew: "Criar Nova", inputLabel: "Texto de Entrada", inputPlaceholder: "Digite algum texto para transformar...", outputLabel: "Saída", runTest: "Executar Transformação", running: "Executando...", selectToStart: "Selecione uma transformação para começar", name: "Nome", namePlaceholder: "Identificador único, ex. topicos_principais", titlePlaceholder: "Título exibido, usa o nome por padrão", promptPlaceholder: "Escreva o prompt que vai alimentar esta transformação...", descriptionPlaceholder: "Descreva o que esta transformação faz.", suggestDefault: "Sugerir por padrão em novas fontes", promptHint: "Prompts devem ser escritos com o conteúdo da fonte em mente. Você pode pedir ao modelo para resumir, extrair insights ou produzir saídas estruturadas como tabelas.", createSuccess: "Transformação criada com sucesso", updateSuccess: "Transformação atualizada com sucesso", deleteSuccess: "Transformação excluída com sucesso", noTransformations: "Nenhuma transformação ainda", createOne: "Crie uma transformação para começar", selectModel: "Selecione um modelo", deleteConfirm: "Tem certeza que deseja excluir esta transformação?", model: "Modelo", systemPrompt: "Prompt do Sistema", overrideModelDesc: "Substitua o modelo padrão para esta sessão de chat. Deixe vazio para usar o padrão do sistema.", sessionUseReplacement: "Esta sessão usará {name} em vez do modelo padrão.", systemDefault: "Padrão do Sistema", }, models: { embedding: "Modelos de Embedding", tts: "Text to Speech (TTS)", stt: "Speech to Text (STT)", provider: "Provedor", apiKey: "Chave da API", deleteSuccess: "Modelo excluído com sucesso", saveSuccess: "Modelo salvo com sucesso", noModels: "Sem modelos", discoverModels: "Descobrir Modelos", noModelsFound: "Nenhum modelo encontrado para este provedor", modelType: "Tipo do Modelo", modelTypeHint: "Selecione o tipo para os modelos que deseja adicionar. Se precisar de tipos diferentes, adicione em lotes separados.", deleteModel: "Excluir Modelo", defaultAssignments: "Atribuições de Modelo Padrão", defaultAssignmentsDesc: "Configure quais modelos usar para diferentes propósitos no Open Notebook", missingRequiredModels: "Modelos obrigatórios ausentes: {models}. O Open Notebook pode não funcionar corretamente sem eles.", selectModelPlaceholder: "Selecione um modelo", requiredModelPlaceholder: "⚠️ Obrigatório - Selecione um modelo", chatModelLabel: "Modelo de Chat", chatModelDesc: "Usado para conversas de chat", transformationModelLabel: "Modelo de Transformação", transformationModelDesc: "Usado para resumos, insights e transformações", toolsModelLabel: "Modelo de Ferramentas", toolsModelDesc: "Usado para chamadas de função - OpenAI ou Anthropic recomendado", largeContextModelLabel: "Modelo de Contexto Grande", largeContextModelDesc: "Usado para processar documentos grandes - Gemini recomendado", embeddingModelLabel: "Modelo de Embedding", embeddingModelDesc: "Usado para busca semântica e embeddings vetoriais", ttsModelLabel: "Modelo Text-to-Speech", ttsModelDesc: "Usado para geração de podcast", sttModelLabel: "Modelo Speech-to-Text", sttModelDesc: "Usado para transcrição de áudio", selectProviderPlaceholder: "Selecione um provedor", providerRequired: "Provedor é obrigatório", modelRequired: "Modelo é obrigatório", embeddingChangeTitle: "Alteração de Modelo de Embedding", embeddingChangeConfirm: "Você está prestes a alterar seu modelo de embedding de {from} para {to}.", rebuildRequired: "Importante: Reconstrução Necessária", rebuildReason: "Alterar seu modelo de embedding requer reconstruir todos os embeddings existentes para manter a consistência. Sem reconstruir, suas buscas podem retornar resultados incorretos ou incompletos.", whatHappensNext: "O que acontece em seguida:", step1: "Seu modelo de embedding padrão será atualizado", step2: "Embeddings existentes permanecerão inalterados até a reconstrução", step3: "Novo conteúdo usará o novo modelo de embedding", step4: "Você deve reconstruir os embeddings o mais rápido possível", proceedToRebuildPrompt: "Gostaria de ir para a página Avançado para iniciar a reconstrução agora?", changeModelOnly: "Apenas Alterar Modelo", changeAndRebuild: "Alterar e Ir para Reconstrução", autoAssign: "Atribuir Automaticamente", autoAssigning: "Atribuindo...", autoAssignSuccess: "{count} modelos padrão atribuídos automaticamente", autoAssignNoModels: "Nenhum modelo disponível para atribuir. Por favor, sincronize os modelos primeiro.", autoAssignAlreadySet: "Todos os modelos padrão já estão configurados", testModel: "Testar Modelo", testModelSuccess: "Teste do Modelo Passou", testModelFailed: "Teste do Modelo Falhou", searchOrAddModel: "Pesquisar ou digitar nome do modelo...", addCustomModel: "Adicionar \"{name}\"", }, apiKeys: { title: "Configure sua IA com suas próprias chaves de API", description: "Armazene chaves de API com segurança no banco de dados para habilitar provedores de IA no Open Notebook.", encryptionRequired: "Chave de criptografia não configurada", encryptionRequiredDescription: "Configure a variável de ambiente OPEN_NOTEBOOK_ENCRYPTION_KEY com qualquer string secreta para armazenar chaves de API no banco de dados.", configured: "Configurado", notConfigured: "Não configurado", migrationAvailable: "Variáveis de Ambiente Detectadas", migrationDescription: "{count} chave(s) de API estão configuradas via variáveis de ambiente e podem ser migradas para o banco de dados para facilitar o gerenciamento.", migrateToDatabase: "Migrar para Banco de Dados", migrating: "Migrando...", migrationSuccess: "{count} chave(s) de API migrada(s) com sucesso", migrationErrors: "{count} chave(s) falhou ao migrar", migrationNothingToMigrate: "Todas as chaves já estão no banco de dados", learnMore: "Saiba como configurar chaves de API →", testConnection: "Testar Conexão", testSuccess: "Conexão bem-sucedida", testFailed: "Falha no teste de conexão", syncModels: "Sincronizar Modelos", syncSuccess: "Descobertos {discovered} modelos, {new} novos adicionados", syncNoNew: "Descobertos {count} modelos, todos já registrados", syncFailed: "Falha ao sincronizar modelos", getApiKey: "Obter Chave de API", vertexProject: "ID do Projeto GCP", vertexLocation: "Região", vertexCredentials: "Caminho do JSON da Conta de Serviço", addConfig: "Adicionar Configuração", editConfig: "Editar Configuração", deleteConfig: "Excluir Configuração", configName: "Nome da Configuração", configNameHint: "Um nome descritivo para esta configuração (ex.: 'Produção', 'Desenvolvimento')", baseUrl: "URL Base", baseUrlOverrideHint: "Altere apenas se precisar sobrescrever o endpoint padrão do provedor.", deleteConfigConfirm: "Tem certeza de que deseja excluir '{name}'? Esta ação não pode ser desfeita.", configSaveSuccess: "Configuração salva com sucesso", configUpdateSuccess: "Configuração atualizada com sucesso", configDeleteSuccess: "Configuração excluída com sucesso", apiKeyEditHint: "Deixe em branco para manter a chave de API existente", }, setupBanner: { encryptionRequired: "Chave de criptografia não configurada", encryptionRequiredDescription: "Configure a variável de ambiente OPEN_NOTEBOOK_ENCRYPTION_KEY para habilitar o armazenamento seguro de credenciais.", migrationAvailable: "Migração de chaves de API disponível", migrationDescription: "{count} provedor(es) possuem chaves de API definidas por variáveis de ambiente. Migre-as para o banco de dados para facilitar o gerenciamento.", goToSettings: "Ir para Configurações", viewDocs: "Ver documentação", }, }