export type Locale = 'en' | 'zh-TW' | 'ja'; const translations: Record> = { en: { // Sidebar 'nav.chat': 'Chat', 'nav.skills': 'Skills', 'nav.memory': 'Memory', 'nav.mcp': 'MCP', 'nav.settings': 'Settings', 'nav.channels': 'Channels', 'app.title': 'Claude Agent', 'app.subtitle': 'Personal Assistant', // Chat 'chat.placeholder': 'Type a message...', 'chat.send': 'Send', 'chat.newSession': 'New Session', 'chat.noMessages': 'Start a conversation', 'chat.thinking': 'Thinking...', 'chat.sessions': 'Sessions', // Skills 'skills.title': 'Skills', 'skills.subtitle': '{count} skills available', 'skills.search': 'Search skills...', 'skills.all': 'All', 'skills.prerequisites': 'Prerequisites:', 'skills.noDetails': 'No additional details available.', 'skills.noMatch': 'No skills match your search.', 'skills.loading': 'Loading skills...', 'skills.clickExpand': 'Click a card to expand', // Memory 'memory.title': 'Memory', 'memory.subtitle': 'View and edit assistant memory files', 'memory.edit': 'Edit', 'memory.save': 'Save', 'memory.cancel': 'Cancel', 'memory.saved': 'Saved successfully', 'memory.selectFile': 'Select a file to view', 'skills.export': 'Export All', 'skills.import': 'Import', 'skills.create': '+ New Skill', 'skills.createHint': 'Describe the skill you want. Claude will create it using /skill-creator.', 'skills.createPlaceholder': 'e.g. "A skill that manages my Todoist tasks via CLI"', 'skills.createSubmit': 'Create with AI', 'skills.cancel': 'Cancel', // Settings 'settings.title': 'Settings', 'settings.subtitle': 'Configure language and model preferences', 'settings.language': 'Language', 'settings.model': 'Default Model', // MCP 'mcp.title': 'MCP Servers', 'mcp.subtitle': 'Manage Model Context Protocol servers that provide tools to Claude', 'mcp.active': 'Active', 'mcp.available': 'Available to Add', 'mcp.addCustom': '+ Add Server', 'mcp.addCustomTitle': 'Add Custom MCP Server', 'mcp.add': 'Add', 'mcp.added': 'Added', 'mcp.remove': 'Remove', 'mcp.deleted': 'Removed', 'mcp.save': 'Add', 'mcp.cancel': 'Cancel', 'mcp.loading': 'Loading...', 'mcp.noServers': 'No MCP servers configured.', 'mcp.setupHint': 'Setup Notes:', 'mcp.tier1': 'Zero auth — works out of the box.', 'mcp.cfSetup': 'Set CF_ACCOUNT_ID + CF_API_TOKEN in your shell profile.', 'mcp.nlmSetup': 'Run `uvx notebooklm login` once (opens browser for Google login).', 'mcp.uvxNote': 'All servers require `uvx`. Install: curl -LsSf https://astral.sh/uv/install.sh | sh', 'settings.save': 'Save Settings', 'settings.saving': 'Saving...', 'settings.saved': 'Settings saved.', 'settings.cliTitle': 'CLI Detection', 'settings.detecting': 'Detecting CLIs...', 'settings.notInstalled': 'Not installed', 'settings.migrateTitle': 'Migrate from OpenClaw', 'settings.migrateDesc': 'Import your memory, skills, agents, and config from OpenClaw.', 'settings.migrateChecking': 'Checking for OpenClaw installation...', 'settings.migrateNotFound': 'OpenClaw not found at ~/.openclaw/', 'settings.migrateNotFoundHint': 'If installed elsewhere, use CLI: node scripts/migrate-openclaw.cjs --openclaw-dir /path', 'settings.migrateRun': 'Start Migration', 'settings.migrateRunning': 'Migration in progress...', 'settings.projectTitle': 'Project Directory', 'settings.projectDesc': 'The directory where CLAUDE.md, skills, agents, and memory are stored.', 'settings.projectPlaceholder': '~/claude-agent or /path/to/project', 'settings.projectInit': 'Initialize', 'settings.projectReset': 'Reset Defaults', 'settings.projectBrowse': 'Browse', // Updates 'settings.updatesTitle': 'Updates', 'settings.updatesDesc': 'Check for new versions of Claude Agent.', 'settings.updateCurrentVersion': 'Current version', 'settings.updateAvailable': 'available', 'settings.updateUpToDate': 'Up to date', 'settings.updateLastChecked': 'Last checked:', 'settings.updateCheckNow': 'Check Now', 'settings.updateChecking': 'Checking…', 'settings.updateDownloading': 'Downloading', 'settings.updateReady': 'Ready to install', 'settings.updateInstallNow': 'Install & Restart', 'settings.updateAutoHint': 'Desktop app updates download in the background and can be installed here once ready.', 'settings.updateBanner': 'New version {version} is available. Open the release page to download it, or install it from the desktop app when ready.', 'settings.updateViewRelease': 'View Release →', // Auto-start 'settings.autostartTitle': 'Auto-start on Boot', 'settings.autostartDesc': 'Start the Claude Agent server automatically when you log in. Can be disabled at any time.', 'settings.autostartEnabled': 'Enabled', 'settings.autostartDisabled': 'Disabled', // Webhook 'settings.webhookTitle': 'Webhook Secret', 'settings.webhookDesc': 'Protect the POST /api/webhook endpoint with a shared secret. A secret is required before webhook requests are accepted.', 'settings.webhookPlaceholder': 'Generate or enter a webhook secret', 'settings.webhookGenerate': 'Generate', 'settings.webhookSave': 'Save', 'settings.webhookSaving': 'Saving...', 'settings.webhookSaved': 'Saved', 'settings.webhookEndpointHint': 'Endpoint: POST /api/webhook — pass {"secret":""} in the request body.', // Multi-LLM Executor 'settings.executorTitle': 'Multi-LLM Executor', 'settings.executorSubtitle': 'Choose which AI provider powers conversations', 'settings.executorType': 'Executor Type', 'settings.executorAnthropicKey': 'Anthropic API Key', 'settings.executorOpenAiKey': 'OpenAI API Key', 'settings.executorOpenAiModel': 'OpenAI Model', 'settings.executorGrokKey': 'Grok API Key (xAI)', 'settings.executorGeminiKey': 'Gemini API Key', 'settings.executorOllamaUrl': 'Ollama Base URL', 'settings.executorOllamaModel': 'Ollama Model', 'settings.executorClaudeCliNote': 'Uses Claude CLI (default) — no API key needed', 'settings.executorCliNote': 'Uses CLI tool directly — no API key needed. Ensure the CLI is installed and in PATH.', // Channels 'channels.title': 'Channels', 'channels.subtitle': 'Connect Telegram and Discord bots', 'channels.addTelegram': 'Add Telegram Bot', 'channels.addDiscord': 'Add Discord Bot', 'channels.botToken': 'Bot Token', 'channels.allowedUsers': 'Allowed Users (comma-separated, empty = all)', 'channels.enabled': 'Enabled', 'channels.disabled': 'Disabled', 'channels.delete': 'Delete', 'channels.noChannels': 'No channels configured yet.', 'channels.save': 'Save', 'channels.cancel': 'Cancel', // History 'nav.history': 'History', 'history.title': 'Session History', 'history.subtitle': 'View past conversations and agent actions', 'history.search': 'Search messages...', 'history.noSessions': 'No sessions yet', 'history.selectSession': 'Select a session to view', 'history.messages': 'messages', // Agents 'nav.agents': 'Agents', 'agents.title': 'Agents', 'agents.subtitle': 'Manage AI agent configurations', 'agents.export': 'Export All', 'agents.import': 'Import', 'agents.create': '+ New Agent', 'agents.createHint': 'Describe the agent you want Claude to create.', 'agents.createSubmit': 'Create with AI', 'agents.delete': 'Delete', 'agents.tools': 'Tools', 'agents.noAgents': 'No agents configured.', // Scheduled Tasks 'nav.tasks': 'Schedule', 'tasks.title': 'Scheduled Tasks', 'tasks.subtitle': 'Automate recurring agent tasks with cron schedules', 'tasks.tabTasks': 'Tasks', 'tasks.tabExecutions': 'Executions', 'tasks.add': '+ Add Task', 'tasks.name': 'Task Name', 'tasks.prompt': 'Prompt', 'tasks.agent': 'Agent', 'tasks.schedule': 'Schedule', 'tasks.timezone': 'Timezone', 'tasks.presetEvery6h': 'Every 6 hours', 'tasks.presetDaily9am': 'Daily 9 AM', 'tasks.presetDailyTwice': 'Daily 9 AM & 9 PM', 'tasks.presetWeekly': 'Weekly Monday', 'tasks.presetCustom': 'Custom Cron', 'tasks.run': 'Run Now', 'tasks.noTasks': 'No scheduled tasks yet.', 'tasks.noExecutions': 'No executions yet.', 'tasks.status': 'Status', 'tasks.duration': 'Duration', 'tasks.triggeredBy': 'Triggered By', 'tasks.output': 'Output', 'tasks.save': 'Save', 'tasks.cancel': 'Cancel', // Secrets 'nav.secrets': 'Secrets', 'secrets.title': 'Secrets Vault', 'secrets.subtitle': 'Store API tokens and credentials for skills to use', 'secrets.add': '+ Add Secret', 'secrets.name': 'Name', 'secrets.namePlaceholder': 'e.g. THREADS_TOKEN', 'secrets.value': 'Value', 'secrets.valuePlaceholder': 'Paste your token here', 'secrets.description': 'Description', 'secrets.descPlaceholder': 'What is this token for? (optional)', 'secrets.category': 'Category', 'secrets.save': 'Save', 'secrets.cancel': 'Cancel', 'secrets.edit': 'Edit', 'secrets.delete': 'Delete', 'secrets.show': 'Show', 'secrets.hide': 'Hide', 'secrets.noSecrets': 'No secrets stored yet.', 'secrets.presets': 'Common Tokens', 'secrets.presetsHint': 'Click to add a commonly used credential', 'secrets.search': 'Search secrets...', 'secrets.injected': 'Secrets are automatically available as environment variables in all skills.', // Config Bot 'nav.config': 'Config Bot', 'config.title': 'Config Bot', 'config.subtitle': 'Configure the system through natural language', 'config.placeholder': 'Tell me what you want to configure...', 'config.chipSettings': 'View Settings', 'config.chipSkills': 'View Skills', 'config.chipSecrets': 'Add Secret', 'config.chipMcp': 'Manage MCP', 'config.chipChannels': 'Manage Channels', 'config.chipCli': 'Detect CLIs', // Projects 'nav.projects': 'Projects', 'projects.title': 'Project Discussion', 'projects.subtitle': 'Multi-expert collaborative deep discussion', 'projects.newProject': '+ New Project', 'projects.name': 'Project Name', 'projects.topic': 'Discussion Topic', 'projects.topicPlaceholder': 'e.g. Design a REST API for social media...', 'projects.experts': 'Experts', 'projects.generateExperts': 'Generate Experts', 'projects.generating': 'Analyzing topic...', 'projects.mode': 'Discussion Mode', 'projects.auto': 'Auto', 'projects.roundtable': 'Roundtable', 'projects.debate': 'Debate', 'projects.relay': 'Relay', 'projects.start': 'Start Discussion', 'projects.guide': 'Guide Discussion', 'projects.guidePlaceholder': 'Ask experts to focus on...', 'projects.conclude': 'Generate Conclusion', 'projects.concluding': 'Generating conclusion...', 'projects.download': 'Download Markdown', 'projects.round': 'Round', 'projects.noProjects': 'No projects yet', 'projects.selectProject': 'Select a project to view', 'projects.createHint': 'Create a project to start expert discussions', 'projects.discussing': 'Discussion in progress...','projects.typing': 'is typing...', 'projects.status.setup': 'Setup', 'projects.status.discussing': 'Discussing', 'projects.status.discussed': 'Discussed', 'projects.status.concluded': 'Concluded', // Roles 'nav.roles': 'Roles', 'roles.title': 'Roles', 'roles.create': 'Create Role', 'roles.edit': 'Edit Role', 'roles.delete': 'Delete Role', 'roles.cancel': 'Cancel', 'roles.name': 'Name', 'roles.personality': 'Personality', 'roles.language': 'Language', 'roles.replyStyle': 'Reply Style', 'roles.skills': 'Allowed Skills', 'roles.knowledge': 'Knowledge', 'roles.assignments': 'Assignments', 'roles.assign': 'Assign to Chat', 'roles.unassign': 'Unassign', 'roles.memory': 'Chat Memory', 'roles.noRoles': 'No roles created yet', 'roles.concise': 'Concise', 'roles.detailed': 'Detailed', 'roles.casual': 'Casual', 'roles.formal': 'Formal', 'roles.replyMode': 'Reply Mode', 'roles.replyAlways': 'Always (reply to every message)', 'roles.replyMention': 'Mention only (@bot or reply)', 'roles.replySmart': 'Smart (recommended)', 'roles.replyKeywords': 'Keywords only', 'roles.replyNever': 'Silent (never reply)', 'roles.replyModeHint': 'Controls when the bot responds in group chats. DMs always get a reply.', 'roles.replyKeywordsList': 'Keywords (comma-separated)', // Executions 'nav.executions': 'Executions', 'executions.title': 'Agent Executions', 'executions.subtitle': 'Run and monitor multi-agent task executions', 'executions.newExecution': 'New Execution', 'executions.goal': 'Goal', 'executions.goalPlaceholder': 'What do you want the agents to accomplish?', 'executions.mode': 'Mode', 'executions.modeAuto': 'Auto', 'executions.modeParallel': 'Parallel', 'executions.modeSequential': 'Sequential', 'executions.modeSwarm': 'Swarm', 'executions.create': 'Create', 'executions.start': 'Start', 'executions.cancel': 'Cancel', 'executions.noExecutions': 'No executions yet.', 'executions.selectExecution': 'Select an execution to view details', 'executions.steps': 'Steps', 'executions.result': 'Result', 'executions.error': 'Error', 'executions.cost': 'Cost', 'executions.duration': 'Duration', 'executions.triggeredBy': 'Triggered by', // Goals 'nav.goals': 'Goals', 'goals.title': 'Goals', 'goals.subtitle': 'Long-term goals tracked by the proactive Goal Loop', 'goals.newGoal': 'New Goal', 'goals.title_field': 'Title', 'goals.description': 'Description', 'goals.priority': 'Priority', 'goals.priorityLow': 'Low', 'goals.priorityMedium': 'Medium', 'goals.priorityHigh': 'High', 'goals.tags': 'Tags (comma-separated)', 'goals.milestones': 'Milestones', 'goals.addMilestone': 'Add milestone...', 'goals.add': 'Add', 'goals.save': 'Save', 'goals.cancel': 'Cancel', 'goals.delete': 'Delete', 'goals.edit': 'Edit', 'goals.noGoals': 'No goals yet.', 'goals.tabGoals': 'Goals', 'goals.tabLoop': 'Goal Loop', 'goals.loopStatus': 'Loop Status', 'goals.loopLastRun': 'Last run', 'goals.loopNextRun': 'Next run', 'goals.statusActive': 'Active', 'goals.statusPaused': 'Paused', 'goals.statusCompleted': 'Completed', // Lineages 'nav.lineages': 'Lineages', 'lineages.title': 'Agent Lineages', 'lineages.subtitle': 'Agent family trees with memory inheritance', 'lineages.newLineage': 'New Lineage', 'lineages.name': 'Name', 'lineages.memoryScope': 'Memory Scope', 'lineages.scopeFull': 'Full', 'lineages.scopeSummary': 'Summary', 'lineages.scopeNone': 'None', 'lineages.spawnChild': 'Spawn Child', 'lineages.delete': 'Delete', 'lineages.noLineages': 'No lineages yet.', 'lineages.selectLineage': 'Select a lineage to view', 'lineages.inheritedMemory': 'Inherited Memory', 'lineages.version': 'v', 'lineages.create': 'Create', 'lineages.cancel': 'Cancel', // Missing executions/goals/lineages keys 'executions.goalRequired': 'Goal is required', 'executions.createFailed': 'Create failed', 'executions.creating': 'Creating...', 'executions.loading': 'Loading executions...', 'executions.loadingSteps': 'Loading steps...', 'executions.noSteps': 'No steps yet.', 'executions.plan': 'Plan', 'executions.pollFailed': 'Failed to fetch execution status', 'executions.startFailed': 'Failed to start execution', 'goals.titleRequired': 'Title is required', 'goals.saveFailed': 'Save failed', 'goals.createGoal': 'Create Goal', 'goals.goalTitle': 'Title', 'goals.saving': 'Saving...', 'goals.noMilestones': 'No milestones yet.', 'goals.changeStatus': 'Change Status', 'goals.confirm': 'Confirm', 'goals.loading': 'Loading goals...', 'goals.loopTriggered': 'Goal loop triggered!', 'goals.loopError': 'Trigger failed', 'goals.loopConfigSaved': 'Config saved.', 'goals.loopCurrentStatus': 'Current Status', 'goals.loopConfig': 'Configuration', 'goals.schedule': 'Schedule', 'goals.scheduleHint': 'Cron expression (e.g. 0 8 * * * = daily at 8am)', 'goals.deliveryChatId': 'Delivery Chat ID', 'goals.deliveryPlatform': 'Platform', 'goals.saveConfig': 'Save Config', 'goals.triggering': 'Triggering...', 'goals.triggerNow': 'Trigger Now', 'goals.reflectionNotes': 'Reflection Notes', 'goals.noGoalsHint': 'Create a goal to start tracking long-term objectives', 'lineages.nameRequired': 'Name is required', 'lineages.spawnFailed': 'Spawn failed', 'lineages.spawning': 'Spawning...', 'lineages.spawn': 'Spawn', 'lineages.confirm': 'Confirm', 'lineages.loading': 'Loading lineages...', 'lineages.loadingTree': 'Loading tree...', 'lineages.createLineage': 'Create Lineage', 'lineages.creating': 'Creating...', 'lineages.treeView': 'Tree View', 'lineages.loadError': 'Failed to load lineage tree', 'lineages.createFailed': 'Create failed', // Categories 'cat.Core': 'Core', 'cat.Content': 'Content', 'cat.Productivity': 'Productivity', 'cat.Messaging': 'Messaging', 'cat.Smart Home': 'Smart Home', 'cat.Media': 'Media', 'cat.System': 'System', 'cat.Migration': 'Migration', }, 'zh-TW': { 'nav.chat': '對話', 'nav.skills': '技能', 'nav.memory': '記憶', 'nav.mcp': 'MCP', 'nav.settings': '設定', 'nav.channels': '通道', 'app.title': 'Claude Agent', 'app.subtitle': '個人助理', 'chat.placeholder': '輸入訊息...', 'chat.send': '送出', 'chat.newSession': '新對話', 'chat.noMessages': '開始對話', 'chat.thinking': '思考中...', 'chat.sessions': '對話紀錄', 'skills.title': '技能', 'skills.subtitle': '{count} 個技能可用', 'skills.search': '搜尋技能...', 'skills.all': '全部', 'skills.export': '匯出全部', 'skills.import': '匯入', 'skills.create': '+ 新增技能', 'skills.createHint': '描述你想要的技能,Claude 會用 /skill-creator 幫你建立。', 'skills.createPlaceholder': '例如:「一個可以管理 Todoist 任務的技能」', 'skills.createSubmit': 'AI 建立', 'skills.cancel': '取消', 'skills.prerequisites': '前置需求:', 'skills.noDetails': '無更多細節。', 'skills.noMatch': '沒有符合的技能。', 'skills.loading': '載入中...', 'skills.clickExpand': '點擊展開詳情', 'memory.title': '記憶', 'memory.subtitle': '查看和編輯助理的記憶檔案', 'memory.edit': '編輯', 'memory.save': '儲存', 'memory.cancel': '取消', 'memory.saved': '已儲存', 'memory.selectFile': '選擇檔案查看', 'settings.title': '設定', 'settings.subtitle': '設定語言和模型偏好', 'settings.language': '語言', 'settings.model': '預設模型', 'settings.save': '儲存設定', // MCP 'mcp.title': 'MCP 伺服器', 'mcp.subtitle': '管理為 Claude 提供工具的 Model Context Protocol 伺服器', 'mcp.active': '已啟用', 'mcp.available': '可新增', 'mcp.addCustom': '+ 新增伺服器', 'mcp.addCustomTitle': '新增自訂 MCP 伺服器', 'mcp.add': '新增', 'mcp.added': '已新增', 'mcp.remove': '移除', 'mcp.deleted': '已移除', 'mcp.save': '新增', 'mcp.cancel': '取消', 'mcp.loading': '載入中...', 'mcp.noServers': '尚未設定任何 MCP 伺服器。', 'mcp.setupHint': '設定說明:', 'mcp.tier1': '無需認證 — 開箱即用。', 'mcp.cfSetup': '在 shell 設定檔中設定 CF_ACCOUNT_ID + CF_API_TOKEN。', 'mcp.nlmSetup': '執行 `uvx notebooklm login` 一次(開啟瀏覽器進行 Google 登入)。', 'mcp.uvxNote': '所有伺服器需要 `uvx`。安裝:curl -LsSf https://astral.sh/uv/install.sh | sh', 'settings.saving': '儲存中...', 'settings.saved': '設定已儲存。', 'settings.cliTitle': 'CLI 偵測', 'settings.detecting': '偵測 CLI 中...', 'settings.notInstalled': '未安裝', 'settings.migrateTitle': '從 OpenClaw 遷移', 'settings.migrateDesc': '匯入你的記憶、技能、代理和設定。', 'settings.migrateChecking': '正在檢查 OpenClaw 安裝...', 'settings.migrateNotFound': '未在 ~/.openclaw/ 找到 OpenClaw', 'settings.migrateNotFoundHint': '若安裝在其他位置,請使用 CLI:node scripts/migrate-openclaw.cjs --openclaw-dir /路徑', 'settings.migrateRun': '開始遷移', 'settings.migrateRunning': '遷移進行中...', 'settings.projectTitle': '專案目錄', 'settings.projectDesc': '儲存 CLAUDE.md、技能、代理和記憶的目錄。', 'settings.projectPlaceholder': '~/claude-agent 或 /path/to/project', 'settings.projectInit': '初始化', 'settings.projectReset': '恢復預設', 'settings.projectBrowse': '瀏覽', // Updates 'settings.updatesTitle': '更新', 'settings.updatesDesc': '檢查 Claude Agent 的新版本。', 'settings.updateCurrentVersion': '目前版本', 'settings.updateAvailable': '可用', 'settings.updateUpToDate': '已是最新', 'settings.updateLastChecked': '上次檢查:', 'settings.updateCheckNow': '立即檢查', 'settings.updateChecking': '檢查中…', 'settings.updateDownloading': '下載中', 'settings.updateReady': '可安裝', 'settings.updateInstallNow': '安裝並重新啟動', 'settings.updateAutoHint': '桌面版更新會在背景下載,完成後可在這裡直接安裝。', 'settings.updateBanner': '新版本 {version} 已可用。你可以打開發布頁下載,或在桌面版下載完成後直接安裝。', 'settings.updateViewRelease': '查看發布說明 →', // Auto-start 'settings.autostartTitle': '開機自動啟動', 'settings.autostartDesc': '登入時自動啟動 Claude Agent 伺服器,可隨時停用。', 'settings.autostartEnabled': '已啟用', 'settings.autostartDisabled': '已停用', // Webhook 'settings.webhookTitle': 'Webhook 密鑰', 'settings.webhookDesc': '使用共用密鑰保護 POST /api/webhook 端點。必須設定密鑰才會接受 webhook 請求。', 'settings.webhookPlaceholder': '產生或輸入 webhook 密鑰', 'settings.webhookGenerate': '產生', 'settings.webhookSave': '儲存', 'settings.webhookSaving': '儲存中...', 'settings.webhookSaved': '已儲存', 'settings.webhookEndpointHint': '端點:POST /api/webhook — 在請求 body 中傳入 {"secret":"<值>"}。', // Multi-LLM Executor 'settings.executorTitle': '多模型執行器', 'settings.executorSubtitle': '選擇驅動對話的 AI 供應商', 'settings.executorType': '執行器類型', 'settings.executorAnthropicKey': 'Anthropic API Key', 'settings.executorOpenAiKey': 'OpenAI API Key', 'settings.executorOpenAiModel': 'OpenAI 模型', 'settings.executorGrokKey': 'Grok API Key (xAI)', 'settings.executorGeminiKey': 'Gemini API Key', 'settings.executorOllamaUrl': 'Ollama 基礎 URL', 'settings.executorOllamaModel': 'Ollama 模型', 'settings.executorClaudeCliNote': '使用 Claude CLI(預設)— 無需 API Key', 'settings.executorCliNote': '直接使用 CLI 工具 — 無需 API Key。請確認 CLI 已安裝並在 PATH 中。', 'channels.title': '通道', 'channels.subtitle': '連接 Telegram 和 Discord 機器人', 'channels.addTelegram': '新增 Telegram Bot', 'channels.addDiscord': '新增 Discord Bot', 'channels.botToken': 'Bot Token', 'channels.allowedUsers': '允許的使用者(逗號分隔,空白 = 全部允許)', 'channels.enabled': '已啟用', 'channels.disabled': '已停用', 'channels.delete': '刪除', 'channels.noChannels': '尚未設定任何通道。', 'channels.save': '儲存', 'channels.cancel': '取消', // History 'nav.history': '歷史', 'history.title': 'Session 歷史', 'history.subtitle': '查看過去的對話和代理操作', 'history.search': '搜尋訊息...', 'history.noSessions': '尚無 session', 'history.selectSession': '選擇 session 查看', 'history.messages': '則訊息', // Agents 'nav.agents': 'Agents', 'agents.title': 'Agents', 'agents.subtitle': '管理 AI 代理設定', 'agents.export': '匯出全部', 'agents.import': '匯入', 'agents.create': '+ 新增 Agent', 'agents.createHint': '描述你想要的 Agent,Claude 會幫你建立。', 'agents.createSubmit': 'AI 建立', 'agents.delete': '刪除', 'agents.tools': '工具', 'agents.noAgents': '尚未設定任何 Agent。', // Scheduled Tasks 'nav.tasks': '排程', 'tasks.title': '排程任務', 'tasks.subtitle': '使用 cron 排程自動執行 Agent 任務', 'tasks.tabTasks': '任務', 'tasks.tabExecutions': '執行紀錄', 'tasks.add': '+ 新增任務', 'tasks.name': '任務名稱', 'tasks.prompt': '提示詞', 'tasks.agent': 'Agent', 'tasks.schedule': '排程', 'tasks.timezone': '時區', 'tasks.presetEvery6h': '每 6 小時', 'tasks.presetDaily9am': '每天早上 9 點', 'tasks.presetDailyTwice': '每天早上 9 點和晚上 9 點', 'tasks.presetWeekly': '每週一', 'tasks.presetCustom': '自訂 Cron', 'tasks.run': '立即執行', 'tasks.noTasks': '尚無排程任務。', 'tasks.noExecutions': '尚無執行紀錄。', 'tasks.status': '狀態', 'tasks.duration': '時長', 'tasks.triggeredBy': '觸發方式', 'tasks.output': '輸出', 'tasks.save': '儲存', 'tasks.cancel': '取消', // Secrets 'nav.secrets': '密鑰', 'secrets.title': '密鑰保管庫', 'secrets.subtitle': '儲存 API token 和憑證供技能使用', 'secrets.add': '+ 新增密鑰', 'secrets.name': '名稱', 'secrets.namePlaceholder': '例如 THREADS_TOKEN', 'secrets.value': '值', 'secrets.valuePlaceholder': '貼上你的 token', 'secrets.description': '說明', 'secrets.descPlaceholder': '這個 token 的用途?(選填)', 'secrets.category': '分類', 'secrets.save': '儲存', 'secrets.cancel': '取消', 'secrets.edit': '編輯', 'secrets.delete': '刪除', 'secrets.show': '顯示', 'secrets.hide': '隱藏', 'secrets.noSecrets': '尚未儲存任何密鑰。', 'secrets.presets': '常用 Token', 'secrets.presetsHint': '點擊新增常用的憑證', 'secrets.search': '搜尋密鑰...', 'secrets.injected': '密鑰會自動作為環境變數注入到所有技能中。', // Config Bot 'nav.config': '設定助手', 'config.title': '設定助手', 'config.subtitle': '用自然語言設定系統', 'config.placeholder': '告訴我你想設定什麼...', 'config.chipSettings': '查看設定', 'config.chipSkills': '查看技能', 'config.chipSecrets': '新增密鑰', 'config.chipMcp': '管理 MCP', 'config.chipChannels': '管理通道', 'config.chipCli': '偵測 CLI', // Projects 'nav.projects': '專案討論', 'projects.title': '專案深度討論', 'projects.subtitle': '多專家協作深度討論', 'projects.newProject': '+ 新增專案', 'projects.name': '專案名稱', 'projects.topic': '討論主題', 'projects.topicPlaceholder': '例如:設計社群媒體平台的 REST API...', 'projects.experts': '專家', 'projects.generateExperts': '生成專家', 'projects.generating': '分析主題中...', 'projects.mode': '討論模式', 'projects.auto': '自動', 'projects.roundtable': '圓桌會議', 'projects.debate': '辯論', 'projects.relay': '接力深化', 'projects.start': '開始討論', 'projects.guide': '引導討論', 'projects.guidePlaceholder': '請專家們關注...', 'projects.conclude': '生成結論', 'projects.concluding': '生成結論中...', 'projects.download': '下載 Markdown', 'projects.round': '輪次', 'projects.noProjects': '尚無專案', 'projects.selectProject': '選擇專案查看', 'projects.createHint': '建立專案以開始專家討論', 'projects.discussing': '討論進行中...','projects.typing': '正在回覆...', 'projects.status.setup': '設定中', 'projects.status.discussing': '討論中', 'projects.status.discussed': '已討論', 'projects.status.concluded': '已結論', // Roles 'nav.roles': '角色', 'roles.title': '角色管理', 'roles.create': '建立角色', 'roles.edit': '編輯角色', 'roles.delete': '刪除角色', 'roles.cancel': '取消', 'roles.name': '名稱', 'roles.personality': '人格描述', 'roles.language': '語言', 'roles.replyStyle': '回覆風格', 'roles.skills': '允許技能', 'roles.knowledge': '知識庫', 'roles.assignments': '綁定', 'roles.assign': '綁定到群組', 'roles.unassign': '解除綁定', 'roles.memory': '群組記憶', 'roles.noRoles': '尚未建立任何角色', 'roles.concise': '簡潔', 'roles.detailed': '詳細', 'roles.casual': '輕鬆', 'roles.formal': '正式', 'roles.replyMode': '回覆模式', 'roles.replyAlways': '總是回覆', 'roles.replyMention': '被提及才回覆(@bot 或回覆)', 'roles.replySmart': '智慧判斷(推薦)', 'roles.replyKeywords': '關鍵字觸發', 'roles.replyNever': '靜默(不回覆)', 'roles.replyModeHint': '控制 Bot 在群組中何時回覆。私訊永遠會回覆。', 'roles.replyKeywordsList': '關鍵字(逗號分隔)', // Executions 'nav.executions': '執行', 'executions.title': 'Agent 執行', 'executions.subtitle': '執行並監控多代理任務', 'executions.newExecution': '新建執行', 'executions.goal': '目標', 'executions.goalPlaceholder': '您希望代理完成什麼任務?', 'executions.mode': '模式', 'executions.modeAuto': '自動', 'executions.modeParallel': '並行', 'executions.modeSequential': '循序', 'executions.modeSwarm': '蜂群', 'executions.create': '建立', 'executions.start': '開始', 'executions.cancel': '取消', 'executions.noExecutions': '尚無執行記錄。', 'executions.selectExecution': '選擇執行以查看詳情', 'executions.steps': '步驟', 'executions.result': '結果', 'executions.error': '錯誤', 'executions.cost': '費用', 'executions.duration': '時長', 'executions.triggeredBy': '觸發者', // Goals 'nav.goals': '目標', 'goals.title': '目標', 'goals.subtitle': '由主動目標循環追蹤的長期目標', 'goals.newGoal': '新建目標', 'goals.title_field': '標題', 'goals.description': '描述', 'goals.priority': '優先級', 'goals.priorityLow': '低', 'goals.priorityMedium': '中', 'goals.priorityHigh': '高', 'goals.tags': '標籤(逗號分隔)', 'goals.milestones': '里程碑', 'goals.addMilestone': '新增里程碑...', 'goals.add': '新增', 'goals.save': '儲存', 'goals.cancel': '取消', 'goals.delete': '刪除', 'goals.edit': '編輯', 'goals.noGoals': '尚無目標。', 'goals.tabGoals': '目標', 'goals.tabLoop': '目標循環', 'goals.loopStatus': '循環狀態', 'goals.loopLastRun': '上次執行', 'goals.loopNextRun': '下次執行', 'goals.statusActive': '進行中', 'goals.statusPaused': '已暫停', 'goals.statusCompleted': '已完成', // Lineages 'nav.lineages': '世系', 'lineages.title': 'Agent 世系', 'lineages.subtitle': '具有記憶繼承的 Agent 家族樹', 'lineages.newLineage': '新建世系', 'lineages.name': '名稱', 'lineages.memoryScope': '記憶範圍', 'lineages.scopeFull': '完整', 'lineages.scopeSummary': '摘要', 'lineages.scopeNone': '無', 'lineages.spawnChild': '生成子代理', 'lineages.delete': '刪除', 'lineages.noLineages': '尚無世系。', 'lineages.selectLineage': '選擇世系以查看', 'lineages.inheritedMemory': '繼承的記憶', 'lineages.version': 'v', 'lineages.create': '建立', 'lineages.cancel': '取消', // Missing executions/goals/lineages keys 'executions.goalRequired': '目標為必填', 'executions.createFailed': '建立失敗', 'executions.creating': '建立中...', 'executions.loading': '載入執行記錄...', 'executions.loadingSteps': '載入步驟...', 'executions.noSteps': '尚無步驟。', 'executions.plan': '計劃', 'executions.pollFailed': '獲取執行狀態失敗', 'executions.startFailed': '啟動執行失敗', 'goals.titleRequired': '標題為必填', 'goals.saveFailed': '儲存失敗', 'goals.createGoal': '建立目標', 'goals.goalTitle': '標題', 'goals.saving': '儲存中...', 'goals.noMilestones': '尚無里程碑。', 'goals.changeStatus': '更改狀態', 'goals.confirm': '確認', 'goals.loading': '載入目標...', 'goals.loopTriggered': '目標循環已觸發!', 'goals.loopError': '觸發失敗', 'goals.loopConfigSaved': '設定已儲存。', 'goals.loopCurrentStatus': '目前狀態', 'goals.loopConfig': '設定', 'goals.schedule': '排程', 'goals.scheduleHint': 'Cron 表達式(如 0 8 * * * = 每天早上 8 點)', 'goals.deliveryChatId': '發送 Chat ID', 'goals.deliveryPlatform': '平台', 'goals.saveConfig': '儲存設定', 'goals.triggering': '觸發中...', 'goals.triggerNow': '立即觸發', 'goals.reflectionNotes': '反思記錄', 'goals.noGoalsHint': '建立目標以開始追蹤長期目標', 'lineages.nameRequired': '名稱為必填', 'lineages.spawnFailed': '生成失敗', 'lineages.spawning': '生成中...', 'lineages.spawn': '生成', 'lineages.confirm': '確認', 'lineages.loading': '載入世系...', 'lineages.loadingTree': '載入樹狀圖...', 'lineages.createLineage': '建立世系', 'lineages.creating': '建立中...', 'lineages.treeView': '樹狀圖', 'lineages.loadError': '載入世系樹失敗', 'lineages.createFailed': '建立失敗', 'cat.Core': '核心', 'cat.Content': '內容', 'cat.Productivity': '生產力', 'cat.Messaging': '訊息', 'cat.Smart Home': '智慧家庭', 'cat.Media': '媒體', 'cat.System': '系統', 'cat.Migration': '遷移', }, ja: { 'nav.chat': 'チャット', 'nav.skills': 'スキル', 'nav.memory': 'メモリ', 'nav.mcp': 'MCP', 'nav.settings': '設定', 'nav.channels': 'チャンネル', 'app.title': 'Claude Agent', 'app.subtitle': 'パーソナルアシスタント', 'chat.placeholder': 'メッセージを入力...', 'chat.send': '送信', 'chat.newSession': '新規セッション', 'chat.noMessages': '会話を始めましょう', 'chat.thinking': '考え中...', 'chat.sessions': 'セッション', 'skills.title': 'スキル', 'skills.subtitle': '{count} スキル利用可能', 'skills.search': 'スキルを検索...', 'skills.all': 'すべて', 'skills.export': '全てエクスポート', 'skills.import': 'インポート', 'skills.create': '+ 新規スキル', 'skills.createHint': '作りたいスキルを説明してください。Claudeが/skill-creatorで作成します。', 'skills.createPlaceholder': '例:「Todoistタスクを管理するスキル」', 'skills.createSubmit': 'AIで作成', 'skills.cancel': 'キャンセル', 'skills.prerequisites': '前提条件:', 'skills.noDetails': '追加情報はありません。', 'skills.noMatch': '該当するスキルがありません。', 'skills.loading': '読み込み中...', 'skills.clickExpand': 'カードをクリックして展開', 'memory.title': 'メモリ', 'memory.subtitle': 'アシスタントのメモリファイルの閲覧・編集', 'memory.edit': '編集', 'memory.save': '保存', 'memory.cancel': 'キャンセル', 'memory.saved': '保存しました', 'memory.selectFile': 'ファイルを選択', 'settings.title': '設定', 'settings.subtitle': '言語とモデルの設定', 'settings.language': '言語', 'settings.model': 'デフォルトモデル', 'settings.save': '設定を保存', // MCP 'mcp.title': 'MCPサーバー', 'mcp.subtitle': 'Claudeにツールを提供するModel Context Protocolサーバーの管理', 'mcp.active': '有効', 'mcp.available': '追加可能', 'mcp.addCustom': '+ サーバーを追加', 'mcp.addCustomTitle': 'カスタムMCPサーバーを追加', 'mcp.add': '追加', 'mcp.added': '追加しました', 'mcp.remove': '削除', 'mcp.deleted': '削除しました', 'mcp.save': '追加', 'mcp.cancel': 'キャンセル', 'mcp.loading': '読み込み中...', 'mcp.noServers': 'MCPサーバーが設定されていません。', 'mcp.setupHint': '設定ガイド:', 'mcp.tier1': '認証不要 — すぐに利用可能。', 'mcp.cfSetup': 'シェルプロファイルにCF_ACCOUNT_ID + CF_API_TOKENを設定。', 'mcp.nlmSetup': '`uvx notebooklm login`を一度実行(ブラウザでGoogleログイン)。', 'mcp.uvxNote': '全サーバーに`uvx`が必要。インストール:curl -LsSf https://astral.sh/uv/install.sh | sh', 'settings.saving': '保存中...', 'settings.saved': '設定を保存しました。', 'settings.cliTitle': 'CLI検出', 'settings.detecting': 'CLIを検出中...', 'settings.notInstalled': '未インストール', 'settings.migrateTitle': 'OpenClawから移行', 'settings.migrateDesc': 'メモリ、スキル、エージェント、設定をインポートします。', 'settings.migrateChecking': 'OpenClawのインストールを確認中...', 'settings.migrateNotFound': '~/.openclaw/にOpenClawが見つかりません', 'settings.migrateNotFoundHint': '別の場所にインストールされている場合:node scripts/migrate-openclaw.cjs --openclaw-dir /パス', 'settings.migrateRun': '移行を開始', 'settings.migrateRunning': '移行中...', 'settings.projectTitle': 'プロジェクトディレクトリ', 'settings.projectDesc': 'CLAUDE.md、スキル、エージェント、メモリが保存されるディレクトリ。', 'settings.projectPlaceholder': '~/claude-agent または /path/to/project', 'settings.projectInit': '初期化', 'settings.projectReset': 'デフォルトに戻す', 'settings.projectBrowse': '参照', // Updates 'settings.updatesTitle': 'アップデート', 'settings.updatesDesc': 'Claude Agentの新しいバージョンを確認します。', 'settings.updateCurrentVersion': '現在のバージョン', 'settings.updateAvailable': '利用可能', 'settings.updateUpToDate': '最新版', 'settings.updateLastChecked': '最終確認:', 'settings.updateCheckNow': '今すぐ確認', 'settings.updateChecking': '確認中…', 'settings.updateDownloading': 'ダウンロード中', 'settings.updateReady': 'インストール可能', 'settings.updateInstallNow': 'インストールして再起動', 'settings.updateAutoHint': 'デスクトップ版ではアップデートがバックグラウンドでダウンロードされ、準備ができたらここからインストールできます。', 'settings.updateBanner': '新しいバージョン {version} が利用可能です。リリースページから取得するか、デスクトップ版でダウンロード完了後にインストールできます。', 'settings.updateViewRelease': 'リリースを見る →', // Auto-start 'settings.autostartTitle': 'ログイン時に自動起動', 'settings.autostartDesc': 'ログイン時にClaude Agentサーバーを自動起動します。いつでも無効にできます。', 'settings.autostartEnabled': '有効', 'settings.autostartDisabled': '無効', // Webhook 'settings.webhookTitle': 'Webhookシークレット', 'settings.webhookDesc': '共有シークレットでPOST /api/webhookエンドポイントを保護します。Webhookリクエストの受付にはシークレットが必要です。', 'settings.webhookPlaceholder': 'Webhookシークレットを生成または入力', 'settings.webhookGenerate': '生成', 'settings.webhookSave': '保存', 'settings.webhookSaving': '保存中...', 'settings.webhookSaved': '保存しました', 'settings.webhookEndpointHint': 'エンドポイント:POST /api/webhook — リクエストボディに {"secret":"<値>"} を含めてください。', // Multi-LLM Executor 'settings.executorTitle': 'マルチLLMエグゼキューター', 'settings.executorSubtitle': '会話を動かすAIプロバイダーを選択', 'settings.executorType': 'エグゼキュータータイプ', 'settings.executorAnthropicKey': 'Anthropic API Key', 'settings.executorOpenAiKey': 'OpenAI API Key', 'settings.executorOpenAiModel': 'OpenAI モデル', 'settings.executorGrokKey': 'Grok API Key (xAI)', 'settings.executorGeminiKey': 'Gemini API Key', 'settings.executorOllamaUrl': 'Ollama ベース URL', 'settings.executorOllamaModel': 'Ollama モデル', 'settings.executorClaudeCliNote': 'Claude CLI(デフォルト)を使用 — API Key不要', 'settings.executorCliNote': 'CLIツールを直接使用 — API Key不要。CLIがインストールされPATHに含まれていることを確認してください。', 'channels.title': 'チャンネル', 'channels.subtitle': 'TelegramとDiscordボットの接続', 'channels.addTelegram': 'Telegram Botを追加', 'channels.addDiscord': 'Discord Botを追加', 'channels.botToken': 'ボットトークン', 'channels.allowedUsers': '許可ユーザー(カンマ区切り、空 = 全員許可)', 'channels.enabled': '有効', 'channels.disabled': '無効', 'channels.delete': '削除', 'channels.noChannels': 'チャンネルが設定されていません。', 'channels.save': '保存', 'channels.cancel': 'キャンセル', // History 'nav.history': '履歴', 'history.title': 'セッション履歴', 'history.subtitle': '過去の会話とエージェントの操作を表示', 'history.search': 'メッセージを検索...', 'history.noSessions': 'セッションなし', 'history.selectSession': 'セッションを選択', 'history.messages': '件のメッセージ', // Agents 'nav.agents': 'エージェント', 'agents.title': 'エージェント', 'agents.subtitle': 'AIエージェント設定の管理', 'agents.export': '全てエクスポート', 'agents.import': 'インポート', 'agents.create': '+ 新規エージェント', 'agents.createHint': '作りたいエージェントを説明してください。', 'agents.createSubmit': 'AIで作成', 'agents.delete': '削除', 'agents.tools': 'ツール', 'agents.noAgents': 'エージェントが設定されていません。', // Scheduled Tasks 'nav.tasks': 'スケジュール', 'tasks.title': 'スケジュールタスク', 'tasks.subtitle': 'cronスケジュールでエージェントタスクを自動化', 'tasks.tabTasks': 'タスク', 'tasks.tabExecutions': '実行履歴', 'tasks.add': '+ タスク追加', 'tasks.name': 'タスク名', 'tasks.prompt': 'プロンプト', 'tasks.agent': 'エージェント', 'tasks.schedule': 'スケジュール', 'tasks.timezone': 'タイムゾーン', 'tasks.presetEvery6h': '6時間ごと', 'tasks.presetDaily9am': '毎日午前9時', 'tasks.presetDailyTwice': '毎日午前9時と午後9時', 'tasks.presetWeekly': '毎週月曜日', 'tasks.presetCustom': 'カスタムCron', 'tasks.run': '今すぐ実行', 'tasks.noTasks': 'スケジュールタスクなし。', 'tasks.noExecutions': '実行履歴なし。', 'tasks.status': 'ステータス', 'tasks.duration': '所要時間', 'tasks.triggeredBy': 'トリガー', 'tasks.output': '出力', 'tasks.save': '保存', 'tasks.cancel': 'キャンセル', // Secrets 'nav.secrets': 'シークレット', 'secrets.title': 'シークレット保管庫', 'secrets.subtitle': 'スキルで使用するAPIトークンと認証情報の保存', 'secrets.add': '+ シークレット追加', 'secrets.name': '名前', 'secrets.namePlaceholder': '例: THREADS_TOKEN', 'secrets.value': '値', 'secrets.valuePlaceholder': 'トークンを貼り付け', 'secrets.description': '説明', 'secrets.descPlaceholder': 'このトークンの用途は?(任意)', 'secrets.category': 'カテゴリ', 'secrets.save': '保存', 'secrets.cancel': 'キャンセル', 'secrets.edit': '編集', 'secrets.delete': '削除', 'secrets.show': '表示', 'secrets.hide': '非表示', 'secrets.noSecrets': 'シークレットが保存されていません。', 'secrets.presets': 'よく使うトークン', 'secrets.presetsHint': 'クリックしてよく使う認証情報を追加', 'secrets.search': 'シークレットを検索...', 'secrets.injected': 'シークレットは全スキルで環境変数として自動利用可能です。', // Config Bot 'nav.config': '設定ボット', 'config.title': '設定ボット', 'config.subtitle': '自然言語でシステムを設定', 'config.placeholder': '設定したいことを教えてください...', 'config.chipSettings': '設定を見る', 'config.chipSkills': 'スキルを見る', 'config.chipSecrets': 'シークレット追加', 'config.chipMcp': 'MCP管理', 'config.chipChannels': 'チャンネル管理', 'config.chipCli': 'CLI検出', // Projects 'nav.projects': 'プロジェクト', 'projects.title': 'プロジェクトディスカッション', 'projects.subtitle': 'マルチエキスパート協調ディスカッション', 'projects.newProject': '+ 新規プロジェクト', 'projects.name': 'プロジェクト名', 'projects.topic': 'ディスカッショントピック', 'projects.topicPlaceholder': '例:SNSプラットフォームのREST API設計...', 'projects.experts': 'エキスパート', 'projects.generateExperts': 'エキスパート生成', 'projects.generating': 'トピック分析中...', 'projects.mode': 'ディスカッションモード', 'projects.auto': '自動', 'projects.roundtable': 'ラウンドテーブル', 'projects.debate': 'ディベート', 'projects.relay': 'リレー', 'projects.start': 'ディスカッション開始', 'projects.guide': 'ガイド', 'projects.guidePlaceholder': 'エキスパートに集中してほしいポイント...', 'projects.conclude': '結論を生成', 'projects.concluding': '結論生成中...', 'projects.download': 'Markdownダウンロード', 'projects.round': 'ラウンド', 'projects.noProjects': 'プロジェクトなし', 'projects.selectProject': 'プロジェクトを選択', 'projects.createHint': 'エキスパートディスカッションを始めるにはプロジェクトを作成', 'projects.discussing': 'ディスカッション進行中...','projects.typing': '入力中...', 'projects.status.setup': 'セットアップ', 'projects.status.discussing': 'ディスカッション中', 'projects.status.discussed': 'ディスカッション完了', 'projects.status.concluded': '結論済み', // Roles 'nav.roles': 'ロール', 'roles.title': 'ロール管理', 'roles.create': 'ロール作成', 'roles.edit': 'ロール編集', 'roles.delete': 'ロール削除', 'roles.cancel': 'キャンセル', 'roles.name': '名前', 'roles.personality': 'パーソナリティ', 'roles.language': '言語', 'roles.replyStyle': '返答スタイル', 'roles.skills': '許可スキル', 'roles.knowledge': 'ナレッジ', 'roles.assignments': '割り当て', 'roles.assign': 'チャットに割り当て', 'roles.unassign': '割り当て解除', 'roles.memory': 'チャットメモリ', 'roles.noRoles': 'ロールがまだありません', 'roles.concise': '簡潔', 'roles.detailed': '詳細', 'roles.casual': 'カジュアル', 'roles.formal': 'フォーマル', 'roles.replyMode': '返信モード', 'roles.replyAlways': '常に返信', 'roles.replyMention': 'メンション時のみ', 'roles.replySmart': 'スマート(推奨)', 'roles.replyKeywords': 'キーワードのみ', 'roles.replyNever': 'サイレント', 'roles.replyModeHint': 'グループチャットでの返信タイミングを制御。DMは常に返信。', 'roles.replyKeywordsList': 'キーワード(カンマ区切り)', // Executions 'nav.executions': '実行', 'executions.title': 'エージェント実行', 'executions.subtitle': 'マルチエージェントタスクの実行と監視', 'executions.newExecution': '新規実行', 'executions.goal': 'ゴール', 'executions.goalPlaceholder': 'エージェントに達成してほしいことは何ですか?', 'executions.mode': 'モード', 'executions.modeAuto': '自動', 'executions.modeParallel': '並列', 'executions.modeSequential': '順次', 'executions.modeSwarm': 'スウォーム', 'executions.create': '作成', 'executions.start': '開始', 'executions.cancel': 'キャンセル', 'executions.noExecutions': 'まだ実行はありません。', 'executions.selectExecution': '実行を選択して詳細を表示', 'executions.steps': 'ステップ', 'executions.result': '結果', 'executions.error': 'エラー', 'executions.cost': 'コスト', 'executions.duration': '所要時間', 'executions.triggeredBy': 'トリガー', // Goals 'nav.goals': 'ゴール', 'goals.title': 'ゴール', 'goals.subtitle': 'プロアクティブなゴールループで追跡される長期目標', 'goals.newGoal': '新規ゴール', 'goals.title_field': 'タイトル', 'goals.description': '説明', 'goals.priority': '優先度', 'goals.priorityLow': '低', 'goals.priorityMedium': '中', 'goals.priorityHigh': '高', 'goals.tags': 'タグ(カンマ区切り)', 'goals.milestones': 'マイルストーン', 'goals.addMilestone': 'マイルストーンを追加...', 'goals.add': '追加', 'goals.save': '保存', 'goals.cancel': 'キャンセル', 'goals.delete': '削除', 'goals.edit': '編集', 'goals.noGoals': 'まだゴールはありません。', 'goals.tabGoals': 'ゴール', 'goals.tabLoop': 'ゴールループ', 'goals.loopStatus': 'ループステータス', 'goals.loopLastRun': '最終実行', 'goals.loopNextRun': '次回実行', 'goals.statusActive': 'アクティブ', 'goals.statusPaused': '一時停止', 'goals.statusCompleted': '完了', // Lineages 'nav.lineages': '系譜', 'lineages.title': 'エージェント系譜', 'lineages.subtitle': 'メモリ継承を持つエージェントファミリーツリー', 'lineages.newLineage': '新規系譜', 'lineages.name': '名前', 'lineages.memoryScope': 'メモリスコープ', 'lineages.scopeFull': '完全', 'lineages.scopeSummary': 'サマリー', 'lineages.scopeNone': 'なし', 'lineages.spawnChild': '子エージェントを生成', 'lineages.delete': '削除', 'lineages.noLineages': 'まだ系譜はありません。', 'lineages.selectLineage': '系譜を選択して表示', 'lineages.inheritedMemory': '継承メモリ', 'lineages.version': 'v', 'lineages.create': '作成', 'lineages.cancel': 'キャンセル', // Missing executions/goals/lineages keys 'executions.goalRequired': 'ゴールは必須です', 'executions.createFailed': '作成失敗', 'executions.creating': '作成中...', 'executions.loading': '実行を読み込み中...', 'executions.loadingSteps': 'ステップを読み込み中...', 'executions.noSteps': 'まだステップはありません。', 'executions.plan': 'プラン', 'executions.pollFailed': '実行ステータスの取得に失敗しました', 'executions.startFailed': '実行の開始に失敗しました', 'goals.titleRequired': 'タイトルは必須です', 'goals.saveFailed': '保存失敗', 'goals.createGoal': 'ゴールを作成', 'goals.goalTitle': 'タイトル', 'goals.saving': '保存中...', 'goals.noMilestones': 'まだマイルストーンはありません。', 'goals.changeStatus': 'ステータスを変更', 'goals.confirm': '確認', 'goals.loading': 'ゴールを読み込み中...', 'goals.loopTriggered': 'ゴールループが起動しました!', 'goals.loopError': '起動失敗', 'goals.loopConfigSaved': '設定を保存しました。', 'goals.loopCurrentStatus': '現在のステータス', 'goals.loopConfig': '設定', 'goals.schedule': 'スケジュール', 'goals.scheduleHint': 'Cron式(例:0 8 * * * = 毎朝8時)', 'goals.deliveryChatId': '配信 Chat ID', 'goals.deliveryPlatform': 'プラットフォーム', 'goals.saveConfig': '設定を保存', 'goals.triggering': '起動中...', 'goals.triggerNow': '今すぐ起動', 'goals.reflectionNotes': '振り返りメモ', 'goals.noGoalsHint': '目標を作成して長期目標の追跡を開始', 'lineages.nameRequired': '名前は必須です', 'lineages.spawnFailed': '生成失敗', 'lineages.spawning': '生成中...', 'lineages.spawn': '生成', 'lineages.confirm': '確認', 'lineages.loading': '系譜を読み込み中...', 'lineages.loadingTree': 'ツリーを読み込み中...', 'lineages.createLineage': '系譜を作成', 'lineages.creating': '作成中...', 'lineages.treeView': 'ツリービュー', 'lineages.loadError': '系譜ツリーの読み込み失敗', 'lineages.createFailed': '作成失敗', 'cat.Core': 'コア', 'cat.Content': 'コンテンツ', 'cat.Productivity': '生産性', 'cat.Messaging': 'メッセージ', 'cat.Smart Home': 'スマートホーム', 'cat.Media': 'メディア', 'cat.System': 'システム', 'cat.Migration': '移行', }, }; let currentLocale: Locale = 'en'; export function setLocale(locale: Locale) { currentLocale = locale; } export function getLocale(): Locale { return currentLocale; } export function t(key: string, params?: Record): string { let text = translations[currentLocale]?.[key] || translations.en[key] || key; if (params) { for (const [k, v] of Object.entries(params)) { text = text.replace(`{${k}}`, String(v)); } } return text; } // Hook for React components import { useState as useStateReact, useCallback } from 'react'; export function useLocale() { const [locale, setLocaleState] = useStateReact(currentLocale); const changeLocale = useCallback((newLocale: Locale) => { setLocale(newLocale); setLocaleState(newLocale); }, []); return { locale, setLocale: changeLocale, t }; }