{
  "extension": {
    "name": "Wegent AI Assistant",
    "description": "A whole dev team of AI agents in your editor."
  },
  "loading": "Loading...",
  "noData": "No data",
  "scroll_to_bottom": "Scroll to bottom",
  "repos": {
    "repository": "Select Repository",
    "branch": "Select Branch",
    "repository_tooltip": "Select code repository",
    "branch_tooltip": "Select branch",
    "select_repository": "Select repository",
    "unified_selector_placeholder": "Select repo / branch",
    "requires_workspace": "Requires Repository",
    "no_workspace_needed": "No repository needed",
    "no_workspace_description": "This task will run without a code repository",
    "scroll_to_load_more": "Scroll to load more..."
  },
  "actions": {
    "save": "Save",
    "saving": "Saving...",
    "cancel": "Cancel",
    "delete": "Delete",
    "deleting": "Deleting...",
    "edit": "Edit",
    "edit_group": "Edit Group",
    "start": "Get Start!",
    "create": "Create",
    "creating": "Creating...",
    "confirm": "Confirm",
    "close": "Close",
    "done": "Done",
    "submit": "Submit",
    "reset": "Reset",
    "search": "Search",
    "filter": "Filter",
    "refresh": "Refresh",
    "loading": "Loading...",
    "retry": "Retry",
    "toggle_theme": "Toggle Theme",
    "upload": "Upload",
    "view": "View",
    "copy": "Copy",
    "copied": "Copied",
    "loadMore": "Load More",
    "configure": "Configure",
    "download": "Download",
    "share": "Share",
    "preview": "Preview",
    "fullscreen": "Fullscreen preview",
    "exit_fullscreen": "Exit fullscreen",
    "generating": "Generating...",
    "zoom_in": "Zoom In",
    "zoom_out": "Zoom Out",
    "rotate": "Rotate",
    "clear": "Clear",
    "move": "Move"
  },
  "errors": {
    "request_failed": "LLM API request failed, please click retry"
  },
  "validation": {
    "required": "This field is required",
    "max_length": "Maximum length is {{max}} characters"
  },
  "login": {
    "username": "Username",
    "password": "Password",
    "enter_username": "Enter username",
    "enter_password": "Enter password",
    "logging_in": "Logging in...",
    "test_account": "Test account: admin / Wegent2025!",
    "or_continue_with": "Or continue with",
    "oidc_login": "Login with OpenID Connect"
  },
  "navigation": {
    "tasks": "Tasks",
    "chat": "Chat",
    "code": "Code",
    "wiki": "Knowledge",
    "flow": "Feed",
    "inbox": "Inbox",
    "settings": "Settings",
    "docs": "Docs",
    "feedback": "Feedback",
    "admin": "Admin"
  },
  "sidebar": {
    "recent_visits": "Recent Visits",
    "light_mode": "Light Mode",
    "dark_mode": "Dark Mode",
    "collapse": "Collapse sidebar",
    "expand": "Expand sidebar"
  },
  "theme": {
    "light": "Light Mode",
    "dark": "Dark Mode"
  },
  "user": {
    "default_name": "User",
    "logout": "Logout",
    "login": "Login",
    "menu": "User menu"
  },
  "chat": {
    "placeholder_chat": "Use the Agent team to explore and discover",
    "placeholder_code": "Let the Agent development team build features, fix bugs, and explore the codebase",
    "sourceReferences": "Source References",
    "sources": "Sources"
  },
  "bot": {
    "name": "Name",
    "name_placeholder": "Code Assistant",
    "agent": "Executor",
    "agent_select": "choose an agent",
    "prompt": "Prompt",
    "prompt_placeholder": "AI-powered code review and assistance",
    "agent_config": "Default Model",
    "mcp_config": "Mcp Config",
    "save_prompt": "Save Prompt",
    "use_custom_model": "Use Custom Model",
    "advanced_mode": "Advanced Mode",
    "no_available_models": "No available models",
    "import_mcp": "Import",
    "import_mcp_button": "Edit",
    "edit_mcp_json": "Edit",
    "add_mcp_json": "Add",
    "edit_mcp_server": "Edit MCP Server",
    "mcp_server_name": "Server Name",
    "mcp_server_type": "Type",
    "mcp_command": "Command",
    "mcp_command_placeholder": "e.g., npx -y @modelcontextprotocol/server-filesystem /path",
    "mcp_args": "Arguments (Args)",
    "mcp_args_placeholder": "One argument per line, e.g.:\n-y\n@modelcontextprotocol/server-filesystem\n/path",
    "mcp_args_hint": "One argument per line",
    "mcp_url": "URL",
    "mcp_url_placeholder": "e.g., http://localhost:3000/sse",
    "mcp_test": "Test Connection",
    "mcp_tool_list": "Tool List",
    "mcp_test_loading": "Connecting...",
    "mcp_test_success": "Connected",
    "mcp_test_failed": "Connection failed",
    "mcp_tools_count": "{{count}} tools",
    "mcp_stdio_not_testable": "STDIO type does not support connection testing",
    "mcp_nav_basic": "Basic Info",
    "mcp_nav_connection": "Connection",
    "mcp_nav_headers": "Headers",
    "mcp_nav_json": "JSON",
    "mcp_headers": "Headers",
    "mcp_headers_placeholder": "{ \"Authorization\": \"Bearer token\" }",
    "mcp_headers_hint": "JSON format",
    "mcp_json_mode": "JSON Mode",
    "mcp_form_mode": "Form Mode",
    "mcp_market": "MCP Market",
    "import_mcp_title": "Import MCP Configuration",
    "import_mcp_desc": "Please paste standardized MCP configuration JSON. The system will automatically add type: \"sse\" if missing or convert transport field to type field.",
    "edit_mcp_title": "Edit MCP Configuration",
    "edit_mcp_desc": "Edit MCP configuration JSON. Saving will overwrite current configuration.",
    "import_mode_replace": "Replace existing config",
    "import_mode_append": "Append to existing config",
    "import_success": "MCP configuration imported successfully",
    "append_success": "MCP configuration appended successfully",
    "no_mcp_servers": "No MCP servers configured",
    "mcp_config_readonly_placeholder": "MCP configuration is read-only. Please use the Edit button to modify.",
    "quick_templates": "Use Preset Templates for Quick Configuration",
    "template": "Template",
    "template_hint": "Click template button to autofill configuration, then modify the API Key",
    "template_applied": "Template Applied",
    "please_update_api_key": "Please update the API Key to your actual key",
    "view_model_config_guide": "View Model Configuration Guide",
    "view_shell_config_guide": "View Shell Configuration Guide",
    "errors": {
      "required": "Please fill in all required fields",
      "agent_config_json": "Model configuration must be valid JSON",
      "mcp_config_json": "MCP configuration must be valid JSON",
      "mcp_config_invalid": "MCP configuration structure is invalid",
      "mcp_config_missing_server_name": "MCP config is missing a server name. Expected format: { \"server-name\": { \"url\": \"...\", \"type\": \"...\" } }",
      "mcp_server_name_invalid": "MCP server name can only contain letters, numbers, underscores and hyphens",
      "fetch_agents_failed": "Failed to load agents",
      "fetch_models_failed": "Failed to load models",
      "save_failed": "Save failed",
      "dify_validation_failed": "Failed to validate API key",
      "fetch_dify_apps_failed": "Failed to load Dify applications",
      "protocol_required": "Please select a model protocol",
      "dify_required_fields": "Dify API Key and Base URL are required"
    },
    "protocol": "Model Protocol",
    "protocol_select": "Select model protocol",
    "protocol_hint": "Select the protocol type for the model: OpenAI or Claude (Anthropic)",
    "select_executor_first": "Please select an executor first",
    "model_select": "Select model",
    "dify_api_key": "Dify API Key",
    "dify_api_key_hint": "Enter your Dify application API key. Each Dify application has its own API key.",
    "dify_api_key_required": "Please enter Dify API Key and Base URL first",
    "dify_base_url": "Dify Base URL",
    "dify_base_url_hint": "Dify API base URL. Use https://api.dify.ai for Dify Cloud, or your self-hosted URL.",
    "dify_mode_title": "Dify External API Mode",
    "dify_mode_description": "Dify bot delegates execution to external Dify API service. Enter your Dify application API key to get started.",
    "dify_validation_success": "API Key validated successfully",
    "view_dify_docs": "View Dify API Documentation",
    "validate_api_key": "Validate API Key",
    "validating": "Validating...",
    "validation_success": "API Key Validated Successfully",
    "config_preview": "Configuration Preview",
    "loading": "Loading...",
    "dify_app_parameters": "Application Parameters",
    "dify_parameters_count": "parameters",
    "dify_parameters_hint": "Configure the input parameters for this application. These values will be used when executing tasks.",
    "dify_parameters_loading": "Loading parameters...",
    "dify_parameters_load_failed": "Failed to load application parameters",
    "dify_parameters_refresh": "Refresh parameters",
    "dify_no_parameters": "No parameters configured for this application.",
    "custom_shell": "Custom",
    "public_model": "Public",
    "fine_tune_prompt": "Fine-tune Prompt",
    "no_model_binding": "No model binding",
    "default_knowledge_bases": "Default Knowledge Bases",
    "default_knowledge_bases_optional": "Optional",
    "default_knowledge_bases_search_placeholder": "Search knowledge bases",
    "default_knowledge_bases_used_for_new_chats": "Used to initialize knowledge bases for new chats.",
    "default_knowledge_bases_append_hint": "Manual chat-time selection appends additional knowledge bases later.",
    "default_knowledge_bases_empty_selection": "No default knowledge bases selected",
    "default_knowledge_bases_loading": "Loading knowledge bases...",
    "default_knowledge_bases_load_failed": "Failed to load knowledge bases",
    "default_knowledge_bases_no_match": "No matching knowledge bases",
    "default_knowledge_bases_no_options": "No available knowledge bases",
    "default_knowledge_bases_selected_section": "Selected default knowledge bases",
    "default_knowledge_bases_available_section": "Available knowledge bases",
    "default_knowledge_bases_group_personal": "Personal knowledge bases",
    "default_knowledge_bases_group_group": "Group knowledge bases",
    "default_knowledge_bases_group_organization": "Organization knowledge bases",
    "default_knowledge_bases_source_personal": "Personal",
    "default_knowledge_bases_source_group": "Group",
    "default_knowledge_bases_source_organization": "Organization",
    "default_knowledge_bases_source_shared": "Shared",
    "default_knowledge_bases_updated_at": "Updated",
    "default_knowledge_bases_selected_badge": "Selected",
    "default_knowledge_bases_select_to_add": "Select a knowledge base to add...",
    "default_knowledge_bases_selected_count": "{{count}} selected",
    "default_knowledge_bases_selected_count_one": "{{count}} selected",
    "default_knowledge_bases_selected_count_other": "{{count}} selected"
  },
  "bots": {
    "title": "AI Assistant",
    "description": "Configure your AI-powered development assistant",
    "loading": "Loading bots...",
    "active": "Active",
    "inactive": "Inactive",
    "edit": "Edit Bot",
    "delete": "Delete Bot",
    "no_bots": "No bots available",
    "new_bot": "New Bot",
    "copy": "Copy Bot",
    "delete_confirm_title": "Confirm Delete",
    "delete_confirm_message": "Are you sure you want to delete this bot? This action cannot be undone.",
    "force_delete_confirm_title": "Warning: Bot Has Running Tasks",
    "force_delete_confirm_message": "This bot has {{count}} running task(s). Deleting this bot may affect these tasks.",
    "running_tasks_list": "Running tasks:",
    "and_more_tasks": "and {{count}} more...",
    "force_delete_warning": "Warning: Force deleting may cause running tasks to fail or become orphaned.",
    "force_delete": "Force Delete",
    "manage_bots": "Manage Bots",
    "group_required_title": "Please Select a Group First",
    "group_required_message": "You must select a target group before creating a bot in group mode"
  },
  "messages": {
    "copy_markdown": "Copy markdown content",
    "task_status": "Task Status:",
    "bot": "Bot",
    "you": "You",
    "subtask_completed": "Subtask completed",
    "subtask_failed": "Subtask failed:",
    "unknown_error": "Unknown error",
    "download": "Download"
  },
  "teams": {
    "title": "Team List",
    "description": "Agent = Bot + Collaboration Mode. Combine different bots and collaboration patterns to accomplish various tasks",
    "loading": "Loading teams...",
    "active": "Active",
    "inactive": "Inactive",
    "select_team": "Select a team",
    "search_team": "Select a team",
    "no_bots": "No bots",
    "no_description": "No description",
    "edit": "Edit Team",
    "chat": "Send Task",
    "delete": "Delete Team",
    "copy": "Duplicate Team",
    "copy_to_label": "Copy to",
    "copy_to_personal": "Copy to Personal Space",
    "copy_name": "Copy Team Name",
    "copy_name_success": "Team name copied",
    "copy_name_failed": "Failed to copy team name",
    "copy_success": "Team duplicated successfully",
    "copy_failed": "Failed to duplicate team",
    "copy_skills_dialog_title": "Copy Skills to Group",
    "copy_skills_dialog_desc": "The following skills belong to your personal space. Copy them to the group too?",
    "copy_skills_with": "Copy Skills",
    "copy_skills_skip": "Agent Only",
    "copy_skills_count": "{{count}} skill(s)",
    "more": "More",
    "reorder_quick_access": "Drag to reorder QuickCards",
    "more_teams": "View more teams",
    "more_actions": "More Actions",
    "no_teams": "No teams available",
    "no_teams_title": "No Agents Available",
    "no_teams_description": "Create your first agent to start intelligent conversations",
    "create_first_team": "Create Agent",
    "system_recommended": "Recommended",
    "quick_access_title": "Favorite agents",
    "quick_access_description": "This list shows your favorites and system-recommended agents by default.",
    "quick_access_empty": "No favorite agents yet",
    "quick_access_view_all": "View all agents",
    "quick_access_back": "Back to favorites",
    "all_agents_title": "All agents",
    "all_agents_description": "Choose from all agents available for the current mode.",
    "search_quick_access": "Search favorite agents...",
    "search_all_agents": "Search all agents...",
    "new_team": "New Team",
    "search_placeholder": "Search team...",
    "no_match": "No matching teams",
    "manage": "Team settings",
    "delete_confirm_title": "Confirm Delete",
    "delete_confirm_message": "Are you sure you want to delete this team? This action cannot be undone.",
    "unbind": "Unbind",
    "unbind_confirm_title": "Confirm Unbind",
    "unbind_confirm_message": "Are you sure you want to unbind this shared team? This will remove it from your team list, but the original team will not be affected.",
    "force_delete_confirm_title": "Warning: Team Has Running Tasks",
    "force_delete_confirm_message": "This team has {{count}} running task(s). Deleting this team may affect these tasks.",
    "running_tasks_list": "Running tasks:",
    "and_more_tasks": "and {{count}} more...",
    "force_delete_warning": "Warning: Force deleting may cause running tasks to fail or become orphaned.",
    "force_delete": "Force Delete",
    "edit_title": "Edit Team",
    "create_title": "Create Team",
    "edit_failed": "Failed to edit team",
    "create_failed": "Failed to create team",
    "sharing": "Sharing",
    "shared_by": "Shared by {{author}}",
    "share_failed": "Failed to share, please try again",
    "share_success_title": "Share Successful",
    "share_success_message": "Share agent \"{{teamName}}\" with your friends!",
    "share_success_message_prefix": "Share agent \"",
    "share_success_message_suffix": "\" with your friends!",
    "share_link": "Share Link",
    "copy_link": "Copy Link",
    "copy_link_success": "Link copied",
    "group_required_title": "Please select a group first",
    "group_required_message": "When creating an agent in group mode, a group must be selected first",
    "share_instructions_content1": "Copy and send this link to others. They can use your shared agent to complete tasks directly.",
    "share_instructions_content2": "After sharing, you can still manage and edit this agent. Others can apply the latest agent configuration but cannot edit agent settings.",
    "filter_all": "All",
    "filter_chat": "Chat",
    "filter_code": "Code",
    "go_to_chat": "Go to Chat",
    "go_to_code": "Go to Code",
    "system": "System",
    "add_to_quick_access": "Add to favorites",
    "remove_from_quick_access": "Remove from favorites",
    "public": "Public",
    "icon": "Icon",
    "selectIcon": "Select Icon",
    "api_call": {
      "action": "API Call",
      "title": "API Call: {{name}}",
      "description": "Call this agent from external apps using the Responses API.",
      "endpoint": "Endpoint",
      "model": "Model",
      "curl_example": "curl example",
      "copy_curl": "Copy curl",
      "manage_api_keys": "Manage API Keys",
      "view_docs": "View docs",
      "copy_success": "curl copied",
      "copy_failed": "Failed to copy curl"
    },
    "share": {
      "title": "Agent Share",
      "confirm_message": "Do you want to use {{userName}}'s agent \"{{teamName}}\" to execute tasks?",
      "join_description": "After confirmation, \"{{teamName}}\" will be added to your agent list, and you can use it to create and execute tasks.",
      "joining": "Joining...",
      "confirm_join": "Confirm Join",
      "self_share_message": "\"{{teamName}}\" is your own agent, no need to join.",
      "already_joined_message": "\"{{teamName}}\" is already in your agent list, no need to join again.",
      "already_joined_title": "Agent Already Joined",
      "start_chat": "Start Chat",
      "fetch_info_failed": "Failed to fetch shared agent information",
      "join_failed": "Failed to join agent, please try again",
      "join_success": "Successfully joined agent \"{{teamName}}\"",
      "loading": "Loading agent information...",
      "self_share_suffix": " is your own agent, no need to join.",
      "already_joined_suffix": " is already in your agent list, no need to join again.",
      "confirm_prefix": "Do you want to use ",
      "confirm_middle": "'s agent \"",
      "confirm_suffix": "\" to execute tasks?",
      "join_description_prefix": "After confirmation, \"",
      "join_description_suffix": "\" will be added to your agent list, and you can use it to create and execute tasks."
    }
  },
  "teamSelector": {
    "agent_label": "Agent",
    "select_agent_tooltip": "Select agent"
  },
  "team": {
    "name": "Name",
    "name_required": "Team name is required",
    "name_placeholder": "Team Name",
    "display_name": "Display name",
    "display_name_placeholder": "Agent display name (optional)",
    "bot_required": "Please configure a bot",
    "leader_required": "Please select a leader",
    "members": "Team Members",
    "description": "Description",
    "description_placeholder": "Brief description of this team",
    "leader": "Leader",
    "model": "Model",
    "bots": "Bots",
    "bot": "Bot",
    "select_leader": "Select leader",
    "candidates": "candidates",
    "in_team": "in team",
    "no_data": "no data",
    "bot_prompt": "Bot Prompt",
    "input_bot_prompt": "Input bot prompt",
    "prompts_link": "Team prompt add-ons",
    "prompts_tooltip": "Add team-only guidance that is appended to each bot's base prompt.",
    "prompts_tag_configured": "{{count}} added",
    "prompts_tag_none": "None",
    "prompts_tag_pending": "Pending save",
    "prompts_drawer_title_new": "Team prompts for new team",
    "prompts_drawer_title_existing": "Team '{{name}}' prompts",
    "prompts_drawer_title_generic": "Team prompts",
    "prompts_scope_hint": "Prompts added here are appended to each bot's base prompt and only affect this team.",
    "prompts_scope_sub": "Other teams continue to use their own configurations.",
    "prompts_placeholder": "Add team-level instructions that will run with this bot inside the team.",
    "prompts_base_button": "Base prompt",
    "prompts_badge": "Team prompt",
    "prompts_badge_tooltip": "This bot runs with an extra team-only prompt add-on.",
    "prompts_save_success": "Prompts saved! They will be applied when you save the team.",
    "prompts_update_success": "Prompts updated successfully!",
    "prompts_update_error": "Failed to update prompts.",
    "dify_mode_pipeline_only": "Dify bots only support pipeline execution mode.",
    "dify_no_members_hint": "Dify bots handle execution independently and do not support team members.",
    "mode_change_confirm_title": "Change Collaboration Mode",
    "mode_change_confirm_message": "Changing the collaboration mode will reset team roles and team-specific prompts. Do you want to continue?",
    "solo_max_one_bot": "Solo mode allows only 1 bot",
    "select_bot": "Configure bot",
    "select_bot_placeholder": "Please configure a bot",
    "no_bot_selected": "No bot configured",
    "current_bot": "Current Bot",
    "no_bots_available": "No bots available",
    "edit_bot_config": "Edit bot configuration",
    "recommended_mode": "Recommended Mode",
    "recommended_mode_both": "Both",
    "recommended_mode_chat": "Chat",
    "recommended_mode_code": "Code",
    "bind_mode": "Bind Mode",
    "bind_mode_chat": "Chat",
    "bind_mode_code": "Code",
    "bind_mode_task": "Device",
    "bind_mode_video": "Video",
    "bind_mode_image": "Image",
    "bind_mode_required": "Please select at least one bind mode",
    "require_confirmation_tooltip": "When enabled, the task will pause after this stage completes, waiting for user confirmation before proceeding to the next stage",
    "requires_workspace": "Requires Repository",
    "requires_workspace_hint": "When enabled, this agent requires a code repository to be selected in code mode before starting a task. When disabled, tasks can start without selecting a repository."
  },
  "team_model": {
    "solo": "Solo",
    "pipeline": "Pipeline",
    "route": "Route",
    "coordinate": "Coordinate",
    "collaborate": "Collaborate"
  },
  "team_model_desc": {
    "solo": "A single bot handles the task independently, suitable for simple scenarios or single-responsibility workflows.",
    "pipeline": "Agents are chained one after another, where each agent refines or transforms the result in turn.",
    "route": "A central agent acts as a message router, directing communication between agents without them talking directiy.",
    "coordinate": "A network pattern is the structure that defines how agents connect, exchange information, and coordinate with each other.",
    "collaborate": "Multiple agents work simultaneously on tasks, often sharing results to speed up processing."
  },
  "integrations": {
    "title": "Integrations",
    "description": "Setting external services to enhance your workflow",
    "git_title": "Git Tokens",
    "git_description": "Manage Git access tokens for repository operations",
    "loading": "Loading Git integrations...",
    "edit_token": "Edit Token",
    "delete": "Delete",
    "no_tokens": "No git tokens configured",
    "new_token": "New Token"
  },
  "dingtalk": {
    "loading": "Loading DingTalk configuration...",
    "url_label": "MCP URL",
    "url_placeholder": "Paste the StreamableHttp URL here",
    "url_hint": "Open the DingTalk MCP page, click \"Get MCP Server Config\", then copy the \"StreamableHttp URL\" value and paste it here. You do not need to paste the full JSON config. The URL is stored as a user-scoped encrypted credential.",
    "open_link": "Get DingTalk URL",
    "save": "Save",
    "saving": "Saving",
    "load_failed": "Failed to load DingTalk configuration",
    "modal": {
      "title": "Configure DingTalk MCP",
      "description": "No usable {{service}} MCP is available in the current session. Get the StreamableHttp URL first, then save it here.",
      "steps_intro": "Follow these steps:",
      "step_open_home": "Open the DingTalk MCP page",
      "step_choose_service": "Choose the MCP service related to \"{{service}}\"",
      "step_get_config": "Click \"Get MCP Server Config\"",
      "step_confirm": "If DingTalk shows a confirmation dialog, confirm the activation",
      "step_copy_url": "Copy the StreamableHttp URL",
      "open_home": "Open DingTalk MCP Page",
      "save": "Save and Enable",
      "save_success": "DingTalk MCP saved and enabled"
    },
    "services": {
      "docs": {
        "title": "DingTalk Docs",
        "description": "Enable the DingTalk Docs MCP for your default agents.",
        "default_name": "DingTalk Docs",
        "enable_label": "Enable DingTalk Docs MCP",
        "enable_hint": "When enabled, Wegent will inject your DingTalk Docs MCP into supported agents automatically.",
        "save_success": "DingTalk Docs configuration saved",
        "save_failed": "Failed to save DingTalk Docs configuration"
      },
      "table": {
        "title": "DingTalk Table",
        "description": "Enable the DingTalk Table MCP for your default agents.",
        "default_name": "DingTalk Table",
        "enable_label": "Enable DingTalk Table MCP",
        "enable_hint": "When enabled, Wegent will inject your DingTalk Table MCP into supported agents automatically.",
        "save_success": "DingTalk Table configuration saved",
        "save_failed": "Failed to save DingTalk Table configuration"
      },
      "ai_table": {
        "title": "DingTalk AI Table",
        "description": "Enable the DingTalk AI Table MCP for your default agents.",
        "default_name": "DingTalk AI Table",
        "enable_label": "Enable DingTalk AI Table MCP",
        "enable_hint": "When enabled, Wegent will inject your DingTalk AI Table MCP into supported agents automatically.",
        "save_success": "DingTalk AI Table configuration saved",
        "save_failed": "Failed to save DingTalk AI Table configuration"
      },
      "wikispace": {
        "title": "DingTalk Knowledge Base",
        "description": "Access and manage DingTalk knowledge bases",
        "default_name": "DingTalk Knowledge Base",
        "enable_label": "Enable DingTalk Knowledge Base",
        "enable_hint": "Allow AI to access your DingTalk knowledge bases",
        "save_success": "DingTalk Knowledge Base configuration saved",
        "save_failed": "Failed to save DingTalk Knowledge Base configuration"
      }
    }
  },
  "auth": {
    "login_title": "Login to WeCode AI",
    "login_subtitle": "your AI assistant for developers",
    "oidc_login_failed": "OIDC login failed:",
    "login_success": "Login success",
    "loading": "Loading..."
  },
  "branches": {
    "load_failed": "Failed to load branches",
    "search_repository": "Search Repository...",
    "select_repository": "Select Repository...",
    "search_branch": "Select Branch...",
    "select_branch": "Select Branch...",
    "loading": "loading branch...",
    "no_branch": "No Branch Found",
    "no_match": "No matching results",
    "default": "(default)",
    "set_token": "Set Token",
    "configure_integration": "Configure Repository Integration",
    "load_more": "Refresh repository list",
    "refreshing": "Refreshing...",
    "refresh_success": "Repository list refreshed",
    "refresh_failed": "Failed to refresh, please try again"
  },
  "tasks": {
    "history_title": "History",
    "group_chats": "Group Chats",
    "group_chats_expand": "Show {{count}}{{suffix}} more",
    "group_chats_collapse": "Show less",
    "conversations": "Conversations",
    "search_placeholder": "Search task",
    "search_placeholder_chat": "Search conversation",
    "search_hint_with_shortcut": "Search ({{shortcut}})",
    "search_placeholder_with_shortcut": "Search conversations... ({{shortcut}} to toggle)",
    "new_task": "New Task",
    "new_conversation": "New Conversation",
    "no_tasks": "No tasks",
    "today": "Today",
    "this_week": "This Week",
    "earlier": "Earlier",
    "loading": "Loading...",
    "load_more": "Load more",
    "no_more_tasks": "No more tasks",
    "settings": "Settings",
    "search_results": "Search Results",
    "no_search_results": "No matching tasks",
    "copy_task_id": "Copy TaskId",
    "cancel_task": "Cancel Task",
    "delete_task": "Delete Task",
    "rename_task": "Rename Task",
    "rename_empty_error": "Task name cannot be empty",
    "rename_save_error": "Failed to save, please try again",
    "searching": "Searching...",
    "refreshing": "Syncing...",
    "press_enter_to_search": "Press Enter to search",
    "search_hint": "Enter keywords to search conversations",
    "clear_search": "Clear",
    "mark_all_read": "Mark all as read",
    "open_from": "<> Code",
    "open_from_vscode": "VSCode",
    "open_from_git": "Git",
    "access_denied_title": "Access Denied",
    "access_denied_description": "You don't have permission to access this task. Please contact the task owner to invite you via the \"Invite Members\" feature.",
    "access_denied_go_home": "Go to Chat",
    "total_count": "{{count}} items total",
    "delete_confirm_title": "Delete Task",
    "delete_confirm_message": "Are you sure you want to delete \"{{title}}\"? This action cannot be undone.",
    "leave_confirm_title": "Leave Group Chat",
    "leave_confirm_message": "Are you sure you want to leave \"{{title}}\"?",
    "delete_success": "Task deleted successfully",
    "leave_success": "Left group chat successfully",
    "delete_failed": "Failed to delete, please try again"
  },
  "settings": {
    "title": "Settings",
    "integrations": "Integrations",
    "bot": "Bot",
    "team": "Team",
    "models": "Models",
    "shells": "Shells",
    "skills": "Skills",
    "retrievers": "Retrievers",
    "personal": "Personal",
    "groups": "Groups",
    "groupManager": "Group Manager",
    "api_keys": "API Keys",
    "sections": {
      "general": "General"
    }
  },
  "retrievers": {
    "title": "Retriever Management",
    "description": "Manage retrieval and storage engine configurations for RAG",
    "my_retrievers": "My Retrievers",
    "group_retrievers": "Group Retrievers",
    "public_retrievers": "Public Retrievers",
    "public": "Public",
    "create": "Create Retriever",
    "edit": "Edit Retriever",
    "delete": "Delete Retriever",
    "test_connection": "Test Connection",
    "test_success": "Connection test successful",
    "test_failed": "Connection test failed",
    "no_retrievers": "No retrievers available",
    "no_retrievers_hint": "Click the button below to create your first retriever",
    "group": "Group",
    "delete_confirm_title": "Confirm Delete",
    "delete_confirm_message": "Are you sure you want to delete the retriever \"{{name}}\"? This action cannot be undone.",
    "delete_success": "Retriever deleted successfully",
    "create_success": "Retriever created successfully",
    "update_success": "Retriever updated successfully",
    "retriever_id": "Retriever ID",
    "retriever_id_required": "Retriever ID *",
    "retriever_id_placeholder": "my-retriever",
    "retriever_id_hint": "Unique identifier, can only contain lowercase letters, numbers, and hyphens",
    "retriever_id_readonly": "Retriever ID cannot be changed after creation",
    "display_name": "Display Name",
    "display_name_placeholder": "My Retriever",
    "display_name_hint": "Human-readable name for display (optional)",
    "storage_type": "Storage Type",
    "storage_type_required": "Storage Type *",
    "storage_type_select": "Select storage type",
    "storage_type_elasticsearch": "Elasticsearch",
    "storage_type_qdrant": "Qdrant",
    "storage_type_milvus": "Milvus",
    "connection_url": "Connection URL",
    "connection_url_required": "Connection URL *",
    "connection_url_placeholder_es": "http://elasticsearch:9200",
    "connection_url_placeholder_qdrant": "http://localhost:6333",
    "connection_url_placeholder_milvus": "http://localhost:19530/default",
    "connection_url_hint_es": "Elasticsearch service address",
    "connection_url_hint_qdrant": "Qdrant service address",
    "connection_url_hint_milvus": "Milvus connection URL. Format: http://host:port/db_name. Default port 19530",
    "username": "Username",
    "username_placeholder": "elastic",
    "password": "Password",
    "password_placeholder": "••••••••",
    "api_key": "API Key",
    "api_key_placeholder": "••••••••",
    "index_strategy": "Index Strategy",
    "index_strategy_required": "Index Strategy *",
    "index_strategy_per_user": "Per User Sharding",
    "index_strategy_per_dataset": "Per Dataset Sharding",
    "index_strategy_fixed": "Fixed Index Name",
    "index_strategy_rolling": "Rolling Index",
    "index_strategy_per_user_desc": "Each user uses an independent index, suitable for multi-tenant isolation",
    "index_strategy_per_dataset_desc": "Each dataset uses an independent index, suitable for large-scale data",
    "index_strategy_fixed_desc": "All data uses the same index",
    "index_strategy_rolling_desc": "Automatically create multiple indices based on dataset ID range",
    "fixed_index_name": "Index Name",
    "fixed_index_name_required": "Index Name *",
    "fixed_index_name_placeholder": "my-index",
    "fixed_index_name_empty": "Fixed index name cannot be empty",
    "rolling_step": "Rolling Step",
    "rolling_step_required": "Rolling Step *",
    "rolling_step_placeholder": "5000",
    "rolling_step_hint": "Dataset ID range per index (e.g., 5000 means 0-4999, 5000-9999...)",
    "rolling_step_invalid": "Rolling step must be a positive integer",
    "rolling_prefix_required": "Rolling index mode requires index prefix",
    "index_prefix": "Index Prefix",
    "index_prefix_placeholder": "wegent",
    "index_prefix_hint": "Index name prefix (default: wegent)",
    "per_dataset_prefix_required": "Per dataset sharding mode requires index prefix",
    "url_required": "URL cannot be empty",
    "name_required": "Retriever name cannot be empty",
    "name_invalid": "Retriever name format is invalid",
    "name_invalid_hint": "Can only contain lowercase letters, numbers, and hyphens",
    "group_required_title": "Please select a group first",
    "group_required_message": "You must select a target group when creating a retriever in group mode",
    "retrieval_methods": "Retrieval Methods",
    "retrieval_methods_hint": "Select which retrieval methods to enable for this retriever. At least one method must be enabled.",
    "loading_retrieval_methods": "Loading available methods...",
    "retrieval_method_vector": "Vector Search",
    "retrieval_method_keyword": "Full-Text Search",
    "retrieval_method_hybrid": "Hybrid Search",
    "errors": {
      "load_retrievers_failed": "Failed to load retrievers",
      "create_failed": "Failed to create retriever",
      "update_failed": "Failed to update retriever",
      "delete_failed": "Failed to delete retriever"
    }
  },
  "notifications": {
    "enable": "Enable Browser Notifications",
    "enable_description": "Get notified when tasks are completed or failed",
    "permission_denied": "Notification permission denied. Please enable it in browser settings.",
    "not_supported": "Browser notifications are not supported in this browser.",
    "enable_success": "Browser notifications enabled successfully",
    "disable_success": "Browser notifications disabled"
  },
  "send_key": {
    "title": "Message Send Shortcut",
    "description": "Choose which keyboard shortcut sends messages in the chat",
    "option_enter": "Enter to send (Shift+Enter for new line)",
    "option_cmd_enter": "Cmd/Ctrl+Enter to send (Enter for new line)",
    "save_success": "Send key preference saved",
    "save_failed": "Failed to save send key preference"
  },
  "search_key": {
    "title": "Search Shortcut Key",
    "description": "Choose keyboard shortcut to open search dialog",
    "option_cmd_k": "Cmd/Ctrl+K (Recommended)",
    "option_cmd_f": "Cmd/Ctrl+F",
    "option_disabled": "Disable shortcut",
    "save_success": "Search shortcut key saved",
    "save_failed": "Failed to save search shortcut key"
  },
  "memory": {
    "title": "Long-term Memory",
    "description": "Enable AI to remember context from your previous conversations across different tasks",
    "save_success": "Memory preference saved",
    "save_failed": "Failed to save memory preference"
  },
  "guide": {
    "title": "Welcome",
    "description": "Before you can start using the app, please complete the setup below first!",
    "create_team": "Create Team"
  },
  "onboarding": {
    "step1_title": "Quick Mode Switch",
    "step1_description": "Code mode lets the AI dev team build features, fix bugs, and explore codebases. Wiki mode is for viewing code knowledge base. Click 'New Conversation' to start a new Chat anytime.",
    "step2_title": "Quick Agent Switch",
    "step2_description": "Click these cards to quickly switch between different agents. Different agents can help you complete specific tasks faster.",
    "step3_title": "Enter Your Task",
    "step3_description": "Type your task or question here for the AI team to work on.",
    "step4_title": "Feature Selection",
    "step4_description": "Here you can upload attachments, select chat bots, and change AI models.",
    "step4_description_no_team": "You haven't created any teams yet. Please create your first AI team in Settings.",
    "step5_title": "Send Task",
    "step5_description": "Click the send button to submit your task to the AI team for execution.",
    "step6_title": "View Task History",
    "step6_description": "View all your previous tasks here. Click any task to see details and conversation history.",
    "step7_title": "Configure Your Setup",
    "step7_description": "Create and manage AI teams, configure bots, and set up Git integrations in Settings.",
    "next": "Next",
    "previous": "Previous",
    "skip": "Skip",
    "done": "Done",
    "restart_tour": "Restart Onboarding Tour"
  },
  "time": {
    "just_now": "Just now",
    "minutes_ago": "{{count}}m ago",
    "hours_ago": "{{count}}h ago",
    "days_ago": "{{count}}d ago"
  },
  "common": {
    "back": "Back",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "open_sidebar": "Open sidebar",
    "close_sidebar": "Close sidebar",
    "previous": "Previous",
    "next": "Next",
    "page_info": "Page {{current}} of {{total}}",
    "warning": "Warning",
    "cannotUndo": "This action cannot be undone",
    "coming_soon": "Coming Soon",
    "noResults": "No results found"
  },
  "dialog": {
    "confirm_close_title": "Confirm Close",
    "confirm_close_description": "You have unsaved changes. Are you sure you want to close?",
    "confirm_close_cancel": "Cancel",
    "confirm_close_confirm": "Close Anyway"
  },
  "correction": {
    "result_title": "Correction Result"
  },
  "appPreview": {
    "button": "Preview",
    "title": "App Preview"
  },
  "userSearch": {
    "placeholder": "Search username or email...",
    "selectedUsers": "{{count}} user(s) selected",
    "noResults": "No users found"
  },
  "quota": {
    "load_failed": "Failed to fetch quota info",
    "brief": "{{quota_source}} quota {{monthly_usage}} / {{monthly_quota}} (+{{permanent_quota}})",
    "detail_monthly": "Your monthly quota is {{monthly_quota}}, used {{monthly_usage}}, left {{monthly_left}}.",
    "detail_permanent": "Permanent quota is {{permanent_quota}}, used {{permanent_usage}}, left {{permanent_left}}.",
    "detail_tip": "Monthly quota resets at the beginning of each month, permanent quota can be obtained via activities."
  },
  "github": {
    "error": {
      "required": "Please fill in all required fields",
      "save_failed": "Save failed",
      "invalid_domain": "Please enter a valid domain (e.g. gitlab.example.com or http://gitlab.internal.com)",
      "gerrit_username_required": "Username is required for Gerrit"
    },
    "modal": {
      "title_edit": "Edit Token",
      "title_add": "Add Git Token"
    },
    "platform": "Platform",
    "platform_github": "GitHub",
    "platform_gitlab": "GitLab",
    "platform_gitee": "Gitee",
    "platform_gitea": "Gitea",
    "platform_gerrit": "Gerrit",
    "domain": "Platform Domain",
    "username": "Username",
    "token": {
      "title": "Personal Access Token",
      "title_gerrit": "HTTP password",
      "placeholder_github": "ghp_xxxxxxxxxxxxxxxxxxxx",
      "placeholder_gitee": "gitee-personal-access-token",
      "placeholder_gitea": "gitea-personal-access-token",
      "placeholder_gitlab": "glpat-xxxxxxxxxxxxxxxxxxxx",
      "placeholder_gerrit": "HTTP password from Gerrit Settings"
    },
    "howto": {
      "step1_visit": "1. Visit",
      "github": {
        "title": "How to get your GitHub token:",
        "step2": "2. Click \"Generate new token (classic)\"",
        "step3": "3. Select appropriate scopes and copy the generated token"
      },
      "gitee": {
        "title": "How to get your Gitee token:",
        "step2": "2. Create a new token",
        "step3": "3. Select appropriate scopes and copy the generated token"
      },
      "gitea": {
        "title": "How to get your Gitea token:",
        "step2": "2. Click \"Generate new token\"",
        "step3": "3. Select appropriate scopes and copy the generated token",
        "step4": "⚠️ Note: Token must have 'user' permission enabled (for fetching user info)"
      },
      "gitlab": {
        "title": "How to get your GitLab token:",
        "step2": "2. Click \"Add new token\"",
        "step3": "3. Select appropriate scopes and copy the generated token"
      },
      "gerrit": {
        "title": "How to get Gerrit HTTP password:",
        "step2": "2. Generate a new HTTP password under \"HTTP Credentials\"",
        "step3": "3. Copy the username and password, and paste them here"
      }
    },
    "saving": "Saving...",
    "save_token": "Save Token",
    "auth_type": "Authentication Method",
    "auth_type_digest": "Digest Auth",
    "auth_type_basic": "Basic Auth"
  },
  "skills": {
    "title": "Skills",
    "description": "Manage Claude Code Skills to extend your bot capabilities",
    "loading": "Loading skills...",
    "loading_failed": "Failed to load skills",
    "no_skills": "No skills yet",
    "no_skills_description": "Upload a Claude Code Skill ZIP package to get started",
    "upload_skill": "Upload Skill",
    "upload_first_skill": "Upload Your First Skill",
    "manage_skills": "Manage Skills",
    "manage_skills_description": "Upload, edit, or delete Claude Code Skills to extend your bot capabilities",
    "edit_skill": "Update Skill",
    "delete_skill": "Delete Skill",
    "download_skill": "Download",
    "update_skill": "Update",
    "delete_confirm_title": "Delete Skill",
    "delete_confirm_message": "Are you sure you want to delete the skill \"{{skillName}}\"? This action cannot be undone.",
    "delete_note": "Note: If this skill is referenced by any Ghost, the deletion will fail. Please remove the skill from all Ghosts first.",
    "upload_modal_title": "Upload Skill",
    "upload_modal_description": "Upload a Claude Code Skill ZIP package containing SKILL.md",
    "update_modal_title": "Update Skill",
    "update_modal_description": "Upload a new ZIP package to update this skill",
    "skill_name": "Skill Name",
    "skill_name_required": "Skill Name *",
    "skill_name_placeholder": "e.g., python-debugger",
    "skill_name_hint": "Unique identifier for this skill (lowercase, hyphens allowed)",
    "zip_package": "ZIP Package",
    "zip_package_required": "ZIP Package *",
    "drop_file_here": "Drop ZIP file here or click to browse",
    "max_file_size": "Maximum file size: 10MB",
    "uploading": "Uploading...",
    "upload_progress": "Uploading...",
    "requirements": "Requirements:",
    "requirement_zip": "ZIP file must contain a skill folder as root directory",
    "requirement_structure": "Expected structure: my-skill.zip → my-skill/SKILL.md",
    "requirement_folder_name": "Skill folder name must match ZIP file name",
    "requirement_description": "SKILL.md must have YAML frontmatter with description field",
    "requirement_optional": "Optional fields: version, author, tags",
    "requirement_size": "Maximum file size: 10MB",
    "error_select_file": "Please select a ZIP file",
    "error_enter_name": "Please enter a skill name",
    "error_file_format": "File must be a ZIP package (.zip)",
    "error_file_size": "File size exceeds 10MB limit (current: {{fileSize}}MB)",
    "error_upload_failed": "Failed to upload skill",
    "success_upload": "Skill uploaded successfully",
    "success_update": "Skill updated successfully",
    "success_delete": "Skill \"{{skillName}}\" deleted successfully",
    "success_download": "Downloading skill \"{{skillName}}\"",
    "failed_load": "Failed to load skills",
    "failed_delete": "Failed to delete skill",
    "failed_download": "Failed to download skill",
    "version": "v{{version}}",
    "author": "Author",
    "state_available": "Available",
    "state_unavailable": "Unavailable",
    "file_size": "{{fileSize}}",
    "skills_section": "Skills",
    "skills_optional": "(Optional)",
    "no_skills_available": "No skills available. Upload skills in the Skills tab.",
    "loading_skills": "Loading skills...",
    "select_skill_to_add": "Select a skill to add...",
    "select_skill": "Select Skill",
    "select_to_add": "Click a skill to add it to the bot",
    "created_at": "Created",
    "author": "Author",
    "manage_skills_button": "Manage Skills",
    "system_skill": "System",
    "public_readonly": "System skills are read-only",
    "public_no_download": "System skills cannot be downloaded",
    "no_skills_hint": "Upload a skill ZIP package or use system skills",
    "preload_skills_section": "Preload Skills",
    "preload_skills_description": "Preloaded skills will be automatically injected into the system prompt",
    "preload_only_public_hint": "Note: Only public skills can be preloaded",
    "preload_hint": "Check the checkbox to preload a skill (it will be injected into the system prompt automatically)",
    "no_skills_selected": "Please select skills first",
    "delete_success": "Skill deleted successfully",
    "delete_failed": "Failed to delete skill",
    "download_success": "Download started",
    "bind_shells": "Supported Shells",
    "no_bind_shells": "No shell binding",
    "overwrite_confirm_title": "Skill Already Exists",
    "overwrite_confirm_message": "A skill named \"{{name}}\" already exists. Do you want to overwrite it with the new version?",
    "overwrite_confirm_button": "Overwrite",
    "cannot_delete_title": "Cannot Delete Skill",
    "cannot_delete_description": "Skill \"{{skillName}}\" is being used by the following Ghosts and cannot be deleted directly.",
    "references_title": "Skill References",
    "references_description": "Skill \"{{skillName}}\" is currently referenced by the following Ghosts.",
    "referenced_by_ghosts": "Referenced by {{count}} Ghost(s)",
    "view_references": "View References",
    "no_references_found": "No Ghost references found for skill \"{{skillName}}\"",
    "references_fetch_failed": "Failed to fetch skill references",
    "remove_reference": "Remove Reference",
    "reference_conflict_help": "You can click \"Remove Reference\" to remove the reference from a single Ghost, or click the button below to remove all references and delete the skill at once.",
    "reference_manage_help": "You can click \"Remove Reference\" to remove a single reference, or clear all references for this skill at once.",
    "remove_all_and_delete": "Remove All References and Delete",
    "remove_all_references": "Remove All References",
    "removing_references": "Removing references...",
    "references_removed_success": "Successfully removed all references and deleted the skill",
    "references_cleared_success": "Successfully removed all references",
    "references_remove_failed": "Failed to remove references",
    "reference_removed_success": "Removed reference from Ghost \"{{ghostName}}\"",
    "reference_remove_failed": "Failed to remove reference",
    "git_import_tab": "Import from Git Repo",
    "git_url_label": "Git Repository URL",
    "git_url_placeholder": "Enter repo URL, supports GitHub/GitLab/Gitee/Gitea",
    "git_scan_button": "Scan Skills",
    "git_scanning": "Scanning repository...",
    "git_no_skills_found": "No skills found in repository",
    "git_no_skills_hint": "Make sure the repository contains directories with SKILL.md files",
    "git_skills_found": "Found {{count}} skills",
    "git_select_all": "Select All",
    "git_deselect_all": "Deselect All",
    "git_import_selected": "Import Selected Skills",
    "git_conflict_title": "Skill Name Conflict Detected",
    "git_conflict_description": "The following skills already exist. Select the ones you want to overwrite, unselected ones will be skipped",
    "git_import_confirm": "Confirm Import",
    "git_import_result_title": "Import Complete",
    "git_import_success": "Successfully imported {{count}} skills",
    "git_import_skipped": "Skipped {{count}} skills (name conflict)",
    "git_import_failed": "Failed {{count}} skills",
    "git_import_failed_details": "Failure Details",
    "git_invalid_url": "Please enter a valid Git repository URL",
    "git_repo_not_found": "Repository not found or not accessible",
    "git_unsupported_platform": "Unsupported Git platform",
    "git_download_failed": "Failed to download repository, please check network connection",
    "update_from_git": "Update from Git",
    "update_all_from_git": "Update All",
    "success_update_from_git": "Skill \"{{skillName}}\" updated from Git repository",
    "failed_update_from_git": "Failed to update skill from Git",
    "no_git_skills_to_update": "No Git skills to update",
    "update_all_success": "Successfully updated {{count}} skills",
    "update_all_partial": "Update completed: {{success}} succeeded, {{failed}} failed",
    "update_all_confirm_title": "Confirm Update All",
    "update_all_confirm_message": "Are you sure you want to update all {{count}} Git-imported skills?",
    "update_all_progress_title": "Updating Skills",
    "update_all_progress_description": "Updating skills from Git repositories, please wait...",
    "updating_skill": "Updating: {{name}}",
    "update_success_count": "{{count}} succeeded",
    "update_failed_count": "{{count}} failed",
    "git_source": "Git Source",
    "namespace": "Namespace",
    "batch_updating": "Batch updating..."
  },
  "models": {
    "label": "Model",
    "title": "Model Management",
    "description": "Manage your AI model configurations",
    "public": "Public",
    "group": "Group",
    "group_models": "Group Models",
    "public_models": "Public Models",
    "my_models": "My Models",
    "manage": "Model settings",
    "create": "Create Model",
    "create_title": "Create Model",
    "edit": "Edit Model",
    "edit_title": "Edit Model",
    "delete": "Delete Model",
    "test_connection": "Test Connection",
    "model_id_name": "Model ID",
    "id_hint": "Unique identifier, can only contain lowercase letters, numbers, and hyphens",
    "id_readonly_hint": "Model ID cannot be changed after creation",
    "display_name": "Display Name",
    "display_name_placeholder": "My GPT-4 Model",
    "display_name_hint": "Human-readable name for display (optional)",
    "name": "Model Name",
    "name_readonly_hint": "Model name cannot be changed after creation",
    "provider_type": "Model Protocol",
    "select_provider": "Select Protocol",
    "provider_hint": "Agno uses OpenAI protocol, Claude Code uses Anthropic protocol, Gemini uses Google protocol",
    "api_key": "API Key",
    "base_url": "Base URL",
    "base_url_hint": "Leave empty for default endpoint, fill in for proxy or custom endpoint",
    "model_id": "Model ID",
    "select_model_id": "Select Model ID",
    "custom_model_id_placeholder": "Enter custom model ID",
    "custom_headers": "Custom Headers",
    "custom_headers_hint": "Enter custom HTTP headers in JSON format. These headers will override default values",
    "no_models": "No models available",
    "no_models_hint": "Click the button above to create your first model",
    "loading": "Loading...",
    "test_success": "Connection test successful",
    "test_failed": "Connection test failed",
    "create_success": "Model created successfully",
    "update_success": "Model updated successfully",
    "delete_success": "Model deleted successfully",
    "delete_confirm_title": "Confirm Delete",
    "delete_confirm_message": "Are you sure you want to delete the model \"{{name}}\"? This action cannot be undone.",
    "model_category_type": "Model Type",
    "model_category_type_llm": "LLM (Chat/Code)",
    "model_category_type_tts": "Text-to-Speech (TTS)",
    "model_category_type_stt": "Speech-to-Text (STT)",
    "model_category_type_embedding": "Embedding",
    "model_category_type_rerank": "Rerank",
    "model_category_type_video": "Video Generation",
    "model_category_type_image": "Image Generation",
    "image_config_title": "Image Generation Configuration",
    "image_size": "Image Size",
    "image_size_hint": "Resolution of generated images",
    "image_max_images": "Max Generated Images",
    "image_max_images_hint": "Maximum number of images to generate per request",
    "image_max_reference_images": "Max Reference Images",
    "image_max_reference_images_hint": "Maximum number of reference images that can be uploaded",
    "image_response_format": "Response Format",
    "image_response_format_hint": "URL returns image link, Base64 returns encoded data",
    "image_output_format": "Output Format",
    "image_watermark": "Watermark",
    "image_watermark_hint": "Whether to add watermark to generated images",
    "video_config_title": "Video Generation Configuration",
    "video_resolution": "Default Resolution",
    "video_ratio": "Default Aspect Ratio",
    "video_duration": "Default Duration (seconds)",
    "video_duration_hint": "Seedance 1.5 supports 4-12 seconds",
    "video_generate_audio": "Generate Audio",
    "video_generate_audio_hint": "Only supported by Seedance 1.5 Pro",
    "video_feature_toggles": "Feature Toggles",
    "video_advanced_options": "Advanced Parameters",
    "video_draft_mode": "Draft Mode",
    "video_draft_mode_hint": "Quick preview, uses fewer tokens",
    "video_camera_fixed": "Fixed Camera",
    "video_camera_fixed_hint": "Keep camera position unchanged",
    "video_watermark": "Add Watermark",
    "video_seed": "Random Seed",
    "video_seed_hint": "-1 means random, same seed produces similar results",
    "video_capabilities_title": "Model Capabilities",
    "video_capabilities_hint": "Select the generation parameters this model supports",
    "video_capabilities_ratios": "Supported Ratios",
    "video_capabilities_resolutions": "Supported Resolutions",
    "video_capabilities_durations": "Supported Durations (sec)",
    "video_capabilities_custom_add": "Custom Add",
    "select_model_category_type": "Select Model Type",
    "filter_by_category_type": "Filter by Type",
    "all_category_types": "All Types",
    "tts_voice": "Voice",
    "tts_voice_hint": "Voice ID (e.g., 'alloy', 'echo' for OpenAI)",
    "tts_speed": "Speed",
    "tts_speed_hint": "Speech speed (0.25-4.0)",
    "tts_output_format": "Output Format",
    "stt_language": "Language",
    "stt_language_hint": "Language code (e.g., 'en', 'zh')",
    "stt_transcription_format": "Transcription Format",
    "embedding_dimensions": "Dimensions",
    "embedding_dimensions_hint": "Output dimensions (e.g., 1536)",
    "embedding_encoding_format": "Encoding Format",
    "embedding_supports_image_input": "Supports Image Input",
    "embedding_supports_image_input_hint": "Declare that this embedding model accepts image input in addition to text. Current knowledge indexing still uses the text-only pipeline.",
    "rerank_top_n": "Top N Results",
    "rerank_top_n_hint": "Number of top results to return",
    "rerank_return_documents": "Return Documents",
    "llm_config_title": "LLM Configuration",
    "context_window": "Context Window",
    "context_window_hint": "Maximum context window size in tokens. Used for message compression.",
    "max_output_tokens": "Max Output Tokens",
    "max_output_tokens_hint": "Maximum output tokens the model can generate per response.",
    "thinking_config": "Thinking Config",
    "thinking_config_hint": "Provider-native thinking/reasoning JSON config. Passed through to the LLM API as-is. Leave empty to disable.",
    "fetch_models": "Load Models",
    "fetching_models": "Loading...",
    "fetch_success": "Successfully loaded {{count}} models",
    "fetch_failed": "Failed to load models",
    "fetch_models_hint": "Please fill in API Key first, then click 'Load Models' button",
    "fetch_error_no_api_key": "Please enter API Key first",
    "fetch_error_network": "Network connection failed",
    "fetch_error_auth": "API Key authentication failed",
    "fetch_error_unsupported": "This provider does not support auto-loading model list",
    "errors": {
      "load_models_failed": "Failed to load models",
      "create_failed": "Failed to create model",
      "update_failed": "Failed to update model",
      "delete_failed": "Failed to delete model",
      "id_required": "Model ID is required",
      "id_invalid": "Model ID can only contain lowercase letters, numbers, and hyphens",
      "name_required": "Model name is required",
      "name_invalid": "Model name can only contain lowercase letters, numbers, and hyphens",
      "api_key_required": "API Key is required",
      "model_id_required": "Model ID is required",
      "custom_headers_invalid": "Custom headers format is invalid",
      "custom_headers_invalid_json": "Please enter valid JSON format",
      "custom_headers_invalid_object": "Custom headers must be an object",
      "custom_headers_values_must_be_strings": "All header values must be strings",
      "thinking_config_invalid_json": "Thinking config must be valid JSON",
      "thinking_config_invalid_object": "Thinking config must be a JSON object"
    }
  },
  "task_submit": {
    "select_model": "Select Model",
    "search_model": "Search model...",
    "force_override_model": "Force override Bot's bound model",
    "override_default_model": "Override default model",
    "show_advanced_models": "Show advanced models",
    "override_short": "Override",
    "mixed_team_warning": "This team contains multiple executor types, cannot specify a unified model",
    "default_model": "Default",
    "use_bot_model": "Use Bot's predefined model",
    "model_required": "Please select a model",
    "model_tooltip": "Select AI model for conversation"
  },
  "shells": {
    "title": "Shell Management",
    "description": "Manage custom shells with your own base images",
    "public": "Public",
    "group": "Group",
    "group_shells": "Group Shells",
    "public_shells": "Public Shells",
    "my_shells": "My Shells",
    "create": "Create Shell",
    "create_title": "Create Shell",
    "edit": "Edit Shell",
    "edit_title": "Edit Shell",
    "delete": "Delete Shell",
    "validate": "Validate",
    "shell_name": "Shell Name",
    "name_hint": "Unique identifier, can only contain lowercase letters, numbers, and hyphens",
    "name_readonly_hint": "Shell name cannot be changed after creation",
    "display_name": "Display Name",
    "display_name_placeholder": "My Custom Shell",
    "display_name_hint": "Human-readable name for display (optional)",
    "base_shell": "Base Shell",
    "select_base_shell": "Select a base shell type",
    "base_shell_hint": "The shell type this custom shell is based on (ClaudeCode, Agno)",
    "base_image": "Base Image",
    "base_image_hint": "Docker image address (e.g., ghcr.io/your-org/your-image:latest)",
    "no_shells": "No shells available",
    "no_shells_hint": "Click the button above to create your first custom shell",
    "validation_success": "Image validation passed",
    "validation_failed": "Image validation failed",
    "validation_passed": "All checks passed",
    "validation_not_passed": "Some checks failed",
    "validation_submitted": "Validation task submitted",
    "validation_skipped": "Validation skipped",
    "validation_in_progress": "Validation in progress",
    "validation_async_hint": "Validation is running in the background. Results will be available shortly.",
    "validation_required": "Please complete image validation first",
    "validation_timeout": "Validation timed out, please check network or image size",
    "validation_stage_submitted": "Validation task submitted...",
    "validation_stage_pulling": "Pulling image...",
    "validation_stage_starting": "Starting container...",
    "validation_stage_checking": "Running dependency checks...",
    "error_image_pull": "Image pull failed",
    "error_container_start": "Container start failed",
    "create_success": "Shell created successfully",
    "update_success": "Shell updated successfully",
    "delete_success": "Shell deleted successfully",
    "delete_confirm_title": "Confirm Delete",
    "delete_confirm_message": "Are you sure you want to delete the shell \"{{name}}\"? This action cannot be undone.",
    "errors": {
      "load_shells_failed": "Failed to load shells",
      "create_failed": "Failed to create shell",
      "update_failed": "Failed to update shell",
      "delete_failed": "Failed to delete shell",
      "name_required": "Shell name is required",
      "name_invalid": "Shell name can only contain lowercase letters, numbers, and hyphens",
      "base_shell_required": "Base shell is required",
      "base_image_required": "Base image is required",
      "base_image_and_shell_required": "Both base image and base shell are required for validation",
      "base_shell_not_found": "Selected base shell not found",
      "image_not_compatible": "Image is not compatible with the selected shell type",
      "group_required": "Group selection is required",
      "group_required_hint": "You must select a group when creating a shell"
    },
    "software_requirements_title": "Software Requirements",
    "software_requirements_hint": "The following software must be pre-installed in your base image and meet minimum version requirements",
    "required": "Required",
    "optional": "Optional",
    "copy_command": "Copy command",
    "requires_workspace": "Requires Workspace",
    "requires_workspace_hint": "When enabled, this shell requires selecting a code repository to run tasks"
  },
  "inAppBrowser": {
    "title": "Open in Default Browser",
    "detectedApp": "Detected that you are opening in {{app}}",
    "detectedGeneric": "Detected that you are opening in an in-app browser",
    "whyTitle": "Why use the default browser?",
    "whyDescription": "In-app browsers may restrict login functionality from working properly. For the best experience, we recommend opening in your default browser (Safari, Chrome, etc.).",
    "howToOpen": "How to open in default browser?",
    "instructions": {
      "wechat": ["Tap the '···' menu in the top right corner", "Select 'Open in Browser'"],
      "dingtalk": [
        "Tap the '···' menu in the top right corner",
        "Select 'Open in Default Browser'"
      ],
      "alipay": ["Tap the '···' menu in the top right corner", "Select 'Open in Browser'"],
      "qq": ["Tap the '···' menu in the top right corner", "Select 'Open in Browser'"],
      "weibo": ["Tap the '···' menu in the top right corner", "Select 'Open in Browser'"],
      "facebook": ["Tap the menu button in the top right corner", "Select 'Open in Browser'"],
      "instagram": ["Tap the '···' menu in the top right corner", "Select 'Open in Browser'"],
      "twitter": ["Tap the 'Share' button in the top right corner", "Select 'Open in Browser'"],
      "default": [
        "Tap the menu button in the top right corner",
        "Select 'Open in Browser' or 'Open in Default Browser'"
      ]
    },
    "copyUrl": "Copy Link",
    "urlCopied": "Link copied! You can paste and open it in your default browser.",
    "copyFailed": "Failed to copy. Please manually copy the URL from the address bar.",
    "continueAnyway": "Continue Anyway (may encounter login issues)",
    "footerNote": "Opening in default browser ensures all features work properly"
  },
  "quick_access": {
    "switch_mode_title": "Switch Mode",
    "switch_to_code_message": "This agent is recommended for Code mode. Would you like to switch?",
    "switch_to_chat_message": "This agent is recommended for Chat mode. Would you like to switch?",
    "switch_mode": "Switch Mode",
    "stay_current": "Stay Here"
  },
  "api_keys": {
    "title": "API Keys",
    "description": "Manage your API keys for programmatic access to Wegent",
    "create": "Create API Key",
    "name": "Key Name",
    "name_placeholder": "Enter a name for this key",
    "key": "API Key",
    "prefix": "Key Prefix",
    "expires_at": "Expires At",
    "never_expires": "Never",
    "last_used": "Last Used",
    "created_at": "Created At",
    "copy": "Copy",
    "copied": "Copied!",
    "delete_confirm_title": "Delete API Key",
    "delete_confirm_message": "Are you sure you want to delete the API key \"{{name}}\"? This action cannot be undone.",
    "create_success": "API key created successfully",
    "delete_success": "API key deleted successfully",
    "enabled_success": "API key enabled",
    "disabled_success": "API key disabled",
    "warning_save_key": "Please save this key now. You won't be able to see it again!",
    "no_keys": "No API keys yet",
    "no_keys_description": "Create an API key to access Wegent programmatically",
    "status_disabled": "Disabled",
    "enable": "Enable",
    "disable": "Disable",
    "errors": {
      "load_failed": "Failed to load API keys",
      "create_failed": "Failed to create API key",
      "delete_failed": "Failed to delete API key",
      "toggle_failed": "Failed to toggle API key status",
      "name_required": "Key name is required"
    }
  },
  "groupChat": {
    "leave": "Leave Group",
    "create": {
      "button": "Create Group Chat",
      "title": "Create Group Chat",
      "description": "Create a new group chat task and invite others to join the discussion",
      "titleLabel": "Group Chat Title",
      "titlePlaceholder": "Enter group chat title",
      "titleRequired": "Please enter group chat title",
      "teamLabel": "Select Agent",
      "teamPlaceholder": "Select an agent",
      "teamRequired": "Please select an agent",
      "noChatTeams": "No chat agents available",
      "initialMessage": "Group chat created, welcome everyone!",
      "success": "Group chat created successfully",
      "successDesc": "You can now invite other members to join",
      "failed": "Failed to create group chat",
      "failedDesc": "Please try again"
    },
    "inviteLink": {
      "title": "Invite to Group Chat",
      "description": "Generate an invite link to share with others to join \"{{taskTitle}}\"",
      "expiresIn": "Link expires in:",
      "permanent": "Never expires",
      "permanentNote": "This link will never expire",
      "hours24": "24 hours",
      "days3": "3 days",
      "days7": "7 days",
      "days30": "30 days",
      "generate": "Generate Invite Link",
      "generating": "Generating...",
      "generateFailed": "Failed to generate invite link",
      "copied": "Link copied to clipboard",
      "copyFailed": "Failed to copy link",
      "expiresNote": "Link expires in {{hours}} hours. Generate a new one if needed.",
      "regenerate": "Generate New Link",
      "manage": "Manage Invite Links"
    },
    "invite": {
      "title": "Join Group Chat",
      "description": "You have been invited to join a group chat",
      "invitedBy": "{{name}} invited you to join",
      "memberCount": "{{count}} members",
      "join": "Join Group Chat",
      "joining": "Joining...",
      "joinSuccess": "Successfully joined the group chat!",
      "joinFailed": "Failed to join group chat",
      "alreadyMember": "You are already a member",
      "invalidLink": "Invalid or expired invite link"
    },
    "members": {
      "title": "Group Members",
      "inviteLink": "Invite Link",
      "addMember": "Add Member",
      "addMembers": "Add Members",
      "you": "You",
      "invitedBy": "Invited by {{name}}",
      "loadFailed": "Failed to load members",
      "removeSuccess": "{{name}} has been removed",
      "removeFailed": "Failed to remove member",
      "notOwner": "Only the task owner can create invite links"
    },
    "delete": {
      "button": "Delete Group",
      "confirmMessage": "Are you sure you want to delete this group chat? This action cannot be undone."
    }
  },
  "attachment": {
    "errors": {
      "unsupported_type": "Unsupported file format",
      "unsupported_type_hint": "Please upload files in these formats: {{types}}",
      "unrecognized_type": "Unrecognized file type",
      "unrecognized_type_hint": "Please upload documents, images, or text files",
      "file_too_large": "File is too large",
      "file_too_large_hint": "File size cannot exceed {{size}} MB. Please compress and try again",
      "parse_failed": "Failed to parse file",
      "parse_failed_hint": "The file may be corrupted or in an unusual format. Please re-export and upload again",
      "encrypted_pdf": "Cannot parse encrypted file",
      "encrypted_pdf_hint": "Please remove PDF password protection and upload again",
      "legacy_doc": "Outdated file format",
      "legacy_doc_hint": "Please save the .doc file as .docx format and upload again",
      "legacy_ppt": "Outdated file format",
      "legacy_ppt_hint": "Please save the .ppt file as .pptx format and upload again",
      "legacy_xls": "Outdated file format",
      "legacy_xls_hint": "Please save the .xls file as .xlsx format and upload again",
      "network_error": "Upload failed",
      "network_error_hint": "Network connection error. Please check your network and try again",
      "content_truncated": "File content truncated",
      "content_truncated_hint": "File content was too long. Kept first {{length}} million characters",
      "batch_limit_exceeded": "Too many files selected (max {{max}} files)"
    },
    "preview": {
      "label": "Preview",
      "loading": "Loading preview...",
      "unavailable": "Preview unavailable",
      "dialog_description": "Previewing file {{filename}}"
    },
    "truncation": {
      "notice": "⚠️ Content too long, auto-truncated ({{original}} chars → {{truncated}} chars)"
    },
    "supported_types": "PDF, Word, Excel, XMind, TXT, Markdown, Images, HTML, Code files",
    "html_preview": "HTML Preview",
    "click_to_preview": "Click to preview",
    "click_to_download": "Click to download",
    "characters": "chars",
    "upload_tooltip": "Supported file types: Documents (PDF, Word, PPT, Excel, XMind), Images, HTML, Markdown, Code files and text files\nHTML and Markdown files will be rendered with preview\nMax file size: {{size}} MB",
    "share": {
      "link_copied_title": "Share Link Copied",
      "copy_failed_title": "Failed to Copy to Clipboard",
      "link_copied_description": "Link valid for 7 days. Paste and send to others.",
      "link_copied_with_expiry": "Link valid until {{date}}. Paste and send to others.",
      "generate_failed_title": "Failed to Generate Share Link",
      "retry": "Please try again later",
      "expiry": {
        "label": "Select Link Expiration",
        "1day": "1 Day",
        "7days": "7 Days",
        "30days": "30 Days",
        "1year": "1 Year",
        "10years": "10 Years",
        "days": " days"
      }
    },
    "html": {
      "source_mode": "Source",
      "load_failed": "Preview Load Failed",
      "view_source": "View Source"
    }
  },
  "editor": {
    "vim": {
      "toggle": "Toggle Vim Mode",
      "enable": "Enable Vim Mode",
      "disable": "Disable Vim Mode",
      "saved": "Content saved",
      "hint_toast": "Vim Mode Enabled",
      "hint_description": "Use hjkl to navigate, i for insert mode, Esc for normal mode. :w to save, :q to close.",
      "commands_hint": ":w save | :q close | :wq save & close"
    }
  },
  "skillSelector": {
    "slash_command_hint": "Type / to select skills",
    "select_skills": "Select Skills",
    "team_skills_section": "Agent Skills",
    "personal_skills_section": "Personal Skills",
    "group_skills_section": "Group Skills",
    "public_skills_section": "Public Skills",
    "no_available_skills": "No skills available",
    "skills_selected": "{{count}} skill(s) selected",
    "remove_skill": "Remove skill",
    "skill_autocomplete_title": "Select skills to use",
    "preload_hint": "Selected skills will be auto-loaded",
    "download_hint": "Selected skills will be downloaded when the task runs",
    "search_skills": "Search skills...",
    "no_matching_skills": "No matching skills",
    "already_selected": "Already selected",
    "skill_button_tooltip": "Select skills to use with this message",
    "skill_button_label": "Skills",
    "manage_skills": "Manage"
  },
  "mcpProviders": {
    "title": "MCP Providers",
    "provider_button": "Providers",
    "configured": "Configured",
    "api_key": "API Key",
    "api_key_placeholder": "Enter your API key",
    "save": "Save",
    "get_api_key": "Get API Key",
    "discover": "Browse Market",
    "mcp_servers": "MCP Servers",
    "no_servers_found": "No MCP servers found",
    "loading_servers": "Loading...",
    "no_servers_hint": "No MCP servers available",
    "configure_api_key": "Configure API Key",
    "select_provider": "Please select a provider",
    "has_token_hint": "API key saved. Save a new key to reload server list.",
    "add": "Add",
    "added": "Added",
    "refresh": "Refresh",
    "settings": "Settings",
    "hide_settings": "Hide",
    "server_added": "Added: {{name}}",
    "errors": {
      "load_providers_failed": "Failed to load providers",
      "save_api_key_failed": "Failed to save API key",
      "sync_failed": "Failed to sync servers"
    }
  }
}
