{
  "home": {
    "title": "AITuber Flow",
    "subtitle": "Visual Workflow Editor",
    "newWorkflow": "New Workflow",
    "import": "Import",
    "loading": "Loading...",
    "retry": "Retry",
    "serverError": "Make sure the backend server is running at http://localhost:8001",
    "templates": "Templates",
    "templatesDesc": "Start quickly with a pre-built workflow",
    "yourWorkflows": "Your Workflows",
    "noWorkflows": "No workflows yet",
    "noWorkflowsDesc": "Create your first workflow or start from a template above",
    "createFirst": "Create Your First Workflow",
    "nodes": "nodes",
    "connections": "connections",
    "delete": "Delete",
    "duplicate": "Duplicate",
    "export": "Export",
    "deleteConfirm": "Delete this workflow?"
  },
  "editor": {
    "save": "Save",
    "saved": "Saved",
    "saving": "Saving...",
    "run": "Run",
    "stop": "Stop",
    "running": "Running",
    "back": "Back",
    "undo": "Undo",
    "redo": "Redo"
  },
  "sidebar": {
    "search": "Search nodes...",
    "input": "Input",
    "llm": "LLM",
    "tts": "TTS",
    "output": "Output",
    "control": "Control",
    "utility": "Utility"
  },
  "settings": {
    "nodeSettings": "Node Settings",
    "selectNode": "Select a node to edit",
    "deleteNode": "Delete Node"
  },
  "logs": {
    "title": "Execution Log",
    "clear": "Clear",
    "empty": "No logs yet. Run the workflow to see execution logs."
  },
  "character": {
    "title": "Character",
    "name": "Name",
    "personality": "Personality"
  },
  "node": {
    "start": "Start",
    "end": "End",
    "manualInput": "Manual Input",
    "consoleOutput": "Console Output",
    "openaiLlm": "OpenAI LLM",
    "anthropicLlm": "Claude LLM",
    "googleLlm": "Gemini LLM",
    "ollamaLlm": "Ollama LLM",
    "voicevoxTts": "VOICEVOX TTS",
    "coeiroinkTts": "COEIROINK TTS",
    "sbv2Tts": "Style-Bert-VITS2",
    "youtubeChat": "YouTube Chat",
    "twitchChat": "Twitch Chat",
    "switch": "Switch",
    "delay": "Delay",
    "loop": "Loop",
    "foreach": "ForEach",
    "httpRequest": "HTTP Request",
    "textTransform": "Text Transform",
    "random": "Random",
    "timer": "Timer",
    "variable": "Variable"
  },
  "nodeDescription": {
    "start": "Workflow entry point.\n[Usage] Processing starts from here. Connect to the next node.",
    "end": "Workflow exit point.\n[Usage] Place at the end of processing. Receives input and completes the workflow.",
    "loop": "Loop node that repeats processing.\n[Usage] Set the repeat count in config. Connect nodes to repeat to the body output.",
    "foreach": "Node that iterates over each element in an array.\n[Usage] Connect array to input. Current element is output to item.",
    "youtube-chat": "Input node for YouTube Live comments.\n[Usage] Set Video ID in config. Outputs message and author when comments arrive.",
    "twitch-chat": "Input node for Twitch chat.\n[Usage] Set channel name in config. Outputs message and author when chats arrive.",
    "manual-input": "Manual text input node.\n[Usage] Enter text at runtime. Useful for testing and debugging.",
    "openai-llm": "LLM node using OpenAI API.\n[Usage] Connect prompt input. Set model and system prompt in config.",
    "voicevox-tts": "TTS node using VOICEVOX.\n[Usage] Connect text to read. Select speaker in config. *Requires VOICEVOX running.",
    "console-output": "Debug node for console output.\n[Usage] Connect any data. Output appears in the console at the bottom.",
    "switch": "Conditional branching node.\n[Usage] Connect value to check. Set conditions in config. Branches to true/false.",
    "delay": "Delay node.\n[Usage] Connect input. Set delay time (ms) in config. Used for timing adjustments.",
    "http-request": "HTTP request node.\n[Usage] Set URL, method, headers in config. Response is output to response.",
    "text-transform": "Text transformation node.\n[Usage] Connect input to text. Set template in config. Use {{text}} to reference input.",
    "random": "Random value generator.\n[Usage] Set range or options in config. Different value output to value each time.",
    "timer": "Auto-trigger timer node.\n[Usage] Set interval (ms) in config. Connect to processes for periodic execution.",
    "variable": "Variable storage node.\n[Usage] Set variable name in config. Use set to save, get to retrieve. Share values in workflow.",
    "anthropic-llm": "LLM node using Anthropic API.\n[Usage] Connect prompt input. Set model and system prompt in config.",
    "google-llm": "LLM node using Google AI API.\n[Usage] Connect prompt input. Set model and system prompt in config.",
    "ollama-llm": "LLM node using local Ollama.\n[Usage] Connect prompt input. Set model in config. *Requires Ollama running.",
    "coeiroink-tts": "TTS node using COEIROINK.\n[Usage] Connect text to read. Select speaker in config. *Requires COEIROINK running.",
    "sbv2-tts": "TTS node using Style-Bert-VITS2.\n[Usage] Connect text to read. Select model in config. *Requires API running.",
    "avatar-configuration": "VRM avatar configuration node.\n[Usage] Set model URL and idle animation. Avatar displays on overlay.",
    "emotion-analyzer": "Emotion analysis node.\n[Usage] Connect text to analyze. Outputs emotion and intensity.",
    "motion-trigger": "Manually trigger expressions and motions.\n[Usage] Connect any input to trigger. Set expression/motion in config.",
    "lip-sync": "Lip-sync generation node.\n[Usage] Connect audio input. Mouth values output in real-time.",
    "subtitle-display": "Subtitle display node.\n[Usage] Connect text to display. Subtitles appear on overlay screen.",
    "audio-player": "Audio playback node.\n[Usage] Connect audio data. Audio plays on overlay screen.",
    "obs-scene-switch": "OBS scene switch node.\n[Usage] Connect trigger to execute. Set scene name in config. *Requires OBS WebSocket enabled.",
    "obs-source-toggle": "OBS source toggle node.\n[Usage] Connect trigger. Set source name and action in config. *Requires OBS WebSocket enabled.",
    "default": "Custom node"
  },
  "status": {
    "processing": "Processing...",
    "completed": "Completed",
    "error": "Error occurred",
    "ready": "Ready"
  },
  "error": {
    "invalidJson": "Invalid JSON file",
    "loadTemplateFailed": "Failed to load template"
  },
  "support": {
    "title": "Support",
    "description": "If you encounter any issues or have feedback, please reach out",
    "issue": "Issue",
    "dm": "X DM"
  },
  "defaults": {
    "workflowName": "New Workflow",
    "assistantName": "AI Assistant",
    "assistantPersonality": "Friendly and helpful"
  },
  "tooltip": {
    "duplicate": "Duplicate",
    "export": "Export",
    "delete": "Delete",
    "runFromNode": "Run from this node",
    "switchToJapanese": "Switch to Japanese",
    "switchToEnglish": "Switch to English"
  },
  "nodeConfig": {
    "nodeType": "Node Type",
    "deleteNode": "Delete Node",
    "start": {
      "label": "Start",
      "autoStart": "Auto Start",
      "autoStartPlaceholder": "Start automatically when workflow runs"
    },
    "end": {
      "label": "End",
      "message": "Completion Message"
    },
    "loop": {
      "label": "Loop",
      "mode": "Loop Mode",
      "modeCount": "Count",
      "modeWhile": "While Condition",
      "modeInfinite": "Infinite",
      "count": "Loop Count",
      "condition": "Condition (for While)",
      "maxIterations": "Max Iterations (safety)"
    },
    "foreach": {
      "label": "ForEach",
      "separator": "Separator"
    },
    "youtubeChat": {
      "label": "YouTube Chat",
      "videoId": "Video ID",
      "apiKey": "API Key"
    },
    "twitchChat": {
      "label": "Twitch Chat",
      "channel": "Channel"
    },
    "openaiLlm": {
      "label": "ChatGPT (OpenAI)",
      "apiKey": "API Key",
      "model": "Model",
      "systemPrompt": "System Prompt",
      "systemPromptPlaceholder": "Enter character settings...",
      "promptBuilder": "Prompt Builder",
      "temperature": "Temperature"
    },
    "anthropicLlm": {
      "label": "Claude (Anthropic)",
      "apiKey": "API Key",
      "model": "Model",
      "systemPrompt": "System Prompt",
      "maxTokens": "Max Tokens",
      "temperature": "Temperature"
    },
    "googleLlm": {
      "label": "Gemini (Google)",
      "apiKey": "API Key",
      "model": "Model",
      "systemPrompt": "System Prompt",
      "maxTokens": "Max Tokens",
      "temperature": "Temperature"
    },
    "ollamaLlm": {
      "label": "LLM (Ollama)",
      "host": "Ollama Host",
      "model": "Model",
      "systemPrompt": "System Prompt",
      "temperature": "Temperature",
      "contextLength": "Context Length"
    },
    "voicevoxTts": {
      "label": "TTS (VOICEVOX)",
      "host": "VOICEVOX Host",
      "speaker": "Speaker",
      "speed": "Speed"
    },
    "coeiroinkTts": {
      "label": "TTS (COEIROINK)",
      "host": "COEIROINK Host",
      "speakerUuid": "Speaker UUID",
      "styleId": "Style ID",
      "speed": "Speed",
      "pitch": "Pitch"
    },
    "sbv2Tts": {
      "label": "TTS (Style-Bert-VITS2)",
      "host": "SBV2 Host",
      "modelName": "Model Name",
      "speakerId": "Speaker ID",
      "style": "Style",
      "styleWeight": "Style Weight",
      "speed": "Speed"
    },
    "manualInput": {
      "label": "Manual Input",
      "text": "Text",
      "textPlaceholder": "Enter text to send..."
    },
    "consoleOutput": {
      "label": "Console Output",
      "prefix": "Prefix"
    },
    "switch": {
      "label": "Switch",
      "mode": "Mode",
      "modeTruthy": "Truthy/Falsy",
      "modeEquals": "Equals",
      "modeContains": "Contains",
      "compareValue": "Compare Value"
    },
    "delay": {
      "label": "Delay",
      "delayMs": "Delay (ms)",
      "randomize": "Randomize",
      "randomMin": "Random Min (ms)",
      "randomMax": "Random Max (ms)"
    },
    "httpRequest": {
      "label": "HTTP Request",
      "url": "URL",
      "method": "Method",
      "headers": "Headers (JSON)",
      "timeout": "Timeout (ms)"
    },
    "textTransform": {
      "label": "Text Transform",
      "operation": "Operation",
      "opTemplate": "Template",
      "opUppercase": "Uppercase",
      "opLowercase": "Lowercase",
      "opTrim": "Trim",
      "opReplace": "Replace",
      "opPrefix": "Prefix",
      "opSuffix": "Suffix",
      "opSplitFirst": "Split First",
      "opSplitLast": "Split Last",
      "opLength": "Length",
      "template": "Template",
      "templateInputs": "Template Inputs",
      "find": "Find (for Replace)",
      "replaceWith": "Replace With",
      "delimiter": "Delimiter (for Split)"
    },
    "random": {
      "label": "Random",
      "mode": "Mode",
      "modeNumber": "Number",
      "modeChoice": "Choice",
      "modeBoolean": "Boolean",
      "min": "Min (for Number)",
      "max": "Max (for Number)",
      "choices": "Choices (comma separated)",
      "trueProbability": "True Probability % (for Boolean)"
    },
    "timer": {
      "label": "Timer",
      "intervalMs": "Interval (ms)",
      "maxTicks": "Max Ticks (0=unlimited)",
      "immediate": "Fire Immediately"
    },
    "variable": {
      "label": "Variable",
      "name": "Variable Name",
      "defaultValue": "Default Value",
      "valueType": "Value Type",
      "typeString": "String",
      "typeNumber": "Number",
      "typeBoolean": "Boolean",
      "typeJson": "JSON"
    },
    "avatarConfiguration": {
      "label": "Avatar Configuration",
      "renderer": "Renderer",
      "rendererVrm": "VRM (Built-in)",
      "rendererVtubeStudio": "VTube Studio",
      "rendererPng": "PNG Images",
      "modelUrl": "VRM Model",
      "idleAnimation": "Idle Animation (FBX)",
      "vtubePort": "VTube Studio Port",
      "pngConfig": "PNG Expression Mappings"
    },
    "motionTrigger": {
      "label": "Motion Trigger",
      "expression": "Expression ID",
      "intensity": "Expression Intensity (0.0-1.0)",
      "motionUrl": "Motion Animation (FBX)",
      "emitEvents": "Emit Avatar Events"
    },
    "emotionAnalyzer": {
      "label": "Emotion Analyzer",
      "method": "Analysis Method",
      "methodLlm": "LLM-based (Recommended)",
      "methodRuleBased": "Rule-based (Keywords)",
      "expressions": "Available Expressions",
      "llmProvider": "LLM Provider",
      "llmApiKey": "LLM API Key",
      "llmModel": "LLM Model",
      "language": "Language",
      "langJa": "Japanese",
      "langEn": "English",
      "langAuto": "Auto-detect",
      "customMappings": "Custom Keyword Mappings (JSON)",
      "emitEvents": "Emit Avatar Events"
    },
    "lipSync": {
      "label": "Lip Sync",
      "method": "Lip Sync Method",
      "methodVolume": "Volume-based (Simple)",
      "methodEnvelope": "Envelope Following",
      "sensitivity": "Sensitivity (1.0-10.0)",
      "smoothing": "Smoothing (0.0-0.9)",
      "threshold": "Threshold (0.0-0.2)",
      "emitRealtime": "Emit Realtime Events",
      "frameRate": "Frame Rate"
    },
    "avatarDisplay": {
      "label": "Avatar Display"
    },
    "audioPlayer": {
      "label": "Audio Player",
      "waitForCompletion": "Wait for Completion",
      "volume": "Volume",
      "outputDevice": "Output Device"
    },
    "subtitleDisplay": {
      "label": "Subtitle Display",
      "style": "Style",
      "position": "Position",
      "fontSize": "Font Size",
      "fontColor": "Font Color",
      "backgroundColor": "Background Color",
      "showSpeaker": "Show Speaker",
      "animation": "Animation",
      "duration": "Duration"
    },
    "obsSceneSwitch": {
      "label": "OBS Scene Switch",
      "host": "Host",
      "port": "Port",
      "password": "Password",
      "sceneName": "Scene Name"
    },
    "obsSourceToggle": {
      "label": "OBS Source Toggle",
      "host": "Host",
      "port": "Port",
      "password": "Password",
      "sceneName": "Scene Name",
      "sourceName": "Source Name",
      "action": "Action"
    },
    "common": {
      "enabled": "Enabled",
      "loadingSpeakers": "Loading speakers...",
      "retry": "Retry",
      "selectSpeaker": "Select a speaker...",
      "uploadFbx": "Upload FBX",
      "uploading": "Uploading...",
      "selectExisting": "Select existing animation...",
      "uploadVrm": "Upload VRM",
      "selectExistingModel": "Select existing model...",
      "clear": "Clear",
      "add": "Add",
      "done": "Done",
      "edit": "Edit",
      "loadDefaults": "Load Defaults"
    }
  },
  "update": {
    "title": "Update Available",
    "downloading": "Downloading update...",
    "error": "Update failed",
    "now": "Update Now",
    "later": "Later",
    "close": "Close",
    "retry": "Retry"
  },
  "globalSettings": {
    "title": "Global Settings",
    "description": "Settings shared across all workflows",
    "llmProviders": "LLM Providers",
    "ttsEngines": "TTS Engines",
    "apiKey": "API Key",
    "model": "Model",
    "host": "Host",
    "save": "Save",
    "saved": "Settings saved",
    "saveError": "Failed to save settings",
    "usingGlobal": "Using Global Settings",
    "override": "Override with node settings",
    "collapse": "Collapse"
  }
}
