From bdc0fe82f175768dcd452c944cd56593a9066796 Mon Sep 17 00:00:00 2001 From: Pedro Renan Date: Sat, 25 Apr 2026 15:57:10 +0100 Subject: [PATCH] feat(i18n): add Brazilian and European Portuguese locales MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add pt-br and pt-pt as separate locales to cover both Portuguese variants (~260M speakers combined). Replaces the orphan generic 'pt' entry in languages.json that had no matching translation file. - locales/pt-br.json: Brazilian Portuguese (633 strings) - locales/pt-pt.json: European Portuguese with PT vocabulary (ficheiros, utilizador, rondas, inquérito, factos) and infinitive constructions ("A carregar", "A gerar") - locales/languages.json: register pt-br and pt-pt with localized labels and llmInstruction values for backend prompts --- locales/languages.json | 10 +- locales/pt-br.json | 665 +++++++++++++++++++++++++++++++++++++++++ locales/pt-pt.json | 665 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1337 insertions(+), 3 deletions(-) create mode 100644 locales/pt-br.json create mode 100644 locales/pt-pt.json diff --git a/locales/languages.json b/locales/languages.json index 81732cec..407ffa0e 100644 --- a/locales/languages.json +++ b/locales/languages.json @@ -15,9 +15,13 @@ "label": "Français", "llmInstruction": "Veuillez répondre en français." }, - "pt": { - "label": "Português", - "llmInstruction": "Por favor, responda em português." + "pt-br": { + "label": "Português (Brasil)", + "llmInstruction": "Por favor, responda em português do Brasil." + }, + "pt-pt": { + "label": "Português (Portugal)", + "llmInstruction": "Por favor, responda em português de Portugal." }, "ru": { "label": "Русский", diff --git a/locales/pt-br.json b/locales/pt-br.json new file mode 100644 index 00000000..96dfa7c9 --- /dev/null +++ b/locales/pt-br.json @@ -0,0 +1,665 @@ +{ + "common": { + "confirm": "Confirmar", + "cancel": "Cancelar", + "loading": "Carregando...", + "error": "Erro", + "success": "Sucesso", + "completed": "Concluído", + "processing": "Gerando", + "pending": "Pendente", + "ready": "Pronto", + "running": "Executando", + "failed": "Falhou", + "unknown": "Desconhecido", + "unknownError": "Erro desconhecido", + "none": "Nenhum", + "close": "Fechar", + "back": "Voltar", + "next": "Próximo", + "retry": "Tentar novamente", + "noData": "Nenhum dado disponível", + "hours": "horas", + "minutes": "minutos", + "rounds": "rodadas", + "items": "itens", + "files": "arquivos" + }, + "meta": { + "title": "MiroFish - Preveja Tudo", + "description": "MiroFish - Sistema de Simulação de Opinião em Redes Sociais" + }, + "nav": { + "visitGithub": "Visite nossa página no Github" + }, + "home": { + "tagline": "Motor Conciso e Universal de Inteligência de Enxame", + "version": "/ v0.1-Preview", + "heroTitle1": "Envie Relatórios,", + "heroTitle2": "Preveja o Futuro", + "heroDesc": "A partir de um único documento, o {brand} extrai sementes de realidade para gerar automaticamente um mundo paralelo com até {agentScale}. Injete variáveis com uma visão divina para encontrar o {optimalSolution} em dinâmicas de grupo complexas.", + "heroDescBrand": "MiroFish", + "heroDescAgentScale": "milhões de Agentes", + "heroDescOptimalSolution": "\"ótimo local\"", + "slogan": "Deixe os Agentes ensaiarem o futuro, deixe as decisões prevalecerem", + "systemStatus": "Status do Sistema", + "systemReady": "Pronto", + "systemReadyDesc": "Motor de predição em espera. Envie dados não estruturados para inicializar uma sequência de simulação.", + "metricLowCost": "Baixo Custo", + "metricLowCostDesc": "Média de US$ 5/simulação", + "metricHighAvail": "Escalável", + "metricHighAvailDesc": "Milhões de Agentes", + "workflowSequence": "Fluxo de Trabalho", + "step01Title": "Construção do Grafo", + "step01Desc": "Extração de sementes, injeção de memória e construção de GraphRAG", + "step02Title": "Configuração do Ambiente", + "step02Desc": "Extração de entidades, geração de personas e injeção de configuração de Agentes", + "step03Title": "Simulação", + "step03Desc": "Simulação paralela em duas plataformas, análise automática de requisitos e memória temporal", + "step04Title": "Relatório", + "step04Desc": "O ReportAgent interage com o ambiente pós-simulação por meio de ferramentas avançadas", + "step05Title": "Interação", + "step05Desc": "Converse com qualquer indivíduo simulado e dialogue com o ReportAgent", + "realitySeed": "01 / Semente da Realidade", + "supportedFormats": "Formatos: PDF, MD, TXT", + "dragToUpload": "Arraste arquivos para enviar", + "orBrowse": "ou clique para navegar pelos arquivos", + "inputParams": "Parâmetros de Entrada", + "simulationPrompt": ">_ 02 / Prompt de Simulação", + "promptPlaceholder": "// Descreva seu requisito de simulação ou predição em linguagem natural", + "engineBadge": "Motor: MiroFish-V1.0", + "startEngine": "Iniciar Motor", + "initializing": "Inicializando..." + }, + "main": { + "layoutGraph": "Grafo", + "layoutSplit": "Dividido", + "layoutWorkbench": "Bancada", + "stepNames": ["Construção do Grafo", "Configuração do Ambiente", "Executar Simulação", "Geração do Relatório", "Interação Profunda"] + }, + "step1": { + "ontologyGeneration": "Geração de Ontologia", + "ontologyCompleted": "Concluído", + "ontologyGenerating": "Gerando", + "ontologyPending": "Pendente", + "ontologyDesc": "O LLM analisa o conteúdo do documento e os requisitos da simulação, extrai sementes de realidade e gera automaticamente uma estrutura de ontologia adequada", + "analyzingDocs": "Analisando documentos...", + "graphRagBuild": "Construção do GraphRAG", + "graphRagDesc": "Com base na ontologia gerada, os documentos são automaticamente divididos em chunks e enviados ao Zep para construir um grafo de conhecimento, extraindo entidades e relações, formando memória temporal e resumos de comunidades", + "entityNodes": "Nós de Entidade", + "relationEdges": "Arestas de Relação", + "schemaTypes": "Tipos de Schema", + "buildComplete": "Construção Concluída", + "buildCompleteDesc": "A construção do grafo foi concluída. Avance para a próxima etapa para configurar o ambiente de simulação.", + "inProgress": "Em Andamento", + "creating": "Criando...", + "enterEnvSetup": "Entrar na Configuração do Ambiente", + "createSimulationFailed": "Falha ao criar simulação: {error}", + "createSimulationException": "Erro na criação da simulação: {error}" + }, + "step2": { + "simInstanceInit": "Inicialização da Instância de Simulação", + "simInstanceDesc": "Cria uma nova instância de simulação e carrega modelos de parâmetros do mundo", + "asyncTaskDone": "Tarefa assíncrona concluída", + "generateAgentPersona": "Gerar Personas de Agentes", + "generateAgentPersonaDesc": "Combina o contexto para extrair automaticamente entidades e relações do grafo de conhecimento, inicializa indivíduos simulados e atribui comportamentos e memórias únicos com base nas sementes de realidade", + "currentAgentCount": "Agentes Atuais", + "expectedAgentTotal": "Total Esperado de Agentes", + "relatedTopicsCount": "Tópicos Relacionados à Semente de Realidade", + "generatedAgentPersonas": "Personas de Agentes Geradas", + "unknownProfession": "Profissão desconhecida", + "noBio": "Nenhuma biografia disponível", + "dualPlatformConfig": "Gerar Configuração Dupla de Plataforma", + "dualPlatformConfigDesc": "O LLM define de forma inteligente o fluxo de tempo do mundo, algoritmos de recomendação, horários ativos de cada indivíduo, frequência de postagens, gatilhos de eventos e muito mais, com base nos requisitos e nas sementes de realidade", + "simulationDuration": "Duração da Simulação", + "roundDuration": "Duração da Rodada", + "totalRounds": "Total de Rodadas", + "activePerHour": "Ativos por Hora", + "peakHours": "Horários de Pico", + "workHours": "Horário de Trabalho", + "morningHours": "Horário Matinal", + "offPeakHours": "Horários Fora de Pico", + "agentConfig": "Configuração do Agente", + "activeTimePeriod": "Horários Ativos", + "postsPerHour": "Posts/h", + "commentsPerHour": "Comentários/h", + "responseDelay": "Atraso de Resposta", + "activityLevel": "Nível de Atividade", + "sentimentBias": "Viés de Sentimento", + "influenceWeight": "Influência", + "recommendAlgoConfig": "Configuração do Algoritmo de Recomendação", + "platform1Name": "Plataforma 1: Praça / Feed", + "platform2Name": "Plataforma 2: Tópico / Comunidade", + "recencyWeight": "Peso de Recência", + "popularityWeight": "Peso de Popularidade", + "relevanceWeight": "Peso de Relevância", + "viralThreshold": "Limiar de Viralização", + "echoChamberStrength": "Força da Câmara de Eco", + "llmConfigReasoning": "Raciocínio de Configuração do LLM", + "initialActivation": "Orquestração da Ativação Inicial", + "initialActivationDesc": "Gera automaticamente eventos de ativação inicial e tópicos em alta com base na direção narrativa para guiar o estado inicial do mundo da simulação", + "orchestrating": "Orquestrando", + "narrativeDirection": "Direção Narrativa", + "initialHotTopics": "Tópicos Iniciais em Alta", + "initialActivationSeq": "Sequência de Ativação Inicial ({count})", + "setupComplete": "Configuração Concluída", + "setupCompleteDesc": "O ambiente de simulação está pronto. Agora você pode iniciar a simulação.", + "roundsConfig": "Configuração de Rodadas da Simulação", + "roundsConfigDesc": "O MiroFish planeja automaticamente simular {hours} horas do mundo real, com cada rodada representando {minutesPerRound} minutos de tempo decorrido", + "customToggle": "Personalizado", + "roundsUnit": "rodadas", + "estimatedDuration": "Para 100 Agentes: estimativa de ~{minutes} minutos", + "estimatedDurationFull": "Para 100 Agentes: estimativa de {minutes} minutos", + "recommendedRounds": "{rounds} (recomendado)", + "customTip": "Para primeiras execuções, recomendamos fortemente alternar para o 'Modo Personalizado' e reduzir as rodadas para uma visualização rápida e menor risco de erros", + "backToGraphBuild": "Voltar à Construção do Grafo", + "startDualWorldSim": "Iniciar Simulação Paralela em Dois Mundos", + "profileModalAge": "Idade Aparente", + "profileModalGender": "Gênero Aparente", + "profileModalCountry": "País/Região", + "profileModalMbti": "MBTI Aparente", + "profileModalBio": "Biografia da Persona", + "profileModalTopics": "Tópicos Relacionados à Semente de Realidade", + "profileModalPersona": "Histórico Detalhado da Persona", + "personaDimExperience": "Experiência Completa do Evento", + "personaDimExperienceDesc": "Trajetória comportamental completa neste evento", + "personaDimBehavior": "Perfil Comportamental", + "personaDimBehaviorDesc": "Resumo de experiências e preferências comportamentais", + "personaDimMemory": "Impressão de Memória Única", + "personaDimMemoryDesc": "Memórias formadas a partir de sementes de realidade", + "personaDimSocial": "Rede Social", + "personaDimSocialDesc": "Conexões individuais e grafo de interação", + "genderMale": "Masculino", + "genderFemale": "Feminino", + "genderOther": "Outro", + "yearsOld": "anos", + "initializing": "Inicializando", + "generating": "Gerando" + }, + "step3": { + "startGenerateReport": "Gerar Relatório", + "generatingReport": "Iniciando...", + "waitingForActions": "Aguardando ações dos agentes...", + "errorMissingSimId": "Erro: simulationId ausente", + "startingDualSim": "Iniciando simulação paralela em duas plataformas...", + "graphMemoryUpdateEnabled": "Atualização dinâmica de memória do grafo habilitada", + "setMaxRounds": "Máximo de rodadas de simulação definido em: {rounds}", + "oldSimCleared": "Logs antigos de simulação limpos, reiniciando simulação", + "engineStarted": "Motor de simulação iniciado com sucesso", + "startFailed": "Falha ao iniciar: {error}", + "startException": "Erro ao iniciar: {error}", + "stoppingSim": "Parando simulação...", + "simStopped": "Simulação parada", + "stopFailed": "Falha ao parar: {error}", + "stopException": "Erro ao parar: {error}", + "allPlatformsCompleted": "Todas as simulações de plataforma foram encerradas", + "simCompleted": "Simulação concluída", + "graphRealtimeRefresh": "Atualização em tempo real do grafo habilitada (30s)", + "graphRefreshStopped": "Atualização em tempo real do grafo interrompida", + "preparingGoBack": "Preparando retorno à Etapa 2, encerrando simulação...", + "closingSimEnv": "Encerrando ambiente de simulação...", + "simEnvClosed": "Ambiente de simulação encerrado", + "closeFailed": "Falha ao encerrar o ambiente de simulação, tentando parada forçada...", + "stoppingProcess": "Parando processo de simulação...", + "checkStatusFailed": "Falha ao verificar status da simulação: {error}", + "forceStopSuccess": "Simulação parada à força", + "forceStopFailed": "Parada forçada falhou: {error}", + "startGenerateReportBtn": "Gerar Relatório", + "generatingReportBtn": "Iniciando..." + }, + "step4": { + "generatingSection": "Gerando {title}...", + "goToInteraction": "Entrar na Interação Profunda", + "waitingForReportAgent": "Aguardando o Report Agent...", + "collapse": "Recolher ▲", + "expandAll": "Mostrar todos os {count} ▼", + "expandAllEntities": "Mostrar todas as {count} ▼", + "scenarioLabel": "Cenário: ", + "tabKeyFacts": "Fatos Principais ({count})", + "tabCoreEntities": "Entidades Centrais ({count})", + "tabRelationChains": "Cadeias de Relação ({count})", + "tabSubQueries": "Subconsultas ({count})", + "panelKeyFacts": "Fatos principais mais recentes da memória temporal", + "totalCount": "{count} no total", + "totalEntityCount": "{count} no total", + "panelCoreEntities": "Entidades Centrais", + "factCount": "{count} fatos", + "panelRelationChains": "Cadeias de Relação", + "panelSubQueries": "Subperguntas de análise de consulta de desvio", + "emptyKeyFacts": "Nenhum fato principal disponível", + "emptyCoreEntities": "Nenhuma entidade central disponível", + "emptyRelationChains": "Nenhuma cadeia de relação disponível", + "tabActiveFacts": "Fatos Ativos ({count})", + "tabHistoricalFacts": "Fatos Históricos ({count})", + "tabEntities": "Entidades ({count})", + "panelActiveFacts": "Fatos Ativos", + "emptyActiveFacts": "Nenhum fato ativo disponível", + "panelHistoricalFacts": "Fatos Históricos", + "emptyHistoricalFacts": "Nenhum fato histórico disponível", + "panelEntities": "Entidades", + "emptyEntities": "Nenhuma entidade disponível", + "searchLabel": "Buscar: ", + "tabFacts": "Fatos ({count})", + "tabEdges": "Arestas ({count})", + "tabNodes": "Nós ({count})", + "panelSearchResults": "Resultados da Busca", + "emptySearchResults": "Nenhum resultado encontrado", + "panelRelatedEdges": "Arestas Relacionadas", + "panelRelatedNodes": "Nós Relacionados", + "world1": "Mundo 1", + "world2": "Mundo 2" + }, + "step5": { + "interactiveTools": "Ferramentas Interativas", + "agentsAvailable": "{count} agentes disponíveis", + "chatWithReportAgent": "Conversar com o Report Agent", + "chatWithAgent": "Converse com qualquer indivíduo do mundo", + "selectChatTarget": "Selecionar alvo da conversa", + "sendSurvey": "Enviar pesquisa ao mundo", + "reportAgentChat": "Report Agent - Conversa", + "reportAgentDesc": "Uma versão conversacional do agente gerador de relatórios com acesso a 4 ferramentas profissionais e à memória completa do MiroFish", + "toolInsightForge": "InsightForge - Atribuição Profunda", + "toolInsightForgeDesc": "Alinha dados reais das sementes com o estado da simulação, combinando Memória Global/Local para análise de atribuição profunda entre períodos temporais", + "toolPanoramaSearch": "PanoramaSearch - Rastreamento Completo", + "toolPanoramaSearchDesc": "Algoritmo de busca em largura (BFS) baseado em grafo que reconstrói caminhos de propagação de eventos, capturando a topologia completa do fluxo de informação", + "toolQuickSearch": "QuickSearch - Recuperação Rápida", + "toolQuickSearchDesc": "Interface de consulta instantânea baseada em GraphRAG com indexação otimizada para extração rápida de atributos de nós e fatos discretos", + "toolInterviewSubAgent": "InterviewSubAgent - Entrevista Virtual", + "toolInterviewSubAgentDesc": "Entrevistas autônomas que conduzem diálogos paralelos em múltiplas rodadas com indivíduos simulados, coletando dados de opinião não estruturados e estados psicológicos", + "profileBio": "Biografia", + "chatEmptyReportAgent": "Converse com o Report Agent para explorar o conteúdo do relatório em profundidade", + "chatEmptyAgent": "Converse com indivíduos simulados para entender suas perspectivas", + "chatInputPlaceholder": "Digite sua pergunta...", + "selectSurveyTarget": "Selecionar alvos da pesquisa", + "selectedCount": "Selecionados {selected} / {total}", + "surveyQuestions": "Perguntas da Pesquisa", + "surveyInputPlaceholder": "Digite a pergunta que deseja fazer a todos os alvos selecionados...", + "submitSurvey": "Enviar Pesquisa", + "surveyResults": "Resultados da Pesquisa", + "surveyResultsCount": "{count} respostas", + "selectAll": "Selecionar Tudo", + "clearSelection": "Limpar", + "errorOccurred": "Desculpe, ocorreu um erro: {error}", + "noResponse": "Sem resposta", + "requestFailed": "Requisição falhou", + "selectAgentFirst": "Por favor, selecione um indivíduo simulado primeiro" + }, + "graph": { + "panelTitle": "Visualização de Relacionamentos do Grafo", + "refreshGraph": "Atualizar Grafo", + "graphMemoryRealtime": "Memória de curto/longo prazo do GraphRAG atualizando em tempo real", + "realtimeUpdating": "Atualizando em tempo real...", + "pendingContentHint": "Parte do conteúdo ainda está sendo processada. Considere atualizar o grafo manualmente mais tarde.", + "nodeDetails": "Detalhes do Nó", + "relationship": "Relacionamento", + "graphDataLoading": "Carregando dados do grafo...", + "waitingOntology": "Aguardando geração da ontologia...", + "toggleMaximize": "Maximizar/Restaurar", + "closeHint": "Fechar dica" + }, + "history": { + "title": "Histórico de Simulações", + "graphBuild": "Construção do Grafo", + "envSetup": "Configuração do Ambiente", + "analysisReport": "Relatório de Análise", + "moreFiles": "+{count} arquivos", + "noFiles": "Sem arquivos", + "loadingText": "Carregando...", + "simRequirement": "Requisito da Simulação", + "relatedFiles": "Arquivos Relacionados", + "noRelatedFiles": "Nenhum arquivo relacionado", + "replayTitle": "Replay da Simulação", + "step1Button": "Construção do Grafo", + "step2Button": "Configuração do Ambiente", + "step4Button": "Relatório de Análise", + "replayHint": "A Etapa 3 'Executar Simulação' e a Etapa 5 'Interação Profunda' devem ser iniciadas em tempo de execução e não oferecem suporte a replay de histórico", + "notStarted": "Não iniciado", + "roundsProgress": "{current}/{total} rodadas", + "untitledSimulation": "Simulação sem título", + "unknownFile": "Arquivo desconhecido" + }, + "api": { + "projectNotFound": "Projeto não encontrado: {id}", + "projectDeleteFailed": "Projeto não encontrado ou falha na exclusão: {id}", + "projectDeleted": "Projeto excluído: {id}", + "projectReset": "Projeto redefinido: {id}", + "requireSimulationRequirement": "Por favor, forneça um requisito de simulação (simulation_requirement)", + "requireFileUpload": "Por favor, envie ao menos um arquivo de documento", + "noDocProcessed": "Nenhum documento foi processado com sucesso. Verifique os formatos dos arquivos.", + "requireProjectId": "Por favor, forneça project_id", + "configError": "Erro de configuração: {details}", + "zepApiKeyMissing": "ZEP_API_KEY não configurada", + "ontologyNotGenerated": "Ontologia ainda não gerada. Chame /ontology/generate primeiro.", + "graphBuilding": "Construção do grafo em andamento. Não reenvie. Para forçar reconstrução, adicione force: true.", + "textNotFound": "Conteúdo de texto extraído não encontrado", + "ontologyNotFound": "Definição da ontologia não encontrada", + "graphBuildStarted": "Tarefa de construção do grafo iniciada. Consulte o progresso em /task/{taskId}.", + "graphBuildComplete": "Construção do grafo concluída", + "buildFailed": "Falha na construção: {error}", + "taskNotFound": "Tarefa não encontrada: {id}", + "graphDeleted": "Grafo excluído: {id}", + "entityNotFound": "Entidade não encontrada: {id}", + "graphNotBuilt": "Grafo ainda não construído. Chame /api/graph/build primeiro.", + "requireSimulationId": "Por favor, forneça simulation_id", + "simulationNotFound": "Simulação não encontrada: {id}", + "projectMissingRequirement": "O projeto não possui requisito de simulação (simulation_requirement)", + "prepareStarted": "Tarefa de preparação iniciada. Consulte o progresso em /api/simulation/prepare/status.", + "alreadyPrepared": "Preparação já concluída. Não é necessário regenerar.", + "notStartedPrepare": "Preparação não iniciada. Chame /api/simulation/prepare.", + "taskCompletedPrepared": "Tarefa concluída (preparação já existente)", + "requireTaskOrSimId": "Por favor, forneça task_id ou simulation_id", + "configNotFound": "Configuração da simulação não encontrada. Chame /prepare primeiro.", + "configFileNotFound": "Arquivo de configuração não encontrado. Chame /prepare primeiro.", + "unknownScript": "Script desconhecido: {name}. Disponíveis: {allowed}", + "scriptFileNotFound": "Arquivo de script não encontrado: {name}", + "requireGraphId": "Por favor, forneça graph_id", + "noMatchingEntities": "Nenhuma entidade correspondente encontrada", + "maxRoundsPositive": "max_rounds deve ser um inteiro positivo", + "maxRoundsInvalid": "max_rounds deve ser um inteiro válido", + "invalidPlatform": "Tipo de plataforma inválido: {platform}. Opções: twitter/reddit/parallel", + "simRunningForceHint": "A simulação está em execução. Pare-a primeiro via /stop, ou use force=true para reiniciar.", + "simNotReady": "Simulação não está pronta. Status atual: {status}. Chame /prepare primeiro.", + "graphIdRequiredForMemory": "A atualização de memória do grafo requer um graph_id válido. Garanta que o grafo esteja construído.", + "dbNotExist": "O banco de dados não existe. A simulação pode ainda não ter sido executada.", + "requireMessage": "Por favor, forneça uma mensagem", + "missingGraphId": "ID do grafo ausente", + "missingGraphIdEnsure": "ID do grafo ausente. Certifique-se de que o grafo foi construído.", + "missingSimRequirement": "Descrição do requisito de simulação ausente", + "reportAlreadyExists": "Relatório já existe", + "reportGenerateStarted": "Tarefa de geração de relatório iniciada. Consulte o progresso em /api/report/generate/status.", + "reportGenerated": "Relatório gerado", + "reportNotFound": "Relatório não encontrado: {id}", + "noReportForSim": "Nenhum relatório encontrado para esta simulação: {id}", + "reportDeleted": "Relatório excluído: {id}", + "reportGenerateFailed": "Geração de relatório falhou", + "sectionNotFound": "Seção não encontrada: section_{index}.md", + "reportProgressNotAvail": "Relatório não encontrado ou progresso indisponível: {id}", + "requireAgentId": "Por favor, forneça agent_id", + "requirePrompt": "Por favor, forneça um prompt (pergunta da entrevista)", + "invalidInterviewPlatform": "A plataforma deve ser 'twitter' ou 'reddit'", + "envNotRunning": "Ambiente de simulação não está em execução ou foi encerrado. Garanta que a simulação esteja concluída e em modo de espera por comando.", + "interviewTimeout": "Tempo esgotado para resposta da entrevista: {error}", + "requireInterviews": "Por favor, forneça interviews (lista de entrevistas)", + "interviewListMissingAgentId": "Item {index} da lista de entrevistas sem agent_id", + "interviewListMissingPrompt": "Item {index} da lista de entrevistas sem prompt", + "interviewListInvalidPlatform": "A plataforma do item {index} da lista de entrevistas deve ser 'twitter' ou 'reddit'", + "batchInterviewTimeout": "Tempo esgotado para resposta em lote de entrevistas: {error}", + "globalInterviewTimeout": "Tempo esgotado para resposta global de entrevistas: {error}", + "envRunning": "Ambiente em execução e pronto para comandos de Entrevista", + "envNotRunningShort": "Ambiente não está em execução ou foi encerrado", + "requireGraphIdAndQuery": "Por favor, forneça graph_id e query", + "initReportAgent": "Inicializando o Report Agent..." + }, + "progress": { + "initGraphService": "Inicializando serviço de construção do grafo...", + "textChunking": "Dividindo texto em chunks...", + "creatingZepGraph": "Criando grafo no Zep...", + "settingOntology": "Definindo a ontologia...", + "addingChunks": "Adicionando {count} chunks de texto...", + "waitingZepProcess": "Aguardando o Zep processar os dados...", + "fetchingGraphData": "Buscando dados do grafo...", + "graphBuildComplete": "Construção do grafo concluída", + "buildFailed": "Falha na construção: {error}", + "startBuildingGraph": "Iniciando construção do grafo...", + "graphCreated": "Grafo criado: {graphId}", + "ontologySet": "Ontologia definida", + "textSplit": "Texto dividido em {count} chunks", + "fetchingGraphInfo": "Buscando informações do grafo...", + "sendingBatch": "Enviando lote {current}/{total} ({chunks} chunks)...", + "batchFailed": "Lote {batch} falhou: {error}", + "noEpisodesWait": "Nenhum episódio a aguardar", + "waitingEpisodes": "Aguardando o processamento de {count} chunks de texto...", + "episodesTimeout": "Alguns chunks atingiram o tempo limite, {completed}/{total} concluídos", + "zepProcessing": "Zep processando... {completed}/{total} concluídos, {pending} pendentes ({elapsed}s)", + "processingComplete": "Processamento concluído: {completed}/{total}", + "taskComplete": "Tarefa concluída", + "taskFailed": "Tarefa falhou", + "startPreparingEnv": "Preparando ambiente de simulação...", + "connectingZepGraph": "Conectando ao grafo do Zep...", + "readingNodeData": "Lendo dados dos nós...", + "readingComplete": "Concluído, {count} entidades encontradas", + "startGenerating": "Iniciando geração...", + "analyzingRequirements": "Analisando requisitos da simulação...", + "generatingOutline": "Gerando estrutura do relatório...", + "parsingOutline": "Analisando estrutura da estrutura...", + "outlinePlanComplete": "Planejamento da estrutura concluído", + "deepSearchAndWrite": "Busca profunda e redação ({current}/{max})", + "initReport": "Inicializando relatório...", + "startPlanningOutline": "Planejando estrutura do relatório...", + "outlineDone": "Estrutura concluída, {count} seções", + "generatingSection": "Gerando seção: {title} ({current}/{total})", + "sectionDone": "Seção {title} concluída", + "assemblingReport": "Montando relatório completo...", + "reportComplete": "Geração do relatório concluída", + "reportFailed": "Falha na geração do relatório: {error}", + "savingProfiles": "Salvando arquivos de perfil...", + "profilesComplete": "Concluído, {count} perfis gerados", + "callingLLMConfig": "Chamando o LLM para gerar configuração...", + "savingConfigFiles": "Salvando arquivos de configuração...", + "configComplete": "Geração de configuração concluída", + "generatingTimeConfig": "Gerando configuração de tempo...", + "generatingEventConfig": "Gerando configuração de eventos e tópicos em alta...", + "generatingAgentConfig": "Gerando configuração de agentes ({start}-{end}/{total})...", + "generatingPlatformConfig": "Gerando configuração de plataforma...", + "zepSearchQuery": "Todas as informações, atividades, eventos, relacionamentos e contexto sobre {name}", + "timeConfigLabel": "Configuração de Tempo", + "eventConfigLabel": "Configuração de Eventos", + "agentConfigResult": "Configuração de Agentes: {count} gerados", + "postAssignResult": "Atribuição de Posts: {count} posts atribuídos", + "profileGenerated": "[Gerado] {name} ({type})", + "readingGraphEntities": "Lendo Entidades do Grafo", + "generatingProfiles": "Gerando Perfis de Agentes", + "generatingSimConfig": "Gerando Configuração da Simulação", + "preparingScripts": "Preparando Scripts" + }, + "log": { + "preparingGoBack": "Preparando retorno à Etapa 2, encerrando simulação...", + "closingSimEnv": "Encerrando ambiente de simulação...", + "simEnvClosed": "✓ Ambiente de simulação encerrado", + "closeSimEnvFailed": "Falha ao encerrar o ambiente de simulação, tentando parada forçada...", + "simForceStopSuccess": "✓ Simulação parada à força", + "forceStopFailed": "Parada forçada falhou: {error}", + "stoppingSimProcess": "Parando processo de simulação...", + "simStopped": "✓ Simulação parada", + "stopSimFailed": "Falha ao parar a simulação: {error}", + "checkStatusFailed": "Falha ao verificar status da simulação: {error}", + "enterStep4": "Entrando na Etapa 4: Geração do Relatório", + "loadingSimData": "Carregando dados da simulação: {id}", + "timeConfig": "Configuração de tempo: {minutes} minutos por rodada", + "timeConfigFetchFailed": "Falha ao buscar configuração de tempo, usando padrão: {minutes} min/rodada", + "projectLoadSuccess": "Projeto carregado: {id}", + "loadSimDataFailed": "Falha ao carregar dados da simulação: {error}", + "loadException": "Erro ao carregar: {error}", + "graphDataLoadSuccess": "Dados do grafo carregados com sucesso", + "graphLoadFailed": "Falha ao carregar o grafo: {error}", + "graphRealtimeRefreshStart": "Atualização em tempo real do grafo habilitada (30s)", + "graphRealtimeRefreshStop": "Atualização em tempo real do grafo interrompida", + "simRunViewInit": "SimulationRunView inicializado", + "customRounds": "Rodadas personalizadas de simulação: {rounds}", + "enterStep3": "Entrando na Etapa 3: Executar Simulação", + "customRoundsConfig": "Rodadas personalizadas de simulação: {rounds} rodadas", + "useAutoRounds": "Usando rodadas de simulação configuradas automaticamente", + "detectedSimEnvRunning": "Detectado ambiente de simulação em execução, encerrando...", + "closeSimEnvFailedWithError": "Falha ao encerrar ambiente de simulação: {error}", + "closeSimEnvException": "Erro no encerramento do ambiente de simulação: {error}", + "detectedSimRunning": "Detectada simulação em execução, parando...", + "forceStopSimFailed": "Parada forçada da simulação falhou: {error}", + "forceStopSimException": "Erro na parada forçada da simulação: {error}", + "simViewInit": "SimulationView inicializado", + "errorMissingSimId": "Erro: simulationId ausente", + "simInstanceCreated": "Instância de simulação criada: {id}", + "preparingSimEnv": "Preparando ambiente de simulação...", + "detectedExistingPrep": "Detectada preparação existente, usando-a diretamente", + "prepareTaskStarted": "Tarefa de preparação iniciada", + "prepareTaskId": " └─ ID da Tarefa: {taskId}", + "zepEntitiesFound": "Encontradas {count} entidades no grafo do Zep", + "entityTypes": " └─ Tipos de entidade: {types}", + "startPollingProgress": "Consultando progresso da preparação...", + "prepareFailed": "Preparação falhou: {error}", + "prepareException": "Erro na preparação: {error}", + "prepareComplete": "✓ Preparação concluída", + "prepareFailedWithError": "✗ Preparação falhou: {error}", + "startGeneratingConfig": "Gerando configuração de simulação de dupla plataforma...", + "generatingAgentProfileConfig": "Gerando configuração de personas de agentes...", + "generatingLLMConfig": "Chamando o LLM para gerar parâmetros de configuração da simulação...", + "configComplete": "✓ Configuração da simulação gerada", + "configSummaryAgents": " ├─ Agentes: {count}", + "configSummaryHours": " ├─ Duração: {hours} horas", + "configSummaryPosts": " ├─ Posts iniciais: {count}", + "configSummaryTopics": " ├─ Tópicos em alta: {count}", + "configSummaryPlatforms": " └─ Plataformas: Twitter {twitter}, Reddit {reddit}", + "timeConfigDetail": "Configuração de tempo: {minutes} min/rodada, {rounds} rodadas no total", + "narrativeDirection": "Direção narrativa: {direction}", + "envSetupComplete": "✓ Configuração do ambiente concluída, pronto para simular", + "startSimCustomRounds": "Iniciando simulação, rodadas personalizadas: {rounds}", + "startSimAutoRounds": "Iniciando simulação, rodadas configuradas automaticamente: {rounds}", + "startGeneratingAgentProfiles": "Gerando personas de agentes...", + "agentProfile": "→ Persona do agente {current}/{total}: {name} ({profession})", + "allProfilesComplete": "✓ Todas as {count} personas de agentes geradas", + "loadingExistingConfig": "Carregando dados de configuração existentes...", + "loadedAgentProfiles": "Carregadas {count} personas de agentes", + "configLoadSuccess": "✓ Configuração da simulação carregada", + "configSummaryPostsAlt": " └─ Posts iniciais: {count}", + "configGenerating": "Configuração gerando, consultando...", + "loadConfigFailed": "Falha ao carregar configuração: {error}", + "step2Init": "Configuração de ambiente da Etapa 2 inicializada", + "step3Init": "Execução de simulação da Etapa 3 inicializada", + "startingDualSim": "Iniciando simulação paralela em duas plataformas...", + "setMaxRounds": "Máximo de rodadas de simulação definido em: {rounds}", + "graphMemoryUpdateEnabled": "Atualização dinâmica de memória do grafo habilitada", + "oldSimCleared": "✓ Logs antigos de simulação limpos, reiniciando simulação", + "engineStarted": "✓ Motor de simulação iniciado com sucesso", + "startFailed": "✗ Falha ao iniciar: {error}", + "startException": "✗ Erro ao iniciar: {error}", + "stoppingSim": "Parando simulação...", + "simStoppedSuccess": "✓ Simulação parada", + "stopFailed": "Falha ao parar: {error}", + "stopException": "Erro ao parar: {error}", + "allPlatformsCompleted": "✓ Todas as simulações de plataforma foram encerradas", + "simCompleted": "✓ Simulação concluída", + "reportRequestSent": "Solicitação de geração de relatório enviada, aguarde...", + "startingReportGen": "Iniciando geração de relatório...", + "reportGenTaskStarted": "✓ Tarefa de geração de relatório iniciada: {reportId}", + "reportGenFailed": "✗ Falha ao iniciar a geração de relatório: {error}", + "reportGenException": "✗ Erro na geração de relatório: {error}", + "step5Init": "Interação profunda da Etapa 5 inicializada", + "selectChatTarget": "Alvo da conversa selecionado: {name}", + "sendFailed": "Envio falhou: {error}", + "sendToReportAgent": "Enviado ao Report Agent: {message}...", + "reportAgentReplied": "Report Agent respondeu", + "sendToAgent": "Enviado para {name}: {message}...", + "agentReplied": "{name} respondeu", + "sendSurvey": "Enviando pesquisa para {count} alvos...", + "receivedReplies": "Recebidas {count} respostas", + "surveySendFailed": "Envio da pesquisa falhou: {error}", + "loadReportData": "Carregando dados do relatório: {id}", + "loadReportFailed": "Falha ao carregar relatório: {error}", + "reportDataLoaded": "Dados do relatório carregados", + "loadReportLogFailed": "Falha ao carregar logs do relatório: {error}", + "loadedProfiles": "Carregados {count} indivíduos simulados", + "loadProfilesFailed": "Falha ao carregar indivíduos simulados: {error}", + "interactionViewInit": "InteractionView inicializado", + "reportViewInit": "ReportView inicializado", + "getReportInfoFailed": "Falha ao obter informações do relatório: {error}", + "enterStep": "Entrando na Etapa {step}: {name}", + "returnToStep": "Retornando à Etapa {step}: {name}", + "customSimRounds": "Rodadas personalizadas de simulação: {rounds} rodadas" + }, + "report": { + "taskStarted": "Tarefa de geração de relatório iniciada", + "planningStart": "Iniciando planejamento da estrutura do relatório", + "fetchSimContext": "Buscando contexto da simulação", + "planningComplete": "Planejamento da estrutura concluído", + "sectionStart": "Iniciando geração da seção: {title}", + "reactThought": "ReACT rodada {iteration} pensando", + "toolCall": "Chamando ferramenta: {toolName}", + "toolResult": "Ferramenta {toolName} retornou resultado", + "llmResponse": "Resposta do LLM (chamadas de ferramenta: {hasToolCalls}, resposta final: {hasFinalAnswer})", + "sectionContentDone": "Geração de conteúdo da seção {title} concluída", + "sectionComplete": "Geração da seção {title} concluída", + "reportComplete": "Geração do relatório concluída", + "errorOccurred": "Ocorreu um erro: {error}", + "agentInitDone": "ReportAgent inicializado: graph_id={graphId}, simulation_id={simulationId}", + "executingTool": "Executando ferramenta: {toolName}, parâmetros: {params}", + "toolExecFailed": "Execução da ferramenta falhou: {toolName}, erro: {error}", + "startPlanningOutline": "Iniciando planejamento da estrutura do relatório...", + "outlinePlanDone": "Planejamento da estrutura concluído: {count} seções", + "outlinePlanFailed": "Planejamento da estrutura falhou: {error}", + "reactGenerateSection": "ReACT gerando seção: {title}", + "sectionIterNone": "Seção {title} iteração {iteration}: LLM retornou None", + "sectionConflict": "Seção {title} rodada {iteration}: LLM retornou tanto chamada de ferramenta quanto Final Answer (conflito #{conflictCount})", + "sectionConflictDowngrade": "Seção {title}: {conflictCount} conflitos consecutivos, rebaixando para truncar e executar a primeira chamada de ferramenta", + "sectionGenDone": "Geração da seção {title} concluída (chamadas de ferramenta: {count})", + "multiToolOnlyFirst": "O LLM tentou {total} chamadas de ferramenta, executando apenas a primeira: {toolName}", + "sectionNoPrefix": "Seção {title} sem prefixo 'Final Answer:', adotando saída do LLM como conteúdo final (chamadas de ferramenta: {count})", + "sectionMaxIter": "Seção {title} atingiu o máximo de iterações, forçando geração", + "sectionForceFailed": "Seção {title}: LLM retornou None ao forçar encerramento, usando mensagem de erro padrão", + "sectionGenFailedContent": "(Esta seção não pôde ser gerada: o LLM retornou resposta vazia; tente novamente mais tarde)", + "outlineSavedToFile": "Estrutura salva em arquivo: {reportId}/outline.json", + "sectionSaved": "Seção salva: {reportId}/section_{sectionNum}.md", + "reportGenDone": "Geração do relatório concluída: {reportId}", + "reportGenFailed": "Geração do relatório falhou: {error}", + "agentChat": "Conversa do Report Agent: {message}...", + "fetchReportFailed": "Falha ao buscar conteúdo do relatório: {error}", + "outlineSaved": "Estrutura salva: {reportId}", + "sectionFileSaved": "Seção salva: {reportId}/{fileSuffix}", + "fullReportAssembled": "Relatório completo montado: {reportId}", + "reportSaved": "Relatório salvo: {reportId}", + "reportFolderDeleted": "Pasta do relatório excluída: {reportId}", + "redirectToQuickSearch": "search_graph redirecionado para quick_search", + "redirectToInsightForge": "get_simulation_context redirecionado para insight_forge" + }, + "console": { + "zepToolsInitialized": "ZepToolsService inicializado", + "zepRetryAttempt": "Tentativa {attempt} de {operation} no Zep falhou: {error}, tentando novamente em {delay}s...", + "zepAllRetriesFailed": "Operação {operation} no Zep falhou após {retries} tentativas: {error}", + "graphSearch": "Busca no grafo: graph_id={graphId}, query={query}...", + "graphSearchOp": "Busca no grafo (graph={graphId})", + "searchComplete": "Busca concluída: encontrados {count} fatos relevantes", + "zepSearchApiFallback": "API de busca do Zep falhou, recorrendo à busca local: {error}", + "usingLocalSearch": "Usando busca local: query={query}...", + "localSearchComplete": "Busca local concluída: encontrados {count} fatos relevantes", + "localSearchFailed": "Busca local falhou: {error}", + "fetchingAllNodes": "Buscando todos os nós do grafo {graphId}...", + "fetchedNodes": "{count} nós buscados", + "fetchingAllEdges": "Buscando todas as arestas do grafo {graphId}...", + "fetchedEdges": "{count} arestas buscadas", + "fetchingNodeDetail": "Buscando detalhes do nó: {uuid}...", + "fetchNodeDetailOp": "Buscar detalhes do nó (uuid={uuid}...)", + "fetchNodeDetailFailed": "Falha ao buscar detalhes do nó: {error}", + "fetchingNodeEdges": "Buscando arestas do nó {uuid}...", + "foundNodeEdges": "Encontradas {count} arestas relacionadas ao nó", + "fetchNodeEdgesFailed": "Falha ao buscar arestas do nó: {error}", + "fetchingEntitiesByType": "Buscando entidades do tipo {type}...", + "foundEntitiesByType": "Encontradas {count} entidades do tipo {type}", + "fetchingEntitySummary": "Buscando resumo de relacionamentos da entidade {name}...", + "fetchingGraphStats": "Buscando estatísticas do grafo {graphId}...", + "fetchingSimContext": "Buscando contexto da simulação: {requirement}...", + "insightForgeStart": "InsightForge - recuperação profunda de insights: {query}...", + "generatedSubQueries": "Geradas {count} subconsultas", + "insightForgeComplete": "InsightForge concluído: {facts} fatos, {entities} entidades, {relationships} relacionamentos", + "generateSubQueriesFailed": "Falha ao gerar subconsultas: {error}, usando padrões", + "panoramaSearchStart": "PanoramaSearch - busca ampla: {query}...", + "panoramaSearchComplete": "PanoramaSearch concluído: {active} ativos, {historical} históricos", + "quickSearchStart": "QuickSearch - busca simples: {query}...", + "quickSearchComplete": "QuickSearch concluído: {count} resultados", + "interviewAgentsStart": "InterviewAgents - entrevista profunda (API real): {requirement}...", + "profilesNotFound": "Perfis não encontrados para a simulação {simId}", + "loadedProfiles": "Carregados {count} perfis de agentes", + "selectedAgentsForInterview": "Selecionados {count} agentes para entrevista: {indices}", + "generatedInterviewQuestions": "Geradas {count} perguntas de entrevista", + "callingBatchInterviewApi": "Chamando API de entrevista em lote (plataforma dupla): {count} agentes", + "interviewApiReturned": "API de entrevista retornou: {count} resultados, success={success}", + "interviewApiReturnedFailure": "API de entrevista retornou falha: {error}", + "interviewApiCallFailed": "Chamada à API de entrevista falhou (ambiente não está em execução?): {error}", + "interviewApiCallException": "Exceção na chamada à API de entrevista: {error}", + "interviewAgentsComplete": "InterviewAgents concluído: entrevistados {count} agentes (plataforma dupla)", + "loadedRedditProfiles": "Carregados {count} perfis de reddit_profiles.json", + "readRedditProfilesFailed": "Falha ao ler reddit_profiles.json: {error}", + "loadedTwitterProfiles": "Carregados {count} perfis de twitter_profiles.csv", + "readTwitterProfilesFailed": "Falha ao ler twitter_profiles.csv: {error}", + "llmSelectAgentFailed": "Seleção de agente pelo LLM falhou, usando seleção padrão: {error}", + "generateInterviewQuestionsFailed": "Falha ao gerar perguntas de entrevista: {error}", + "generateInterviewSummaryFailed": "Falha ao gerar resumo da entrevista: {error}" + } +} diff --git a/locales/pt-pt.json b/locales/pt-pt.json new file mode 100644 index 00000000..eadb605c --- /dev/null +++ b/locales/pt-pt.json @@ -0,0 +1,665 @@ +{ + "common": { + "confirm": "Confirmar", + "cancel": "Cancelar", + "loading": "A carregar...", + "error": "Erro", + "success": "Sucesso", + "completed": "Concluído", + "processing": "A gerar", + "pending": "Pendente", + "ready": "Pronto", + "running": "A executar", + "failed": "Falhou", + "unknown": "Desconhecido", + "unknownError": "Erro desconhecido", + "none": "Nenhum", + "close": "Fechar", + "back": "Voltar", + "next": "Seguinte", + "retry": "Tentar novamente", + "noData": "Nenhum dado disponível", + "hours": "horas", + "minutes": "minutos", + "rounds": "rondas", + "items": "itens", + "files": "ficheiros" + }, + "meta": { + "title": "MiroFish - Prevê Tudo", + "description": "MiroFish - Sistema de Simulação de Opinião em Redes Sociais" + }, + "nav": { + "visitGithub": "Visite a nossa página no Github" + }, + "home": { + "tagline": "Motor Conciso e Universal de Inteligência de Enxame", + "version": "/ v0.1-Preview", + "heroTitle1": "Carregue Relatórios,", + "heroTitle2": "Preveja o Futuro", + "heroDesc": "A partir de um único documento, o {brand} extrai sementes de realidade para gerar automaticamente um mundo paralelo com até {agentScale}. Injete variáveis com uma visão divina para encontrar o {optimalSolution} em dinâmicas de grupo complexas.", + "heroDescBrand": "MiroFish", + "heroDescAgentScale": "milhões de Agentes", + "heroDescOptimalSolution": "\"ótimo local\"", + "slogan": "Deixe que os Agentes ensaiem o futuro, deixe que as decisões prevaleçam", + "systemStatus": "Estado do Sistema", + "systemReady": "Pronto", + "systemReadyDesc": "Motor de predição em espera. Carregue dados não estruturados para inicializar uma sequência de simulação.", + "metricLowCost": "Baixo Custo", + "metricLowCostDesc": "Média de 5 $/simulação", + "metricHighAvail": "Escalável", + "metricHighAvailDesc": "Milhões de Agentes", + "workflowSequence": "Fluxo de Trabalho", + "step01Title": "Construção do Grafo", + "step01Desc": "Extração de sementes, injeção de memória e construção de GraphRAG", + "step02Title": "Configuração do Ambiente", + "step02Desc": "Extração de entidades, geração de personas e injeção de configuração de Agentes", + "step03Title": "Simulação", + "step03Desc": "Simulação paralela em duas plataformas, análise automática de requisitos e memória temporal", + "step04Title": "Relatório", + "step04Desc": "O ReportAgent interage com o ambiente pós-simulação através de ferramentas avançadas", + "step05Title": "Interação", + "step05Desc": "Converse com qualquer indivíduo simulado e dialogue com o ReportAgent", + "realitySeed": "01 / Semente da Realidade", + "supportedFormats": "Formatos: PDF, MD, TXT", + "dragToUpload": "Arraste ficheiros para carregar", + "orBrowse": "ou clique para procurar ficheiros", + "inputParams": "Parâmetros de Entrada", + "simulationPrompt": ">_ 02 / Prompt de Simulação", + "promptPlaceholder": "// Descreva o seu requisito de simulação ou predição em linguagem natural", + "engineBadge": "Motor: MiroFish-V1.0", + "startEngine": "Iniciar Motor", + "initializing": "A inicializar..." + }, + "main": { + "layoutGraph": "Grafo", + "layoutSplit": "Dividido", + "layoutWorkbench": "Bancada", + "stepNames": ["Construção do Grafo", "Configuração do Ambiente", "Executar Simulação", "Geração do Relatório", "Interação Profunda"] + }, + "step1": { + "ontologyGeneration": "Geração de Ontologia", + "ontologyCompleted": "Concluído", + "ontologyGenerating": "A gerar", + "ontologyPending": "Pendente", + "ontologyDesc": "O LLM analisa o conteúdo do documento e os requisitos da simulação, extrai sementes de realidade e gera automaticamente uma estrutura de ontologia adequada", + "analyzingDocs": "A analisar documentos...", + "graphRagBuild": "Construção do GraphRAG", + "graphRagDesc": "Com base na ontologia gerada, os documentos são automaticamente divididos em chunks e enviados ao Zep para construir um grafo de conhecimento, extraindo entidades e relações, formando memória temporal e resumos de comunidades", + "entityNodes": "Nós de Entidade", + "relationEdges": "Arestas de Relação", + "schemaTypes": "Tipos de Schema", + "buildComplete": "Construção Concluída", + "buildCompleteDesc": "A construção do grafo foi concluída. Avance para o próximo passo para configurar o ambiente de simulação.", + "inProgress": "Em Curso", + "creating": "A criar...", + "enterEnvSetup": "Entrar na Configuração do Ambiente", + "createSimulationFailed": "Falha ao criar simulação: {error}", + "createSimulationException": "Erro na criação da simulação: {error}" + }, + "step2": { + "simInstanceInit": "Inicialização da Instância de Simulação", + "simInstanceDesc": "Cria uma nova instância de simulação e carrega modelos de parâmetros do mundo", + "asyncTaskDone": "Tarefa assíncrona concluída", + "generateAgentPersona": "Gerar Personas de Agentes", + "generateAgentPersonaDesc": "Combina o contexto para extrair automaticamente entidades e relações do grafo de conhecimento, inicializa indivíduos simulados e atribui comportamentos e memórias únicos com base nas sementes de realidade", + "currentAgentCount": "Agentes Atuais", + "expectedAgentTotal": "Total Esperado de Agentes", + "relatedTopicsCount": "Tópicos Relacionados com a Semente de Realidade", + "generatedAgentPersonas": "Personas de Agentes Geradas", + "unknownProfession": "Profissão desconhecida", + "noBio": "Nenhuma biografia disponível", + "dualPlatformConfig": "Gerar Configuração Dupla de Plataforma", + "dualPlatformConfigDesc": "O LLM define de forma inteligente o fluxo de tempo do mundo, algoritmos de recomendação, horários ativos de cada indivíduo, frequência de publicações, desencadeadores de eventos e muito mais, com base nos requisitos e nas sementes de realidade", + "simulationDuration": "Duração da Simulação", + "roundDuration": "Duração da Ronda", + "totalRounds": "Total de Rondas", + "activePerHour": "Ativos por Hora", + "peakHours": "Horários de Pico", + "workHours": "Horário de Trabalho", + "morningHours": "Horário Matinal", + "offPeakHours": "Horários Fora do Pico", + "agentConfig": "Configuração do Agente", + "activeTimePeriod": "Horários Ativos", + "postsPerHour": "Publicações/h", + "commentsPerHour": "Comentários/h", + "responseDelay": "Atraso de Resposta", + "activityLevel": "Nível de Atividade", + "sentimentBias": "Viés de Sentimento", + "influenceWeight": "Influência", + "recommendAlgoConfig": "Configuração do Algoritmo de Recomendação", + "platform1Name": "Plataforma 1: Praça / Feed", + "platform2Name": "Plataforma 2: Tópico / Comunidade", + "recencyWeight": "Peso de Recência", + "popularityWeight": "Peso de Popularidade", + "relevanceWeight": "Peso de Relevância", + "viralThreshold": "Limiar de Viralização", + "echoChamberStrength": "Força da Câmara de Eco", + "llmConfigReasoning": "Raciocínio de Configuração do LLM", + "initialActivation": "Orquestração da Ativação Inicial", + "initialActivationDesc": "Gera automaticamente eventos de ativação inicial e tópicos em destaque com base na direção narrativa para orientar o estado inicial do mundo da simulação", + "orchestrating": "A orquestrar", + "narrativeDirection": "Direção Narrativa", + "initialHotTopics": "Tópicos Iniciais em Destaque", + "initialActivationSeq": "Sequência de Ativação Inicial ({count})", + "setupComplete": "Configuração Concluída", + "setupCompleteDesc": "O ambiente de simulação está pronto. Agora pode iniciar a simulação.", + "roundsConfig": "Configuração de Rondas da Simulação", + "roundsConfigDesc": "O MiroFish planeia automaticamente simular {hours} horas do mundo real, com cada ronda a representar {minutesPerRound} minutos de tempo decorrido", + "customToggle": "Personalizado", + "roundsUnit": "rondas", + "estimatedDuration": "Para 100 Agentes: estimativa de ~{minutes} minutos", + "estimatedDurationFull": "Para 100 Agentes: estimativa de {minutes} minutos", + "recommendedRounds": "{rounds} (recomendado)", + "customTip": "Para primeiras execuções, recomendamos vivamente alternar para o 'Modo Personalizado' e reduzir as rondas para uma pré-visualização rápida e menor risco de erros", + "backToGraphBuild": "Voltar à Construção do Grafo", + "startDualWorldSim": "Iniciar Simulação Paralela em Dois Mundos", + "profileModalAge": "Idade Aparente", + "profileModalGender": "Género Aparente", + "profileModalCountry": "País/Região", + "profileModalMbti": "MBTI Aparente", + "profileModalBio": "Biografia da Persona", + "profileModalTopics": "Tópicos Relacionados com a Semente de Realidade", + "profileModalPersona": "Historial Detalhado da Persona", + "personaDimExperience": "Experiência Completa do Evento", + "personaDimExperienceDesc": "Trajetória comportamental completa neste evento", + "personaDimBehavior": "Perfil Comportamental", + "personaDimBehaviorDesc": "Resumo de experiências e preferências comportamentais", + "personaDimMemory": "Impressão de Memória Única", + "personaDimMemoryDesc": "Memórias formadas a partir de sementes de realidade", + "personaDimSocial": "Rede Social", + "personaDimSocialDesc": "Ligações individuais e grafo de interação", + "genderMale": "Masculino", + "genderFemale": "Feminino", + "genderOther": "Outro", + "yearsOld": "anos", + "initializing": "A inicializar", + "generating": "A gerar" + }, + "step3": { + "startGenerateReport": "Gerar Relatório", + "generatingReport": "A iniciar...", + "waitingForActions": "A aguardar ações dos agentes...", + "errorMissingSimId": "Erro: simulationId em falta", + "startingDualSim": "A iniciar simulação paralela em duas plataformas...", + "graphMemoryUpdateEnabled": "Atualização dinâmica de memória do grafo ativada", + "setMaxRounds": "Máximo de rondas de simulação definido em: {rounds}", + "oldSimCleared": "Logs antigos de simulação limpos, a reiniciar simulação", + "engineStarted": "Motor de simulação iniciado com sucesso", + "startFailed": "Falha ao iniciar: {error}", + "startException": "Erro ao iniciar: {error}", + "stoppingSim": "A parar simulação...", + "simStopped": "Simulação parada", + "stopFailed": "Falha ao parar: {error}", + "stopException": "Erro ao parar: {error}", + "allPlatformsCompleted": "Todas as simulações de plataforma terminaram", + "simCompleted": "Simulação concluída", + "graphRealtimeRefresh": "Atualização em tempo real do grafo ativada (30s)", + "graphRefreshStopped": "Atualização em tempo real do grafo interrompida", + "preparingGoBack": "A preparar o regresso ao Passo 2, a encerrar simulação...", + "closingSimEnv": "A encerrar ambiente de simulação...", + "simEnvClosed": "Ambiente de simulação encerrado", + "closeFailed": "Falha ao encerrar o ambiente de simulação, a tentar paragem forçada...", + "stoppingProcess": "A parar processo de simulação...", + "checkStatusFailed": "Falha ao verificar estado da simulação: {error}", + "forceStopSuccess": "Simulação parada à força", + "forceStopFailed": "Paragem forçada falhou: {error}", + "startGenerateReportBtn": "Gerar Relatório", + "generatingReportBtn": "A iniciar..." + }, + "step4": { + "generatingSection": "A gerar {title}...", + "goToInteraction": "Entrar na Interação Profunda", + "waitingForReportAgent": "A aguardar o Report Agent...", + "collapse": "Recolher ▲", + "expandAll": "Mostrar todos os {count} ▼", + "expandAllEntities": "Mostrar todas as {count} ▼", + "scenarioLabel": "Cenário: ", + "tabKeyFacts": "Factos Principais ({count})", + "tabCoreEntities": "Entidades Centrais ({count})", + "tabRelationChains": "Cadeias de Relação ({count})", + "tabSubQueries": "Subconsultas ({count})", + "panelKeyFacts": "Factos principais mais recentes da memória temporal", + "totalCount": "{count} no total", + "totalEntityCount": "{count} no total", + "panelCoreEntities": "Entidades Centrais", + "factCount": "{count} factos", + "panelRelationChains": "Cadeias de Relação", + "panelSubQueries": "Subperguntas de análise de consulta de desvio", + "emptyKeyFacts": "Nenhum facto principal disponível", + "emptyCoreEntities": "Nenhuma entidade central disponível", + "emptyRelationChains": "Nenhuma cadeia de relação disponível", + "tabActiveFacts": "Factos Ativos ({count})", + "tabHistoricalFacts": "Factos Históricos ({count})", + "tabEntities": "Entidades ({count})", + "panelActiveFacts": "Factos Ativos", + "emptyActiveFacts": "Nenhum facto ativo disponível", + "panelHistoricalFacts": "Factos Históricos", + "emptyHistoricalFacts": "Nenhum facto histórico disponível", + "panelEntities": "Entidades", + "emptyEntities": "Nenhuma entidade disponível", + "searchLabel": "Pesquisar: ", + "tabFacts": "Factos ({count})", + "tabEdges": "Arestas ({count})", + "tabNodes": "Nós ({count})", + "panelSearchResults": "Resultados da Pesquisa", + "emptySearchResults": "Nenhum resultado encontrado", + "panelRelatedEdges": "Arestas Relacionadas", + "panelRelatedNodes": "Nós Relacionados", + "world1": "Mundo 1", + "world2": "Mundo 2" + }, + "step5": { + "interactiveTools": "Ferramentas Interativas", + "agentsAvailable": "{count} agentes disponíveis", + "chatWithReportAgent": "Conversar com o Report Agent", + "chatWithAgent": "Converse com qualquer indivíduo do mundo", + "selectChatTarget": "Selecionar alvo da conversa", + "sendSurvey": "Enviar inquérito ao mundo", + "reportAgentChat": "Report Agent - Conversa", + "reportAgentDesc": "Uma versão conversacional do agente gerador de relatórios com acesso a 4 ferramentas profissionais e à memória completa do MiroFish", + "toolInsightForge": "InsightForge - Atribuição Profunda", + "toolInsightForgeDesc": "Alinha dados reais das sementes com o estado da simulação, combinando Memória Global/Local para análise de atribuição profunda entre períodos temporais", + "toolPanoramaSearch": "PanoramaSearch - Rastreio Completo", + "toolPanoramaSearchDesc": "Algoritmo de pesquisa em largura (BFS) baseado em grafo que reconstrói caminhos de propagação de eventos, capturando a topologia completa do fluxo de informação", + "toolQuickSearch": "QuickSearch - Obtenção Rápida", + "toolQuickSearchDesc": "Interface de consulta instantânea baseada em GraphRAG com indexação otimizada para extração rápida de atributos de nós e factos discretos", + "toolInterviewSubAgent": "InterviewSubAgent - Entrevista Virtual", + "toolInterviewSubAgentDesc": "Entrevistas autónomas que conduzem diálogos paralelos em múltiplas rondas com indivíduos simulados, recolhendo dados de opinião não estruturados e estados psicológicos", + "profileBio": "Biografia", + "chatEmptyReportAgent": "Converse com o Report Agent para explorar o conteúdo do relatório em profundidade", + "chatEmptyAgent": "Converse com indivíduos simulados para compreender as suas perspetivas", + "chatInputPlaceholder": "Escreva a sua pergunta...", + "selectSurveyTarget": "Selecionar alvos do inquérito", + "selectedCount": "Selecionados {selected} / {total}", + "surveyQuestions": "Perguntas do Inquérito", + "surveyInputPlaceholder": "Escreva a pergunta que pretende fazer a todos os alvos selecionados...", + "submitSurvey": "Enviar Inquérito", + "surveyResults": "Resultados do Inquérito", + "surveyResultsCount": "{count} respostas", + "selectAll": "Selecionar Tudo", + "clearSelection": "Limpar", + "errorOccurred": "Lamentamos, ocorreu um erro: {error}", + "noResponse": "Sem resposta", + "requestFailed": "Pedido falhou", + "selectAgentFirst": "Por favor, selecione primeiro um indivíduo simulado" + }, + "graph": { + "panelTitle": "Visualização de Relações do Grafo", + "refreshGraph": "Atualizar Grafo", + "graphMemoryRealtime": "Memória de curto/longo prazo do GraphRAG a atualizar em tempo real", + "realtimeUpdating": "A atualizar em tempo real...", + "pendingContentHint": "Parte do conteúdo ainda está a ser processado. Considere atualizar o grafo manualmente mais tarde.", + "nodeDetails": "Detalhes do Nó", + "relationship": "Relação", + "graphDataLoading": "A carregar dados do grafo...", + "waitingOntology": "A aguardar geração da ontologia...", + "toggleMaximize": "Maximizar/Restaurar", + "closeHint": "Fechar sugestão" + }, + "history": { + "title": "Histórico de Simulações", + "graphBuild": "Construção do Grafo", + "envSetup": "Configuração do Ambiente", + "analysisReport": "Relatório de Análise", + "moreFiles": "+{count} ficheiros", + "noFiles": "Sem ficheiros", + "loadingText": "A carregar...", + "simRequirement": "Requisito da Simulação", + "relatedFiles": "Ficheiros Relacionados", + "noRelatedFiles": "Nenhum ficheiro relacionado", + "replayTitle": "Repetição da Simulação", + "step1Button": "Construção do Grafo", + "step2Button": "Configuração do Ambiente", + "step4Button": "Relatório de Análise", + "replayHint": "O Passo 3 'Executar Simulação' e o Passo 5 'Interação Profunda' têm de ser iniciados em tempo de execução e não suportam repetição de histórico", + "notStarted": "Não iniciado", + "roundsProgress": "{current}/{total} rondas", + "untitledSimulation": "Simulação sem título", + "unknownFile": "Ficheiro desconhecido" + }, + "api": { + "projectNotFound": "Projeto não encontrado: {id}", + "projectDeleteFailed": "Projeto não encontrado ou falha na eliminação: {id}", + "projectDeleted": "Projeto eliminado: {id}", + "projectReset": "Projeto reposto: {id}", + "requireSimulationRequirement": "Por favor, forneça um requisito de simulação (simulation_requirement)", + "requireFileUpload": "Por favor, carregue pelo menos um ficheiro de documento", + "noDocProcessed": "Nenhum documento foi processado com sucesso. Verifique os formatos dos ficheiros.", + "requireProjectId": "Por favor, forneça project_id", + "configError": "Erro de configuração: {details}", + "zepApiKeyMissing": "ZEP_API_KEY não configurada", + "ontologyNotGenerated": "Ontologia ainda não gerada. Chame /ontology/generate primeiro.", + "graphBuilding": "Construção do grafo em curso. Não reenvie. Para forçar reconstrução, adicione force: true.", + "textNotFound": "Conteúdo de texto extraído não encontrado", + "ontologyNotFound": "Definição da ontologia não encontrada", + "graphBuildStarted": "Tarefa de construção do grafo iniciada. Consulte o progresso em /task/{taskId}.", + "graphBuildComplete": "Construção do grafo concluída", + "buildFailed": "Falha na construção: {error}", + "taskNotFound": "Tarefa não encontrada: {id}", + "graphDeleted": "Grafo eliminado: {id}", + "entityNotFound": "Entidade não encontrada: {id}", + "graphNotBuilt": "Grafo ainda não construído. Chame /api/graph/build primeiro.", + "requireSimulationId": "Por favor, forneça simulation_id", + "simulationNotFound": "Simulação não encontrada: {id}", + "projectMissingRequirement": "O projeto não possui requisito de simulação (simulation_requirement)", + "prepareStarted": "Tarefa de preparação iniciada. Consulte o progresso em /api/simulation/prepare/status.", + "alreadyPrepared": "Preparação já concluída. Não é necessário regenerar.", + "notStartedPrepare": "Preparação não iniciada. Chame /api/simulation/prepare.", + "taskCompletedPrepared": "Tarefa concluída (preparação já existente)", + "requireTaskOrSimId": "Por favor, forneça task_id ou simulation_id", + "configNotFound": "Configuração da simulação não encontrada. Chame /prepare primeiro.", + "configFileNotFound": "Ficheiro de configuração não encontrado. Chame /prepare primeiro.", + "unknownScript": "Script desconhecido: {name}. Disponíveis: {allowed}", + "scriptFileNotFound": "Ficheiro de script não encontrado: {name}", + "requireGraphId": "Por favor, forneça graph_id", + "noMatchingEntities": "Nenhuma entidade correspondente encontrada", + "maxRoundsPositive": "max_rounds tem de ser um inteiro positivo", + "maxRoundsInvalid": "max_rounds tem de ser um inteiro válido", + "invalidPlatform": "Tipo de plataforma inválido: {platform}. Opções: twitter/reddit/parallel", + "simRunningForceHint": "A simulação está em execução. Pare-a primeiro via /stop, ou utilize force=true para reiniciar.", + "simNotReady": "Simulação não está pronta. Estado atual: {status}. Chame /prepare primeiro.", + "graphIdRequiredForMemory": "A atualização de memória do grafo requer um graph_id válido. Garanta que o grafo está construído.", + "dbNotExist": "A base de dados não existe. A simulação pode ainda não ter sido executada.", + "requireMessage": "Por favor, forneça uma mensagem", + "missingGraphId": "ID do grafo em falta", + "missingGraphIdEnsure": "ID do grafo em falta. Certifique-se de que o grafo foi construído.", + "missingSimRequirement": "Descrição do requisito de simulação em falta", + "reportAlreadyExists": "O relatório já existe", + "reportGenerateStarted": "Tarefa de geração de relatório iniciada. Consulte o progresso em /api/report/generate/status.", + "reportGenerated": "Relatório gerado", + "reportNotFound": "Relatório não encontrado: {id}", + "noReportForSim": "Nenhum relatório encontrado para esta simulação: {id}", + "reportDeleted": "Relatório eliminado: {id}", + "reportGenerateFailed": "Geração de relatório falhou", + "sectionNotFound": "Secção não encontrada: section_{index}.md", + "reportProgressNotAvail": "Relatório não encontrado ou progresso indisponível: {id}", + "requireAgentId": "Por favor, forneça agent_id", + "requirePrompt": "Por favor, forneça um prompt (pergunta da entrevista)", + "invalidInterviewPlatform": "A plataforma tem de ser 'twitter' ou 'reddit'", + "envNotRunning": "Ambiente de simulação não está em execução ou foi encerrado. Garanta que a simulação está concluída e em modo de espera por comando.", + "interviewTimeout": "Tempo esgotado para resposta da entrevista: {error}", + "requireInterviews": "Por favor, forneça interviews (lista de entrevistas)", + "interviewListMissingAgentId": "Item {index} da lista de entrevistas sem agent_id", + "interviewListMissingPrompt": "Item {index} da lista de entrevistas sem prompt", + "interviewListInvalidPlatform": "A plataforma do item {index} da lista de entrevistas tem de ser 'twitter' ou 'reddit'", + "batchInterviewTimeout": "Tempo esgotado para resposta em lote de entrevistas: {error}", + "globalInterviewTimeout": "Tempo esgotado para resposta global de entrevistas: {error}", + "envRunning": "Ambiente em execução e pronto para comandos de Entrevista", + "envNotRunningShort": "Ambiente não está em execução ou foi encerrado", + "requireGraphIdAndQuery": "Por favor, forneça graph_id e query", + "initReportAgent": "A inicializar o Report Agent..." + }, + "progress": { + "initGraphService": "A inicializar serviço de construção do grafo...", + "textChunking": "A dividir texto em chunks...", + "creatingZepGraph": "A criar grafo no Zep...", + "settingOntology": "A definir a ontologia...", + "addingChunks": "A adicionar {count} chunks de texto...", + "waitingZepProcess": "A aguardar que o Zep processe os dados...", + "fetchingGraphData": "A obter dados do grafo...", + "graphBuildComplete": "Construção do grafo concluída", + "buildFailed": "Falha na construção: {error}", + "startBuildingGraph": "A iniciar construção do grafo...", + "graphCreated": "Grafo criado: {graphId}", + "ontologySet": "Ontologia definida", + "textSplit": "Texto dividido em {count} chunks", + "fetchingGraphInfo": "A obter informações do grafo...", + "sendingBatch": "A enviar lote {current}/{total} ({chunks} chunks)...", + "batchFailed": "Lote {batch} falhou: {error}", + "noEpisodesWait": "Nenhum episódio para aguardar", + "waitingEpisodes": "A aguardar o processamento de {count} chunks de texto...", + "episodesTimeout": "Alguns chunks excederam o tempo limite, {completed}/{total} concluídos", + "zepProcessing": "Zep a processar... {completed}/{total} concluídos, {pending} pendentes ({elapsed}s)", + "processingComplete": "Processamento concluído: {completed}/{total}", + "taskComplete": "Tarefa concluída", + "taskFailed": "Tarefa falhou", + "startPreparingEnv": "A preparar ambiente de simulação...", + "connectingZepGraph": "A ligar ao grafo do Zep...", + "readingNodeData": "A ler dados dos nós...", + "readingComplete": "Concluído, {count} entidades encontradas", + "startGenerating": "A iniciar geração...", + "analyzingRequirements": "A analisar requisitos da simulação...", + "generatingOutline": "A gerar estrutura do relatório...", + "parsingOutline": "A analisar a estrutura...", + "outlinePlanComplete": "Planeamento da estrutura concluído", + "deepSearchAndWrite": "Pesquisa profunda e redação ({current}/{max})", + "initReport": "A inicializar relatório...", + "startPlanningOutline": "A planear estrutura do relatório...", + "outlineDone": "Estrutura concluída, {count} secções", + "generatingSection": "A gerar secção: {title} ({current}/{total})", + "sectionDone": "Secção {title} concluída", + "assemblingReport": "A montar relatório completo...", + "reportComplete": "Geração do relatório concluída", + "reportFailed": "Falha na geração do relatório: {error}", + "savingProfiles": "A guardar ficheiros de perfil...", + "profilesComplete": "Concluído, {count} perfis gerados", + "callingLLMConfig": "A chamar o LLM para gerar configuração...", + "savingConfigFiles": "A guardar ficheiros de configuração...", + "configComplete": "Geração de configuração concluída", + "generatingTimeConfig": "A gerar configuração de tempo...", + "generatingEventConfig": "A gerar configuração de eventos e tópicos em destaque...", + "generatingAgentConfig": "A gerar configuração de agentes ({start}-{end}/{total})...", + "generatingPlatformConfig": "A gerar configuração de plataforma...", + "zepSearchQuery": "Toda a informação, atividades, eventos, relações e contexto sobre {name}", + "timeConfigLabel": "Configuração de Tempo", + "eventConfigLabel": "Configuração de Eventos", + "agentConfigResult": "Configuração de Agentes: {count} gerados", + "postAssignResult": "Atribuição de Publicações: {count} publicações atribuídas", + "profileGenerated": "[Gerado] {name} ({type})", + "readingGraphEntities": "A Ler Entidades do Grafo", + "generatingProfiles": "A Gerar Perfis de Agentes", + "generatingSimConfig": "A Gerar Configuração da Simulação", + "preparingScripts": "A Preparar Scripts" + }, + "log": { + "preparingGoBack": "A preparar o regresso ao Passo 2, a encerrar simulação...", + "closingSimEnv": "A encerrar ambiente de simulação...", + "simEnvClosed": "✓ Ambiente de simulação encerrado", + "closeSimEnvFailed": "Falha ao encerrar o ambiente de simulação, a tentar paragem forçada...", + "simForceStopSuccess": "✓ Simulação parada à força", + "forceStopFailed": "Paragem forçada falhou: {error}", + "stoppingSimProcess": "A parar processo de simulação...", + "simStopped": "✓ Simulação parada", + "stopSimFailed": "Falha ao parar a simulação: {error}", + "checkStatusFailed": "Falha ao verificar estado da simulação: {error}", + "enterStep4": "A entrar no Passo 4: Geração do Relatório", + "loadingSimData": "A carregar dados da simulação: {id}", + "timeConfig": "Configuração de tempo: {minutes} minutos por ronda", + "timeConfigFetchFailed": "Falha ao obter configuração de tempo, a usar predefinição: {minutes} min/ronda", + "projectLoadSuccess": "Projeto carregado: {id}", + "loadSimDataFailed": "Falha ao carregar dados da simulação: {error}", + "loadException": "Erro ao carregar: {error}", + "graphDataLoadSuccess": "Dados do grafo carregados com sucesso", + "graphLoadFailed": "Falha ao carregar o grafo: {error}", + "graphRealtimeRefreshStart": "Atualização em tempo real do grafo ativada (30s)", + "graphRealtimeRefreshStop": "Atualização em tempo real do grafo interrompida", + "simRunViewInit": "SimulationRunView inicializado", + "customRounds": "Rondas personalizadas de simulação: {rounds}", + "enterStep3": "A entrar no Passo 3: Executar Simulação", + "customRoundsConfig": "Rondas personalizadas de simulação: {rounds} rondas", + "useAutoRounds": "A usar rondas de simulação configuradas automaticamente", + "detectedSimEnvRunning": "Detetado ambiente de simulação em execução, a encerrar...", + "closeSimEnvFailedWithError": "Falha ao encerrar ambiente de simulação: {error}", + "closeSimEnvException": "Erro no encerramento do ambiente de simulação: {error}", + "detectedSimRunning": "Detetada simulação em execução, a parar...", + "forceStopSimFailed": "Paragem forçada da simulação falhou: {error}", + "forceStopSimException": "Erro na paragem forçada da simulação: {error}", + "simViewInit": "SimulationView inicializado", + "errorMissingSimId": "Erro: simulationId em falta", + "simInstanceCreated": "Instância de simulação criada: {id}", + "preparingSimEnv": "A preparar ambiente de simulação...", + "detectedExistingPrep": "Detetada preparação existente, a utilizá-la diretamente", + "prepareTaskStarted": "Tarefa de preparação iniciada", + "prepareTaskId": " └─ ID da Tarefa: {taskId}", + "zepEntitiesFound": "Encontradas {count} entidades no grafo do Zep", + "entityTypes": " └─ Tipos de entidade: {types}", + "startPollingProgress": "A consultar progresso da preparação...", + "prepareFailed": "Preparação falhou: {error}", + "prepareException": "Erro na preparação: {error}", + "prepareComplete": "✓ Preparação concluída", + "prepareFailedWithError": "✗ Preparação falhou: {error}", + "startGeneratingConfig": "A gerar configuração de simulação de dupla plataforma...", + "generatingAgentProfileConfig": "A gerar configuração de personas de agentes...", + "generatingLLMConfig": "A chamar o LLM para gerar parâmetros de configuração da simulação...", + "configComplete": "✓ Configuração da simulação gerada", + "configSummaryAgents": " ├─ Agentes: {count}", + "configSummaryHours": " ├─ Duração: {hours} horas", + "configSummaryPosts": " ├─ Publicações iniciais: {count}", + "configSummaryTopics": " ├─ Tópicos em destaque: {count}", + "configSummaryPlatforms": " └─ Plataformas: Twitter {twitter}, Reddit {reddit}", + "timeConfigDetail": "Configuração de tempo: {minutes} min/ronda, {rounds} rondas no total", + "narrativeDirection": "Direção narrativa: {direction}", + "envSetupComplete": "✓ Configuração do ambiente concluída, pronto para simular", + "startSimCustomRounds": "A iniciar simulação, rondas personalizadas: {rounds}", + "startSimAutoRounds": "A iniciar simulação, rondas configuradas automaticamente: {rounds}", + "startGeneratingAgentProfiles": "A gerar personas de agentes...", + "agentProfile": "→ Persona do agente {current}/{total}: {name} ({profession})", + "allProfilesComplete": "✓ Todas as {count} personas de agentes geradas", + "loadingExistingConfig": "A carregar dados de configuração existentes...", + "loadedAgentProfiles": "Carregadas {count} personas de agentes", + "configLoadSuccess": "✓ Configuração da simulação carregada", + "configSummaryPostsAlt": " └─ Publicações iniciais: {count}", + "configGenerating": "Configuração a gerar, a consultar...", + "loadConfigFailed": "Falha ao carregar configuração: {error}", + "step2Init": "Configuração de ambiente do Passo 2 inicializada", + "step3Init": "Execução de simulação do Passo 3 inicializada", + "startingDualSim": "A iniciar simulação paralela em duas plataformas...", + "setMaxRounds": "Máximo de rondas de simulação definido em: {rounds}", + "graphMemoryUpdateEnabled": "Atualização dinâmica de memória do grafo ativada", + "oldSimCleared": "✓ Logs antigos de simulação limpos, a reiniciar simulação", + "engineStarted": "✓ Motor de simulação iniciado com sucesso", + "startFailed": "✗ Falha ao iniciar: {error}", + "startException": "✗ Erro ao iniciar: {error}", + "stoppingSim": "A parar simulação...", + "simStoppedSuccess": "✓ Simulação parada", + "stopFailed": "Falha ao parar: {error}", + "stopException": "Erro ao parar: {error}", + "allPlatformsCompleted": "✓ Todas as simulações de plataforma terminaram", + "simCompleted": "✓ Simulação concluída", + "reportRequestSent": "Pedido de geração de relatório enviado, aguarde...", + "startingReportGen": "A iniciar geração de relatório...", + "reportGenTaskStarted": "✓ Tarefa de geração de relatório iniciada: {reportId}", + "reportGenFailed": "✗ Falha ao iniciar a geração de relatório: {error}", + "reportGenException": "✗ Erro na geração de relatório: {error}", + "step5Init": "Interação profunda do Passo 5 inicializada", + "selectChatTarget": "Alvo da conversa selecionado: {name}", + "sendFailed": "Envio falhou: {error}", + "sendToReportAgent": "Enviado ao Report Agent: {message}...", + "reportAgentReplied": "Report Agent respondeu", + "sendToAgent": "Enviado para {name}: {message}...", + "agentReplied": "{name} respondeu", + "sendSurvey": "A enviar inquérito para {count} alvos...", + "receivedReplies": "Recebidas {count} respostas", + "surveySendFailed": "Envio do inquérito falhou: {error}", + "loadReportData": "A carregar dados do relatório: {id}", + "loadReportFailed": "Falha ao carregar relatório: {error}", + "reportDataLoaded": "Dados do relatório carregados", + "loadReportLogFailed": "Falha ao carregar logs do relatório: {error}", + "loadedProfiles": "Carregados {count} indivíduos simulados", + "loadProfilesFailed": "Falha ao carregar indivíduos simulados: {error}", + "interactionViewInit": "InteractionView inicializado", + "reportViewInit": "ReportView inicializado", + "getReportInfoFailed": "Falha ao obter informações do relatório: {error}", + "enterStep": "A entrar no Passo {step}: {name}", + "returnToStep": "A regressar ao Passo {step}: {name}", + "customSimRounds": "Rondas personalizadas de simulação: {rounds} rondas" + }, + "report": { + "taskStarted": "Tarefa de geração de relatório iniciada", + "planningStart": "A iniciar planeamento da estrutura do relatório", + "fetchSimContext": "A obter contexto da simulação", + "planningComplete": "Planeamento da estrutura concluído", + "sectionStart": "A iniciar geração da secção: {title}", + "reactThought": "ReACT ronda {iteration} a pensar", + "toolCall": "A chamar ferramenta: {toolName}", + "toolResult": "Ferramenta {toolName} devolveu resultado", + "llmResponse": "Resposta do LLM (chamadas de ferramenta: {hasToolCalls}, resposta final: {hasFinalAnswer})", + "sectionContentDone": "Geração de conteúdo da secção {title} concluída", + "sectionComplete": "Geração da secção {title} concluída", + "reportComplete": "Geração do relatório concluída", + "errorOccurred": "Ocorreu um erro: {error}", + "agentInitDone": "ReportAgent inicializado: graph_id={graphId}, simulation_id={simulationId}", + "executingTool": "A executar ferramenta: {toolName}, parâmetros: {params}", + "toolExecFailed": "Execução da ferramenta falhou: {toolName}, erro: {error}", + "startPlanningOutline": "A iniciar planeamento da estrutura do relatório...", + "outlinePlanDone": "Planeamento da estrutura concluído: {count} secções", + "outlinePlanFailed": "Planeamento da estrutura falhou: {error}", + "reactGenerateSection": "ReACT a gerar secção: {title}", + "sectionIterNone": "Secção {title} iteração {iteration}: LLM devolveu None", + "sectionConflict": "Secção {title} ronda {iteration}: LLM devolveu tanto chamada de ferramenta como Final Answer (conflito #{conflictCount})", + "sectionConflictDowngrade": "Secção {title}: {conflictCount} conflitos consecutivos, a despromover para truncar e executar a primeira chamada de ferramenta", + "sectionGenDone": "Geração da secção {title} concluída (chamadas de ferramenta: {count})", + "multiToolOnlyFirst": "O LLM tentou {total} chamadas de ferramenta, a executar apenas a primeira: {toolName}", + "sectionNoPrefix": "Secção {title} sem prefixo 'Final Answer:', a adotar saída do LLM como conteúdo final (chamadas de ferramenta: {count})", + "sectionMaxIter": "Secção {title} atingiu o máximo de iterações, a forçar geração", + "sectionForceFailed": "Secção {title}: LLM devolveu None ao forçar encerramento, a usar mensagem de erro predefinida", + "sectionGenFailedContent": "(Esta secção não pôde ser gerada: o LLM devolveu resposta vazia; tente novamente mais tarde)", + "outlineSavedToFile": "Estrutura guardada em ficheiro: {reportId}/outline.json", + "sectionSaved": "Secção guardada: {reportId}/section_{sectionNum}.md", + "reportGenDone": "Geração do relatório concluída: {reportId}", + "reportGenFailed": "Geração do relatório falhou: {error}", + "agentChat": "Conversa do Report Agent: {message}...", + "fetchReportFailed": "Falha ao obter conteúdo do relatório: {error}", + "outlineSaved": "Estrutura guardada: {reportId}", + "sectionFileSaved": "Secção guardada: {reportId}/{fileSuffix}", + "fullReportAssembled": "Relatório completo montado: {reportId}", + "reportSaved": "Relatório guardado: {reportId}", + "reportFolderDeleted": "Pasta do relatório eliminada: {reportId}", + "redirectToQuickSearch": "search_graph redirecionado para quick_search", + "redirectToInsightForge": "get_simulation_context redirecionado para insight_forge" + }, + "console": { + "zepToolsInitialized": "ZepToolsService inicializado", + "zepRetryAttempt": "Tentativa {attempt} de {operation} no Zep falhou: {error}, a tentar novamente em {delay}s...", + "zepAllRetriesFailed": "Operação {operation} no Zep falhou após {retries} tentativas: {error}", + "graphSearch": "Pesquisa no grafo: graph_id={graphId}, query={query}...", + "graphSearchOp": "Pesquisa no grafo (graph={graphId})", + "searchComplete": "Pesquisa concluída: encontrados {count} factos relevantes", + "zepSearchApiFallback": "API de pesquisa do Zep falhou, a recorrer à pesquisa local: {error}", + "usingLocalSearch": "A utilizar pesquisa local: query={query}...", + "localSearchComplete": "Pesquisa local concluída: encontrados {count} factos relevantes", + "localSearchFailed": "Pesquisa local falhou: {error}", + "fetchingAllNodes": "A obter todos os nós do grafo {graphId}...", + "fetchedNodes": "{count} nós obtidos", + "fetchingAllEdges": "A obter todas as arestas do grafo {graphId}...", + "fetchedEdges": "{count} arestas obtidas", + "fetchingNodeDetail": "A obter detalhes do nó: {uuid}...", + "fetchNodeDetailOp": "Obter detalhes do nó (uuid={uuid}...)", + "fetchNodeDetailFailed": "Falha ao obter detalhes do nó: {error}", + "fetchingNodeEdges": "A obter arestas do nó {uuid}...", + "foundNodeEdges": "Encontradas {count} arestas relacionadas com o nó", + "fetchNodeEdgesFailed": "Falha ao obter arestas do nó: {error}", + "fetchingEntitiesByType": "A obter entidades do tipo {type}...", + "foundEntitiesByType": "Encontradas {count} entidades do tipo {type}", + "fetchingEntitySummary": "A obter resumo de relações da entidade {name}...", + "fetchingGraphStats": "A obter estatísticas do grafo {graphId}...", + "fetchingSimContext": "A obter contexto da simulação: {requirement}...", + "insightForgeStart": "InsightForge - obtenção profunda de insights: {query}...", + "generatedSubQueries": "Geradas {count} subconsultas", + "insightForgeComplete": "InsightForge concluído: {facts} factos, {entities} entidades, {relationships} relações", + "generateSubQueriesFailed": "Falha ao gerar subconsultas: {error}, a utilizar predefinições", + "panoramaSearchStart": "PanoramaSearch - pesquisa ampla: {query}...", + "panoramaSearchComplete": "PanoramaSearch concluído: {active} ativos, {historical} históricos", + "quickSearchStart": "QuickSearch - pesquisa simples: {query}...", + "quickSearchComplete": "QuickSearch concluído: {count} resultados", + "interviewAgentsStart": "InterviewAgents - entrevista profunda (API real): {requirement}...", + "profilesNotFound": "Perfis não encontrados para a simulação {simId}", + "loadedProfiles": "Carregados {count} perfis de agentes", + "selectedAgentsForInterview": "Selecionados {count} agentes para entrevista: {indices}", + "generatedInterviewQuestions": "Geradas {count} perguntas de entrevista", + "callingBatchInterviewApi": "A chamar API de entrevista em lote (plataforma dupla): {count} agentes", + "interviewApiReturned": "API de entrevista devolveu: {count} resultados, success={success}", + "interviewApiReturnedFailure": "API de entrevista devolveu falha: {error}", + "interviewApiCallFailed": "Chamada à API de entrevista falhou (ambiente não está em execução?): {error}", + "interviewApiCallException": "Exceção na chamada à API de entrevista: {error}", + "interviewAgentsComplete": "InterviewAgents concluído: entrevistados {count} agentes (plataforma dupla)", + "loadedRedditProfiles": "Carregados {count} perfis de reddit_profiles.json", + "readRedditProfilesFailed": "Falha ao ler reddit_profiles.json: {error}", + "loadedTwitterProfiles": "Carregados {count} perfis de twitter_profiles.csv", + "readTwitterProfilesFailed": "Falha ao ler twitter_profiles.csv: {error}", + "llmSelectAgentFailed": "Seleção de agente pelo LLM falhou, a utilizar seleção predefinida: {error}", + "generateInterviewQuestionsFailed": "Falha ao gerar perguntas de entrevista: {error}", + "generateInterviewSummaryFailed": "Falha ao gerar resumo da entrevista: {error}" + } +}