{
  "knxUltimateAI": {
    "title": "KNX AI (Traffic Analyzer)",
    "sections": {
      "capture": "Capture",
      "analysis": "Analysis",
      "anomalies": "Anomalies",
      "llm": "LLM Assistant"
    },
    "properties": {
      "server": "Gateway",
      "name": "Name",
      "topic": "Topic",
      "notifywrite": "Capture GroupValue_Write",
      "notifyresponse": "Capture GroupValue_Response",
      "notifyreadrequest": "Capture GroupValue_Read",
      "analysisWindowSec": "Analysis window (seconds)",
      "historyWindowSec": "History window (seconds)",
      "maxEvents": "Max stored events",
      "emitIntervalSec": "Auto emit summary (seconds, 0=off)",
      "topN": "Top list size",
      "enablePattern": "Detect simple patterns (A -> B)",
      "patternMaxLagMs": "Pattern max lag (ms)",
      "patternMinCount": "Pattern min occurrences",
      "rateWindowSec": "Rate window (seconds)",
      "maxTelegramPerSecOverall": "Max overall telegrams/sec (0=off)",
      "maxTelegramPerSecPerGA": "Max telegrams/sec per GA (0=off)",
      "flapWindowSec": "Flap window (seconds)",
      "flapMaxChanges": "Max changes per GA in window (0=off)",
      "llmEnabled": "Enable LLM assistant",
      "llmProvider": "Provider",
      "llmBaseUrl": "Endpoint URL",
      "llmApiKey": "API key",
      "llmModel": "Model",
      "llmSystemPrompt": "System prompt",
      "llmTemperature": "Temperature",
      "llmMaxTokens": "Max tokens",
      "llmTimeoutMs": "Timeout (ms)",
      "llmMaxEventsInPrompt": "Recent events included",
      "llmIncludeRaw": "Include raw payload hex",
      "llmIncludeFlowContext": "Include Node-RED KNX node inventory",
      "llmMaxFlowNodesInPrompt": "Max flow nodes included",
      "llmIncludeDocsSnippets": "Include documentation snippets (help/README/examples)",
      "llmDocsLanguage": "Docs language",
      "llmDocsMaxSnippets": "Max docs snippets",
      "llmDocsMaxChars": "Max docs chars"
    },
    "outputs": {
      "summary": "Résumé/Stats",
      "anomalies": "Anomalies",
      "assistant": "Assistant IA"
    },
    "selectlists": {
      "llmProvider": {
        "openai_compat": "OpenAI-compatible (chat/completions)",
        "ollama": "Ollama (local, beta)"
      }
    },
    "messages": {
      "ollamaNotSupported": "Ollama local mode: API key not required. Default endpoint is http://localhost:11434/api/chat.",
      "ollamaNoModels": "No local Ollama model found. Install one or pick one from the library.",
      "installingOllamaModel": "Starting Ollama and installing model…",
      "installedOllamaModel": "Ollama model installed",
      "installOllamaModelFailed": "Failed to install Ollama model",
      "ollamaInstallSteps": "1) Open the model library and copy the model name (for example llama3.1). 2) Put the name in the Model field and click Install it.",
      "ollamaStartedAuto": "Ollama server started automatically."
    },
    "placeholder": {
      "llmBaseUrl": "https://api.openai.com/v1/chat/completions (or your compatible endpoint)",
      "llmApiKey": "Paste API key (starts with sk-)",
      "llmModel": "e.g. gpt-4o-mini",
      "llmSystemPrompt": "Optional. Leave empty for default."
    },
    "sidebar": {
      "ui": {
        "refreshNodeList": "Rafraîchir la liste des nœuds",
        "refreshSummary": "Rafraîchir le résumé",
        "auto": "Auto",
        "sections": {
          "summary": "Résumé",
          "anomalies": "Anomalies",
          "ask": "Demander"
        },
        "empty": {
          "noNodes": "Aucun nœud KNX AI trouvé.",
          "noAnomalies": "Aucune anomalie."
        },
        "chat": {
          "placeholder": "Posez une question sur le trafic KNX…",
          "send": "Envoyer",
          "pending": "Je réfléchis…",
          "llmDisabled": "LLM désactivé dans la configuration du nœud",
          "emptyAnswer": "(réponse vide)"
        },
        "status": {
          "ready": "Prêt",
          "loadingNodes": "Chargement des nœuds…",
          "loading": "Chargement…",
          "asking": "Question…"
        },
        "errors": {
          "loadNodes": "Impossible de charger les nœuds",
          "loadState": "Impossible de charger l’état",
          "askFailed": "Échec de la question"
        }
      },
      "summary": {
        "noData": "Aucune donnée disponible.",
        "header": {
          "gateway": "Passerelle : {{gatewayName}}",
          "updated": "Mis à jour : {{at}}"
        },
        "analysisWindowLine": "Fenêtre d’analyse : {{seconds}} s",
        "statsLine": "Télégrammes : {{telegrams}} · Taux : {{rate}}/s · Écho : {{echoed}} · DPT inconnus : {{unknownDpt}}",
        "topGAsTitle": "Principales adresses de groupe :",
        "eventsTitle": "Événements :",
        "patternsTitle": "Motifs (séquences récurrentes) :",
        "patternItem": "{{from}} → {{to}}  ({{count}} fois en {{withinMs}}ms)"
      }
    },
    "buttons": {
      "installOllamaModel": "2) Install it",
      "ollamaLibrary": "Model library",
      "downloadOllamaModel": "1) Download model"
    }
  }
}
