const zhHant = {
  sidebar: {
    home: '首頁',
    extensions: '擴展',
    installedPlugins: '已安裝',
    pluginMarket: '外掛市場',
    mcpServers: 'MCP 伺服器',
    addExtension: '添加擴展',
    pluginPages: '插件頁面',
    pluginPagesTooltip: '由已安裝的插件提供的視覺化頁面',
    quickStart: '快速開始',
    scrollToBottom: '捲動到底部',
    editionCommunity: '社區版',
    editionCloud: 'Cloud',
  },
  common: {
    login: '登入',
    logout: '登出',
    accountOptions: '系統設定',
    account: '帳戶',
    integration: '連接',
    email: '電子郵件',
    password: '密碼',
    welcome: '歡迎回到 LangBot 👋',
    continueToLogin: '登入以繼續',
    loginSuccess: '登入成功',
    loginFailed: '登入失敗，請檢查電子郵件和密碼是否正確',
    loginLoadError: '無法連線到伺服器',
    loginLoadErrorDesc: '無法連線到 LangBot 後端服務，請確認服務已啟動後重試。',
    retry: '重試',
    enterEmail: '輸入電子郵件地址',
    enterPassword: '輸入密碼',
    invalidEmail: '請輸入有效的電子郵件地址',
    emptyPassword: '請輸入密碼',
    language: '語言',
    helpDocs: '輔助說明',
    featureRequest: '需求建議',
    starOnGitHub: '在 GitHub 上 Star',
    joinDiscord: '加入 Discord 社群',
    create: '建立',
    edit: '編輯',
    delete: '刪除',
    add: '新增',
    select: '請選擇',
    skill: '技能',
    cancel: '取消',
    submit: '提交',
    error: '錯誤',
    success: '成功',
    save: '儲存',
    saving: '儲存中...',
    recommend: '推薦',
    start: '開始',
    confirm: '確認',
    confirmDelete: '確認刪除',
    deleteConfirmation: '您確定要刪除這個嗎？',
    selectOption: '選擇一個選項',
    selectPreset: '選擇預設',
    required: '必填',
    enable: '是否啟用',
    name: '名稱',
    description: '描述',
    icon: '圖標',
    close: '關閉',
    deleteSuccess: '刪除成功',
    deleteError: '刪除失敗：',
    addRound: '新增回合',
    copy: '複製',
    copySuccess: '複製成功',
    copyFailed: '複製失敗',
    test: '測試',
    forgotPassword: '忘記密碼？',
    agreementNotice: '繼續即表示您同意我們的',
    termsOfService: '服務條款',
    privacyPolicy: '隱私政策',
    and: '和',
    dataCollectionPolicy: '數據收集政策',
    dataCollectionPolicyUrl: 'https://link.langbot.app/zh/docs/data-policy',
    loading: '載入中...',
    fieldRequired: '此欄位為必填',
    or: '或',
    loginWithSpace: '使用 LangBot 帳號登入',
    spaceLoginRecommended: '推薦：使用官方提供的穩定模型 API 和雲服務',
    loginLocal: '使用本地帳號登入',
    loginWithPassword: '透過密碼登入',
    spaceLoginTitle: '透過 LangBot 帳號登入',
    spaceLoginDescription: '掃描二維碼或訪問下方連結進行授權',
    spaceLoginUserCode: '您的驗證碼',
    spaceLoginExpires: '驗證碼將在 {{seconds}} 秒後過期',
    spaceLoginWaiting: '等待授權中...',
    spaceLoginSuccess: '授權成功',
    spaceLoginFailed: 'LangBot 帳號登入失敗',
    spaceLoginExpired: '驗證碼已過期，請重試',
    spaceLoginCancel: '取消',
    spaceLoginVisitLink: '訪問連結',
    spaceLoginProcessing: '正在透過 LangBot 帳號登入',
    spaceLoginProcessingDescription: '請稍候，正在完成登入...',
    spaceLoginSuccessDescription: '正在跳轉到 LangBot...',
    spaceLoginError: '登入失敗',
    spaceLoginNoCode: '缺少授權碼',
    backToLogin: '返回登入',
    backToHome: '返回首頁',
    spaceAccountCannotChangePassword: 'LangBot 帳號無法在此修改密碼',
    theme: '主題',
    changePassword: '修改密碼',
    currentPassword: '當前密碼',
    newPassword: '新密碼',
    confirmNewPassword: '確認新密碼',
    enterCurrentPassword: '輸入當前密碼',
    enterNewPassword: '輸入新密碼',
    enterConfirmPassword: '確認新密碼',
    currentPasswordRequired: '當前密碼不能為空',
    newPasswordRequired: '新密碼不能為空',
    confirmPasswordRequired: '確認密碼不能為空',
    passwordsDoNotMatch: '兩次輸入的密碼不一致',
    changePasswordSuccess: '密碼修改成功',
    changePasswordFailed: '密碼修改失敗，請檢查當前密碼是否正確',
    apiIntegration: 'API 整合',
    apiIntegrationDescription: '管理用於外部存取的 API 金鑰和 Webhook',
    apiKeys: 'API 金鑰',
    manageApiIntegration: '管理 API 整合',
    manageApiKeys: '管理 API 金鑰',
    createApiKey: '建立 API 金鑰',
    apiKeyName: 'API 金鑰名稱',
    apiKeyDescription: 'API 金鑰描述',
    apiKeyValue: 'API 金鑰值',
    apiKeyCreated: 'API 金鑰建立成功',
    apiKeyDeleted: 'API 金鑰刪除成功',
    apiKeyDeleteConfirm: '確定要刪除此 API 金鑰嗎？',
    apiKeyNameRequired: 'API 金鑰名稱不能為空',
    copyApiKey: '複製 API 金鑰',
    apiKeyCopied: 'API 金鑰已複製到剪貼簿',
    noApiKeys: '暫無 API 金鑰',
    apiKeyHint: 'API 金鑰允許外部系統訪問 LangBot 的 Service API',
    mcpTab: 'MCP',
    mcpHint:
      'LangBot 提供 MCP（Model Context Protocol）服務，讓 AI Agent 管理本實例，複用與 Service API 相同的 API 金鑰。',
    mcpEndpoint: 'MCP 接入位址',
    mcpAuthTitle: '驗證方式',
    mcpAuthDesc: '使用「API 金鑰」標籤頁中的任意金鑰，透過請求標頭傳入：',
    mcpGlobalKeyNote:
      '也可在 config.yaml 中設定全域 API 金鑰（api.global_api_key），無需登入即可使用。',
    mcpClientConfigTitle: 'MCP 用戶端設定範例',
    webhooks: 'Webhooks',
    createWebhook: '建立 Webhook',
    webhookName: 'Webhook 名稱',
    webhookUrl: 'Webhook URL',
    webhookDescription: 'Webhook 描述',
    webhookEnabled: '是否啟用',
    webhookCreated: 'Webhook 建立成功',
    webhookDeleted: 'Webhook 刪除成功',
    webhookDeleteConfirm: '確定要刪除此 Webhook 嗎？',
    webhookNameRequired: 'Webhook 名稱不能為空',
    webhookUrlRequired: 'Webhook URL 不能為空',
    noWebhooks: '暫無 Webhook',
    webhookHint: 'Webhook 允許 LangBot 將個人訊息和群組訊息事件推送到外部系統',
    actions: '操作',
    apiKeyCreatedMessage: '請複製此 API 金鑰，若按鈕無效，請手動複製。',
    none: '無',
    more: '更多 ({{count}})',
    less: '收起',
    noItems: '暫無內容',

    apiKeyStoredSecurely: 'Secret shown only when created',
  },
  notFound: {
    title: '頁面不存在',
    description:
      '您要查詢的頁面似乎不存在。請檢查您輸入的 URL 是否正確，或返回首頁。',
    back: '上一級',
    home: '返回主頁',
    help: '查看說明文件',
  },
  models: {
    title: '模型設定',
    description: '設定和管理可在流程線中使用的模型',
    createModel: '建立模型',
    editModel: '編輯模型',
    getModelListError: '取得模型清單失敗：',
    modelName: '模型名稱',
    modelProvider: '模型供應商',
    modelBaseURL: '基礎 URL',
    modelAbilities: '模型能力',
    saveSuccess: '儲存成功',
    saveError: '儲存失敗：',
    createSuccess: '建立成功',
    createError: '建立失敗：',
    deleteSuccess: '刪除成功',
    deleteError: '刪除失敗：',
    deleteConfirmation: '您確定要刪除這個模型嗎？',
    modelNameRequired: '模型名稱不能為空',
    modelProviderRequired: '模型供應商不能為空',
    requestURLRequired: '請求URL不能為空',
    apiKeyRequired: 'API Key不能為空',
    keyNameRequired: '鍵名不能為空',
    mustBeValidNumber: '必須是有效的數字',
    mustBeTrueOrFalse: '必須是 true 或 false',
    requestURL: '請求URL',
    scanURL: '掃描模型 URL',
    scanURLPlaceholder: '留空則使用請求 URL + /models',
    scanURLDescription:
      '當模型掃描與模型調用不使用相同地址時，請填寫實際的模型列表端點。',
    apiKey: 'API Key',
    abilities: '能力',
    selectModelAbilities: '選擇模型能力',
    visionAbility: '視覺能力',
    functionCallAbility: '函數呼叫',
    reasoningAbility: '思考能力',
    reasoningLevel: '思考等級',
    reasoningLevels: {
      providerDefault: '供應商預設',
      disabled: '關閉',
      enabled: '開啟',
      minimal: '最低',
      low: '低',
      medium: '中',
      high: '高',
      xhigh: '極高',
      max: '最大',
    },
    contextLength: '上下文視窗',
    contextLengthPlaceholder: '未知',
    contextLengthInvalid: '上下文視窗必須是正整數',
    extraParameters: '額外參數',
    addParameter: '新增參數',
    keyName: '鍵名',
    type: '類型',
    value: '值',
    string: '字串',
    number: '數字',
    boolean: '布林值',
    object: '物件',
    objectJsonPlaceholder: '{ "type": "disabled" }',
    invalidJsonObject: '值必須是有效的 JSON 物件',
    selectModelProvider: '選擇模型供應商',
    modelProviderDescription: '請填寫供應商向您提供的模型名稱',
    modelManufacturer: '模型廠商',
    aggregationPlatform: '中轉平台',
    selfDeployed: '自部署',
    builtin: '內建',
    selectModel: '請選擇模型',
    testSuccess: '測試成功',
    testError: '測試失敗，請檢查模型設定',
    llmModels: '對話模型',
    localProvider: '本地',
    localProviderDescription: '在本地設定和管理的模型',
    spaceProviderDescription: '從您的 LangBot 帳號同步的模型',
    spaceDisabledForLocalAccount: '使用 LangBot 帳號登入以使用雲端模型',
    syncModels: '同步',
    syncSuccess: '同步完成：建立 {{created}} 個，更新 {{updated}} 個',
    syncError: '同步失敗：',
    spaceModelReadOnly: 'Space 模型為唯讀',
    noSpaceModels: '暫無 Space 模型。點擊同步按鈕從 Space 取得模型。',
    noLocalModels: '暫無本地模型。點擊建立按鈕新增模型。',
    providerCount: '共 {{count}} 個供應商',
    addModel: '新增模型',
    manualAdd: '手動添加',
    scanAdd: '掃描添加',
    scanModels: '掃描模型',
    scanModelsHint: '從目前供應商介面讀取可用模型，然後勾選要添加的模型。',
    scannedModels: '掃描結果',
    scanDebug: '調試資訊',
    searchScannedModels: '搜尋掃描結果',
    noScannedModels: '尚無掃描結果，點擊上方按鈕開始掃描。',
    noScannedModelsMatch: '沒有符合的模型',
    addSelectedModels: '添加所選模型',
    addSelectedModelsSuccess: '已添加 {{count}} 個模型',
    selectAll: '全選模型',
    alreadyAdded: '已添加',
    addLLMModel: '新增對話模型',
    addEmbeddingModel: '新增嵌入模型',
    provider: '供應商',
    existingProvider: '現有供應商',
    newProvider: '新供應商',
    selectProvider: '選擇供應商',
    requester: '供應商類型',
    selectRequester: '選擇供應商類型',
    searchProviders: '搜尋供應商...',
    langbotModelsDescription: '由 LangBot Space 提供的雲端模型',
    credits: '積分',
    loginWithSpace: '使用 LangBot 帳號登入',
    loginToUseModels: '使用 LangBot 帳號登入以使用雲端模型',
    noModels: '暫無模型',
    langbotModels: 'LangBot 模型',
    spaceTrialTooltip:
      '免費試用積分已就緒！使用 LangBot 帳號登入即可零設定使用雲端模型。',
    unlockModels: '登入以使用',
    editProvider: '編輯供應商',
    addProvider: '新增供應商',
    addProviderHint: '新增供應商以使用其他來源的模型',
    addProviderHintSimple: '新增供應商以使用模型',
    noProviders: '暫無供應商',
    providerName: '供應商名稱',
    providerNameRequired: '供應商名稱不能為空',
    requesterRequired: '供應商類型不能為空',
    providerSaved: '供應商已儲存',
    providerCreated: '供應商已建立',
    providerSaveError: '儲存供應商失敗：',
    providerDeleted: '供應商已刪除',
    providerDeleteError: '刪除供應商失敗：',
    deleteProviderConfirmation: '您確定要刪除這個供應商嗎？',
    loadError: '載入資料失敗',
    chat: '對話',
    embedding: '嵌入',
    rerank: '重排序',
    rerankUrlTooltip:
      '完整 URL 覆蓋重排序端點（例如：https://dashscope.aliyuncs.com/compatible-api/v1/reranks）',
    rerankPathTooltip:
      '附加到基礎 URL 的路徑（預設：rerank，某些服務使用 reranks）',
    modelsCount: '{{count}} 個模型',
    expandModels: '展開',
    collapseModels: '收起',
    fallback: {
      primary: '主模型',
      fallbackList: '備用模型',
      addFallback: '新增備用模型',
    },

    ownerMustBindSpace:
      'The Workspace owner must connect a LangBot Account for LangBot Models.',
    usesOwnerSpaceBilling:
      "Uses the Workspace owner's LangBot Account billing and credits.",
  },
  bots: {
    title: '機器人',
    description: '建立和管理機器人，這是 LangBot 與各個平台連接的入口',
    createBot: '建立機器人',
    selectFromSidebar: '從側邊欄選擇一個機器人',
    editBot: '編輯機器人',
    getBotListError: '取得機器人清單失敗：',
    botName: '機器人名稱',
    botDescription: '機器人描述',
    botNameRequired: '機器人名稱不能為空',
    botDescriptionRequired: '機器人描述不能為空',
    adapterRequired: '適配器不能為空',
    defaultDescription: '一個機器人',
    getBotConfigError: '取得機器人設定失敗：',
    saveSuccess: '儲存成功',
    saveError: '儲存失敗：',
    createSuccess: '建立成功 請啟用或修改綁定流程線',
    createError: '建立失敗：',
    deleteSuccess: '刪除成功',
    deleteError: '刪除失敗：',
    deleteConfirmation: '您確定要刪除這個機器人嗎？',
    platformAdapter: '平台/適配器選擇',
    selectAdapter: '選擇適配器',
    adapterConfig: '適配器設定',
    viewAdapterDocs: '查看文檔',
    bindPipeline: '綁定流程線',
    selectPipeline: '選擇流程線',
    selectBot: '請選擇機器人',
    botLogTitle: '機器人日誌',
    enableAutoRefresh: '開啟自動重新整理',
    session: '對話',
    yesterday: '昨天',
    earlier: '更久之前',
    dateFormat: '{{month}}月{{day}}日',
    setBotEnableError: '設定機器人啟用狀態失敗',
    log: '日誌',
    configuration: '設定',
    logs: '日誌',
    basicInfo: '基礎資訊',
    basicInfoDescription: '設定機器人名稱和描述',
    routingConnection: '路由與連接',
    routingConnectionDescription: '綁定處理此機器人訊息的流程線',
    routingRules: '條件路由規則',
    routingRulesDescription:
      '按順序匹配，命中第一條規則後路由到對應流程線；都不匹配時使用上方預設流程線',
    addRoutingRule: '新增規則',
    ruleTypeLauncherType: '會話類型',
    ruleTypeLauncherId: '會話 ID',
    ruleTypeMessageContent: '訊息內容',
    operatorEq: '等於',
    operatorNeq: '不等於',
    operatorContains: '包含',
    operatorNotContains: '不包含',
    operatorStartsWith: '前綴匹配',
    operatorRegex: '正規表達式',
    operatorHas: '包含',
    operatorNotHas: '不包含',
    ruleTypeMessageHasElement: '訊息元素類型',
    ruleValueElementPlaceholder: '選擇元素類型',
    elementImage: '圖片',
    elementVoice: '語音',
    elementFile: '檔案',
    elementForward: '轉發',
    elementFace: '表情',
    elementAt: '@某人',
    elementAtAll: '@全體',
    elementQuote: '引用',
    ruleValuePlaceholder: '匹配值',
    ruleValueLauncherIdPlaceholder: '群組或使用者 ID',
    ruleValueMessagePlaceholder: '訊息內容',
    ruleValuePrefixPlaceholder: '如: !draw',
    ruleValueRegexpPlaceholder: '如: ^/help',
    pipelineDiscard: '丟棄訊息',
    sessionTypePerson: '私聊',
    sessionTypeGroup: '群聊',
    adapterConfigDescription: '設定所選平台適配器',
    dangerZone: '危險區域',
    dangerZoneDescription: '不可逆的操作',
    deleteBotAction: '刪除此機器人',
    deleteBotHint: '刪除後，所有關聯設定將被永久移除，且無法復原。',
    webhookUrl: 'Webhook 回調位址',
    webhookUrlCopied: 'Webhook 位址已複製',
    webhookUrlHint:
      '點擊輸入框自動全選，然後按 Ctrl+C (Mac: Cmd+C) 複製，或點擊右側按鈕',
    webhookUrlHintEither: '以上兩個地址任選其一填入平台配置即可',
    webhookSaasHint:
      'Webhook 需要公網可存取的網域。LangBot Cloud 為你的機器人提供即開即用的公網位址。',
    webhookSaasLink: '了解 LangBot Cloud',
    adapterCategory: {
      popular: '熱門',
      china: '中國',
      global: '全球',
      protocol: '協定',
    },
    logLevel: '日誌級別',
    allLevels: '全部級別',
    selectLevel: '選擇級別',
    levelsSelected: '個級別已選',
    viewDetailedLogs: '查看詳細日誌',
    viewDetails: '詳情',
    collapse: '收起',
    imagesAttached: '張圖片已附加',
    noLogs: '暫無日誌',
    sessionMonitor: {
      title: '會話監控',
      sessions: '會話列表',
      noSessions: '暫無會話',
      selectSession: '選擇一個會話查看訊息',
      noMessages: '該會話暫無訊息',
      messages: '條訊息',
      messageCount: '{{count}} 條訊息',
      loading: '載入中...',
      loadingSessions: '載入會話中...',
      loadingMessages: '載入訊息中...',
      user: '用戶',
      variables: '變數',
      platform: '平台',
      lastActive: '最近活躍',
      refresh: '重新整理',
      active: '活躍',
      inactive: '不活躍',
      discarded: '已丟棄',
      userMessage: '使用者',
      botMessage: '助手',
    },
    admins: {
      title: '管理員',
      description: '擁有此機器人指令管理員權限的會話（使用者/群組 ID）',
      addAdmin: '新增管理員',
      launcherType: '類型',
      launcherId: 'ID',
      typePerson: '私聊',
      typeGroup: '群組',
      placeholderId: '使用者或群組 ID',
      addSuccess: '新增成功',
      addError: '新增失敗：',
      deleteSuccess: '已移除',
      deleteError: '移除失敗：',
      noAdmins: '尚無管理員',
      setAdminTitle: '設為管理員',
      removeAdminTitle: '移除管理員權限',
      adminBadge: '管理員',
      configureAdmins: '設定管理員',
    },
  },
  plugins: {
    title: '外掛擴展',
    description: '安裝和設定用於擴展功能的外掛，請在流程線配置中選用',
    createPlugin: '建立外掛',
    editPlugin: '編輯外掛',
    installed: '已安裝',
    marketplace: 'Marketplace',
    arrange: '編排',
    install: '安裝',
    installPlugin: '安裝外掛',
    newPlugin: '新建外掛',
    installFromGithub: '來自 GitHub',
    onlySupportGithub: '目前僅支援從 GitHub 安裝',
    enterGithubLink: '請輸入外掛的Github連結',
    installing: '正在安裝外掛...',
    installSuccess: '外掛安裝成功',
    installFailed: '外掛安裝失敗：',
    searchPlugin: '搜尋外掛',
    sortBy: '排序方式',
    mostStars: '最多星標',
    recentlyAdded: '最近新增',
    recentlyUpdated: '最近更新',
    noMatchingPlugins: '沒有找到符合的外掛',
    loading: '載入中...',
    getPluginListError: '取得外掛清單失敗:',
    pluginConfig: '外掛設定',
    noPluginInstalled: '暫未安裝任何外掛',
    noExtensionInstalled: '暫未安裝任何擴充功能',
    loadingExtensions: '正在載入擴充功能...',
    groupByType: '依格式分組',
    pluginSort: '外掛排序',
    pluginSortDescription:
      '外掛順序會影響同一事件內的處理順序，請拖曳外掛卡片排序',
    pluginSortSuccess: '外掛排序成功',
    pluginSortError: '外掛排序失敗：',
    pluginNoConfig: '外掛沒有設定項目。',
    systemDisabled: '外掛系統未啟用',
    systemDisabledDesc: '尚未啟用外掛系統，請根據文檔修改配置',
    connectionError: '外掛系統連接異常',
    connectionErrorDesc: '請檢查外掛系統配置或聯絡管理員',
    errorDetails: '錯誤詳情',
    loadingStatus: '正在檢查外掛系統狀態...',
    failedToGetStatus: '取得外掛系統狀態失敗',
    pluginSystemNotReady: '外掛系統未就緒，無法執行此操作',
    debugInfo: '偵錯資訊',
    debugInfoTitle: '外掛偵錯資訊',
    debugUrl: '偵錯位址',
    debugKey: '偵錯金鑰',
    debugKeyExpires: '將於 {{time}} 輪換；每個工作區的密鑰不同',
    noDebugKey: '(未設定)',
    debugKeyDisabled: '偵錯憑據暫時無法使用',
    boxStatusTitle: 'Box 執行時',
    boxStatus: '狀態',
    boxConnected: '已連線',
    boxUnavailable: '不可用',
    boxBackend: '後端',
    boxProfile: '設定檔',
    boxSandboxes: '沙箱數',
    boxErrors: '錯誤數',
    boxSessionImage: '映像檔',
    boxSessionBackend: '後端',
    boxSessionResources: '資源',
    boxSessionNetwork: '網路',
    boxStatusLoadFailed: '載入 Box 狀態失敗',
    failedToGetDebugInfo: '取得偵錯資訊失敗',
    copiedToClipboard: '已複製到剪貼簿',
    deleting: '刪除中...',
    deletePlugin: '刪除外掛',
    cancel: '取消',
    saveConfig: '儲存設定',
    saving: '儲存中...',
    confirmDeletePlugin: '您確定要刪除外掛（{{author}}/{{name}}）嗎？',
    deleteDataCheckbox: '同時刪除外掛設定和持久化儲存',
    confirmDelete: '確認刪除',
    deleteError: '刪除失敗：',
    close: '關閉',
    deleteConfirm: '刪除確認',
    deleteSuccess: '刪除成功',
    dangerZone: '危險區域',
    dangerZoneDescription: '不可逆的操作',
    modifyFailed: '修改失敗：',
    componentName: {
      Tool: '工具',
      EventListener: '事件監聽器',
      Command: '命令',
      KnowledgeEngine: '知識引擎',
      Parser: '解析器',
      Page: '擴展頁',
    },
    uploadLocal: '本地上傳',
    debugging: '調試中',
    uploadLocalPlugin: '上傳本地插件',
    localPreview: {
      title: '預覽本地外掛包',
      unpacking: '正在解包預覽...',
      unpackComplete: '解包預覽完成',
      failed: '解包預覽失敗',
      pluginInfo: '外掛資訊',
      packageInfo: '包資訊',
      name: '名稱',
      author: '作者',
      version: '版本',
      fileCount: '檔案數',
      dependencies: '依賴',
      components: '元件',
      ready: '外掛包已解包，確認後開始安裝。',
    },
    dragToUpload: '拖拽文件到此處上傳',
    unsupportedFileType: '不支持的文件類型，僅支持 .lbpkg 和 .zip 文件',
    uploadingPlugin: '正在上傳插件...',
    uploadSuccess: '上傳成功',
    uploadFailed: '上傳失敗',
    selectFileToUpload: '選擇要上傳的插件文件',
    askConfirm: '確定要安裝插件 "{{name}}" ({{version}}) 嗎？',
    askConfirmNoVersion: '確定要安裝插件 "{{name}}" 嗎？',
    fromGithub: '來自 GitHub',
    fromLocal: '本地安裝',
    fromMarketplace: '來自市場',
    componentsList: '組件: ',
    noComponents: '無組件',
    delete: '刪除插件',
    update: '更新插件',
    new: '新',
    updateConfirm: '更新確認',
    confirmUpdatePlugin: '您確定要更新插件（{{author}}/{{name}}）嗎？',
    confirmUpdate: '確認更新',
    updating: '更新中...',
    updateSuccess: '插件更新成功',
    updateError: '更新失敗：',
    saveConfigSuccessNormal: '儲存配置成功',
    saveConfigError: '儲存配置失敗：',
    config: '配置',
    readme: '文件',
    viewSource: '查看來源',
    loadingReadme: '正在載入文件...',
    noReadme: '該插件沒有提供 README 文件',
    tabDocs: '文件',
    tabLogs: '日誌',
    logsLevelAll: '全部級別',
    logsRefresh: '重新整理',
    logsAutoRefresh: '自動重新整理',
    logsEmpty: '暫無日誌。外掛透過 logger 列印的日誌會顯示在這裡。',
    fileUpload: {
      tooLarge: '檔案大小超過 10MB 限制',
      success: '檔案上傳成功',
      failed: '檔案上傳失敗',
      uploading: '上傳中...',
      chooseFile: '選擇檔案',
      addFile: '新增檔案',
    },
    enterRepoUrl: '請輸入 GitHub 倉庫地址',
    repoUrlPlaceholder: '例如: https://github.com/owner/repo',
    fetchingReleases: '正在獲取 Release 列表...',
    selectRelease: '選擇 Release',
    noReleasesFound: '未找到 Release',
    fetchReleasesError: '獲取 Release 列表失敗：',
    selectAsset: '選擇要安裝的文件',
    noAssetsFound: '該 Release 沒有可用的 .lbpkg 文件',
    fetchAssetsError: '獲取文件列表失敗：',
    backToReleases: '返回 Release 列表',
    backToRepoUrl: '返回倉庫地址',
    backToAssets: '返回文件選擇',
    releaseTag: 'Tag: {{tag}}',
    releaseName: '名稱: {{name}}',
    publishedAt: '發佈於: {{date}}',
    prerelease: '預發佈',
    assetSize: '大小: {{size}}',
    confirmInstall: '確認安裝',
    installFromGithubDesc: '從 GitHub Release 安裝插件',
    goToMarketplace: '前往外掛市場',
    installProgress: {
      title: '正在安裝 {{name}}',
      titleGeneric: '外掛安裝',
      overallProgress: '整體進度',
      downloading: '下載外掛',
      installingDeps: '安裝依賴',
      initializing: '初始化設定',
      launching: '啟動外掛',
      completed: '已完成',
      failed: '安裝失敗',
      downloadSize: '檔案大小: {{size}}',
      depsInfo: '共 {{count}} 個依賴需要安裝',
      depsProgress: '已安裝 {{installed}}/{{total}} · 剩餘 {{remaining}} 個',
      installComplete: '外掛安裝成功',
      dismiss: '關閉',
      background: '背景執行',
      taskQueue: '安裝任務',
      clearCompleted: '清除已完成',
      noTasks: '暫無安裝任務',
      titlePlugin: '正在安裝外掛 {{name}}',
      titleMCP: '正在安裝 MCP 伺服器 {{name}}',
      titleSkill: '正在安裝技能 {{name}}',
      installCompletePlugin: '外掛安裝成功',
      installCompleteMCP: 'MCP 伺服器安裝成功',
      installCompleteSkill: '技能安裝成功',
    },
    uploadPluginOnly: '僅支援 .lbpkg 外掛包',
  },
  market: {
    searchPlaceholder: '搜尋插件...',
    searchPlaceholderCount: '搜尋 {{count}} 個擴展、能力或場景...',
    searchResults: '搜尋到 {{count}} 個擴展',
    totalPlugins: '共 {{count}} 個擴展',
    noPlugins: '暫無插件',
    noResults: '未找到相關插件',
    loadingMore: '載入更多...',
    loading: '載入中...',
    allLoaded: '已顯示全部插件',
    allLoadedCount: '已顯示全部 {{count}} 個擴展',
    install: '安裝',
    installCard: '安裝 {{name}}',
    installConfirm: '確定要安裝插件 "{{name}}" ({{version}}) 嗎？',
    downloadComplete: '插件 "{{name}}" 下載完成',
    installFailed: '安裝失敗，請稍後重試',
    loadFailed: '取得插件列表失敗，請稍後重試',
    noDescription: '暫無描述',
    recommendation: {
      pause: '暫停自動輪播',
      resume: '繼續自動輪播',
    },
    notFound: '插件資訊未找到',
    sortBy: '排序方式',
    sort: {
      hottest: '熱度最高',
      recentlyAdded: '最近新增',
      recentlyUpdated: '最近更新',
      mostDownloads: '最多下載',
      leastDownloads: '最少下載',
    },
    downloads: '次下載',
    download: '下載',
    like: '按讚',
    unlike: '取消按讚',
    likeFailed: '按讚失敗，請稍後重試',
    repository: '代碼倉庫',
    downloadFailed: '下載失敗',
    noReadme: '該插件沒有提供 README 文件',
    description: '描述',
    tagLabel: '標籤',
    submissionTitle: '您有插件提交正在審核中： {{name}}',
    submissionPending: '您的插件提交正在審核中： {{name}}',
    submissionApproved: '您的插件提交已通過審核： {{name}}',
    submissionRejected: '您的插件提交已被拒絕： {{name}}',
    clickToRevoke: '撤回',
    revokeSuccess: '撤回成功',
    revokeFailed: '撤回失敗',
    submissionDetails: '插件提交詳情',
    markAsRead: '已讀',
    markAsReadSuccess: '已標記為已讀',
    markAsReadFailed: '標記為已讀失敗',
    filterByComponent: '插件組件',
    filterByComponentHint:
      '插件提供的能力類型，如工具（Tool）、命令（Command）、事件監聽器（EventListener）等，用於擴展 LangBot 的各項能力。按組件篩選可只看提供對應能力的插件。',
    allComponents: '全部組件',
    componentName: {
      Tool: '工具',
      EventListener: '事件監聽器',
      Command: '命令',
      KnowledgeEngine: '知識引擎',
      Parser: '解析器',
      Page: '擴展頁',
    },
    filterByType: '類型',
    allTypes: '全部類型',
    typePlugin: '插件',
    typeMCP: 'MCP',
    typeSkill: '技能',
    requestPlugin: '請求插件',
    tags: {
      filterByTags: '按標籤篩選',
      selected: '已選',
      selectTags: '選擇標籤',
      clearAll: '清空',
      noTags: '暫無標籤',
    },
    filters: {
      allFormats: '全部類型',
      more: '更多',
      advancedTitle: '高級篩選',
      advancedDescription: '按擴展類型篩選',
      technicalType: '技術類型',
    },
    allExtensions: '全部擴展',
    viewDetails: '查看詳情',
    deprecated: '已棄用',
    deprecatedTooltip: '請安裝對應「知識引擎」插件',
  },
  mcp: {
    title: 'MCP',
    createServer: '新增MCP伺服器',
    addMCPServer: '新增 MCP 伺服器',
    editServer: '編輯MCP伺服器',
    deleteServer: '刪除MCP伺服器',
    confirmDeleteServer: '您確定要刪除此MCP伺服器嗎？',
    confirmDeleteTitle: '刪除MCP伺服器',
    getServerListError: '取得MCP伺服器清單失敗：',
    serverName: '伺服器名稱',
    serverMode: '連接模式',
    stdio: 'Stdio模式',
    sse: 'SSE模式',
    selectMode: '選擇連接模式',
    http: 'HTTP模式',
    local: '本機（Stdio）',
    remote: '遠端',
    localModeDescription: '在 Box 沙箱中以子程序方式於本機執行 MCP 伺服器。',
    remoteModeDescription:
      '透過 URL 連接遠端 MCP 伺服器，傳輸方式（Streamable HTTP 或 SSE）將自動偵測。',
    remoteUrlPlaceholder: 'https://example.com/mcp',
    remoteUrlDescription:
      '貼上 MCP 伺服器連結即可，同時支援 Streamable HTTP 與舊版 SSE 端點。',
    noServerInstalled: '暫未設定任何MCP伺服器',
    serverNameRequired: '伺服器名稱不能為空',
    commandRequired: '命令不能為空',
    urlRequired: 'URL不能為空',
    timeoutMustBePositive: '逾時時間必須是正數',
    command: '命令',
    args: '參數',
    env: '環境變數',
    url: 'URL位址',
    headers: '請求標頭',
    timeout: '逾時時間',
    toolCallTimeout: '工具呼叫逾時（秒）',
    toolCallTimeoutDescription:
      '單次工具呼叫的最長等待時間。設為 0 表示不限制，預設 300 秒。',
    addArgument: '新增參數',
    addEnvVar: '新增環境變數',
    addHeader: '新增請求標頭',
    keyName: '鍵名',
    value: '值',
    testing: '測試中...',
    connecting: '連接中...',
    testSuccess: '測試成功',
    testFailed: '刷新失敗：',
    testError: '刷新出錯',
    refreshSuccess: '刷新成功',
    refreshFailed: '刷新失敗：',
    connectionSuccess: '連接成功',
    connectionFailed: '連接失敗，請檢查URL',
    connectionFailedStatus: '連接失敗',
    boxDisabledStdioRefused:
      'Stdio 模式的 MCP 伺服器依賴 Box 沙箱，目前已在設定中停用（box.enabled = false）。',
    boxUnavailableStdioRefused:
      'Stdio 模式的 MCP 伺服器依賴 Box 沙箱，目前無法連線。',
    boxStdioRefusedSuggestion:
      '請啟用 Box（box.enabled = true）並確認執行時連線正常，或將此伺服器切換到 http/sse 模式。',
    boxRequired: '需要 Box',
    disabledByPolicy: '已被策略停用',
    stdioDisabledByPolicy: '此部署已停用 Stdio MCP，請改用遠端 MCP 伺服器。',
    stdioBlockedByBoxToast:
      'Box 沙箱已停用或無法使用，無法儲存 stdio 模式的 MCP。請啟用 Box 或改為 http/sse 模式。',
    toolsFound: '個工具',
    unknownError: '未知錯誤',
    noToolsFound: '未找到任何工具',
    noResourcesFound: '未找到任何資源',
    tabTools: '工具',
    tabResources: '資源',
    tabDocs: '文件',
    tabLogs: '日誌',
    logsLevelAll: '全部級別',
    logsRefresh: '重新整理',
    logsAutoRefresh: '自動重新整理',
    logsEmpty: '暫無日誌。MCP 服務器的運行日誌會顯示在這裡。',
    noReadme: '暫無文件',
    parseResultFailed: '解析測試結果失敗',
    noResultReturned: '測試未返回結果',
    getTaskFailed: '獲取任務狀態失敗',
    noTaskId: '未獲取到任務ID',
    deleteSuccess: '刪除成功',
    deleteFailed: '刪除失敗：',
    deleteError: '刪除失敗：',
    saveSuccess: '儲存成功',
    saveError: '儲存失敗：',
    createSuccess: '建立成功',
    createFailed: '建立失敗：',
    createError: '建立失敗：',
    loadFailed: '載入失敗',
    modifyFailed: '修改失敗：',
    toolCount: '工具：{{count}}',
    parameterCount: '參數：{{count}}',
    noParameters: '無參數',
    resourceCount: '資源：{{count}}',
    resourceBinaryContent: '二進位內容（無法顯示）',
    resourceBinaryOmitted: '二進位內容已依資源安全策略省略',
    resourceTruncated: '內容已依位元組或 token 限制截斷',
    resourceReadFailed: '讀取資源內容失敗',
    statusConnected: '已連線',
    statusDisconnected: '未連線',
    statusError: '連接錯誤',
    statusDisabled: '已停用',
    loading: '載入中...',
    starCount: '星標：{{count}}',
    install: '安裝',
    installFromGithub: '從Github安裝MCP伺服器',
    add: '新增',
    name: '名稱',
    nameRequired: '名稱不能為空',
    sseTimeout: 'SSE逾時時間',
    sseTimeoutDescription: '用於建立SSE連接的逾時時間',
    extraParametersDescription: '額外參數，用於設定MCP伺服器的特定行為',
    timeoutMustBeNumber: '逾時時間必須是數字',
    timeoutNonNegative: '逾時時間不能為負數',
    sseTimeoutMustBeNumber: 'SSE逾時時間必須是數字',
    sseTimeoutNonNegative: 'SSE逾時時間不能為負數',
    updateSuccess: '更新成功',
    updateFailed: '更新失敗：',
    selectFromSidebar: '從側邊欄選擇一個 MCP 伺服器',
    dangerZone: '危險區域',
    dangerZoneDescription: '此 MCP 伺服器的不可逆操作。',
    deleteMCPAction: '刪除此 MCP 伺服器',
    deleteMCPHint: '刪除後，此 MCP 伺服器設定將無法恢復。',
  },
  pipelines: {
    title: '流程線',
    description: '流程線定義了對訊息事件的處理流程，用於綁定到機器人',
    createPipeline: '建立流程線',
    selectFromSidebar: '從側邊欄選擇一個流程線',
    editPipeline: '編輯流程線',
    chat: '對話',
    configuration: '設定',
    debugChat: '對話除錯',
    getPipelineListError: '取得流程線清單失敗：',
    daysAgo: '天前',
    today: '今天',
    updateTime: '更新於',
    defaultBadge: '預設',
    sortBy: '排序方式',
    newestCreated: '最新建立',
    earliestCreated: '最早建立',
    recentlyEdited: '最近編輯',
    earliestEdited: '最早編輯',
    basicInfo: '基本資訊',
    basicInfoDescription: '設定流程線名稱、圖示和描述',
    aiCapabilities: 'AI 能力',
    triggerConditions: '觸發條件',
    safetyControls: '安全控制',
    outputProcessing: '輸出處理',
    nameRequired: '名稱不能為空',
    descriptionRequired: '描述不能為空',
    createSuccess: '建立成功 請編輯流程線詳細參數',
    createError: '建立失敗：',
    saveSuccess: '儲存成功',
    saveError: '儲存失敗：',
    copySuffix: ' Copy',
    deleteConfirmation:
      '您確定要刪除這個流程線嗎？已綁定此流程線的機器人將無法使用。',
    defaultPipelineCannotDelete: '預設流程線不可刪除',
    deleteSuccess: '刪除成功',
    deleteError: '刪除失敗：',
    copyConfirmTitle: '確認複製',
    copyConfirmation:
      '確定要複製這個流程線嗎？複製將創建一個包含完整配置的新流程線。',
    unsavedChanges: '有未儲存的變更',
    dangerZone: '危險區域',
    dangerZoneDescription: '不可逆的操作',
    deletePipelineAction: '刪除此流程線',
    deletePipelineHint: '刪除後，綁定此流程線的機器人將無法正常運作。',
    copyPipelineAction: '複製此流程線',
    copyPipelineHint: '建立一條新的流程線，並複製所有設定。',
    extensions: {
      title: '擴展集成',
      loadError: '載入插件清單失敗',
      saveSuccess: '儲存成功',
      saveError: '儲存失敗',
      noPluginsAvailable: '暫無可用插件',
      disabled: '已停用',
      noPluginsSelected: '未選擇任何插件',
      addPlugin: '新增插件',
      selectPlugins: '選擇插件',
      pluginsTitle: '插件',
      mcpServersTitle: 'MCP 伺服器',
      mcpResourcesTitle: 'MCP 資源',
      noMCPServersSelected: '未選擇任何 MCP 伺服器',
      noMCPResourcesAvailable: '暫無可用 MCP 資源',
      addMCPServer: '新增 MCP 伺服器',
      selectMCPServers: '選擇 MCP 伺服器',
      enableMCPResourceAgentRead: '允許模型讀取',
      toolCount: '{{count}} 個工具',
      noPluginsInstalled: '無已安裝的插件',
      noMCPServersConfigured: '無已配置的 MCP 伺服器',
      selectAll: '全選',
      enableAllPlugins: '啟用所有插件',
      enableAllMCPServers: '啟用所有 MCP 伺服器',
      allPluginsEnabled: '已啟用所有插件',
      allMCPServersEnabled: '已啟用所有 MCP 伺服器',
      enableAllSkills: '啟用全部技能',
      allSkillsEnabled: '已啟用全部技能',
      skillsTitle: '技能',
      noSkillsSelected: '未選擇技能',
      addSkill: '新增技能',
      selectSkills: '選擇技能',
      noSkillsAvailable: '暫無可用技能',
      mcpServersScopeTooltip:
        '這裡僅控制此流程線綁定哪些 MCP 伺服器；具體 MCP 工具和資源在 AI 能力的內建 Agent 表單中選擇。',
      enableAllMCPServersTooltip:
        '啟用後，所有已配置且啟用的 MCP 伺服器都會進入 AI 能力中的 MCP 工具和資源候選範圍。',
    },
    localAgent: {
      toolsTitle: '工具',
      toolsDescription: '選擇此內建 Agent 可以調用的插件、MCP 和內建工具。',
      toolsScopeTooltip:
        'MCP 工具只會從擴展集成中已綁定的 MCP 伺服器裡出現；如需增加 MCP 工具來源，請先到擴展集成綁定對應伺服器。',
      enableAllTools: '啟用所有工具',
      allToolsEnabled: '已啟用所有可用工具',
      noToolsSelected: '未選擇任何工具',
      editTools: '編輯工具',
      builtinTools: '內建工具',
      pluginTools: '插件工具',
      skillTools: '技能工具',
      mcpTools: 'MCP 工具',
      mcpToolsScopeTooltip:
        '這裡僅展示擴展集成目前允許的 MCP 伺服器提供的工具。',
      skillToolsScopeTooltip:
        '技能工具會在 LangBot 技能服務和 Box 沙箱後端可用時出現，用於讓 Agent 啟用或註冊技能。',
      selectTools: '選擇工具',
      resourcesTitle: '資源',
      resourcesDescription: '選擇此內建 Agent 可以讀取的 MCP 資源和知識庫。',
      knowledgeBases: '知識庫',
      mcpResources: 'MCP 資源',
      mcpResourcesScopeTooltip:
        '這裡僅展示擴展集成目前允許的 MCP 伺服器暴露的資源。',
      enableMCPResourceRead: '允許模型讀取 MCP 資源',
      mcpResourceReadTooltip:
        '關閉後，即使已選擇資源，也不會把 MCP 資源內容注入給模型。',
      noMCPResourcesAvailable: '暫無可用 MCP 資源',
      selectKnowledgeBases: '選擇知識庫',
    },
    debugDialog: {
      title: '流程線對話',
      selectPipeline: '選擇流程線',
      sessionType: '對話類型',
      privateChat: '私聊',
      groupChat: '群聊',
      send: '傳送',
      reset: '重設對話',
      inputPlaceholder: '傳送 {{type}} 訊息...',
      noMessages: '暫無訊息',
      userMessage: '使用者',
      botMessage: '機器人',
      sendFailed: '傳送失敗',
      resetSuccess: '對話已重設',
      resetFailed: '重設失敗',
      loadMessagesFailed: '載入訊息失敗',
      loadPipelinesFailed: '載入流程線失敗',
      atTips: '提及機器人',
      streaming: '串流傳輸',
      streamOutput: '串流',
      connected: 'WebSocket已連接',
      disconnected: 'WebSocket未連接',
      connectionError: 'WebSocket連接錯誤',
      connectionFailed: 'WebSocket連接失敗',
      notConnected: 'WebSocket未連接，請稍後重試',
      imageUploadFailed: '圖片上傳失敗',
      reply: '回覆',
      replyTo: '回覆給',
      showMarkdown: '渲染',
      showRaw: '原文',
      allMembers: '全體成員',
      file: '檔案',
      voice: '語音',
      uploadImage: '上傳圖片',
      uploading: '上傳中...',
    },
    monitoring: {
      title: '監控日誌',
      description: '檢視此流程線的執行記錄和錯誤資訊（最近24小時）',
      detailedLogs: '詳細日誌',
    },
  },
  knowledge: {
    title: '知識庫',
    createKnowledgeBase: '建立知識庫',
    selectFromSidebar: '從側邊欄選擇一個知識庫',
    editKnowledgeBase: '編輯知識庫',
    selectKnowledgeBase: '選擇知識庫',
    selectKnowledgeBases: '選擇知識庫',
    addKnowledgeBase: '新增知識庫',
    noKnowledgeBaseSelected: '未選擇知識庫',
    empty: '無',
    editDocument: '文檔',
    description: '設定可用於提升模型回覆品質的知識庫',
    metadata: '中繼資料',
    documents: '文檔',
    kbNameRequired: '知識庫名稱不能為空',
    kbDescriptionRequired: '知識庫描述不能為空',
    embeddingModelUUIDRequired: '嵌入模型不能為空',
    daysAgo: '天前',
    today: '今天',
    kbName: '知識庫名稱',
    kbDescription: '知識庫描述',
    topK: '召回數量 ',
    topKRequired: '召回數量不能為空',
    topKMax: '召回數量最大值為30',
    topKdescription: '取得相關性高的上位 K 件文獻的數量，範圍為1～30',
    defaultDescription: '一個知識庫',
    embeddingModelUUID: '嵌入模型',
    selectEmbeddingModel: '選擇嵌入模型',
    embeddingModelDescription: '用於向量化文字，可在模型設定頁面設定',
    updateTime: '更新於',
    cannotChangeEmbeddingModel: '知識庫建立後不可修改嵌入模型',
    updateKnowledgeBaseSuccess: '知識庫更新成功',
    updateKnowledgeBaseFailed: '知識庫更新失敗：',
    documentsTab: {
      name: '名稱',
      status: '狀態',
      noResults: '暫無文件',
      dragAndDrop: '拖曳文檔到此處或點擊上傳',
      uploading: '上傳中...',
      supportedFormats: '支援 PDF、Word、TXT、Markdown 等文檔格式',
      uploadSuccess: '文檔上傳成功！',
      uploadError: '文檔上傳失敗：',
      uploadingFile: '上傳文檔中...',
      fileSizeExceeded: '檔案大小超過 10MB 限制，請分割成較小的檔案後上傳',
      actions: '操作',
      delete: '刪除文檔',
      fileDeleteSuccess: '文檔刪除成功',
      fileDeleteFailed: '文檔刪除失敗：',
      processing: '處理中',
      completed: '完成',
      failed: '失敗',
      selectParser: '選擇解析器',
      builtInParser: '由知識引擎提供',
      noParserAvailable:
        '沒有解析器支援此檔案類型，請安裝支援該格式的解析器插件。',
      installParserHint: '前往插件市場安裝解析器 →',
      confirmUpload: '上傳',
      cancelUpload: '取消',
    },
    deleteKnowledgeBaseConfirmation:
      '您確定要刪除這個知識庫嗎？此知識庫下的所有文檔將被刪除。',
    retrieve: '檢索測試',
    retrieveTest: '檢索測試',
    query: '查詢',
    queryPlaceholder: '輸入查詢內容...',
    distance: '距離',
    content: '內容',
    fileName: '文檔名稱',
    noResults: '暫無結果',
    retrieveError: '檢索失敗：',
    basicInfo: '基本資訊',
    basicInfoDescription: '設定知識庫名稱、圖示和描述',
    engineSettings: '引擎設定',
    engineSettingsDescription: '所選知識引擎的設定',
    engineSettingsReadonly: '編輯模式下不可修改',
    engineSettingsInvalid: '引擎設定中存在無效項，請檢查必填欄位',
    retrievalSettingsInvalid: '檢索設定中存在無效項，請檢查必填欄位',
    retrievalSettings: '檢索設定',
    retrievalSettingsDescription: '設定從此知識庫檢索文件的方式',
    dangerZone: '危險區域',
    dangerZoneDescription: '不可逆的操作',
    deleteKbAction: '刪除此知識庫',
    deleteKbHint: '刪除後，此知識庫中的所有文件和資料將被永久移除。',
    noEnginesAvailable: '沒有可用的知識庫引擎',
    installEngineHint: '請先安裝「知識引擎」插件',
    unknownEngine: '未知引擎',
    knowledgeEngine: '知識引擎',
    knowledgeEngineRequired: '知識引擎為必填項',
    selectKnowledgeEngine: '選擇知識引擎',
    builtInEngine: '內建引擎',
    cannotChangeKnowledgeEngine: '建立後無法更改知識引擎',
    createKnowledgeBaseFailed: '知識庫建立失敗：',
    loadKnowledgeBaseFailed: '知識庫載入失敗：',
    deleteKnowledgeBaseFailed: '知識庫刪除失敗：',
    getKnowledgeBaseListError: '取得知識庫列表失敗：',
    embeddingModel: 'Embedding模型',
    embeddingModelRequired: '此引擎需要Embedding模型',
    addExternal: '添加外部知識庫',
    createExternalSuccess: '外部知識庫創建成功',
    updateExternalSuccess: '外部知識庫更新成功',
    deleteExternalSuccess: '外部知識庫刪除成功',
    retriever: '檢索器',
    selectRetriever: '選擇一個檢索器...',
    retrieverConfiguration: '檢索器配置',
    retrieverInstallInfo: '您可以從',
    retrieverMarketLink: '此處安裝知識檢索器插件',
    migration: {
      title: '知識庫遷移',
      description:
        '新版本已將知識庫重構為插件化架構，並統一內建知識庫和外部知識庫為「知識引擎」插件，需要對舊知識庫資料進行遷移。您的舊資料已自動備份在資料庫中。',
      detected:
        '共檢測到 {{total}} 個知識庫需要遷移（{{internal}} 個內建知識庫，{{external}} 個外部知識庫）。',
      startWithInstall: '自動安裝插件並遷移',
      startDataOnly: '僅遷移資料',
      dataOnlyHint:
        '「僅遷移資料」適合內網環境使用，請在遷移完成後自行安裝對應插件',
      dismiss: '丟棄原數據',
      running: '正在遷移知識庫，請稍候...',
      success: '知識庫遷移完成',
      error: '知識庫遷移失敗：',
      dismissError: '操作失敗',
      retry: '重試',
    },
  },
  register: {
    title: '初始化 LangBot 👋',
    description: '這是您首次啟動 LangBot',
    adminAccountNote: '您在此處初始化使用的帳號將作為管理員帳號',
    register: '註冊',
    initWithSpace: '透過 LangBot 帳號初始化',
    spaceRecommended: '推薦：使用官方提供的穩定模型 API 和雲服務',
    spaceInfoTip1: 'Space 提供統一的帳戶鑑權服務，不會上傳您的任何敏感資訊。',
    spaceInfoTip2:
      '使用 LangBot 帳號登入可使用 LangBot Models 等雲服務，您將會獲得一定的免費模型調用額度幫助您快速起步。',
    spaceInfoTip3:
      '登入方式不會影響其他功能，您在任何情況下都可以配置使用其他來源的模型。',
    registerLocal: '註冊本地帳號',
    registerWithPassword: '透過電子郵件密碼組合註冊',
    initSuccess: '初始化成功 請登入',
    initFailed: '初始化失敗：',
  },
  resetPassword: {
    title: '重設密碼 🔐',
    description: '輸入恢復金鑰和新的密碼來重設您的帳戶密碼',
    recoveryKey: '恢復金鑰',
    recoveryKeyDescription:
      '儲存在設定檔案`data/config.yaml`的`system.recovery_key`中',
    newPassword: '新密碼',
    enterRecoveryKey: '輸入恢復金鑰',
    enterNewPassword: '輸入新密碼',
    recoveryKeyRequired: '恢復金鑰不能為空',
    newPasswordRequired: '新密碼不能為空',
    resetPassword: '重設密碼',
    resetting: '重設中...',
    resetSuccess: '密碼重設成功，請登入',
    resetFailed: '密碼重設失敗，請檢查電子郵件和恢復金鑰是否正確',
    backToLogin: '返回登入',
  },
  embedding: {
    description: '管理嵌入模型，用於向量化文字',
    createModel: '建立嵌入模型',
    editModel: '編輯嵌入模型',
    getModelListError: '取得嵌入模型清單失敗：',
    embeddingModels: '嵌入模型',
    extraParametersDescription:
      '將在請求時附加到請求體中，如 encoding_format, dimensions 等',
  },
  llm: {
    llmModels: '對話模型',
    description: '管理 LLM 模型，用於對話訊息產生',
    extraParametersDescription:
      '將在請求時附加到請求體中，如 max_tokens, temperature, top_p 等',
  },
  version: {
    newVersionAvailable: '有新版本可用',
    viewUpdateGuide: '查看更新方式',
    noReleaseNotes: '暫無更新日誌',
  },
  account: {
    settings: '帳戶設定',
    settingsDescription: '管理你的密碼和關聯帳戶',
    setPassword: '設定密碼',
    passwordSetSuccess: '密碼設定成功',
    passwordStatus: '本地密碼',
    passwordSet: '已設定',
    passwordNotSet: '未設定',
    passwordSetDescription: '您已設定本地密碼，可使用電子郵件密碼登入',
    spaceStatus: 'LangBot 帳號',
    spaceBound: '已綁定',
    spaceNotBound: '未綁定',
    spaceBoundDescription: '已綁定 LangBot 帳號，可使用官方模型 API 和雲服務',
    bindSpace: '綁定 LangBot 帳號',
    bindSpaceDescription: '綁定後可使用官方模型 API 和雲服務',
    bindSpaceButton: '綁定',
    bindSpaceConfirmTitle: '確認綁定',
    bindSpaceConfirmDescription: '您即將把本地實例綁定到 LangBot 帳號',
    bindSpaceWarning:
      '綁定後，您的登入電子郵件將從 {{localEmail}} 更改為 LangBot 帳號的電子郵件。',
    bindSpaceSuccess: 'LangBot 帳號綁定成功',
    bindSpaceFailed: '綁定 LangBot 帳號失敗',
    bindSpaceInvalidState: '無效的綁定請求，請從帳戶設定重新發起',
    setPasswordHint: '設定密碼後可使用電子郵件密碼登入',
    spaceEmailMismatch: 'LangBot 帳號電子郵件與本實例帳號電子郵件不匹配',

    space_account_not_registeredTitle: 'Account not registered',
    space_account_not_registered:
      'No local account is registered for this LangBot Account email. Ask the Workspace owner for an invitation.',
    space_account_binding_requiredTitle: 'LangBot Account connection required',
    space_account_binding_required:
      'This local account must connect a LangBot Account from Account settings before using LangBot Account login.',
  },
  monitoring: {
    title: '儀表盤',
    description: '監控機器人活動、LLM調用和系統效能',
    overview: '概覽',
    totalMessages: '總訊息數',
    llmCallsCount: 'LLM調用',
    modelCallsCount: '模型調用',
    successRate: '成功率',
    activeSessions: '活躍會話',
    last24Hours: '最近24小時',
    filters: {
      title: '篩選',
      bot: '機器人',
      pipeline: '流水線',
      allBots: '全部機器人',
      selectBot: '選擇機器人',
      allPipelines: '全部流水線',
      selectPipeline: '選擇流水線',
      loading: '載入中...',
      timeRange: '時間範圍',
      customRange: '自訂範圍',
      from: '從',
      to: '到',
      apply: '套用',
      reset: '重置篩選',
      lastHour: '最近1小時',
      last6Hours: '最近6小時',
      last24Hours: '最近24小時',
      last7Days: '最近7天',
      last30Days: '最近30天',
    },
    tabs: {
      messages: '訊息記錄',
      llmCalls: 'LLM調用',
      embeddingCalls: 'Embedding調用',
      modelCalls: '模型調用',
      tokens: 'Token 監控',
      sessions: '會話分析',
      feedback: '使用者反饋',
      errors: '錯誤日誌',
    },
    messageList: {
      timestamp: '時間戳記',
      bot: '機器人',
      pipeline: '流水線',
      message: '訊息',
      sessionId: '會話ID',
      status: '狀態',
      actions: '操作',
      viewDetails: '查看詳情',
      copyId: '複製ID',
      noMessages: '未找到訊息',
      noMessagesDescription: '嘗試調整篩選條件或稍後查看',
      loading: '載入訊息中...',
      loadMore: '載入更多',
      autoRefresh: '自動重新整理',
      platform: '平台',
      user: '使用者',
      level: '級別',
      runner: '執行器',
      viewConversation: '顯示對話詳情',
      turns: '{{count}} 輪對話',
      userMessage: '使用者',
      noUserMessage: '未記錄使用者輸入',
      assistantMessage: '助手',
      assistantMessageCount: '助手 +{{count}}',
      noAssistantMessage: '未記錄助手回覆',
      messageCount: '訊息數',
      conversationTrace: '訊息鏈路',
      noLlmCalls: '未記錄模型呼叫',
      roles: {
        user: '使用者',
        assistant: '助手',
        message: '訊息',
      },
    },
    llmCalls: {
      title: 'LLM呼叫',
      model: '模型',
      tokens: '代幣數',
      duration: '持續時間',
      cost: '成本',
      noData: '未找到LLM調用記錄',
      inputTokens: '輸入代幣',
      outputTokens: '輸出代幣',
      totalTokens: '總代幣數',
      avgDuration: '平均持續時間',
      calls: '呼叫次數',
    },
    toolCalls: {
      title: '工具呼叫',
      totalCalls: '呼叫次數',
      duration: '工具耗時',
      errorCalls: '失敗次數',
      arguments: '參數',
      result: '結果',
      noToolCalls: '未記錄工具呼叫',
    },
    tokens: {
      totalTokens: '總 Token 數',
      inputTokens: '輸入 Token',
      outputTokens: '輸出 Token',
      avgPerCall: '平均每次呼叫',
      throughput: '吞吐量',
      tokensPerSec: 'Token/秒',
      errorCalls: '失敗呼叫',
      acrossCalls: '共 {{count}} 次呼叫',
      ofTotal: '共 {{count}} 次',
      usageOverTime: 'Token 用量趨勢',
      byModel: '按模型統計',
      model: '模型',
      calls: '呼叫次數',
      avgLatency: '平均延遲',
      noData: '所選時間範圍內暫無 Token 用量資料',
      loadError: '載入 Token 統計失敗：{{error}}',
      zeroTokenWarning:
        '偵測到 {{count}} 次成功呼叫未上報 Token 用量（記為 0）。這通常表示上游未返回 usage 資訊，請檢查模型供應商設定。',
      bucket: {
        hour: '按小時',
        day: '按天',
      },
    },
    embeddingCalls: {
      title: 'Embedding調用',
      model: '模型',
      tokens: '代幣數',
      duration: '持續時間',
      noData: '未找到Embedding調用記錄',
      promptTokens: '輸入代幣',
      totalTokens: '總代幣數',
      inputCount: '輸入數量',
      knowledgeBase: '知識庫',
      queryText: '查詢文字',
    },
    modelCalls: {
      title: '模型調用',
      llmModel: '對話模型',
      embeddingModel: '嵌入模型',
      embeddingCall: '嵌入調用',
      retrieveCall: '檢索調用',
      noData: '未找到模型調用記錄',
    },
    sessions: {
      sessionId: '會話ID',
      messageCount: '訊息數',
      duration: '持續時間',
      lastActivity: '最後活動',
      noSessions: '未找到會話',
      startTime: '開始時間',
      messageStats: '訊息統計',
      totalMessages: '總訊息數',
      successMessages: '成功',
      errorMessages: '失敗',
      llmStats: 'LLM統計',
      noData: '未找到會話',
    },
    errors: {
      errorType: '錯誤類型',
      errorMessage: '錯誤訊息',
      occurredAt: '發生時間',
      noErrors: '未找到錯誤',
      stackTrace: '堆疊追蹤',
      title: '錯誤',
    },
    feedback: {
      title: '使用者反饋',
      totalFeedback: '總反饋數',
      totalLikes: '按讚數',
      totalDislikes: '按倒讚數',
      satisfactionRate: '滿意度',
      like: '按讚',
      dislike: '按倒讚',
      noFeedback: '暫無反饋',
      noFeedbackDescription: '使用者反饋將在此顯示',
      feedbackList: '反饋列表',
      feedbackContent: '反饋內容',
      contextInfo: '上下文資訊',
      userId: '使用者ID',
      messageId: '訊息ID',
      streamId: '關聯提問ID',
      inaccurateReasons: '不準確原因',
      platform: '平台',
      exportFeedback: '匯出反饋',
      description:
        '告訴我們遇到的問題或想要的改進。提交時會附帶實例 UUID 和登入帳號，方便定位。',
      placeholder: '請描述你的建議、問題或重現步驟...',
      attachImage: '新增圖片',
      screenshot: '截圖',
      submit: '提交反饋',
      privacyHint: '請勿提交敏感金鑰、密碼或私人聊天內容。',
      contentRequired: '請先填寫反饋內容',
      imageOnly: '僅支援圖片附件',
      imageTooLarge: '單張圖片不能超過 1MB',
      tooManyImages: '最多新增 3 張圖片',
      screenshotFailed: '截圖失敗，請嘗試貼上或上傳圖片',
      submitSuccess: '反饋已提交，感謝！',
      submitFailed: '反饋提交失敗，請稍後再試',
      removeImage: '移除圖片',
    },
    messageDetails: {
      noData: '此查詢沒有LLM調用或錯誤記錄',
    },
    queries: {
      title: '查詢',
    },
    queryVariables: {
      title: '查詢變數',
    },
    trafficChart: {
      title: '流量概覽',
      messages: '訊息',
      llmCalls: 'LLM呼叫',
      noData: '暫無流量資料',
    },
    viewMonitoring: '查看日誌監控',
    refreshData: '重新整理資料',
    exportData: '匯出資料',
    export: {
      title: '匯出資料',
      exporting: '匯出中...',
      messages: '訊息記錄',
      llmCalls: 'LLM 呼叫',
      embeddingCalls: 'Embedding 呼叫',
      errors: '錯誤日誌',
      sessions: '會話記錄',
      feedback: '使用者回饋',
    },
    systemStatus: '系統狀態',
    pluginRuntime: '外掛執行時',
    boxRuntime: 'Box 執行時',
    connected: '已連線',
    disconnected: '未連線',
    disabled: '已停用',
    statusDetail: '狀態',
    pluginDisabled: '外掛系統已停用',
    boxDisabled:
      'Box 沙箱已在設定中停用——沙箱工具、技能新增/編輯與 stdio MCP 均無法使用',
    boxUnavailable:
      'Box 沙箱無法使用——沙箱工具、技能新增/編輯與 stdio MCP 均無法使用',
    boxRequiredHint:
      '此功能需要 Box 執行時。請在設定中啟用（box.enabled = true）並確認執行時連線正常。',
    boxBackend: '後端',
    boxProfile: '設定檔',
    boxSandboxes: '沙箱數',
    boxSessionCreated: '建立時間',
    boxSessionLastUsed: '最後使用',
  },
  settingsDialog: {
    title: '設定',
    nav: {
      models: '模型',
      api: 'API',
      storage: '儲存',
      account: '帳戶',

      workspace: 'Workspace',
    },
  },
  storageAnalysis: {
    title: '儲存分析',
    description: '查看儲存占用和可清理檔案',
    openDialog: '查看分析',
    dialogTitle: '儲存分析',
    generatedAt: '生成時間 {{time}}',
    loading: '載入中...',
    refresh: '重新整理',
    totalSize: '總占用',
    binaryStorage: '插件二進位儲存',
    uploadCleanup: '過期上傳檔案',
    logCleanup: '過期日誌',
    sections: '儲存分區',
    monitoringTables: '監控表',
    runtimeTasks: '執行任務',
    cleanupPolicy: '清理策略',
    uploadRetention: '上傳檔案保留',
    logRetention: '日誌保留',
    databaseType: '資料庫類型',
    days: '天',
    missing: '不存在',
    expiredUploads: '過期上傳檔案',
    expiredLogs: '過期日誌',
    noExpiredUploads: '暫無過期上傳檔案',
    noExpiredLogs: '暫無過期日誌',
    sectionNames: {
      database: '資料庫',
      logs: '日誌',
      storage: '上傳檔案',
      vector_store: '向量庫',
      plugins: '插件',
      mcp: 'MCP',
      temp: '暫存檔案',
    },
  },
  limitation: {
    maxBotsReached:
      '已達到機器人數量上限（{{max}}個）。請先刪除已有機器人後再建立新的。',
    maxPipelinesReached:
      '已達到流水線數量上限（{{max}}個）。請先刪除已有流水線後再建立新的。',
    maxExtensionsReached:
      '已達到擴充功能數量上限（{{max}}個）。請先刪除已有擴充功能後再新增。',
    quotaLoadingTooltip: '正在載入工作空間用量，請稍後再建立資源。',
    quotaCheckFailed: '無法確認目前工作空間額度，請重試。',
    createDisabledTooltip:
      '目前工作區的{{resource}}數量已達上限（{{max}}個）。請先刪除一個現有{{resource}}後再建立。',
  },
  wizard: {
    sidebarDescription: '透過引導步驟建立機器人',
    loading: '正在載入嚮導...',
    loadError: '載入嚮導資料失敗',
    skip: '跳過',
    skipConfirmMessage:
      '您之後可以在帳戶選單重新進入快速開始嚮導，或手動建立機器人。',
    skipConfirmOk: '確定',
    prev: '上一步',
    next: '下一步',
    finish: '建立並部署',
    confirmCreateBot: '確定，建立機器人',
    createSuccess: '流水線已建立並關聯到機器人！',
    botCreateSuccess: '機器人建立成功！',
    botSaveSuccess: '機器人配置已儲存並啟用！',
    createError: '建立資源失敗',
    skipSaveError: '儲存跳過狀態失敗，請重試。',
    completeSaveError: '儲存完成狀態失敗，請重試。',
    step: {
      platform: '平台接入',
      botConfig: '機器人配置',
      aiEngine: 'AI 引擎',
      done: '完成',
    },
    platform: {
      title: '選擇平台',
      description: '選擇機器人要接入的訊息平台。',
    },
    botConfig: {
      title: '配置機器人',
      description: '配置好機器人並確認其正常運作後再繼續。',
      saveBot: '儲存並啟用',
      resaveBot: '重新儲存配置',
      botSaved: '機器人配置已儲存並啟用，請查看日誌確認連接正常。',
      waitingForMessage: '機器人已啟用。請在 IM 中向機器人傳送一則訊息以繼續。',
      messageReceived: '機器人已成功收到 IM 訊息，可以進入下一步。',
      messageReceivedLocalAccountWarning:
        '機器人側已配置正常並成功收到 IM 訊息。目前未透過 LangBot Account 登入，模型呼叫可能報錯；可以進入下一步新增自己的模型。',
      pageBotTestPrompt:
        '頁面機器人已啟用。點擊右下角聊天氣泡並傳送一則訊息，驗證完整對話流程。',
      pageBotTestNotice: '僅供測試使用，請將程式碼嵌入真實的外部網頁。',
      webhookTestPrompt:
        '回呼 URL 已準備好。請在外部平台完成配置，然後向機器人傳送一則真實訊息。',
      httpTestPrompt:
        'HTTP 機器人已啟用。請在此傳送一則真實的入站訊息以驗證連接。',
      httpTestDefaultMessage: '你好，這是一則連接測試訊息。',
      sendHttpTest: '傳送測試訊息',
      httpTestAccepted: '測試訊息已被接受，稍後將顯示在日誌中。',
      httpTestMissingSecret: '請先填寫入站簽章密鑰並儲存配置。',
      httpTestFailed: '傳送測試訊息失敗：{{error}}',
      logsTitle: '機器人日誌',
      logsDescription: '監控機器人活動，確認平台連接是否正常運作。',
    },
    aiEngine: {
      title: '配置 AI 引擎',
      description: '選擇驅動機器人智慧的 AI 引擎。',
      optionalDescription: '這一步可選。選擇接下來要如何完善目前的 Agent。',
      externalTitle: '接入外部平台 Agent',
      externalDescription:
        '接入 Dify、n8n、Coze 等平台，並替換目前機器人的流水線。',
      ownModelTitle: '改成使用自己的模型',
      ownModelDescription:
        '新增模型供應商，自動掃描或手動填寫模型以快速完成引導。',
      ownModelSetupTitle: '新增你自己的模型',
      ownModelSetupDescription:
        '先新增模型供應商，儲存後會自動掃描，也可以手動填寫模型 ID。',
      addProviderTitle: '新增供應商',
      addProviderDescription: '填寫供應商和 API Key，用於連接並掃描模型。',
      selectModelTitle: '選擇模型',
      selectScannedModelTitle: '選擇模型',
      selectScannedModelDescription:
        '所選模型將成為新流水線的主要模型，機器人也會切換到該流水線。',
      scanModelMode: '自動掃描',
      manualModelMode: '手動新增',
      scanningModels: '正在掃描可用模型…',
      noScannedModels: '未找到可用的對話模型，請檢查供應商配置。',
      scanModelsFailed: '掃描模型失敗，請檢查請求 URL 和 API Key 後重試。',
      manualFallbackFailed: '自動掃描失敗，請填寫該供應商支援的模型 ID。',
      manualFallbackEmpty: '未掃描到模型，請填寫該供應商支援的模型 ID。',
      manualModelId: '模型 ID',
      manualModelIdPlaceholder: '例如：gpt-4o',
      manualModelIdDescription: '填寫模型請求中使用的 model 參數。',
      manualModelOptions: '模型能力（可選）',
      editProvider: '編輯供應商',
      rescanModels: '重新掃描模型',
      moreFeaturesTitle: '給目前的 Agent 配置更多功能',
      moreFeaturesDescription:
        '進入工作台，為剛剛自動產生的 Agent 新增工具、知識庫等能力',
      runnerDescription: '選擇外部 Agent 的 Runner 並完成連接配置。',
      backToChoices: '返回選項',
      createExternal: '建立並關聯',
      finishWithModel: '使用所選模型並完成',
      openWorkbench: '進入工作台',
    },
    config: {
      botInfo: '機器人資訊',
      botNamePlaceholder: '請輸入機器人名稱',
      botDescPlaceholder: '請輸入機器人描述（可選）',
      platformConfig: '{{platform}} 配置',
      aiConfig: '{{engine}} 配置',
    },
    done: {
      title: '一切就緒！',
      description:
        '機器人已建立並連接到 AI 流水線。你現在可以在工作台中管理它。',
      backToWorkbench: '返回工作台',
    },
  },
  addExtension: {
    installTitle: '安裝{{type}}',
    installConfirm: '確定要安裝{{type}}「{{name}}」嗎？',
    installInfoType: '類型',
    installInfoId: 'ID',
    installInfoVersion: '版本',
    installSuccess: '安裝成功',
    installStage: {
      mcpInstalling: '正在新增並連接 MCP 伺服器…',
      skillInstalling: '正在安裝技能…',
      installed: '完成',
    },
    manualAdd: '手動新增',
    uploadExtension: '拖拽或點擊上傳擴充套件',
    uploadHint: '支援 .zip（技能）和 .lbpkg（插件）檔案',
    orContinueWith: '或選擇以下操作',
    addMCPServerHint: '連接一個 MCP 工具伺服器擴充',
    installFromGithub: '從 GitHub 安裝',
    installFromGithubHint: '插件包或技能（SKILL.md）',
    githubUrlHelp: '貼上 GitHub 地址',
    githubUrlTooltip:
      '插件：貼上倉庫、Release 或 Tag 地址。技能：貼上技能目錄裡的 SKILL.md 頁面地址。',
    githubUrlPlaceholder: 'GitHub 倉庫、Release 或 SKILL.md 連結',
    githubUrlRequired: '請輸入 GitHub 地址',
    previewSkill: '預覽技能',
    noSkillPreviewFound: '未找到可匯入的技能',
    createSkill: '建立新的技能',
    createSkillHint: '從本地目錄匯入或手動建立',
    unsupportedFileType: '不支援的檔案類型，僅支援 .zip 和 .lbpkg 檔案',
  },
  errorPage: {
    unexpectedError: '出錯了',
    unexpectedErrorDescription: '發生了意外錯誤，請稍後重試。',
    notFound: '頁面未找到',
    notFoundDescription: '你訪問的頁面不存在或已被移動。',
    backendUnavailableStatus: '後端服務不可用',
    goBack: '返回上頁',
    backToHome: '返回首頁',
    backToLogin: '返回登入',
    retrying: '正在重試',
    retryFailed: '仍然無法連接後端，請確認服務已啟動後再重試。',
  },
  feishu: {
    createApp: '一鍵建立飛書應用',
    scanQRCode: '請使用飛書掃描以下 QR Code，授權後將自動建立應用並填寫憑證',
    waitingForScan: '等待掃描中',
    createSuccess: '應用建立成功！憑證已自動填入',
    createFailed: '建立失敗',
    connecting: '正在連線飛書服務...',
    expired: 'QR Code 已過期，請重試',
    denied: '使用者已拒絕授權',
    connectionLost: '連線已斷開，請重試',
    reconnecting: '正在重新連線...',
    retry: '重試',
  },
  weixin: {
    scanLogin: '掃碼登入微信',
    scanQRCode: '請使用微信掃描以下 QR Code，授權後將自動登入並填寫令牌',
    loginSuccess: '登入成功！令牌已自動填入',
    loginFailed: '登入失敗',
    connecting: '正在連接微信服務...',
    waitingForScan: '等待掃碼中',
    retry: '重試',
  },
  dingtalk: {
    createApp: '一鍵建立釘釘應用',
    scanQRCode: '請使用釘釘掃描以下 QR Code，授權後將自動建立應用並填寫憑證',
    waitingForScan: '等待掃碼中',
    createSuccess: '應用建立成功！憑證已自動填入',
    createFailed: '建立失敗',
    connecting: '正在連線釘釘服務...',
    retry: '重試',
    robotCodeNote:
      '機器人代碼無法自動取得，請前往釘釘開發者後台 > 機器人設定中手動複製。識圖、上傳檔案等功能需要填寫此欄位。',
  },
  wecombot: {
    createBot: '一鍵建立企業微信機器人',
    scanQRCode:
      '請使用企業微信掃描以下 QR Code，授權後將自動建立機器人並填寫憑證',
    waitingForScan: '等待掃碼中',
    createSuccess: '機器人建立成功！憑證已自動填入',
    createFailed: '建立失敗',
    connecting: '正在連線企業微信服務...',
    retry: '重試',
    robotNameNote: '機器人名稱無法自動取得，請手動填寫。',
  },
  qqofficial: {
    createBinding: '一鍵掃碼綁定 QQ 機器人',
    scanQRCode: '請使用手機 QQ 掃描以下 QR Code，在「QQ 機器人助手」中授權綁定',
    waitingForScan: '等待掃碼中',
    bindSuccess: '綁定成功！AppID 與密鑰已自動填入',
    bindFailed: '綁定失敗',
    connecting: '正在連線 QQ 服務...',
    retry: '重試',
    tokenNote: 'Token 欄位目前介面卡未使用，留空即可。',
    boundBy: '由 QQ 用戶 {{openid}} 掃碼綁定',
  },
  pluginPages: {
    selectFromSidebar: '從側邊欄選擇一個插件頁面',
    invalidPage: '無效的插件頁面',
  },
  skills: {
    title: '技能',
    description: '創建和管理可在對話中激活的技能',
    createSkill: '創建技能',
    createSkillDescription: '匯入本機目錄或手動填寫資訊建立',
    editSkill: '編輯技能',
    getSkillListError: '獲取技能列表失敗：',
    skillName: '技能名稱',
    displayName: '技能名稱',
    displayNamePlaceholder: '顯示名稱',
    skillSlug: '目錄名稱',
    skillSlugPlaceholder: 'english-name-only',
    skillSlugHelp: '用作技能目錄名，僅支援英文字母、數字、連字符和底線。',
    skillDescription: '技能描述',
    skillInstructions: '指令內容',
    saveSuccess: '儲存成功',
    saveError: '儲存失敗：',
    createSuccess: '創建成功',
    createError: '創建失敗：',
    deleteSuccess: '刪除成功',
    deleteError: '刪除失敗：',
    deleteConfirmation: '你確定要刪除這個技能嗎？',
    delete: '刪除技能',
    skillNameRequired: '技能名稱不能為空',
    skillDescriptionRequired: '技能描述不能為空',
    packageRootRequired: '技能目錄不能為空',
    scan: '掃描',
    scanSuccess: '目錄掃描成功',
    scanError: '掃描目錄失敗：',
    noSkills: '暫未配置任何技能',
    preview: '預覽',
    previewInstructions: 'SKILL.md 內容預覽',
    instructionsPlaceholder: '使用 Markdown 格式輸入技能指令...',
    descriptionPlaceholder: '簡短描述此技能的功能',
    packageRoot: '技能目錄',
    packageRootHelp: '非必填。僅在導入已有技能目錄時需要填寫。',
    importLocalDirectory: '匯入本地技能目錄',
    chooseSkillDirectory: '選擇 SKILL.md 所在目錄',
    chooseAnotherDirectory: '重新選擇目錄',
    importingDirectory: '正在預覽...',
    clearDirectoryPreview: '清除已選目錄',
    noSkillMdInDirectory: '選擇的目錄中沒有找到 SKILL.md',
    multipleSkillMdInDirectory:
      '選擇的目錄中包含多個 SKILL.md，請直接選擇單個技能目錄。',
    importDirectoryError: '匯入目錄失敗：',
    advancedSettings: '進階設定',
    searchSkills: '搜尋技能...',
    selectSkills: '選擇技能',
    builtin: '內建',
    addSkill: '添加技能',
    importFromGithub: '從 GitHub 安裝技能',
    createManually: '手動創建',
    uploadZip: '上傳 ZIP 包',
    uploadZipOnly: '僅支援 .zip 技能包',
    installSuccess: '技能安裝成功',
    installError: '安裝技能失敗：',
    enterRepoUrl: '輸入 GitHub 倉庫地址',
    repoUrlPlaceholder: '例如 https://github.com/owner/repo',
    fetchingReleases: '正在獲取發布版本...',
    selectRelease: '選擇發布版本',
    noReleasesFound: '未找到發布版本',
    fetchReleasesError: '獲取發布版本失敗：',
    selectAsset: '選擇要安裝的檔案',
    sourceArchive: '源碼包 (zip)',
    noAssetsFound: '此版本暫無可安裝的檔案',
    fetchAssetsError: '獲取檔案列表失敗：',
    backToReleases: '返回版本列表',
    backToRepoUrl: '返回倉庫地址',
    selectFromSidebar: '從側邊欄選擇一個技能',
    backToAssets: '返回檔案列表',
    releaseTag: '標籤：{{tag}}',
    publishedAt: '發布時間：{{date}}',
    prerelease: '預發布',
    assetSize: '大小：{{size}}',
    confirmInstall: '確認安裝',
    installing: '正在安裝技能...',
    loading: '載入中...',
    previewLoadError: '載入預覽失敗',
    dangerZone: '危險區域',
    dangerZoneDescription: '不可逆且具破壞性的操作',
    files: '檔案',
    noFiles: '未找到檔案',
    loadFilesError: '載入檔案失敗：',
    readFileError: '讀取檔案失敗：',
    saveFile: '儲存檔案',
    saveFileSuccess: '檔案儲存成功',
    saveFileError: '檔案儲存失敗：',
  },

  workspace: {
    title: 'Workspace',
    description: 'Manage members, roles, and invitation links',
    selectTitle: 'Choose a Workspace',
    selectDescription: 'Select where you want to continue in LangBot.',
    selectionLoadFailed:
      'Your Workspaces could not be loaded. Please try again.',
    switchWorkspace: 'Switch Workspace',
    settings: 'Workspace Settings',
    currentPlan: 'Current plan',
    planUnavailable: 'Unavailable',
    upgradePlan: 'Change or upgrade plan',
    ossSingletonDescription:
      'This self-hosted instance has one Workspace and can include multiple users.',
    cloudManagedDescription:
      'This Workspace is hosted by LangBot Cloud. Manage members here; billing opens in Cloud.',
    loadFailed: 'Failed to load Workspace information',
    members: 'Members',
    you: 'You',
    inviteMember: 'Invite a member',
    inviteDescription:
      'Create a one-time link to add another user to this Workspace.',
    emailPlaceholder: 'member@example.com',
    createInvitation: 'Create invitation',
    invitationCreated: 'Invitation created',
    delivery: {
      sent: 'Invitation sent',
      link_only: 'Invitation link created',
      failed: 'Invitation link created, but email could not be sent',
    },
    invitationCreateFailed: 'Failed to create invitation',
    oneTimeLinkWarning: 'Copy this link now. It is shown only once.',
    copyInvitation: 'Copy invitation link',
    invitationCopied: 'Invitation link copied',
    pendingInvitations: 'Pending invitations',
    expiresAt: 'Expires {{date}}',
    revokeInvitation: 'Revoke invitation',
    invitationRevoked: 'Invitation revoked',
    invitationRevokeFailed: 'Failed to revoke invitation',
    acceptInvitation: 'Accept invitation',
    invitedToWorkspace: 'You were invited to {{workspace}}',
    checkingInvitation: 'Checking this invitation...',
    invitationMissing: 'This invitation link is missing required information.',
    invitationExpired: 'This invitation has expired.',
    invitationAlreadyRevoked: 'This invitation was revoked.',
    invitationAlreadyUsed: 'This invitation was already used.',
    invitationInvalid: 'This invitation is invalid or no longer available.',
    invitationAccepted: 'Invitation accepted',
    invitationAcceptFailed: 'Failed to accept invitation',
    invitationEmailMismatch:
      'This invitation belongs to a different email address.',
    existingAccountLoginRequired:
      'An account already exists for this email. Sign in to continue.',
    acceptAsCurrentAccount: 'Accept with current account',
    authenticatedInvitationNotice:
      'Sign out first, then sign in with the invited account. Your invitation will be preserved.',
    logoutAndReturn: 'Sign out and return to this invitation',
    switchAccount: 'Switch account',
    registerAndAccept: 'Create account and accept',
    alreadyHaveAccount: 'I already have an account',
    confirmPassword: 'Confirm password',
    passwordMinimum: 'Password must contain at least 8 characters.',
    passwordMismatch: 'The passwords do not match.',
    backToLogin: 'Back to sign in',
    memberUpdated: 'Member role updated',
    memberUpdateFailed: 'Failed to update member role',
    removeMember: 'Remove member',
    removeMemberConfirm: 'Remove this member from the Workspace?',
    memberRemoved: 'Member removed',
    memberRemoveFailed: 'Failed to remove member',
    transferOwnership: 'Transfer ownership',
    types: {
      personal: 'Personal',
      team: 'Team',
    },
    roles: {
      owner: 'Owner',
      admin: 'Admin',
      developer: 'Developer',
      operator: 'Operator',
      viewer: 'Viewer',
    },
  },
};

export default zhHant;
