const enUS = {
  sidebar: {
    home: 'Home',
    extensions: 'Extensions',
    installedPlugins: 'Installed Plugins',
    pluginMarket: 'Marketplace',
    mcpServers: 'MCP Servers',
    quickStart: 'Quick Start',
  },
  common: {
    login: 'Login',
    logout: 'Logout',
    accountOptions: 'Settings',
    account: 'Account',
    integration: 'Integration',
    email: 'Email',
    password: 'Password',
    welcome: 'Welcome back to LangBot 👋',
    continueToLogin: 'Login to continue',
    loginSuccess: 'Login successful',
    loginFailed: 'Login failed, please check your email and password',
    loginLoadError: 'Unable to connect to server',
    loginLoadErrorDesc:
      'Unable to connect to the LangBot backend. Please make sure the service is running and try again.',
    retry: 'Retry',
    enterEmail: 'Enter email address',
    enterPassword: 'Enter password',
    invalidEmail: 'Please enter a valid email address',
    emptyPassword: 'Please enter your password',
    language: 'Language',
    helpDocs: 'Get Help',
    featureRequest: 'Feature Request',
    starOnGitHub: 'Star on GitHub',
    create: 'Create',
    edit: 'Edit',
    delete: 'Delete',
    add: 'Add',
    select: 'Select',
    cancel: 'Cancel',
    submit: 'Submit',
    next: 'Next',
    back: 'Back',
    refresh: 'Refresh',
    error: 'Error',
    success: 'Success',
    save: 'Save',
    saving: 'Saving...',
    confirm: 'Confirm',
    confirmDelete: 'Confirm Delete',
    deleteConfirmation: 'Are you sure you want to delete this?',
    selectOption: 'Select an option',
    selectPreset: 'Select Preset',
    required: 'Required',
    enable: 'Enable',
    name: 'Name',
    description: 'Description',
    icon: 'Icon',
    close: 'Close',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Delete failed: ',
    addRound: 'Add Round',
    copy: 'Copy',
    undo: 'Undo',
    redo: 'Redo',
    copySuccess: 'Copy Successfully',
    copyFailed: 'Copy Failed',
    test: 'Test',
    forgotPassword: 'Forgot Password?',
    agreementNotice: 'By continuing, you agree to our',
    privacyPolicy: 'Privacy Policy',
    and: 'and',
    dataCollectionPolicy: 'Data Collection Policy',
    dataCollectionPolicyUrl: 'https://link.langbot.app/en/docs/data-policy',
    loading: 'Loading...',
    fieldRequired: 'This field is required',
    or: 'or',
    loginWithSpace: 'Login with Space',
    spaceLoginRecommended:
      'Recommended: Use official stable model APIs and cloud services',
    loginLocal: 'Login with local account',
    loginWithPassword: 'Login with password',
    spaceLoginTitle: 'Login with Space',
    spaceLoginDescription:
      'Scan the QR code or visit the link below to authorize',
    spaceLoginUserCode: 'Your code',
    spaceLoginExpires: 'Code expires in {{seconds}} seconds',
    spaceLoginWaiting: 'Waiting for authorization...',
    spaceLoginSuccess: 'Authorization successful',
    spaceLoginFailed: 'Space login failed',
    spaceLoginExpired: 'Authorization code expired, please try again',
    spaceLoginCancel: 'Cancel',
    spaceLoginVisitLink: 'Visit link',
    spaceLoginProcessing: 'Logging in with Space',
    spaceLoginProcessingDescription:
      'Please wait while we complete your login...',
    spaceLoginSuccessDescription: 'Redirecting to LangBot...',
    spaceLoginError: 'Login Failed',
    spaceLoginNoCode: 'Missing authorization code',
    backToLogin: 'Back to Login',
    backToHome: 'Back to Home',
    spaceAccountCannotChangePassword:
      'Space accounts cannot change password here',
    theme: 'Theme',
    changePassword: 'Change Password',
    currentPassword: 'Current Password',
    newPassword: 'New Password',
    confirmNewPassword: 'Confirm New Password',
    enterCurrentPassword: 'Enter current password',
    enterNewPassword: 'Enter new password',
    enterConfirmPassword: 'Confirm new password',
    currentPasswordRequired: 'Current password is required',
    newPasswordRequired: 'New password is required',
    confirmPasswordRequired: 'Confirm password is required',
    passwordsDoNotMatch: 'Passwords do not match',
    changePasswordSuccess: 'Password changed successfully',
    changePasswordFailed:
      'Failed to change password, please check your current password',
    apiIntegration: 'API Integration',
    apiKeys: 'API Keys',
    manageApiIntegration: 'Manage API Integration',
    manageApiKeys: 'Manage API Keys',
    createApiKey: 'Create API Key',
    apiKeyName: 'API Key Name',
    apiKeyDescription: 'API Key Description',
    apiKeyValue: 'API Key Value',
    apiKeyCreated: 'API key created successfully',
    apiKeyDeleted: 'API key deleted successfully',
    apiKeyDeleteConfirm: 'Are you sure you want to delete this API key?',
    apiKeyNameRequired: 'API key name is required',
    copyApiKey: 'Copy API Key',
    apiKeyCopied: 'API key copied to clipboard',
    noApiKeys: 'No API keys configured',
    apiKeyHint:
      'API keys allow external systems to access LangBot Service APIs',
    webhooks: 'Webhooks',
    createWebhook: 'Create Webhook',
    webhookName: 'Webhook Name',
    webhookUrl: 'Webhook URL',
    webhookDescription: 'Webhook Description',
    webhookEnabled: 'Enabled',
    webhookCreated: 'Webhook created successfully',
    webhookDeleted: 'Webhook deleted successfully',
    webhookDeleteConfirm: 'Are you sure you want to delete this webhook?',
    webhookNameRequired: 'Webhook name is required',
    webhookUrlRequired: 'Webhook URL is required',
    noWebhooks: 'No webhooks configured',
    webhookHint:
      'Webhooks allow LangBot to push person and group message events to external systems',
    actions: 'Actions',
    apiKeyCreatedMessage:
      'Please copy this API key, if the button is invalid, please copy manually.',
    none: 'None',
    more: 'More ({{count}})',
    less: 'Less',
    noItems: 'No items',
    data: 'Data',
    result: 'Result',
    body: 'Body',
    headers: 'Headers',
    query: 'Query',
    method: 'Method',
  },
  notFound: {
    title: 'Page not found',
    description: 'The page you are looking for does not exist.',
    back: 'Back',
    home: 'Home',
    help: 'Get Help',
  },
  models: {
    title: 'Models',
    description: 'Configure and manage models that can be used in pipelines',
    createModel: 'Create Model',
    editModel: 'Edit Model',
    getModelListError: 'Failed to get model list: ',
    modelName: 'Model Name',
    modelProvider: 'Model Provider',
    modelBaseURL: 'Base URL',
    modelAbilities: 'Model Abilities',
    saveSuccess: 'Saved successfully',
    saveError: 'Save failed: ',
    createSuccess: 'Created successfully',
    createError: 'Creation failed: ',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Delete failed: ',
    deleteConfirmation: 'Are you sure you want to delete this model?',
    modelNameRequired: 'Model name cannot be empty',
    modelProviderRequired: 'Model provider cannot be empty',
    requestURLRequired: 'Request URL cannot be empty',
    apiKeyRequired: 'API Key cannot be empty',
    keyNameRequired: 'Key name cannot be empty',
    mustBeValidNumber: 'Must be a valid number',
    mustBeTrueOrFalse: 'Must be true or false',
    requestURL: 'Request URL',
    scanURL: 'Scan Models URL',
    scanURLPlaceholder: 'Leave empty to use Request URL + /models',
    scanURLDescription:
      'Fill in the actual model-list endpoint when model scanning does not use the same address as model invocation.',
    apiKey: 'API Key',
    abilities: 'Abilities',
    selectModelAbilities: 'Select model abilities',
    visionAbility: 'Vision Ability',
    functionCallAbility: 'Function Call',
    extraParameters: 'Extra Parameters',
    addParameter: 'Add Parameter',
    keyName: 'Key Name',
    type: 'Type',
    value: 'Value',
    string: 'String',
    number: 'Number',
    boolean: 'Boolean',
    selectModelProvider: 'Select Model Provider',
    modelProviderDescription:
      'Please fill in the model name provided by the provider',
    modelManufacturer: 'Model Manufacturer',
    aggregationPlatform: 'Aggregation Platform',
    selfDeployed: 'Self-deployed',
    builtin: 'Built-in',
    selectModel: 'Select Model',
    testSuccess: 'Test successful',
    testError: 'Test failed, please check your model configuration',
    llmModels: 'LLM Models',
    localProvider: 'Local',
    localProviderDescription: 'Models configured and managed locally',
    spaceProviderDescription: 'Models synced from your Space account',
    spaceDisabledForLocalAccount: 'Login with Space to use cloud models',
    syncModels: 'Sync',
    syncSuccess: 'Sync complete: {{created}} created, {{updated}} updated',
    syncError: 'Sync failed: ',
    spaceModelReadOnly: 'Space models are read-only',
    noSpaceModels: 'No Space models. Click Sync to fetch models from Space.',
    noLocalModels: 'No local models. Click Create to add a model.',
    providerCount: '{{count}} providers',
    // New keys for provider-based structure
    addModel: 'Add Model',
    manualAdd: 'Manual',
    scanAdd: 'Scan',
    scanModels: 'Scan Models',
    scanModelsHint:
      'Read available models from the current provider, then select which ones to add.',
    scannedModels: 'Scanned Models',
    scanDebug: 'Debug Info',
    searchScannedModels: 'Search scanned models',
    noScannedModels: 'No scan results yet. Click the button above to scan.',
    noScannedModelsMatch: 'No matching models',
    addSelectedModels: 'Add Selected',
    addSelectedModelsSuccess: '{{count}} model(s) added',
    selectAll: 'Select All',
    alreadyAdded: 'Already added',
    addLLMModel: 'Add LLM Model',
    addEmbeddingModel: 'Add Embedding Model',
    provider: 'Provider',
    existingProvider: 'Existing Provider',
    newProvider: 'New Provider',
    selectProvider: 'Select Provider',
    requester: 'Provider Type',
    selectRequester: 'Select Provider Type',
    langbotModelsDescription: 'Cloud models powered by LangBot Space',
    credits: 'Credits',
    loginWithSpace: 'Login with Space',
    loginToUseModels: 'Login with Space to use cloud models',
    noModels: 'No models configured',
    langbotModels: 'LangBot Models',
    spaceTrialTooltip:
      'Free trial credits available! Login with Space to access cloud models with zero configuration.',
    unlockModels: 'Login to use',
    editProvider: 'Edit Provider',
    addProvider: 'Add Provider',
    addProviderHint: 'Add providers to use models from other sources',
    addProviderHintSimple: 'Add providers to use models',
    noProviders: 'No providers yet',
    providerName: 'Provider Name',
    providerNameRequired: 'Provider name is required',
    requesterRequired: 'Provider type is required',
    providerSaved: 'Provider saved',
    providerCreated: 'Provider created',
    providerSaveError: 'Failed to save provider: ',
    providerDeleted: 'Provider deleted',
    providerDeleteError: 'Failed to delete provider: ',
    deleteProviderConfirmation:
      'Are you sure you want to delete this provider?',
    loadError: 'Failed to load data',
    chat: 'Chat',
    embedding: 'Embedding',
    rerank: 'Rerank',
    rerankUrlTooltip:
      'Full URL override for rerank endpoint (e.g. https://dashscope.aliyuncs.com/compatible-api/v1/reranks)',
    rerankPathTooltip: 'Path appended to base URL (default: rerank)',
    modelsCount: '{{count}} model(s)',
    expandModels: 'Expand',
    collapseModels: 'Collapse',
    fallback: {
      primary: 'Primary Model',
      fallbackList: 'Fallback Models',
      addFallback: 'Add Fallback Model',
    },
  },
  bots: {
    title: 'Bots',
    description:
      'Create and manage bots, which are the entry points for LangBot to connect with various platforms',
    createBot: 'Create Bot',
    selectFromSidebar: 'Select a bot from the sidebar',
    editBot: 'Edit Bot',
    getBotListError: 'Failed to get bot list: ',
    botName: 'Bot Name',
    botDescription: 'Bot Description',
    botNameRequired: 'Bot name cannot be empty',
    botDescriptionRequired: 'Bot description cannot be empty',
    adapterRequired: 'Adapter cannot be empty',
    defaultDescription: 'A bot',
    getBotConfigError: 'Failed to get bot configuration: ',
    saveSuccess: 'Saved successfully',
    saveError: 'Save failed: ',
    createSuccess:
      'Created successfully. Please enable or modify the bound pipeline',
    createError: 'Creation failed: ',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Delete failed: ',
    deleteConfirmation: 'Are you sure you want to delete this bot?',
    platformAdapter: 'Platform/Adapter Selection',
    selectAdapter: 'Select Adapter',
    adapterConfig: 'Adapter Configuration',
    viewAdapterDocs: 'View Docs',
    bindPipeline: 'Bind Pipeline',
    selectPipeline: 'Select Pipeline',
    selectBot: 'Select Bot',
    botLogTitle: 'Bot Log',
    enableAutoRefresh: 'Enable Auto Refresh',
    session: 'Session',
    yesterday: 'Yesterday',
    earlier: 'Earlier',
    dateFormat: '{{month}}/{{day}}',
    setBotEnableError: 'Failed to set bot enable status',
    log: 'Log',
    configuration: 'Configuration',
    logs: 'Logs',
    basicInfo: 'Basic Information',
    basicInfoDescription: 'Set the bot name and description',
    routingConnection: 'Routing & Connection',
    routingConnectionDescription:
      'Bind the pipeline that processes messages for this bot',
    routingRules: 'Conditional Routing Rules',
    routingRulesDescription:
      'Rules are evaluated in order; first match routes to its pipeline. Fallback to the default pipeline above if none match.',
    addRoutingRule: 'Add Rule',
    ruleTypeLauncherType: 'Session Type',
    ruleTypeLauncherId: 'Session ID',
    ruleTypeMessageContent: 'Message Content',
    operatorEq: 'Equals',
    operatorNeq: 'Not Equals',
    operatorContains: 'Contains',
    operatorNotContains: 'Not Contains',
    operatorStartsWith: 'Starts With',
    operatorRegex: 'Regex',
    operatorHas: 'Has',
    operatorNotHas: 'Does not have',
    ruleTypeMessageHasElement: 'Message Element',
    ruleValueElementPlaceholder: 'Select element type',
    elementImage: 'Image',
    elementVoice: 'Voice',
    elementFile: 'File',
    elementForward: 'Forward',
    elementFace: 'Emoji',
    elementAt: '@Mention',
    elementAtAll: '@All',
    elementQuote: 'Quote',
    ruleValuePlaceholder: 'Match value',
    ruleValueLauncherIdPlaceholder: 'Group or user ID',
    ruleValueMessagePlaceholder: 'Message text',
    ruleValuePrefixPlaceholder: 'e.g. !draw',
    ruleValueRegexpPlaceholder: 'e.g. ^/help',
    pipelineDiscard: 'Discard Message',
    sessionTypePerson: 'Private Chat',
    sessionTypeGroup: 'Group Chat',
    // Unified binding (replacing routing rules)
    bindTarget: 'Bind Target',
    bindTargetDescription: 'Select the Pipeline or Workflow to process messages for this bot',
    bindingType: 'Binding Type',
    selectBinding: 'Select binding target',
    selectWorkflow: 'Select Workflow',
    noPipelinesFound: 'No pipelines available',
    noWorkflowsFound: 'No workflows available',
    pipelineBindingHelp: 'Pipeline is the traditional message processing method using predefined stages.',
    workflowBindingHelp: 'Workflow provides visual node orchestration for more flexible message processing.',
    adapterConfigDescription: 'Configure the selected platform adapter',
    dangerZone: 'Danger Zone',
    dangerZoneDescription: 'Irreversible and destructive actions',
    deleteBotAction: 'Delete this bot',
    deleteBotHint:
      'Once deleted, all associated configuration will be permanently removed.',
    webhookUrl: 'Webhook Callback URL',
    webhookUrlCopied: 'Webhook URL copied',
    webhookUrlHint:
      'Click the input to select all, then press Ctrl+C (Mac: Cmd+C) to copy, or click the button',
    webhookUrlHintEither:
      'Use either of the two URLs above in your platform configuration',
    webhookSaasHint:
      'Webhook requires a publicly accessible domain. LangBot Cloud provides a ready-to-use public endpoint for your bot.',
    webhookSaasLink: 'Learn more about LangBot Cloud',
    adapterCategory: {
      popular: 'Popular',
      china: 'China',
      global: 'Global',
      protocol: 'Protocol',
    },
    logLevel: 'Log Level',
    allLevels: 'All Levels',
    selectLevel: 'Select Level',
    levelsSelected: 'levels selected',
    viewDetailedLogs: 'View Detailed Logs',
    viewDetails: 'Details',
    collapse: 'Collapse',
    imagesAttached: 'image(s) attached',
    noLogs: 'No logs yet',
    sessionMonitor: {
      title: 'Sessions',
      sessions: 'Sessions',
      noSessions: 'No sessions found',
      selectSession: 'Select a session to view messages',
      noMessages: 'No messages in this session',
      messages: 'messages',
      messageCount: '{{count}} messages',
      loading: 'Loading...',
      loadingSessions: 'Loading sessions...',
      loadingMessages: 'Loading messages...',
      user: 'User',
      variables: 'Variables',
      platform: 'Platform',
      lastActive: 'Last active',
      refresh: 'Refresh',
      active: 'Active',
      inactive: 'Inactive',
      discarded: 'Discarded',
      userMessage: 'User',
      botMessage: 'Assistant',
    },
  },
  plugins: {
    title: 'Extensions',
    description:
      'Install and configure plugins to extend functionality, please select them in the pipeline configuration',
    createPlugin: 'Create Plugin',
    editPlugin: 'Edit Plugin',
    installed: 'Installed',
    marketplace: 'Marketplace',
    arrange: 'Sort Plugins',
    install: 'Install',
    installPlugin: 'Install Plugin',
    onlySupportGithub: 'Currently only supports installation from GitHub',
    enterGithubLink: 'Enter GitHub link of the plugin',
    installing: 'Installing plugin...',
    installSuccess: 'Plugin installed successfully',
    installFailed: 'Plugin installation failed:',
    searchPlugin: 'Search plugins',
    sortBy: 'Sort by',
    mostStars: 'Most stars',
    recentlyAdded: 'Recently added',
    recentlyUpdated: 'Recently updated',
    noMatchingPlugins: 'No matching plugins found',
    loading: 'Loading...',
    getPluginListError: 'Failed to get plugin list:',
    noPluginInstalled: 'No plugins installed',
    pluginConfig: 'Plugin Configuration',
    pluginSort: 'Plugin Sort',
    pluginSortDescription:
      'Plugin order affects the processing order within the same event, please drag the plugin card to sort',
    pluginSortSuccess: 'Plugin sort successful',
    pluginSortError: 'Plugin sort failed: ',
    pluginNoConfig: 'The plugin has no configuration items.',
    systemDisabled: 'Plugin System Disabled',
    systemDisabledDesc:
      'Plugin system is not enabled, please modify the configuration according to the documentation',
    connectionError: 'Plugin System Connection Error',
    connectionErrorDesc:
      'Please check the plugin system configuration or contact the administrator.',
    errorDetails: 'Error Details',
    loadingStatus: 'Checking plugin system status...',
    failedToGetStatus: 'Failed to get plugin system status',
    pluginSystemNotReady:
      'Plugin system is not ready, cannot perform this operation',
    debugInfo: 'Debug Info',
    debugInfoTitle: 'Plugin Debug Information',
    debugUrl: 'Debug URL',
    debugKey: 'Debug Key',
    noDebugKey: '(Not Set)',
    debugKeyDisabled:
      'Debug key is not set, plugin debugging does not require authentication',
    failedToGetDebugInfo: 'Failed to get debug information',
    copiedToClipboard: 'Copied to clipboard',
    deleting: 'Deleting...',
    deletePlugin: 'Delete Plugin',
    cancel: 'Cancel',
    saveConfig: 'Save Config',
    saving: 'Saving...',
    confirmDeletePlugin:
      'Are you sure you want to delete the plugin ({{author}}/{{name}})?',
    deleteDataCheckbox:
      'Also delete plugin configuration and persistence storage',
    confirmDelete: 'Confirm Delete',
    deleteError: 'Delete failed: ',
    close: 'Close',
    deleteConfirm: 'Delete Confirmation',
    deleteSuccess: 'Delete successful',
    modifyFailed: 'Modify failed: ',
    componentName: {
      Tool: 'Tool',
      EventListener: 'Event Listener',
      Command: 'Command',
      KnowledgeEngine: 'Knowledge Engine',
      Parser: 'Parser',
    },
    uploadLocal: 'Upload Local',
    debugging: 'Debugging',
    uploadLocalPlugin: 'Upload Local Plugin',
    dragToUpload: 'Drag plugin file here to upload',
    unsupportedFileType:
      'Unsupported file type, only .lbpkg and .zip files are supported',
    uploadingPlugin: 'Uploading plugin...',
    uploadSuccess: 'Upload successful',
    uploadFailed: 'Upload failed',
    selectFileToUpload: 'Select plugin file to upload',
    askConfirm: 'Are you sure to install plugin "{{name}}" ({{version}})?',
    fromGithub: 'From GitHub',
    fromLocal: 'From Local',
    fromMarketplace: 'From Marketplace',
    componentsList: 'Components: ',
    noComponents: 'No components',
    delete: 'Delete Plugin',
    update: 'Update Plugin',
    new: 'New',
    updateConfirm: 'Update Confirmation',
    confirmUpdatePlugin:
      'Are you sure you want to update the plugin ({{author}}/{{name}})?',
    confirmUpdate: 'Confirm Update',
    updating: 'Updating...',
    updateSuccess: 'Plugin updated successfully',
    updateError: 'Update failed: ',
    saveConfigSuccessNormal: 'Configuration saved successfully',
    saveConfigError: 'Configuration save failed: ',
    config: 'Configuration',
    readme: 'Documentation',
    viewSource: 'View Source',
    loadingReadme: 'Loading documentation...',
    noReadme: 'This plugin does not provide README documentation',
    fileUpload: {
      tooLarge: 'File size exceeds 10MB limit',
      success: 'File uploaded successfully',
      failed: 'File upload failed',
      uploading: 'Uploading...',
      chooseFile: 'Choose File',
      addFile: 'Add File',
    },
    installFromGithub: 'From GitHub',
    enterRepoUrl: 'Enter GitHub repository URL',
    repoUrlPlaceholder: 'e.g., https://github.com/owner/repo',
    fetchingReleases: 'Fetching releases...',
    selectRelease: 'Select Release',
    noReleasesFound: 'No releases found',
    fetchReleasesError: 'Failed to fetch releases: ',
    selectAsset: 'Select file to install',
    noAssetsFound: 'No .lbpkg files available in this release',
    fetchAssetsError: 'Failed to fetch assets: ',
    backToReleases: 'Back to releases',
    backToRepoUrl: 'Back to repository URL',
    backToAssets: 'Back to assets',
    releaseTag: 'Tag: {{tag}}',
    releaseName: 'Name: {{name}}',
    publishedAt: 'Published at: {{date}}',
    prerelease: 'Pre-release',
    assetSize: 'Size: {{size}}',
    confirmInstall: 'Confirm Install',
    installFromGithubDesc: 'Install plugin from GitHub Release',
    goToMarketplace: 'Go to Marketplace',
    installProgress: {
      title: 'Installing {{name}}',
      titleGeneric: 'Plugin Installation',
      overallProgress: 'Overall Progress',
      downloading: 'Downloading Plugin',
      installingDeps: 'Installing Dependencies',
      initializing: 'Initializing Settings',
      launching: 'Launching Plugin',
      completed: 'Completed',
      failed: 'Failed',
      downloadSize: 'Package size: {{size}}',
      depsInfo: '{{count}} dependencies to install',
      depsProgress:
        '{{installed}}/{{total}} installed · {{remaining}} remaining',
      installComplete: 'Plugin installed successfully',
      dismiss: 'Dismiss',
      background: 'Run in Background',
      taskQueue: 'Install Tasks',
      clearCompleted: 'Clear Completed',
      noTasks: 'No install tasks',
    },
  },
  market: {
    searchPlaceholder: 'Search plugins...',
    searchResults: 'Found {{count}} plugins',
    totalPlugins: 'Total {{count}} plugins',
    noPlugins: 'No plugins available',
    noResults: 'No relevant plugins found',
    loadingMore: 'Loading more...',
    loading: 'Loading...',
    allLoaded: 'All plugins displayed',
    install: 'Install',
    installConfirm:
      'Are you sure you want to install plugin "{{name}}" ({{version}})?',
    downloadComplete: 'Plugin "{{name}}" download completed',
    installFailed: 'Installation failed, please try again later',
    loadFailed: 'Failed to get plugin list, please try again later',
    noDescription: 'No description available',
    notFound: 'Plugin information not found',
    sortBy: 'Sort by',
    sort: {
      recentlyAdded: 'Recently Added',
      recentlyUpdated: 'Recently Updated',
      mostDownloads: 'Most Downloads',
      leastDownloads: 'Least Downloads',
    },
    downloads: 'downloads',
    download: 'Download',
    repository: 'Repository',
    downloadFailed: 'Download failed',
    noReadme: 'This plugin does not provide README documentation',
    description: 'Description',
    tagLabel: 'Tags',
    submissionTitle: 'You have a plugin submission under review: {{name}}',
    submissionPending: 'Your plugin submission is under review: {{name}}',
    submissionApproved: 'Your plugin submission has been approved: {{name}}',
    submissionRejected: 'Your plugin submission has been rejected: {{name}}',
    clickToRevoke: 'Revoke',
    revokeSuccess: 'Revoke success',
    revokeFailed: 'Revoke failed',
    submissionDetails: 'Plugin Submission Details',
    markAsRead: 'Mark as Read',
    markAsReadSuccess: 'Marked as read',
    markAsReadFailed: 'Mark as read failed',
    filterByComponent: 'Component',
    allComponents: 'All Components',
    requestPlugin: 'Request Plugin',
    viewDetails: 'View Details',
    deprecated: 'Deprecated',
    deprecatedTooltip:
      'Please install the corresponding Knowledge Engine plugin.',
    tags: {
      filterByTags: 'Filter by Tags',
      selected: 'selected',
      selectTags: 'Select Tags',
      clearAll: 'Clear All',
      noTags: 'No tags available',
    },
  },
  mcp: {
    title: 'MCP',
    createServer: 'Add MCP Server',
    editServer: 'Edit MCP Server',
    deleteServer: 'Delete MCP Server',
    confirmDeleteServer: 'Are you sure you want to delete this MCP server?',
    confirmDeleteTitle: 'Delete MCP Server',
    getServerListError: 'Failed to get MCP server list: ',
    serverName: 'Server Name',
    serverMode: 'Connection Mode',
    selectMode: 'Select Mode',
    stdio: 'Stdio Mode',
    sse: 'SSE Mode',
    http: 'HTTP Mode',
    noServerInstalled: 'No MCP servers configured',
    serverNameRequired: 'Server name cannot be empty',
    commandRequired: 'Command cannot be empty',
    urlRequired: 'URL cannot be empty',
    timeoutMustBePositive: 'Timeout must be a positive number',
    command: 'Command',
    args: 'Arguments',
    env: 'Environment Variables',
    url: 'URL',
    headers: 'Headers',
    timeout: 'Timeout',
    addArgument: 'Add Argument',
    addEnvVar: 'Add Environment Variable',
    addHeader: 'Add Header',
    keyName: 'Key Name',
    value: 'Value',
    testing: 'Testing...',
    connecting: 'Connecting...',
    testSuccess: 'Test successful',
    testFailed: 'Test failed: ',
    testError: 'Test error',
    refreshSuccess: 'Refresh successful',
    refreshFailed: 'Refresh failed: ',
    connectionSuccess: 'Connection successful',
    connectionFailed: 'Connection failed, please check URL',
    connectionFailedStatus: 'Connection Failed',
    toolsFound: 'tools',
    unknownError: 'Unknown error',
    noToolsFound: 'No tools found',
    parseResultFailed: 'Failed to parse test result',
    noResultReturned: 'Test returned no result',
    getTaskFailed: 'Failed to get task status',
    noTaskId: 'No task ID obtained',
    deleteSuccess: 'Deleted successfully',
    deleteFailed: 'Delete failed: ',
    deleteError: 'Delete failed: ',
    saveSuccess: 'Saved successfully',
    saveError: 'Save failed: ',
    createSuccess: 'Created successfully',
    createFailed: 'Creation failed: ',
    createError: 'Creation failed: ',
    loadFailed: 'Load failed',
    modifyFailed: 'Modify failed: ',
    toolCount: 'Tools: {{count}}',
    statusConnected: 'Connected',
    statusDisconnected: 'Disconnected',
    statusError: 'Connection Error',
    statusDisabled: 'Disabled',
    loading: 'Loading...',
    starCount: 'Stars: {{count}}',
    install: 'Install',
    installFromGithub: 'Install MCP Server from GitHub',
    add: 'Add',
    name: 'Name',
    nameRequired: 'Name cannot be empty',
    sseTimeout: 'SSE Timeout',
    sseTimeoutDescription: 'Timeout for establishing SSE connection',
    extraParametersDescription:
      'Additional parameters for configuring specific MCP server behavior',
    timeoutMustBeNumber: 'Timeout must be a number',
    timeoutNonNegative: 'Timeout cannot be negative',
    sseTimeoutMustBeNumber: 'SSE timeout must be a number',
    sseTimeoutNonNegative: 'SSE timeout cannot be negative',
    updateSuccess: 'Updated successfully',
    updateFailed: 'Update failed: ',
    selectFromSidebar: 'Select an MCP server from the sidebar',
    dangerZone: 'Danger Zone',
    dangerZoneDescription:
      'Irreversible and destructive actions for this MCP server.',
    deleteMCPAction: 'Delete this MCP server',
    deleteMCPHint:
      'Once deleted, this MCP server configuration cannot be recovered.',
  },
  pipelines: {
    title: 'Pipelines',
    description:
      'Pipelines define the processing flow for message events, used to bind to bots',
    createPipeline: 'Create Pipeline',
    selectFromSidebar: 'Select a pipeline from the sidebar',
    editPipeline: 'Edit Pipeline',
    chat: 'Chat',
    configuration: 'Configuration',
    debugChat: 'Debug Chat',
    getPipelineListError: 'Failed to get pipeline list: ',
    daysAgo: 'days ago',
    today: 'Today',
    updateTime: 'Updated ',
    defaultBadge: 'Default',
    sortBy: 'Sort by',
    newestCreated: 'Newest Created',
    earliestCreated: 'Earliest Created',
    recentlyEdited: 'Recently Edited',
    earliestEdited: 'Earliest Edited',
    basicInfo: 'Basic Information',
    basicInfoDescription: 'Set the pipeline name, icon and description',
    aiCapabilities: 'AI',
    triggerConditions: 'Trigger',
    safetyControls: 'Safety',
    outputProcessing: 'Output',
    nameRequired: 'Name cannot be empty',
    descriptionRequired: 'Description cannot be empty',
    createSuccess: 'Created successfully. Please edit pipeline parameters',
    createError: 'Creation failed: ',
    saveSuccess: 'Saved successfully',
    saveError: 'Save failed: ',
    copySuffix: ' Copy',
    deleteConfirmation:
      'Are you sure you want to delete this pipeline? Bots bound to this pipeline will not work.',
    defaultPipelineCannotDelete: 'Default pipeline cannot be deleted',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Delete failed: ',
    copyConfirmTitle: 'Confirm Copy',
    copyConfirmation:
      'Are you sure you want to copy this pipeline? This will create a new pipeline with all configurations.',
    unsavedChanges: 'You have unsaved changes',
    dangerZone: 'Danger Zone',
    dangerZoneDescription: 'Irreversible and destructive actions',
    deletePipelineAction: 'Delete this pipeline',
    deletePipelineHint:
      'Once deleted, bots bound to this pipeline will stop working.',
    copyPipelineAction: 'Copy this pipeline',
    copyPipelineHint:
      'Create a new pipeline with all configurations duplicated.',
    extensions: {
      title: 'Extensions',
      loadError: 'Failed to load plugins',
      saveSuccess: 'Saved successfully',
      saveError: 'Save failed',
      noPluginsAvailable: 'No plugins available',
      disabled: 'Disabled',
      noPluginsSelected: 'No plugins selected',
      addPlugin: 'Add Plugin',
      selectPlugins: 'Select Plugins',
      pluginsTitle: 'Plugins',
      mcpServersTitle: 'MCP Servers',
      noMCPServersSelected: 'No MCP servers selected',
      addMCPServer: 'Add MCP Server',
      selectMCPServers: 'Select MCP Servers',
      toolCount: '{{count}} tools',
      noPluginsInstalled: 'No installed plugins',
      noMCPServersConfigured: 'No configured MCP servers',
      selectAll: 'Select All',
      enableAllPlugins: 'Enable All Plugins',
      enableAllMCPServers: 'Enable All MCP Servers',
      allPluginsEnabled: 'All plugins enabled',
      allMCPServersEnabled: 'All MCP servers enabled',
    },
    debugDialog: {
      title: 'Pipeline Chat',
      selectPipeline: 'Select Pipeline',
      sessionType: 'Session Type',
      privateChat: 'Private Chat',
      groupChat: 'Group Chat',
      send: 'Send',
      reset: 'Reset Conversation',
      inputPlaceholder: 'Send {{type}} message...',
      noMessages: 'No messages',
      userMessage: 'User',
      botMessage: 'Bot',
      sendFailed: 'Send failed',
      resetSuccess: 'Conversation reset successfully',
      resetFailed: 'Reset failed',
      loadMessagesFailed: 'Failed to load messages',
      loadPipelinesFailed: 'Failed to load pipelines',
      atTips: 'Mention the bot',
      streaming: 'Streaming',
      streamOutput: 'Stream',
      connected: 'WebSocket connected',
      disconnected: 'WebSocket disconnected',
      connectionError: 'WebSocket connection error',
      connectionFailed: 'WebSocket connection failed',
      notConnected: 'WebSocket not connected, please try again later',
      imageUploadFailed: 'Image upload failed',
      reply: 'Reply',
      replyTo: 'Reply to',
      showMarkdown: 'Show Markdown',
      showRaw: 'Show Raw',
      allMembers: 'All Members',
      file: 'File',
      voice: 'Voice',
      uploadImage: 'Upload Image',
      uploading: 'Uploading...',
    },
    monitoring: {
      title: 'Dashboard',
      description:
        'View execution logs and errors for this pipeline (last 24 hours)',
      detailedLogs: 'Detailed Logs',
    },
  },
  knowledge: {
    title: 'Knowledge',
    createKnowledgeBase: 'Create Knowledge Base',
    selectFromSidebar: 'Select a knowledge base from the sidebar',
    editKnowledgeBase: 'Edit Knowledge Base',
    selectKnowledgeBase: 'Select Knowledge Base',
    selectKnowledgeBases: 'Select Knowledge Bases',
    addKnowledgeBase: 'Add Knowledge Base',
    noKnowledgeBaseSelected: 'No knowledge bases selected',
    empty: 'Empty',
    editDocument: 'Documents',
    description: 'Configuring knowledge bases for improved LLM responses',
    metadata: 'Metadata',
    documents: 'Documents',
    kbNameRequired: 'Knowledge base name cannot be empty',
    kbDescriptionRequired: 'Knowledge base description cannot be empty',
    embeddingModelUUIDRequired: 'Embedding model cannot be empty',
    daysAgo: 'days ago',
    today: 'Today',
    kbName: 'Knowledge Base Name',
    kbDescription: 'Knowledge Base Description',
    topK: 'Top K',
    topKRequired: 'Top K cannot be empty',
    topKMax: 'Top K maximum value is 30',
    topKdescription:
      'Used to specify the number of relevant documents to retrieve, ranging from 1 to 30.',
    defaultDescription: 'A knowledge base',
    embeddingModelUUID: 'Embedding Model',
    selectEmbeddingModel: 'Select Embedding Model',
    embeddingModelDescription:
      'Used to vectorize the text, you can configure it in the Models page',
    updateTime: 'Updated ',
    cannotChangeEmbeddingModel:
      'Knowledge base created cannot be modified embedding model',
    updateKnowledgeBaseSuccess: 'Knowledge base updated successfully',
    updateKnowledgeBaseFailed: 'Knowledge base update failed: ',
    documentsTab: {
      name: 'Name',
      status: 'Status',
      noResults: 'No documents',
      dragAndDrop: 'Drag and drop files here or click to upload',
      uploading: 'Uploading...',
      supportedFormats:
        'Supports PDF, Word, TXT, Markdown, HTML, ZIP and other document formats',
      uploadSuccess: 'File uploaded successfully!',
      uploadError: 'File upload failed: ',
      uploadingFile: 'Uploading file...',
      fileSizeExceeded:
        'File size exceeds 10MB limit. Please split into smaller files.',
      actions: 'Actions',
      delete: 'Delete File',
      fileDeleteSuccess: 'File deleted successfully',
      fileDeleteFailed: 'File deletion failed: ',
      processing: 'Processing',
      completed: 'Completed',
      failed: 'Failed',
      selectParser: 'Select Parser',
      builtInParser: 'Provided by Knowledge engine',
      noParserAvailable:
        'No parser supports this file type. Please install a parser plugin that can handle this format.',
      installParserHint: 'Browse parser plugins in Marketplace →',
      confirmUpload: 'Upload',
      cancelUpload: 'Cancel',
    },
    deleteKnowledgeBaseConfirmation:
      'Are you sure you want to delete this knowledge base? All documents in this knowledge base will be deleted.',
    retrieve: 'Retrieve Test',
    retrieveTest: 'Retrieve Test',
    query: 'Query',
    queryPlaceholder: 'Enter query text...',
    distance: 'Distance',
    content: 'Content',
    fileName: 'File Name',
    noResults: 'No results',
    retrieveError: 'Retrieve failed: ',
    unknownEngine: 'Unknown Engine',
    knowledgeEngine: 'Knowledge Engine',
    knowledgeEngineRequired: 'Knowledge engine is required',
    selectKnowledgeEngine: 'Select Knowledge Engine',
    builtInEngine: 'Built-in Engine',
    cannotChangeKnowledgeEngine:
      'Knowledge engine cannot be changed after creation',
    basicInfo: 'Basic Information',
    basicInfoDescription: 'Set the knowledge base name, icon and description',
    engineSettings: 'Engine Settings',
    engineSettingsDescription:
      'Configuration for the selected knowledge engine',
    engineSettingsReadonly: 'read-only in edit mode',
    retrievalSettings: 'Retrieval Settings',
    retrievalSettingsDescription:
      'Configure how documents are retrieved from this knowledge base',
    dangerZone: 'Danger Zone',
    dangerZoneDescription: 'Irreversible and destructive actions',
    deleteKbAction: 'Delete this knowledge base',
    deleteKbHint:
      'Once deleted, all documents and data in this knowledge base will be permanently removed.',
    noEnginesAvailable: 'No knowledge base engines available',
    installEngineHint: 'Please install a "Knowledge Engine" plugin first',
    createKnowledgeBaseFailed: 'Failed to create knowledge base: ',
    loadKnowledgeBaseFailed: 'Failed to load knowledge base: ',
    deleteKnowledgeBaseFailed: 'Failed to delete knowledge base: ',
    getKnowledgeBaseListError: 'Failed to get knowledge base list: ',
    embeddingModel: 'Embedding Model',
    embeddingModelRequired: 'Embedding model is required for this engine',
    addExternal: 'Add External Knowledge Base',
    createExternalSuccess: 'External knowledge base created successfully',
    updateExternalSuccess: 'External knowledge base updated successfully',
    deleteExternalSuccess: 'External knowledge base deleted successfully',
    retriever: 'Retriever',
    selectRetriever: 'Select a retriever...',
    retrieverConfiguration: 'Retriever Configuration',
    retrieverInstallInfo: 'You can install Knowledge Retriever plugins from',
    retrieverMarketLink: 'here',
    migration: {
      title: 'Knowledge Base Migration',
      description:
        'The new version has refactored the knowledge base into a plugin-based architecture, unifying built-in and external knowledge bases as "Knowledge Engine" plugins. Migration of legacy knowledge base data is required. Your old data has been automatically backed up in the database.',
      detected:
        'Found {{total}} knowledge base(s) to migrate ({{internal}} internal, {{external}} external).',
      startWithInstall: 'Auto-install Plugin & Migrate',
      startDataOnly: 'Migrate Data Only',
      dataOnlyHint:
        '"Migrate Data Only" is for offline/intranet environments. Please install the corresponding plugin manually after migration.',
      dismiss: 'Discard Original Data',
      running: 'Migrating knowledge bases, please wait...',
      success: 'Knowledge base migration completed',
      error: 'Knowledge base migration failed: ',
      dismissError: 'Operation failed',
      retry: 'Retry',
    },
  },
  register: {
    title: 'Initialize LangBot 👋',
    description: 'This is your first time starting LangBot',
    adminAccountNote:
      'The account you use here will be set as the administrator account',
    register: 'Register',
    initWithSpace: 'Initialize with Space',
    spaceRecommended:
      'Recommended: Use official stable model APIs and cloud services',
    spaceInfoTip1:
      'Space provides unified account authentication services without uploading any of your sensitive information.',
    spaceInfoTip2:
      'Logging in with a Space account gives you access to LangBot Models and other cloud services, including free model call credits to help you get started quickly.',
    spaceInfoTip3:
      'Your login method does not affect other features. You can configure and use models from other sources at any time.',
    registerLocal: 'Register local account',
    registerWithPassword: 'Register with email and password',
    initSuccess: 'Initialization successful, please login',
    initFailed: 'Initialization failed: ',
  },
  resetPassword: {
    title: 'Reset Password 🔐',
    description:
      'Enter your recovery key and new password to reset your account password',
    recoveryKey: 'Recovery Key',
    recoveryKeyDescription:
      'Stored in `system.recovery_key` of config file `data/config.yaml`',
    newPassword: 'New Password',
    enterRecoveryKey: 'Enter recovery key',
    enterNewPassword: 'Enter new password',
    recoveryKeyRequired: 'Recovery key cannot be empty',
    newPasswordRequired: 'New password cannot be empty',
    resetPassword: 'Reset Password',
    resetting: 'Resetting...',
    resetSuccess: 'Password reset successfully, please login',
    resetFailed:
      'Password reset failed, please check your email and recovery key',
    backToLogin: 'Back to Login',
  },
  embedding: {
    description: 'Manage Embedding models for text vectorization',
    createModel: 'Create Embedding Model',
    editModel: 'Edit Embedding Model',
    getModelListError: 'Failed to get Embedding model list: ',
    embeddingModels: 'Embedding',
    extraParametersDescription:
      'Will be attached to the request body, such as encoding_format, dimensions, etc.',
  },
  llm: {
    description: 'Manage LLM models for conversation generation',
    llmModels: 'LLM',
    extraParametersDescription:
      'Will be attached to the request body, such as max_tokens, temperature, top_p, etc.',
  },
  version: {
    newVersionAvailable: 'New Version Available',
    viewUpdateGuide: 'View Update Guide',
    noReleaseNotes: 'No release notes available',
  },
  account: {
    settings: 'Account Settings',
    setPassword: 'Set Password',
    passwordSetSuccess: 'Password set successfully',
    passwordStatus: 'Local Password',
    passwordSet: 'Set',
    passwordNotSet: 'Not Set',
    passwordSetDescription:
      'Password is set, you can login with email and password',
    spaceStatus: 'Space Account',
    spaceBound: 'Bound',
    spaceNotBound: 'Not Bound',
    spaceBoundDescription:
      'Space account bound, official model APIs and cloud services available',
    bindSpace: 'Bind Space Account',
    bindSpaceDescription: 'Bind to use official model APIs and cloud services',
    bindSpaceButton: 'Bind',
    bindSpaceConfirmTitle: 'Confirm Binding',
    bindSpaceConfirmDescription:
      'You are about to bind your local instance to a Space account',
    bindSpaceWarning:
      'After binding, your login email will be changed from {{localEmail}} to the Space account email.',
    bindSpaceSuccess: 'Space account bound successfully',
    bindSpaceFailed: 'Failed to bind Space account',
    bindSpaceInvalidState:
      'Invalid bind request. Please try again from account settings.',
    setPasswordHint: 'Set a password to login with email and password',
    spaceEmailMismatch:
      'Space login email does not match the local account email',
  },
  monitoring: {
    title: 'Dashboard',
    description: 'Monitor bot activities, LLM calls, and system performance',
    overview: 'Overview',
    totalMessages: 'Total Messages',
    llmCallsCount: 'LLM Calls',
    modelCallsCount: 'Model Calls',
    successRate: 'Success Rate',
    activeSessions: 'Active Sessions',
    last24Hours: 'Last 24 hours',
    filters: {
      title: 'Filters',
      bot: 'Bot',
      pipeline: 'Pipeline',
      allBots: 'All Bots',
      selectBot: 'Select Bot',
      allPipelines: 'All Pipelines',
      selectPipeline: 'Select Pipeline',
      loading: 'Loading...',
      timeRange: 'Time Range',
      customRange: 'Custom Range',
      from: 'From',
      to: 'To',
      apply: 'Apply',
      reset: 'Reset Filters',
      lastHour: 'Last 1 hour',
      last6Hours: 'Last 6 hours',
      last24Hours: 'Last 24 hours',
      last7Days: 'Last 7 days',
      last30Days: 'Last 30 days',
    },
    tabs: {
      messages: 'Message Records',
      llmCalls: 'LLM Calls',
      embeddingCalls: 'Embedding Calls',
      modelCalls: 'Model Calls',
      feedback: 'User Feedback',
      sessions: 'Session Analysis',
      errors: 'Error Logs',
    },
    messageList: {
      timestamp: 'Timestamp',
      bot: 'Bot',
      pipeline: 'Pipeline',
      message: 'Message',
      sessionId: 'Session ID',
      status: 'Status',
      actions: 'Actions',
      viewDetails: 'View Details',
      copyId: 'Copy ID',
      noMessages: 'No messages found',
      noMessagesDescription: 'Try adjusting your filters or check back later',
      loading: 'Loading messages...',
      loadMore: 'Load More',
      autoRefresh: 'Auto Refresh',
      platform: 'Role',
      user: 'User',
      level: 'Level',
      runner: 'Runner',
      viewConversation: 'View Conversation',
    },
    llmCalls: {
      title: 'LLM Calls',
      model: 'Model',
      tokens: 'Tokens',
      duration: 'Duration',
      cost: 'Cost',
      noData: 'No LLM calls found',
      inputTokens: 'Input Tokens',
      outputTokens: 'Output Tokens',
      totalTokens: 'Total Tokens',
      avgDuration: 'Avg Duration',
      calls: 'Calls',
    },
    embeddingCalls: {
      title: 'Embedding Calls',
      model: 'Model',
      tokens: 'Tokens',
      duration: 'Duration',
      noData: 'No embedding calls found',
      promptTokens: 'Prompt Tokens',
      totalTokens: 'Total Tokens',
      inputCount: 'Input Count',
      knowledgeBase: 'Knowledge Base',
      queryText: 'Query',
    },
    modelCalls: {
      title: 'Model Calls',
      llmModel: 'LLM',
      embeddingModel: 'Embedding',
      embeddingCall: 'Embedding',
      retrieveCall: 'Retrieve',
      noData: 'No model calls found',
    },
    sessions: {
      sessionId: 'Session ID',
      messageCount: 'Messages',
      duration: 'Duration',
      lastActivity: 'Last Activity',
      noSessions: 'No sessions found',
      startTime: 'Start Time',
      messageStats: 'Message Statistics',
      totalMessages: 'Total Messages',
      successMessages: 'Successful',
      errorMessages: 'Failed',
      llmStats: 'LLM Statistics',
      noData: 'Session not found',
    },
    errors: {
      title: 'Errors',
      errorType: 'Error Type',
      errorMessage: 'Error Message',
      occurredAt: 'Occurred At',
      noErrors: 'No errors found',
      stackTrace: 'Stack Trace',
    },
    feedback: {
      title: 'User Feedback',
      totalFeedback: 'Total Feedback',
      totalLikes: 'Likes',
      totalDislikes: 'Dislikes',
      satisfactionRate: 'Satisfaction Rate',
      like: 'Like',
      dislike: 'Dislike',
      noFeedback: 'No feedback yet',
      noFeedbackDescription: 'User feedback will appear here',
      feedbackList: 'Feedback List',
      feedbackContent: 'Feedback Content',
      contextInfo: 'Context Info',
      userId: 'User ID',
      messageId: 'Message ID',
      streamId: 'Related Query ID',
      inaccurateReasons: 'Inaccurate Reasons',
      platform: 'Platform',
      exportFeedback: 'Export Feedback',
    },
    queries: {
      title: 'Queries',
    },
    messageDetails: {
      noData: 'No LLM calls or errors for this query',
    },
    queryVariables: {
      title: 'Query Variables',
    },
    trafficChart: {
      title: 'Traffic Overview',
      messages: 'Messages',
      llmCalls: 'LLM Calls',
      noData: 'No traffic data available',
    },
    viewMonitoring: 'View Monitoring',
    refreshData: 'Refresh Data',
    exportData: 'Export Data',
    export: {
      title: 'Export Data',
      exporting: 'Exporting...',
      messages: 'Messages',
      llmCalls: 'LLM Calls',
      embeddingCalls: 'Embedding Calls',
      errors: 'Error Logs',
      sessions: 'Sessions',
      feedback: 'User Feedback',
    },
  },
  limitation: {
    maxBotsReached:
      'Maximum number of bots ({{max}}) reached. Please remove an existing bot before creating a new one.',
    maxPipelinesReached:
      'Maximum number of pipelines ({{max}}) reached. Please remove an existing pipeline before creating a new one.',
    maxExtensionsReached:
      'Maximum number of extensions ({{max}}) reached. Please remove an existing MCP server or plugin before adding a new one.',
  },
  wizard: {
    sidebarDescription: 'Create a bot with guided steps',
    loading: 'Loading wizard...',
    loadError: 'Failed to load wizard data',
    skip: 'Skip',
    skipConfirmMessage:
      'You can re-enter the Quick Start wizard from the account menu later, or create a bot manually.',
    skipConfirmOk: 'OK',
    prev: 'Previous',
    next: 'Next',
    finish: 'Create & Deploy',
    confirmCreateBot: 'Confirm, Create Bot',
    createSuccess: 'Pipeline created and linked to bot successfully!',
    botCreateSuccess: 'Bot created successfully!',
    botSaveSuccess: 'Bot configuration saved and enabled!',
    createError: 'Failed to create resources',
    spaceAuthError: 'Failed to initiate Space authorization',
    skipSaveError: 'Failed to save skip status. Please try again.',
    completeSaveError: 'Failed to save completion status. Please try again.',
    step: {
      platform: 'Platform',
      botConfig: 'Bot Setup',
      aiEngine: 'AI Engine',
      done: 'Done',
    },
    platform: {
      title: 'Select a Platform',
      description: 'Choose the messaging platform your bot will connect to.',
    },
    botConfig: {
      title: 'Configure Your Bot',
      description: 'Set up your bot and verify it works before continuing.',
      saveBot: 'Save & Enable Bot',
      resaveBot: 'Re-save Configuration',
      botSaved:
        'Bot configuration saved and enabled. Check the logs to verify the connection.',
      logsTitle: 'Bot Logs',
      logsDescription:
        'Monitor bot activity to verify the platform connection is working.',
    },
    aiEngine: {
      title: 'Select an AI Engine',
      description:
        "Choose the AI engine that will power your bot's intelligence.",
    },
    spaceBanner: {
      message:
        'Connect to LangBot Space for free trial model credits and zero-config instant setup!',
      action: 'Authorize with Space',
    },
    config: {
      botInfo: 'Bot Information',
      botNamePlaceholder: 'Enter bot name',
      botDescPlaceholder: 'Enter bot description (optional)',
      platformConfig: '{{platform}} Configuration',
      aiConfig: '{{engine}} Configuration',
    },
    done: {
      title: 'All Set!',
      description:
        'Your bot has been created and connected to the AI pipeline. You can now manage it from the workbench.',
      backToWorkbench: 'Back to Workbench',
    },
  },
  workflows: {
    title: 'Workflows',
    description: 'Create and manage visual workflows for complex message processing logic',
    createWorkflow: 'Create Workflow',
    selectFromSidebar: 'Select a workflow from the sidebar',
    editWorkflow: 'Edit Workflow',
    newWorkflow: 'New Workflow',
    getWorkflowListError: 'Failed to get workflow list: ',
    workflowName: 'Workflow Name',
    workflowDescription: 'Workflow Description',
    workflowNameRequired: 'Workflow name is required',
    defaultDescription: 'A workflow',
    getWorkflowError: 'Failed to get workflow: ',
    loadError: 'Failed to load workflow',
    saveSuccess: 'Saved successfully',
    saveError: 'Failed to save: ',
    createSuccess: 'Workflow created successfully',
    createError: 'Failed to create: ',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Failed to delete: ',
    deleteConfirmation: 'Are you sure you want to delete this workflow?',
    copySuccess: 'Copied successfully',
    copyError: 'Failed to copy: ',
    export: 'Export',
    import: 'Import',
    exportSuccess: 'Workflow exported',
    importSuccess: 'Workflow imported',
    importError: 'Import failed: Invalid file format',
    publish: 'Publish',
    publishSuccess: 'Published successfully',
    publishError: 'Failed to publish',
    configuration: 'Configuration',
    executions: 'Executions',
    editor: 'Editor',
    debugChat: 'Debug Chat',
    basicInfo: 'Basic Info',
    basicInfoDesc: 'Set workflow name, icon and description',
    basicInfoDescription: 'Set workflow name and description',
    dangerZone: 'Danger Zone',
    dangerZoneDesc: 'Irreversible operations',
    dangerZoneDescription: 'Irreversible operations',
    deleteWorkflowAction: 'Delete this workflow',
    deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
    deleteWorkflow: 'Delete Workflow',
    deleteConfirm: 'Confirm Delete',
    deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
    // Form component
    name: 'Name',
    namePlaceholder: 'Enter workflow name',
    descriptionPlaceholder: 'Enter workflow description (optional)',
    enabled: 'Enabled',
    enabledDesc: 'When enabled, the workflow can be triggered for execution',
    loading: 'Loading...',
    info: 'Workflow Info',
    uuid: 'UUID',
    version: 'Version',
    createdAt: 'Created At',
    updatedAt: 'Updated At',
    // Executions tab
    totalExecutions: '{{count}} execution(s) total',
    statistics: 'Statistics',
    successfulCount: '{{count}} successful',
    successRate: 'Success Rate',
    averageDuration: 'Avg. Duration',
    perExecution: 'per execution',
    failedExecutions: 'Failed',
    lastExecution: 'Last run',
    filterByStatus: 'Filter by status',
    allStatuses: 'All statuses',
    manualTrigger: 'Manual Trigger',
    executionId: 'Execution ID',
    status: 'Status',
    triggerType: 'Trigger Type',
    startedAt: 'Started At',
    duration: 'Duration',
    noExecutions: 'No executions yet',
    executionDetails: 'Execution Details',
    error: 'Error',
    nodeExecutions: 'Node Executions',
    result: 'Result',
    'status.pending': 'Pending',
    'status.running': 'Running',
    'status.completed': 'Completed',
    'status.failed': 'Failed',
    'status.cancelled': 'Cancelled',
    // Editor component translations
    nodePalette: 'Node Palette',
    properties: 'Properties',
    zoomIn: 'Zoom In',
    zoomOut: 'Zoom Out',
    fitView: 'Fit View',
    unsavedChanges: 'Unsaved changes',
    paste: 'Paste',
    deleted: 'Deleted',
    nothingToCopy: 'No nodes selected to copy',
    nothingToPaste: 'Clipboard is empty',
    copied: 'Copied {{count}} node(s)',
    pasted: 'Pasted {{count}} node(s)',
    nodesSelected: '{{count}} node(s) selected',
    edgesSelected: '{{count}} edge(s) selected',
    // Node palette
    searchNodes: 'Search nodes...',
    loadingNodeTypes: 'Loading node types...',
    noNodesFound: 'No matching nodes found',
    clearSearch: 'Clear search',
    dragToAdd: 'Drag nodes to add to canvas',
    // Property panel
    selectNodeOrEdge: 'Select a node or edge',
    selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
    edgeProperties: 'Edge Properties',
    nodeProperties: 'Node Properties',
    condition: 'Condition',
    hasCondition: 'Set',
    conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
    conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
    deleteEdge: 'Delete Edge',
    deleteEdgeConfirm: 'Confirm Delete Edge',
    deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
    nodeLabel: 'Node Label',
    nodeLabelPlaceholder: 'Enter node display name',
    nodeId: 'Node ID',
    inputOutputVariables: 'Input/Output Variables',
    inputs: 'Inputs',
    outputs: 'Outputs',
    availableVariables: 'Available Variables',
    globalVariables: 'Global Variables',
    messageContent: 'Message Content',
    messageSender: 'Sender',
    platform: 'Platform',
    sessionId: 'Session ID',
    timestamp: 'Timestamp',
    nodeConfig: 'Node Configuration',
    noConfigOptions: 'No configuration options for this node type',
    deleteNode: 'Delete Node',
    deleteNodeConfirm: 'Confirm Delete Node',
    deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
    // Node inputs/outputs i18n (for port labels)
    nodeInputs: {
      // Common inputs
      input: 'Input',
      message: 'Message',
      text: 'Text',
      query: 'Query',
      data: 'Data',
      condition: 'Condition',
      value: 'Value',
      // Trigger inputs
      content: 'Content',
      context: 'Context',
      body: 'Request Body',
      variables: 'Variables',
      items: 'Items',
      arguments: 'Arguments',
      // AI/Process inputs
      question: 'Question',
      parameters: 'Parameters',
      key: 'Key',
      // Control inputs
      case_1: 'Case 1',
      case_2: 'Case 2',
      branch_1: 'Branch 1',
      branch_2: 'Branch 2',
      // Action inputs
      notification_id: 'Notification ID',
      // Integration inputs
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      scope: 'Scope',
    },
    // Data type labels
    'type.string': 'String',
    'type.object': 'Object',
    'type.array': 'Array',
    'type.boolean': 'Boolean',
    'type.number': 'Number',
    'type.any': 'Any',
    'type.datetime': 'DateTime',
    nodes: {
      trigger: 'Triggers',
      triggerDescription: 'Starting nodes for workflows',
      messageTrigger: 'Message Trigger',
      messageTriggerDescription: 'Triggered when a message is received',
      scheduleTrigger: 'Schedule Trigger',
      scheduleTriggerDescription: 'Triggered on a schedule',
      cronTrigger: 'Cron Trigger',
      cronTriggerDescription: 'Trigger workflow on a scheduled time',
      webhookTrigger: 'Webhook Trigger',
      webhookTriggerDescription: 'Triggered via HTTP request',
      eventTrigger: 'Event Trigger',
      eventTriggerDescription: 'Triggered on system events',
      process: 'AI/Process',
      processDescription: 'Data processing nodes',
      aiProcess: 'AI Processing',
      aiProcessDescription: 'Process messages using AI models',
      llmCall: 'LLM Call',
      llmCallDescription: 'Invoke large language model for conversation or generation',
      codeProcess: 'Code Processing',
      codeProcessDescription: 'Execute custom code',
      codeExecutor: 'Code Executor',
      codeExecutorDescription: 'Execute Python/JavaScript code',
      templateProcess: 'Template Processing',
      templateProcessDescription: 'Format output using templates',
      httpRequest: 'HTTP Request',
      httpRequestDescription: 'Send HTTP requests',
      dataTransform: 'Data Transform',
      dataTransformDescription: 'Transform data format',
      questionClassifier: 'Question Classifier',
      questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
      parameterExtractor: 'Parameter Extractor',
      parameterExtractorDescription: 'Extract structured parameters from text using LLM',
      knowledgeRetrieval: 'Knowledge Retrieval',
      knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
      textTemplate: 'Text Template',
      textTemplateDescription: 'Generate text using templates with variable interpolation',
      jsonTransform: 'JSON Transform',
      jsonTransformDescription: 'Transform JSON data using expressions',
      dataAggregator: 'Data Aggregator',
      dataAggregatorDescription: 'Aggregate data from multiple sources',
      textSplitter: 'Text Splitter',
      textSplitterDescription: 'Split text into smaller chunks',
      variableAssignment: 'Variable Assignment',
      variableAssignmentDescription: 'Assign values to workflow variables',
      control: 'Control Flow',
      controlDescription: 'Flow control nodes',
      condition: 'Condition Branch',
      conditionDescription: 'Branch based on conditions',
      switch: 'Switch',
      switchDescription: 'Multi-way branching',
      loop: 'Loop',
      loopDescription: 'Repeat execution',
      iterator: 'Iterator',
      iteratorDescription: 'Iterate over array elements',
      parallel: 'Parallel',
      parallelDescription: 'Execute multiple branches in parallel',
      wait: 'Wait',
      waitDescription: 'Wait for specified time',
      delay: 'Delay',
      delayDescription: 'Wait for a specified time',
      merge: 'Merge',
      mergeDescription: 'Merge multiple branches',
      variableAggregator: 'Variable Aggregator',
      variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
      action: 'Actions',
      actionDescription: 'Action execution nodes',
      sendMessage: 'Send Message',
      sendMessageDescription: 'Send message to platform',
      replyMessage: 'Reply Message',
      replyMessageDescription: 'Reply to the message that triggered the workflow',
      storeData: 'Store Data',
      storeDataDescription: 'Store data to database',
      callPipeline: 'Call Pipeline',
      callPipelineDescription: 'Call an existing Pipeline',
      setVariable: 'Set Variable',
      setVariableDescription: 'Set context variable',
      openingStatement: 'Opening Statement',
      openingStatementDescription: 'Provide conversation opener and suggested questions',
      end: 'End',
      endDescription: 'Mark the end of workflow execution',
      log: 'Log',
      logDescription: 'Record log information',
      integration: 'Integration',
      integrationDescription: 'Third-party platform integration nodes',
      difyWorkflow: 'Dify Workflow',
      difyWorkflowDescription: 'Call Dify platform workflow',
      difyKnowledgeQuery: 'Dify Knowledge Query',
      difyKnowledgeQueryDescription: 'Query Dify knowledge base',
      n8nWorkflow: 'N8n Workflow',
      n8nWorkflowDescription: 'Call n8n workflow',
      langflowFlow: 'Langflow Flow',
      langflowFlowDescription: 'Call Langflow flow',
      cozeBot: 'Coze Bot',
      cozeBotDescription: 'Call Coze Bot',
      // Data & Tools integration nodes
      databaseQuery: 'Database Query',
      databaseQueryDescription: 'Execute database queries',
      redisOperation: 'Redis Operation',
      redisOperationDescription: 'Perform Redis cache operations',
      mcpTool: 'MCP Tool',
      mcpToolDescription: 'Invoke an MCP tool',
      memoryStore: 'Memory Store',
      memoryStoreDescription: 'Store and retrieve data from workflow memory',
    },
    executionHistory: {
      title: 'Execution History',
      noExecutions: 'No executions yet',
      status: 'Status',
      startTime: 'Start Time',
      duration: 'Duration',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      cancelled: 'Cancelled',
      viewDetails: 'View Details',
      cancel: 'Cancel Execution',
      retry: 'Retry',
      nodeResults: 'Node Execution Results',
    },
    versions: {
      title: 'Version History',
      current: 'Current Version',
      rollback: 'Rollback to this version',
      rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
      rollbackSuccess: 'Rollback successful',
      rollbackError: 'Failed to rollback: ',
    },
    // Debug and monitoring
    debug: {
      title: 'Debug',
      mode: 'Debug Mode',
      panel: 'Debug Panel',
      start: 'Start Debug',
      pause: 'Pause',
      resume: 'Resume',
      step: 'Step',
      stop: 'Stop',
      context: 'Debug Context',
      messageContent: 'Simulated Message',
      messageContentPlaceholder: 'Enter the message content to simulate',
      senderId: 'Sender ID',
      senderIdPlaceholder: 'Sender unique identifier',
      senderName: 'Sender Name',
      senderNamePlaceholder: 'Sender display name',
      platform: 'Platform',
      platformPlaceholder: 'e.g. qq, wechat, telegram',
      conversationId: 'Conversation ID',
      conversationIdPlaceholder: 'Conversation unique identifier',
      isGroup: 'Group Chat',
      customVariables: 'Custom Variables',
      customVariablesDesc: 'Add custom variables for debugging',
      variableKey: 'Variable Name',
      variableValue: 'Variable Value',
      addVariable: 'Add Variable',
      variables: 'Watched Variables',
      watchedVariables: 'Watched Variables',
      noWatchedVariables: 'No watched variables',
      addWatchVariable: 'Add Watch',
      nodeStates: 'Node States',
      nodeOutputs: 'Node Outputs',
      noNodeOutputs: 'No node outputs yet',
      toggleBreakpoint: 'Toggle Breakpoint',
      clearBreakpoints: 'Clear All Breakpoints',
      breakpointSet: 'Breakpoint set',
      breakpointRemoved: 'Breakpoint removed',
      logs: 'Debug Logs',
      noLogs: 'No logs yet',
      clearLogs: 'Clear Logs',
      autoScroll: 'Auto Scroll',
      logEntries: 'log entries',
      resetContext: 'Reset Context',
      // Debug execution messages
      starting: 'Starting debug execution...',
      started: 'Debug execution started (ID: {{id}})',
      startError: 'Failed to start debug',
      completed: 'Debug execution completed',
      unknownError: 'Unknown error',
      paused: 'Execution paused',
      pauseError: 'Failed to pause',
      resumed: 'Execution resumed',
      resumeError: 'Failed to resume',
      steppedTo: 'Stepped to node: {{node}}',
      stepError: 'Failed to step',
      stopped: 'Debug stopped',
      stopError: 'Failed to stop',
    },
    debugMode: 'Debug Mode',
    debugPanel: 'Debug Panel',
    startDebug: 'Start Debug',
    pauseDebug: 'Pause',
    resumeDebug: 'Resume',
    stepDebug: 'Step',
    stopDebug: 'Stop',
    debugContext: 'Debug Context',
    simulatedMessage: 'Simulated Message',
    simulatedMessagePlaceholder: 'Enter the message content to simulate',
    senderId: 'Sender ID',
    senderIdPlaceholder: 'Sender unique identifier',
    senderName: 'Sender Name',
    senderNamePlaceholder: 'Sender display name',
    conversationId: 'Conversation ID',
    conversationIdPlaceholder: 'Conversation unique identifier',
    isGroup: 'Group Chat',
    customVariables: 'Custom Variables',
    addVariable: 'Add Variable',
    variableName: 'Variable Name',
    variableValue: 'Variable Value',
    watchedVariables: 'Watched Variables',
    addWatchVariable: 'Add Watch',
    nodeStates: 'Node States',
    breakpoints: 'Breakpoints',
    toggleBreakpoint: 'Toggle Breakpoint',
    breakpointSet: 'Breakpoint set',
    breakpointRemoved: 'Breakpoint removed',
    debugLogs: 'Debug Logs',
    noLogs: 'No logs yet',
    clearLogs: 'Clear Logs',
    autoScroll: 'Auto Scroll',
    debugState: {
      idle: 'Idle',
      running: 'Running',
      paused: 'Paused',
      completed: 'Completed',
      error: 'Error',
    },
    nodeStatus: {
      pending: 'Pending',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      skipped: 'Skipped',
    },
    debugDialog: {
      title: 'Workflow Chat',
      selectWorkflow: 'Select Workflow',
      sessionType: 'Session Type',
      privateChat: 'Private Chat',
      groupChat: 'Group Chat',
      send: 'Send',
      reset: 'Reset Conversation',
      inputPlaceholder: 'Send {{type}} message...',
      noMessages: 'No messages',
      userMessage: 'User',
      botMessage: 'Bot',
      sendFailed: 'Send failed',
      resetSuccess: 'Conversation reset successfully',
      resetFailed: 'Reset failed',
      loadMessagesFailed: 'Failed to load messages',
      loadWorkflowsFailed: 'Failed to load workflows',
      atTips: 'Mention bot',
      streaming: 'Streaming',
      streamOutput: 'Stream',
      connected: 'WebSocket connected',
      disconnected: 'WebSocket disconnected',
      connectionError: 'WebSocket connection error',
      connectionFailed: 'WebSocket connection failed',
      notConnected: 'WebSocket not connected, please try again later',
      imageUploadFailed: 'Image upload failed',
      reply: 'Reply',
      replyTo: 'Reply to',
      showMarkdown: 'Render',
      showRaw: 'Raw',
      allMembers: 'All Members',
      file: 'File',
      voice: 'Voice',
      uploadImage: 'Upload Image',
      uploading: 'Uploading...',
    },
    // Execution history and monitoring
    filterByDate: 'Filter by Date',
    allTime: 'All Time',
    today: 'Today',
    lastWeek: 'Last Week',
    lastMonth: 'Last Month',
    showingExecutions: 'Showing {{shown}} / {{total}} executions',
    rerun: 'Rerun',
    rerunExecution: 'Rerun Execution',
    logs: 'Logs',
    details: 'Details',
    completedAt: 'Completed At',
    noNodeExecutions: 'No node executions yet',
    // Node config field labels (used by DynamicFormComponent)
    nodeConfigFields: {
      // trigger.py - MessageTriggerNode
      conditions: 'Trigger Conditions',
      keyword_filter: 'Keyword Filter',
      regex_filter: 'Regex Filter',
      min_length: 'Min Length',
      max_length: 'Max Length',
      require_mention: 'Require Mention',
      respond_rules: 'Group Respond Rules',
      access_control: 'Access Control',
      // trigger.py - CronTriggerNode
      cron: 'Cron Expression',
      timezone: 'Timezone',
      // trigger.py - WebhookTriggerNode
      path: 'Webhook Path',
      allowed_methods: 'Allowed HTTP Methods',
      content_type: 'Content-Type',
      auth_type: 'Authentication Type',
      auth_key: 'Auth Key',
      validation: 'Request Validation',
      timeout: 'Timeout',
      // trigger.py - EventTriggerNode
      event_types: 'Event Types',
      filter: 'Event Filter',
      debounce_ms: 'Debounce Time',
      // process.py - LLMCallNode
      model: 'Model',
      prompt_template: 'Prompt Template',
      system_prompt: 'System Prompt',
      temperature: 'Temperature',
      top_p: 'Top P',
      frequency_penalty: 'Frequency Penalty',
      presence_penalty: 'Presence Penalty',
      max_tokens: 'Max Tokens',
      stop_sequences: 'Stop Sequences',
      seed: 'Random Seed',
      stream: 'Stream Output',
      use_conversation_history: 'Use Conversation History',
      // process.py - CodeExecutorNode
      language: 'Programming Language',
      code: 'Code',
      // process.py - HTTPRequestNode
      url: 'Request URL',
      method: 'Request Method',
      auth_config: 'Auth Configuration',
      // process.py - DataTransformNode
      transform_type: 'Transform Type',
      template: 'Template',
      expression: 'Expression',
      output_type: 'Output Type',
      // process.py - QuestionClassifierNode
      categories: 'Categories',
      instruction: 'Instruction',
      // process.py - ParameterExtractorNode
      parameters: 'Parameter Definitions',
      // process.py - KnowledgeRetrievalNode
      knowledge_bases: 'Knowledge Bases',
      top_k: 'Top K Results',
      score_threshold: 'Score Threshold',
      search_method: 'Search Method',
      enable_citations: 'Enable Citations',
      // control.py - ConditionNode
      condition_type: 'Condition Type',
      condition_expression: 'Condition Expression',
      left_value: 'Left Value',
      operator: 'Comparison Operator',
      right_value: 'Right Value',
      // control.py - SwitchNode
      cases: 'Branch Cases',
      // control.py - LoopNode
      max_iterations: 'Max Iterations',
      break_condition: 'Break Condition',
      // control.py - IteratorNode
      parallel: 'Parallel Processing',
      max_concurrency: 'Max Concurrency',
      // control.py - ParallelNode
      branches: 'Branch Configuration',
      wait_all: 'Wait All',
      fail_fast: 'Fail Fast',
      // control.py - WaitNode
      duration: 'Duration',
      duration_type: 'Time Unit',
      // control.py - MergeNode
      merge_strategy: 'Merge Strategy',
      // control.py - VariableAggregatorNode
      variable_mappings: 'Variable Mappings',
      aggregation_mode: 'Aggregation Mode',
      // action.py - SendMessageNode
      target_type: 'Target Type',
      target_id: 'Target ID',
      platform: 'Platform',
      message_type: 'Message Type',
      // action.py - ReplyMessageNode
      reply_mode: 'Reply Mode',
      message_template: 'Message Template',
      long_text_processing: 'Long Text Processing',
      force_delay: 'Force Delay',
      // action.py - CallPipelineNode
      pipeline_uuid: 'Pipeline',
      inherit_context: 'Inherit Context',
      // action.py - StoreDataNode
      storage_type: 'Storage Type',
      ttl: 'TTL',
      key_prefix: 'Key Prefix',
      // action.py - SetVariableNode
      variable_name: 'Variable Name',
      variable_scope: 'Variable Scope',
      set_variable_operation: 'Operation Type',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      show_suggestions: 'Show Suggestions',
      // action.py - EndNode
      output_format: 'Output Format',
      success_message: 'Success Message',
      // integration.py - DatabaseQueryNode
      connection_type: 'Database Type',
      connection_string: 'Connection String',
      query: 'SQL Query',
      query_type: 'Query Type',
      // integration.py - RedisOperationNode
      connection_url: 'Connection URL',
      operation: 'Operation Type',
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      // integration.py - MCPToolNode
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      // integration.py - MemoryStoreNode
      scope: 'Scope',
      // integration.py - DifyWorkflowNode
      'base-url': 'Base URL',
      'api-key': 'API Key',
      'app-type': 'App Type',
      // integration.py - DifyKnowledgeQueryNode
      dataset_id: 'Dataset ID',
      // integration.py - N8nWorkflowNode
      'webhook-url': 'Webhook URL',
      // integration.py - LangflowFlowNode
      'flow-id': 'Flow ID',
      // integration.py - CozeBotNode
      'bot-id': 'Bot ID',
      'api-base': 'API Base URL',
    },
    // Node outputs i18n
    nodeOutputs: {
      // trigger.py - MessageTriggerNode
      message: 'Message Content',
      sender_id: 'Sender ID',
      sender_name: 'Sender Name',
      platform: 'Platform',
      conversation_id: 'Conversation ID',
      is_group: 'Is Group Chat',
      context: 'Full Message Context',
      // trigger.py - CronTriggerNode
      timestamp: 'Trigger Time',
      schedule: 'Trigger Schedule',
      cron_timestamp: 'Cron Timestamp',
      cron_schedule: 'Cron Schedule',
      cron_context: 'Cron Context',
      // trigger.py - WebhookTriggerNode
      body: 'Request Body',
      headers: 'Request Headers',
      query: 'Query Parameters',
      method: 'Request Method',
      webhook_body: 'Webhook Body',
      webhook_headers: 'Webhook Headers',
      webhook_query: 'Webhook Query',
      webhook_method: 'Webhook Method',
      // trigger.py - EventTriggerNode
      event_type: 'Event Type',
      event_data: 'Event Data',
      event_timestamp: 'Event Timestamp',
      // process.py - LLMCallNode
      response: 'Model Response',
      usage: 'Token Usage Statistics',
      prompt: 'Prompt/Question',
      context_info: 'Context Information',
      // process.py - CodeExecutorNode
      output: 'Output Data',
      console: 'Console Output',
      code_input: 'Code Input',
      code_output: 'Code Output',
      // process.py - HTTPRequestNode
      status_code: 'Status Code',
      http_body: 'HTTP Body',
      http_headers: 'HTTP Headers',
      http_response: 'HTTP Response',
      response_headers: 'Response Headers',
      // process.py - DataTransformNode
      result: 'Transform Result',
      transform_input: 'Transform Input',
      transform_result: 'Transform Result',
      // process.py - QuestionClassifierNode
      category: 'Category Result',
      confidence: 'Confidence',
      all_scores: 'All Category Scores',
      question: 'User Question',
      // process.py - ParameterExtractorNode
      parameters: 'Extracted Parameters',
      extraction_success: 'Extraction Success',
      extract_text: 'Input Text',
      // process.py - KnowledgeRetrievalNode
      documents: 'Retrieved Documents',
      citations: 'Citation Information',
      knowledge_context: 'Merged Context',
      knowledge_query: 'Retrieval Query',
      // control.py - ConditionNode
      true: 'True Branch Output',
      false: 'False Branch Output',
      condition_input: 'Condition Input',
      // control.py - SwitchNode
      matched_case: 'Matched Branch Output',
      default: 'Default Branch Output',
      switch_input: 'Switch Input',
      // control.py - LoopNode
      item: 'Current Item',
      index: 'Current Index',
      results: 'All Iteration Results',
      completed: 'Is Completed',
      loop_items: 'Items to Iterate',
      // control.py - IteratorNode
      is_first: 'Is First',
      is_last: 'Is Last',
      iterator_array: 'Input Array',
      iterator_item: 'Current Element',
      iterator_index: 'Current Index',
      // control.py - ParallelNode
      errors: 'Error List',
      parallel_input: 'Parallel Input',
      parallel_results: 'All Branch Results',
      // control.py - WaitNode
      wait_input: 'Passthrough Input',
      wait_output: 'Passthrough Output',
      // control.py - MergeNode
      merged: 'Merged Result',
      merge_array: 'Array Result',
      merge_input_1: 'Input 1',
      merge_input_2: 'Input 2',
      merge_input_3: 'Input 3',
      merge_input_4: 'Input 4',
      // control.py - VariableAggregatorNode
      aggregated: 'Aggregated Variables',
      aggregator_variables: 'Variable Input',
      // action.py - SendMessageNode
      status: 'Send Status',
      message_id: 'Message ID',
      target: 'Target ID',
      // action.py - ReplyMessageNode
      reply_message: 'Reply Content',
      // action.py - CallPipelineNode
      pipeline_response: 'Pipeline Response',
      pipeline_result: 'Full Result',
      pipeline_query: 'Query Content',
      context_data: 'Context Data',
      // action.py - StoreDataNode
      store_status: 'Store Status',
      store_key: 'Store Key',
      store_value: 'Store Value',
      // action.py - SetVariableNode
      variable_value: 'Variable Value',
      variable_result: 'Set Variable Result',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      // action.py - EndNode
      workflow_output: 'Workflow Output',
      final_result: 'Final Result',
      // integration.py - DatabaseQueryNode
      query_results: 'Query Results',
      row_count: 'Affected/Returned Rows',
      query_success: 'Query Success',
      query_params: 'Query Parameters',
      // integration.py - RedisOperationNode
      redis_result: 'Operation Result',
      redis_success: 'Operation Success',
      redis_key: 'Redis Key',
      redis_value: 'Redis Value',
      error: 'Error Message',
      plugin_input: 'Plugin Input',
      // integration.py - MCPToolNode
      tool_result: 'Tool Execution Result',
      tool_success: 'Tool Call Success',
      mcp_arguments: 'Tool Arguments',
      // integration.py - MemoryStoreNode
      memory_result: 'Retrieved/Stored Value',
      memory_success: 'Operation Success',
      memory_value: 'Value to Store',
      // integration.py - DifyWorkflowNode
      answer: 'Dify Answer',
      dify_success: 'Call Success',
      dify_query: 'User Input/Query',
      dify_conversation_id: 'Conversation ID',
      // integration.py - DifyKnowledgeQueryNode
      search_results: 'Search Results',
      knowledge_base_query: 'Query Content',
      // integration.py - N8nWorkflowNode
      n8n_result: 'Workflow Execution Result',
      n8n_success: 'Call Success',
      n8n_payload: 'Workflow Input Data',
      // integration.py - LangflowFlowNode
      flow_result: 'Flow Execution Result',
      flow_success: 'Call Success',
      langflow_input: 'Input Content',
      // integration.py - CozeBotNode
      bot_answer: 'Bot Reply',
      bot_success: 'Call Success',
      coze_query: 'User Input/Query',
      coze_conversation_id: 'Conversation ID',
      bot_conversation_id: 'Conversation ID',
    },
  },
  unifiedBinding: {
    bindingType: 'Binding Type',
    pipeline: 'Pipeline',
    workflow: 'Workflow',
    pipelineDescription: 'Process messages using traditional pipeline',
    workflowDescription: 'Process messages using visual workflow',
    selectPipeline: 'Select Pipeline',
    selectWorkflow: 'Select Workflow',
    noPipelines: 'No pipelines available',
    noWorkflows: 'No workflows available',
    createPipeline: 'Create Pipeline',
    createWorkflow: 'Create Workflow',
  },
};

export default enUS;
