const thTH = {
  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',
    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/en/docs/data-policy',
    loading: 'กำลังโหลด...',
    fieldRequired: 'ช่องนี้จำเป็นต้องกรอก',
    or: 'หรือ',
    loginWithSpace: 'เข้าสู่ระบบด้วยบัญชี LangBot',
    spaceLoginRecommended:
      'แนะนำ: ใช้ API โมเดลที่เสถียรอย่างเป็นทางการและบริการคลาวด์',
    loginLocal: 'เข้าสู่ระบบด้วยบัญชีท้องถิ่น',
    loginWithPassword: 'เข้าสู่ระบบด้วยรหัสผ่าน',
    spaceLoginTitle: 'เข้าสู่ระบบด้วยบัญชี LangBot',
    spaceLoginDescription:
      'สแกน QR code หรือเข้าชมลิงก์ด้านล่างเพื่อยืนยันสิทธิ์',
    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 key และ 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 ช่วยให้ระบบภายนอกสามารถเข้าถึง API บริการของ LangBot ได้',
    mcpTab: 'MCP',
    mcpHint:
      'LangBot exposes an MCP (Model Context Protocol) server so AI agents can manage this instance. It uses the same API keys as the Service API.',
    mcpEndpoint: 'MCP Endpoint',
    mcpAuthTitle: 'Authentication',
    mcpAuthDesc:
      'Authenticate with any API key from the API Keys tab, sent as a header:',
    mcpGlobalKeyNote:
      'You can also set a global API key in config.yaml (api.global_api_key) to use without logging in.',
    mcpClientConfigTitle: 'Example MCP client config',
    webhooks: 'Webhooks',
    createWebhook: 'สร้าง Webhook',
    webhookName: 'ชื่อ Webhook',
    webhookUrl: 'URL ของ Webhook',
    webhookDescription: 'คำอธิบาย Webhook',
    webhookEnabled: 'เปิดใช้งาน',
    webhookCreated: 'สร้าง Webhook สำเร็จ',
    webhookDeleted: 'ลบ Webhook สำเร็จ',
    webhookDeleteConfirm: 'คุณแน่ใจหรือไม่ว่าต้องการลบ Webhook นี้?',
    webhookNameRequired: 'กรุณากรอกชื่อ Webhook',
    webhookUrlRequired: 'กรุณากรอก URL ของ Webhook',
    noWebhooks: 'ยังไม่มี Webhook ที่กำหนดค่า',
    webhookHint:
      'Webhooks ช่วยให้ LangBot สามารถส่งเหตุการณ์ข้อความส่วนตัวและกลุ่มไปยังระบบภายนอกได้',
    actions: 'การดำเนินการ',
    apiKeyCreatedMessage:
      'กรุณาคัดลอกคีย์ API นี้ หากปุ่มไม่ทำงาน กรุณาคัดลอกด้วยตนเอง',
    none: 'ไม่มี',
    more: 'เพิ่มเติม ({{count}})',
    less: 'น้อยลง',
    noItems: 'ไม่มีรายการ',

    apiKeyStoredSecurely: 'Secret shown only when created',
  },
  notFound: {
    title: 'ไม่พบหน้า',
    description: 'หน้าที่คุณกำลังมองหาไม่มีอยู่',
    back: 'ย้อนกลับ',
    home: 'หน้าแรก',
    help: 'ขอความช่วยเหลือ',
  },
  models: {
    title: 'โมเดล',
    description: 'กำหนดค่าและจัดการโมเดลที่สามารถใช้ใน Pipeline',
    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: 'โมเดล LLM',
    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: 'เพิ่มโมเดล LLM',
    addEmbeddingModel: 'เพิ่มโมเดล Embedding',
    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: 'Embedding',
    rerank: 'จัดลำดับใหม่',
    rerankUrlTooltip:
      'URL เต็มสำหรับ endpoint จัดลำดับใหม่ (เช่น: 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:
      'สร้างและจัดการ Bot ซึ่งเป็นจุดเชื่อมต่อของ LangBot กับแพลตฟอร์มต่างๆ',
    createBot: 'สร้าง Bot',
    selectFromSidebar: 'เลือก Bot จากแถบด้านข้าง',
    editBot: 'แก้ไข Bot',
    getBotListError: 'ไม่สามารถดึงรายการ Bot ได้: ',
    botName: 'ชื่อ Bot',
    botDescription: 'คำอธิบาย Bot',
    botNameRequired: 'ชื่อ Bot ต้องไม่ว่างเปล่า',
    botDescriptionRequired: 'คำอธิบาย Bot ต้องไม่ว่างเปล่า',
    adapterRequired: 'อะแดปเตอร์ต้องไม่ว่างเปล่า',
    defaultDescription: 'Bot หนึ่งตัว',
    getBotConfigError: 'ไม่สามารถดึงการกำหนดค่า Bot ได้: ',
    saveSuccess: 'บันทึกสำเร็จ',
    saveError: 'บันทึกล้มเหลว: ',
    createSuccess: 'สร้างสำเร็จ กรุณาเปิดใช้งานหรือแก้ไข Pipeline ที่ผูกไว้',
    createError: 'สร้างล้มเหลว: ',
    deleteSuccess: 'ลบสำเร็จ',
    deleteError: 'ลบล้มเหลว: ',
    deleteConfirmation: 'คุณแน่ใจหรือไม่ว่าต้องการลบ Bot นี้?',
    platformAdapter: 'การเลือกแพลตฟอร์ม/อะแดปเตอร์',
    selectAdapter: 'เลือกอะแดปเตอร์',
    adapterConfig: 'การกำหนดค่าอะแดปเตอร์',
    viewAdapterDocs: 'ดูเอกสาร',
    bindPipeline: 'ผูก Pipeline',
    selectPipeline: 'เลือก Pipeline',
    selectBot: 'เลือก Bot',
    botLogTitle: 'บันทึก Bot',
    enableAutoRefresh: 'เปิดการรีเฟรชอัตโนมัติ',
    session: 'เซสชัน',
    yesterday: 'เมื่อวาน',
    earlier: 'ก่อนหน้า',
    dateFormat: '{{day}}/{{month}}',
    setBotEnableError: 'ไม่สามารถตั้งค่าสถานะเปิดใช้งาน Bot ได้',
    log: 'บันทึก',
    configuration: 'การกำหนดค่า',
    logs: 'บันทึก',
    basicInfo: 'ข้อมูลพื้นฐาน',
    basicInfoDescription: 'ตั้งชื่อและคำอธิบาย Bot',
    routingConnection: 'การกำหนดเส้นทางและการเชื่อมต่อ',
    routingConnectionDescription:
      'ผูก Pipeline ที่ประมวลผลข้อความสำหรับ Bot นี้',
    routingRules: 'กฎการกำหนดเส้นทางตามเงื่อนไข',
    routingRulesDescription:
      'กฎจะถูกประเมินตามลำดับ การจับคู่แรกจะกำหนดเส้นทางไปยัง Pipeline ที่เกี่ยวข้อง หากไม่ตรงกันจะใช้ Pipeline เริ่มต้นด้านบน',
    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: 'ลบ Bot นี้',
    deleteBotHint:
      'เมื่อลบแล้ว การกำหนดค่าที่เกี่ยวข้องทั้งหมดจะถูกลบอย่างถาวร',
    webhookUrl: 'URL เรียกกลับ Webhook',
    webhookUrlCopied: 'คัดลอก URL Webhook แล้ว',
    webhookUrlHint:
      'คลิกที่ช่องกรอกเพื่อเลือกทั้งหมด จากนั้นกด Ctrl+C (Mac: Cmd+C) เพื่อคัดลอก หรือคลิกปุ่ม',
    webhookUrlHintEither:
      'ใช้ URL ใดก็ได้จากสอง URL ด้านบนในการกำหนดค่าแพลตฟอร์มของคุณ',
    webhookSaasHint:
      'Webhook ต้องใช้โดเมนที่เข้าถึงได้จากภายนอก LangBot Cloud มี endpoint สาธารณะพร้อมใช้งานสำหรับ Bot ของคุณ',
    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: 'Admins',
      description:
        "Launchers (person/group IDs) that have admin privilege for this bot's commands",
      addAdmin: 'Add Admin',
      launcherType: 'Type',
      launcherId: 'ID',
      typePerson: 'Person',
      typeGroup: 'Group',
      placeholderId: 'User or group ID',
      addSuccess: 'Admin added',
      addError: 'Failed to add admin: ',
      deleteSuccess: 'Admin removed',
      deleteError: 'Failed to remove admin: ',
      noAdmins: 'No admins configured',
      setAdminTitle: 'Set as admin',
      removeAdminTitle: 'Remove admin',
      adminBadge: 'Admin',
      configureAdmins: 'Manage Admins',
    },
  },
  plugins: {
    title: 'ส่วนขยาย',
    description:
      'ติดตั้งและกำหนดค่าปลั๊กอินเพื่อขยายฟังก์ชันการทำงาน กรุณาเลือกใน Pipeline',
    createPlugin: 'สร้างปลั๊กอิน',
    editPlugin: 'แก้ไขปลั๊กอิน',
    installed: 'ติดตั้งแล้ว',
    marketplace: 'ตลาดปลั๊กอิน',
    arrange: 'เรียงลำดับปลั๊กอิน',
    install: 'ติดตั้ง',
    installPlugin: 'ติดตั้งปลั๊กอิน',
    newPlugin: 'สร้างปลั๊กอินใหม่',
    onlySupportGithub: 'ปัจจุบันรองรับเฉพาะการติดตั้งจาก GitHub',
    enterGithubLink: 'กรอกลิงก์ GitHub ของปลั๊กอิน',
    installing: 'กำลังติดตั้งปลั๊กอิน...',
    installSuccess: 'ติดตั้งปลั๊กอินสำเร็จ',
    installFailed: 'ติดตั้งปลั๊กอินล้มเหลว:',
    searchPlugin: 'ค้นหาปลั๊กอิน',
    sortBy: 'เรียงตาม',
    mostStars: 'ดาวมากที่สุด',
    recentlyAdded: 'เพิ่มล่าสุด',
    recentlyUpdated: 'อัปเดตล่าสุด',
    noMatchingPlugins: 'ไม่พบปลั๊กอินที่ตรงกัน',
    loading: 'กำลังโหลด...',
    getPluginListError: 'ไม่สามารถดึงรายการปลั๊กอินได้:',
    noPluginInstalled: 'ยังไม่มีปลั๊กอินที่ติดตั้ง',
    noExtensionInstalled: 'ยังไม่มีส่วนขยายที่ติดตั้ง',
    loadingExtensions: 'กำลังโหลดส่วนขยาย...',
    groupByType: 'จัดกลุ่มตามรูปแบบ',
    pluginConfig: 'การกำหนดค่าปลั๊กอิน',
    pluginSort: 'เรียงลำดับปลั๊กอิน',
    pluginSortDescription:
      'ลำดับปลั๊กอินมีผลต่อลำดับการประมวลผลภายในเหตุการณ์เดียวกัน กรุณาลากการ์ดปลั๊กอินเพื่อเรียงลำดับ',
    pluginSortSuccess: 'เรียงลำดับปลั๊กอินสำเร็จ',
    pluginSortError: 'เรียงลำดับปลั๊กอินล้มเหลว: ',
    pluginNoConfig: 'ปลั๊กอินนี้ไม่มีรายการกำหนดค่า',
    systemDisabled: 'ระบบปลั๊กอินปิดอยู่',
    systemDisabledDesc:
      'ระบบปลั๊กอินไม่ได้เปิดใช้งาน กรุณาแก้ไขการกำหนดค่าตามเอกสาร',
    connectionError: 'ข้อผิดพลาดการเชื่อมต่อระบบปลั๊กอิน',
    connectionErrorDesc:
      'กรุณาตรวจสอบการกำหนดค่าระบบปลั๊กอินหรือติดต่อผู้ดูแลระบบ',
    errorDetails: 'รายละเอียดข้อผิดพลาด',
    loadingStatus: 'กำลังตรวจสอบสถานะระบบปลั๊กอิน...',
    failedToGetStatus: 'ไม่สามารถดึงสถานะระบบปลั๊กอินได้',
    pluginSystemNotReady: 'ระบบปลั๊กอินยังไม่พร้อม ไม่สามารถดำเนินการนี้ได้',
    debugInfo: 'ข้อมูลดีบัก',
    debugInfoTitle: 'ข้อมูลดีบักปลั๊กอิน',
    debugUrl: 'URL ดีบัก',
    debugKey: 'คีย์ดีบัก',
    debugKeyExpires: 'หมุนเวียนเวลา {{time}}; แต่ละ Workspace ใช้คีย์ต่างกัน',
    noDebugKey: '(ไม่ได้ตั้งค่า)',
    debugKeyDisabled: 'ข้อมูลรับรองการดีบักไม่พร้อมใช้งานชั่วคราว',
    boxStatusTitle: 'Box Runtime',
    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: 'เพิ่มไฟล์',
    },
    installFromGithub: 'จาก GitHub',
    enterRepoUrl: 'กรอก URL ของ GitHub repository',
    repoUrlPlaceholder: 'เช่น https://github.com/owner/repo',
    fetchingReleases: 'กำลังดึงรีลีส...',
    selectRelease: 'เลือกรีลีส',
    noReleasesFound: 'ไม่พบรีลีส',
    fetchReleasesError: 'ไม่สามารถดึงรีลีสได้: ',
    selectAsset: 'เลือกไฟล์เพื่อติดตั้ง',
    noAssetsFound: 'ไม่มีไฟล์ .lbpkg ในรีลีสนี้',
    fetchAssetsError: 'ไม่สามารถดึงไฟล์แนบได้: ',
    backToReleases: 'กลับไปรีลีส',
    backToRepoUrl: 'กลับไป URL ของ repository',
    backToAssets: 'กลับไปไฟล์แนบ',
    releaseTag: 'แท็ก: {{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: 'ติดตั้ง',
    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: '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: 'ขอปลั๊กอิน',
    viewDetails: 'ดูรายละเอียด',
    deprecated: 'เลิกใช้แล้ว',
    deprecatedTooltip: 'กรุณาติดตั้งปลั๊กอินเครื่องมือความรู้ที่เกี่ยวข้อง',
    filters: {
      allFormats: 'ทุกประเภท',
      more: 'เพิ่มเติม',
      advancedTitle: 'ตัวกรองขั้นสูง',
      advancedDescription: 'กรองตามประเภทส่วนขยาย',
      technicalType: 'ประเภทเทคนิค',
    },
    allExtensions: 'ส่วนขยายทั้งหมด',
    tags: {
      filterByTags: 'กรองตามแท็ก',
      selected: 'เลือกแล้ว',
      selectTags: 'เลือกแท็ก',
      clearAll: 'ล้างทั้งหมด',
      noTags: 'ไม่มีแท็กที่พร้อมใช้งาน',
    },
    installCard: 'ติดตั้ง {{name}}',
  },
  mcp: {
    title: 'MCP',
    createServer: 'เพิ่มเซิร์ฟเวอร์ MCP',
    addMCPServer: 'เพิ่มเซิร์ฟเวอร์ MCP',
    editServer: 'แก้ไขเซิร์ฟเวอร์ MCP',
    deleteServer: 'ลบเซิร์ฟเวอร์ MCP',
    confirmDeleteServer: 'คุณแน่ใจหรือไม่ว่าต้องการลบเซิร์ฟเวอร์ MCP นี้?',
    confirmDeleteTitle: 'ลบเซิร์ฟเวอร์ MCP',
    getServerListError: 'ไม่สามารถดึงรายการเซิร์ฟเวอร์ MCP ได้: ',
    serverName: 'ชื่อเซิร์ฟเวอร์',
    serverMode: 'โหมดการเชื่อมต่อ',
    selectMode: 'เลือกโหมด',
    stdio: 'โหมด Stdio',
    sse: 'โหมด SSE',
    http: 'โหมด HTTP',
    local: 'ภายในเครื่อง (Stdio)',
    remote: 'ระยะไกล',
    localModeDescription:
      'รันเซิร์ฟเวอร์ MCP ภายในเครื่องเป็นโปรเซสย่อยภายในแซนด์บ็อกซ์ Box',
    remoteModeDescription:
      'เชื่อมต่อกับเซิร์ฟเวอร์ MCP ระยะไกลด้วย URL ระบบจะตรวจจับการขนส่ง (Streamable HTTP หรือ SSE) โดยอัตโนมัติ',
    remoteUrlPlaceholder: 'https://example.com/mcp',
    remoteUrlDescription:
      'วาง URL ของเซิร์ฟเวอร์ 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:
      'MCP server แบบ stdio ต้องใช้ Sandbox Box ซึ่งถูกปิดใช้งานในการตั้งค่า (box.enabled = false)',
    boxUnavailableStdioRefused:
      'MCP server แบบ stdio ต้องใช้ Sandbox Box ซึ่งขณะนี้เชื่อมต่อไม่ได้',
    boxStdioRefusedSuggestion:
      'กรุณาเปิดใช้งาน Box (box.enabled = true) และตรวจสอบว่ารันไทม์ทำงานปกติ หรือเปลี่ยน MCP server เป็นโหมด http/sse',
    boxRequired: 'ต้องใช้ Box',
    disabledByPolicy: 'ถูกปิดใช้งานโดยนโยบาย',
    stdioDisabledByPolicy:
      'การติดตั้งใช้งานนี้ปิด Stdio MCP อยู่ โปรดใช้เซิร์ฟเวอร์ MCP แบบระยะไกล',
    stdioBlockedByBoxToast:
      'ไม่สามารถบันทึก MCP โหมด stdio เนื่องจาก Sandbox Box ถูกปิดใช้งานหรือไม่พร้อมใช้งาน กรุณาเปิดใช้งาน Box หรือเลือกโหมด http/sse',
    toolsFound: 'เครื่องมือ',
    unknownError: 'ข้อผิดพลาดที่ไม่ทราบสาเหตุ',
    noToolsFound: 'ไม่พบเครื่องมือ',
    noResourcesFound: 'ไม่พบทรัพยากร',
    tabTools: 'เครื่องมือ',
    tabResources: 'ทรัพยากร',
    tabDocs: 'เอกสาร',
    tabLogs: 'บันทึก',
    logsLevelAll: 'ทุกระดับ',
    logsRefresh: 'รีเฟรช',
    logsAutoRefresh: 'รีเฟรชอัตโนมัติ',
    logsEmpty: 'ยังไม่มีบันทึก บันทึกการทำงานของ MCP Server จะแสดงที่นี่',
    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: 'ตัดเนื้อหาตามขีดจำกัดไบต์หรือโทเคน',
    resourceReadFailed: 'ไม่สามารถอ่านเนื้อหาทรัพยากรได้',
    statusConnected: 'เชื่อมต่อแล้ว',
    statusDisconnected: 'ไม่ได้เชื่อมต่อ',
    statusError: 'ข้อผิดพลาดการเชื่อมต่อ',
    statusDisabled: 'ปิดใช้งาน',
    loading: 'กำลังโหลด...',
    starCount: 'ดาว: {{count}}',
    install: 'ติดตั้ง',
    installFromGithub: 'ติดตั้งเซิร์ฟเวอร์ MCP จาก GitHub',
    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:
      'Pipeline กำหนดกระบวนการประมวลผลเหตุการณ์ข้อความ ใช้เพื่อผูกกับ Bot',
    createPipeline: 'สร้าง Pipeline',
    selectFromSidebar: 'เลือก Pipeline จากแถบด้านข้าง',
    editPipeline: 'แก้ไข Pipeline',
    chat: 'แชท',
    configuration: 'การกำหนดค่า',
    debugChat: 'แชทดีบัก',
    getPipelineListError: 'ไม่สามารถดึงรายการ Pipeline ได้: ',
    daysAgo: 'วันก่อน',
    today: 'วันนี้',
    updateTime: 'อัปเดตเมื่อ ',
    defaultBadge: 'ค่าเริ่มต้น',
    sortBy: 'เรียงตาม',
    newestCreated: 'สร้างล่าสุด',
    earliestCreated: 'สร้างเก่าสุด',
    recentlyEdited: 'แก้ไขล่าสุด',
    earliestEdited: 'แก้ไขเก่าสุด',
    basicInfo: 'ข้อมูลพื้นฐาน',
    basicInfoDescription: 'ตั้งชื่อ ไอคอน และคำอธิบาย Pipeline',
    aiCapabilities: 'AI',
    triggerConditions: 'ทริกเกอร์',
    safetyControls: 'ความปลอดภัย',
    outputProcessing: 'เอาต์พุต',
    nameRequired: 'ชื่อต้องไม่ว่างเปล่า',
    descriptionRequired: 'คำอธิบายต้องไม่ว่างเปล่า',
    createSuccess: 'สร้างสำเร็จ กรุณาแก้ไขพารามิเตอร์ Pipeline',
    createError: 'สร้างล้มเหลว: ',
    saveSuccess: 'บันทึกสำเร็จ',
    saveError: 'บันทึกล้มเหลว: ',
    copySuffix: ' สำเนา',
    deleteConfirmation:
      'คุณแน่ใจหรือไม่ว่าต้องการลบ Pipeline นี้? Bot ที่ผูกกับ Pipeline นี้จะไม่ทำงาน',
    defaultPipelineCannotDelete: 'ไม่สามารถลบ Pipeline ค่าเริ่มต้นได้',
    deleteSuccess: 'ลบสำเร็จ',
    deleteError: 'ลบล้มเหลว: ',
    copyConfirmTitle: 'ยืนยันการคัดลอก',
    copyConfirmation:
      'คุณแน่ใจหรือไม่ว่าต้องการคัดลอก Pipeline นี้? การดำเนินการนี้จะสร้าง Pipeline ใหม่พร้อมการกำหนดค่าทั้งหมด',
    unsavedChanges: 'คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก',
    dangerZone: 'โซนอันตราย',
    dangerZoneDescription: 'การดำเนินการที่ย้อนกลับไม่ได้และเป็นอันตราย',
    deletePipelineAction: 'ลบ Pipeline นี้',
    deletePipelineHint: 'เมื่อลบแล้ว Bot ที่ผูกกับ Pipeline นี้จะหยุดทำงาน',
    copyPipelineAction: 'คัดลอก Pipeline นี้',
    copyPipelineHint: 'สร้าง Pipeline ใหม่พร้อมการกำหนดค่าทั้งหมดที่คัดลอกมา',
    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:
        'ส่วนนี้ใช้ควบคุมว่า Pipeline ผูกกับเซิร์ฟเวอร์ MCP ใดเท่านั้น ส่วนเครื่องมือและทรัพยากร MCP รายตัวให้เลือกใน AI Feature > Local Agent',
      enableAllMCPServersTooltip:
        'เมื่อเปิดใช้ เซิร์ฟเวอร์ MCP ที่ตั้งค่าและเปิดใช้งานทั้งหมดจะเป็นตัวเลือกสำหรับเครื่องมือและทรัพยากร MCP ใน AI Feature',
    },
    localAgent: {
      toolsTitle: 'เครื่องมือ',
      toolsDescription:
        'เลือกเครื่องมือจากปลั๊กอิน MCP และเครื่องมือในตัวสำหรับ Local Agent นี้',
      toolsScopeTooltip:
        'เครื่องมือ MCP จะแสดงจากเซิร์ฟเวอร์ MCP ที่ผูกไว้ในส่วนขยายเท่านั้น หากต้องการเพิ่มแหล่งเครื่องมือ ให้ไปผูกเซิร์ฟเวอร์ที่นั่นก่อน',
      enableAllTools: 'เปิดใช้เครื่องมือทั้งหมด',
      allToolsEnabled: 'เปิดใช้เครื่องมือที่มีทั้งหมดแล้ว',
      noToolsSelected: 'ยังไม่ได้เลือกเครื่องมือ',
      editTools: 'แก้ไขเครื่องมือ',
      builtinTools: 'เครื่องมือในตัว',
      pluginTools: 'เครื่องมือปลั๊กอิน',
      skillTools: 'เครื่องมือสกิล',
      mcpTools: 'เครื่องมือ MCP',
      mcpToolsScopeTooltip:
        'ที่นี่จะแสดงเฉพาะเครื่องมือจากเซิร์ฟเวอร์ MCP ที่อนุญาตอยู่ในส่วนขยาย',
      skillToolsScopeTooltip:
        'เครื่องมือสกิลจะแสดงเมื่อบริการสกิลของ LangBot และแบ็กเอนด์แซนด์บ็อกซ์ Box พร้อมใช้งาน เพื่อให้ Agent เปิดใช้หรือลงทะเบียนสกิลได้',
      selectTools: 'เลือกเครื่องมือ',
      resourcesTitle: 'ทรัพยากร',
      resourcesDescription:
        'เลือกทรัพยากร MCP และคลังความรู้สำหรับ Local Agent นี้',
      knowledgeBases: 'คลังความรู้',
      mcpResources: 'ทรัพยากร MCP',
      mcpResourcesScopeTooltip:
        'ที่นี่จะแสดงเฉพาะทรัพยากรจากเซิร์ฟเวอร์ MCP ที่อนุญาตอยู่ในส่วนขยาย',
      enableMCPResourceRead: 'อนุญาตให้โมเดลอ่านทรัพยากร MCP',
      mcpResourceReadTooltip:
        'เมื่อปิด ทรัพยากร MCP ที่เลือกไว้จะไม่ถูกใส่เข้าไปในบริบทของโมเดล',
      noMCPResourcesAvailable: 'ไม่มีทรัพยากร MCP ที่พร้อมใช้งาน',
      selectKnowledgeBases: 'เลือกคลังความรู้',
    },
    debugDialog: {
      title: 'แชท Pipeline',
      selectPipeline: 'เลือก Pipeline',
      sessionType: 'ประเภทเซสชัน',
      privateChat: 'แชทส่วนตัว',
      groupChat: 'แชทกลุ่ม',
      send: 'ส่ง',
      reset: 'รีเซ็ตการสนทนา',
      inputPlaceholder: 'ส่งข้อความ{{type}}...',
      noMessages: 'ไม่มีข้อความ',
      userMessage: 'ผู้ใช้',
      botMessage: 'Bot',
      sendFailed: 'ส่งล้มเหลว',
      resetSuccess: 'รีเซ็ตการสนทนาสำเร็จ',
      resetFailed: 'รีเซ็ตล้มเหลว',
      loadMessagesFailed: 'ไม่สามารถโหลดข้อความได้',
      loadPipelinesFailed: 'ไม่สามารถโหลด Pipeline ได้',
      atTips: 'กล่าวถึง Bot',
      streaming: 'สตรีมมิ่ง',
      streamOutput: 'สตรีม',
      connected: 'เชื่อมต่อ WebSocket แล้ว',
      disconnected: 'ยกเลิกการเชื่อมต่อ WebSocket',
      connectionError: 'ข้อผิดพลาดการเชื่อมต่อ WebSocket',
      connectionFailed: 'เชื่อมต่อ WebSocket ล้มเหลว',
      notConnected: 'ยังไม่ได้เชื่อมต่อ WebSocket กรุณาลองใหม่ภายหลัง',
      imageUploadFailed: 'อัปโหลดรูปภาพล้มเหลว',
      reply: 'ตอบกลับ',
      replyTo: 'ตอบกลับถึง',
      showMarkdown: 'แสดง Markdown',
      showRaw: 'แสดงข้อมูลดิบ',
      allMembers: 'สมาชิกทั้งหมด',
      file: 'ไฟล์',
      voice: 'เสียง',
      uploadImage: 'อัปโหลดรูปภาพ',
      uploading: 'กำลังอัปโหลด...',
    },
    monitoring: {
      title: 'แดชบอร์ด',
      description:
        'ดูบันทึกการดำเนินการและข้อผิดพลาดของ Pipeline นี้ (24 ชั่วโมงล่าสุด)',
      detailedLogs: 'บันทึกโดยละเอียด',
    },
  },
  knowledge: {
    title: 'ฐานความรู้',
    createKnowledgeBase: 'สร้างฐานความรู้',
    selectFromSidebar: 'เลือกฐานความรู้จากแถบด้านข้าง',
    editKnowledgeBase: 'แก้ไขฐานความรู้',
    selectKnowledgeBase: 'เลือกฐานความรู้',
    selectKnowledgeBases: 'เลือกฐานความรู้',
    addKnowledgeBase: 'เพิ่มฐานความรู้',
    noKnowledgeBaseSelected: 'ไม่ได้เลือกฐานความรู้',
    empty: 'ว่างเปล่า',
    editDocument: 'เอกสาร',
    description: 'กำหนดค่าฐานความรู้เพื่อปรับปรุงการตอบสนองของ LLM',
    metadata: 'ข้อมูลเมตา',
    documents: 'เอกสาร',
    kbNameRequired: 'ชื่อฐานความรู้ต้องไม่ว่างเปล่า',
    kbDescriptionRequired: 'คำอธิบายฐานความรู้ต้องไม่ว่างเปล่า',
    embeddingModelUUIDRequired: 'โมเดล Embedding ต้องไม่ว่างเปล่า',
    daysAgo: 'วันก่อน',
    today: 'วันนี้',
    kbName: 'ชื่อฐานความรู้',
    kbDescription: 'คำอธิบายฐานความรู้',
    topK: 'Top K',
    topKRequired: 'ค่า Top K ต้องไม่ว่างเปล่า',
    topKMax: 'ค่าสูงสุดของ Top K คือ 30',
    topKdescription:
      'ใช้เพื่อระบุจำนวนเอกสารที่เกี่ยวข้องที่ต้องการดึง มีช่วง 1 ถึง 30',
    defaultDescription: 'ฐานความรู้หนึ่งแห่ง',
    embeddingModelUUID: 'โมเดล Embedding',
    selectEmbeddingModel: 'เลือกโมเดล Embedding',
    embeddingModelDescription:
      'ใช้เพื่อแปลงข้อความเป็นเวกเตอร์ คุณสามารถกำหนดค่าได้ในหน้าโมเดล',
    updateTime: 'อัปเดตเมื่อ ',
    cannotChangeEmbeddingModel:
      'ฐานความรู้ที่สร้างแล้วไม่สามารถเปลี่ยนโมเดล Embedding ได้',
    updateKnowledgeBaseSuccess: 'อัปเดตฐานความรู้สำเร็จ',
    updateKnowledgeBaseFailed: 'อัปเดตฐานความรู้ล้มเหลว: ',
    documentsTab: {
      name: 'ชื่อ',
      status: 'สถานะ',
      noResults: 'ไม่มีเอกสาร',
      dragAndDrop: 'ลากและวางไฟล์ที่นี่หรือคลิกเพื่ออัปโหลด',
      uploading: 'กำลังอัปโหลด...',
      supportedFormats:
        'รองรับไฟล์ PDF, Word, TXT, Markdown, HTML, ZIP และรูปแบบเอกสารอื่นๆ',
      uploadSuccess: 'อัปโหลดไฟล์สำเร็จ!',
      uploadError: 'อัปโหลดไฟล์ล้มเหลว: ',
      uploadingFile: 'กำลังอัปโหลดไฟล์...',
      fileSizeExceeded: 'ขนาดไฟล์เกินขีดจำกัด 10MB กรุณาแบ่งเป็นไฟล์ขนาดเล็กลง',
      actions: 'การดำเนินการ',
      delete: 'ลบไฟล์',
      fileDeleteSuccess: 'ลบไฟล์สำเร็จ',
      fileDeleteFailed: 'ลบไฟล์ล้มเหลว: ',
      processing: 'กำลังประมวลผล',
      completed: 'เสร็จสมบูรณ์',
      failed: 'ล้มเหลว',
      selectParser: 'เลือกตัวแยกวิเคราะห์',
      builtInParser: 'จัดเตรียมโดยเครื่องมือความรู้',
      noParserAvailable:
        'ไม่มีตัวแยกวิเคราะห์ที่รองรับไฟล์ประเภทนี้ กรุณาติดตั้งปลั๊กอินตัวแยกวิเคราะห์ที่สามารถจัดการรูปแบบนี้ได้',
      installParserHint: 'เรียกดูปลั๊กอินตัวแยกวิเคราะห์ใน Marketplace →',
      confirmUpload: 'อัปโหลด',
      cancelUpload: 'ยกเลิก',
    },
    deleteKnowledgeBaseConfirmation:
      'คุณแน่ใจหรือไม่ว่าต้องการลบฐานความรู้นี้? เอกสารทั้งหมดในฐานความรู้นี้จะถูกลบ',
    retrieve: 'ทดสอบการดึงข้อมูล',
    retrieveTest: 'ทดสอบการดึงข้อมูล',
    query: 'คำค้นหา',
    queryPlaceholder: 'กรอกข้อความค้นหา...',
    distance: 'ระยะห่าง',
    content: 'เนื้อหา',
    fileName: 'ชื่อไฟล์',
    noResults: 'ไม่มีผลลัพธ์',
    retrieveError: 'ดึงข้อมูลล้มเหลว: ',
    unknownEngine: 'เครื่องมือไม่ทราบ',
    knowledgeEngine: 'เครื่องมือความรู้',
    knowledgeEngineRequired: 'กรุณาเลือกเครื่องมือความรู้',
    selectKnowledgeEngine: 'เลือกเครื่องมือความรู้',
    builtInEngine: 'เครื่องมือในตัว',
    cannotChangeKnowledgeEngine:
      'ไม่สามารถเปลี่ยนเครื่องมือความรู้หลังจากสร้างแล้ว',
    basicInfo: 'ข้อมูลพื้นฐาน',
    basicInfoDescription: 'ตั้งชื่อ ไอคอน และคำอธิบายฐานความรู้',
    engineSettings: 'การตั้งค่าเครื่องมือ',
    engineSettingsDescription: 'การกำหนดค่าสำหรับเครื่องมือความรู้ที่เลือก',
    engineSettingsReadonly: 'อ่านอย่างเดียวในโหมดแก้ไข',
    engineSettingsInvalid:
      'การตั้งค่าเครื่องมือไม่ถูกต้อง โปรดตรวจสอบฟิลด์ที่จำเป็น',
    retrievalSettingsInvalid:
      'การตั้งค่าการดึงข้อมูลไม่ถูกต้อง โปรดตรวจสอบฟิลด์ที่จำเป็น',
    retrievalSettings: 'การตั้งค่าการดึงข้อมูล',
    retrievalSettingsDescription: 'กำหนดค่าวิธีดึงเอกสารจากฐานความรู้นี้',
    dangerZone: 'โซนอันตราย',
    dangerZoneDescription: 'การดำเนินการที่ย้อนกลับไม่ได้และเป็นอันตราย',
    deleteKbAction: 'ลบฐานความรู้นี้',
    deleteKbHint:
      'เมื่อลบแล้ว เอกสารและข้อมูลทั้งหมดในฐานความรู้นี้จะถูกลบอย่างถาวร',
    noEnginesAvailable: 'ไม่มีเครื่องมือฐานความรู้ที่พร้อมใช้งาน',
    installEngineHint: 'กรุณาติดตั้งปลั๊กอิน "เครื่องมือความรู้" ก่อน',
    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 และบริการคลาวด์อื่นๆ รวมถึงเครดิตเรียกใช้โมเดลฟรีเพื่อช่วยให้คุณเริ่มต้นได้อย่างรวดเร็ว',
    spaceInfoTip3:
      'วิธีการเข้าสู่ระบบของคุณไม่มีผลต่อฟีเจอร์อื่นๆ คุณสามารถกำหนดค่าและใช้โมเดลจากแหล่งอื่นได้ตลอดเวลา',
    registerLocal: 'ลงทะเบียนบัญชีท้องถิ่น',
    registerWithPassword: 'ลงทะเบียนด้วยอีเมลและรหัสผ่าน',
    initSuccess: 'เริ่มต้นระบบสำเร็จ กรุณาเข้าสู่ระบบ',
    initFailed: 'เริ่มต้นระบบล้มเหลว: ',
  },
  resetPassword: {
    title: 'รีเซ็ตรหัสผ่าน 🔐',
    description: 'กรอกคีย์กู้คืนและรหัสผ่านใหม่เพื่อรีเซ็ตรหัสผ่านบัญชี',
    recoveryKey: 'คีย์กู้คืน',
    recoveryKeyDescription:
      'เก็บไว้ใน `system.recovery_key` ของไฟล์กำหนดค่า `data/config.yaml`',
    newPassword: 'รหัสผ่านใหม่',
    enterRecoveryKey: 'กรอกคีย์กู้คืน',
    enterNewPassword: 'กรอกรหัสผ่านใหม่',
    recoveryKeyRequired: 'คีย์กู้คืนต้องไม่ว่างเปล่า',
    newPasswordRequired: 'รหัสผ่านใหม่ต้องไม่ว่างเปล่า',
    resetPassword: 'รีเซ็ตรหัสผ่าน',
    resetting: 'กำลังรีเซ็ต...',
    resetSuccess: 'รีเซ็ตรหัสผ่านสำเร็จ กรุณาเข้าสู่ระบบ',
    resetFailed: 'รีเซ็ตรหัสผ่านล้มเหลว กรุณาตรวจสอบอีเมลและคีย์กู้คืน',
    backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
  },
  embedding: {
    description: 'จัดการโมเดล Embedding สำหรับการแปลงข้อความเป็นเวกเตอร์',
    createModel: 'สร้างโมเดล Embedding',
    editModel: 'แก้ไขโมเดล Embedding',
    getModelListError: 'ไม่สามารถดึงรายการโมเดล Embedding ได้: ',
    embeddingModels: 'Embedding',
    extraParametersDescription:
      'จะถูกแนบไปกับเนื้อหาคำขอ เช่น encoding_format, dimensions เป็นต้น',
  },
  llm: {
    description: 'จัดการโมเดล LLM สำหรับการสร้างบทสนทนา',
    llmModels: '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: 'ตรวจสอบกิจกรรม Bot, การเรียก LLM และประสิทธิภาพของระบบ',
    overview: 'ภาพรวม',
    totalMessages: 'ข้อความทั้งหมด',
    llmCallsCount: 'การเรียก LLM',
    modelCallsCount: 'การเรียกโมเดล',
    successRate: 'อัตราความสำเร็จ',
    activeSessions: 'เซสชันที่ใช้งานอยู่',
    last24Hours: '24 ชั่วโมงล่าสุด',
    filters: {
      title: 'ตัวกรอง',
      bot: 'Bot',
      pipeline: 'Pipeline',
      allBots: 'Bot ทั้งหมด',
      selectBot: 'เลือก Bot',
      allPipelines: 'Pipeline ทั้งหมด',
      selectPipeline: 'เลือก Pipeline',
      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: 'Bot',
      pipeline: '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: 'tokens/วินาที',
      errorCalls: 'การเรียกที่ล้มเหลว',
      acrossCalls: 'จาก {{count}} การเรียก',
      ofTotal: 'จากทั้งหมด {{count}}',
      usageOverTime: 'การใช้ Token ตามช่วงเวลา',
      byModel: 'ตามโมเดล',
      model: 'โมเดล',
      calls: 'การเรียก',
      avgLatency: 'เวลาแฝงเฉลี่ย',
      noData: 'ไม่มีการใช้ Token ในช่วงเวลาที่เลือก',
      loadError: 'โหลดสถิติ Token ล้มเหลว: {{error}}',
      zeroTokenWarning:
        'มีการเรียกที่สำเร็จ {{count}} ครั้งรายงานการใช้ Token เป็นศูนย์ โดยปกติหมายความว่าผู้ให้บริการต้นทางไม่ได้ส่งข้อมูลการใช้งานกลับมา โปรดตรวจสอบการตั้งค่าผู้ให้บริการโมเดล',
      bucket: {
        hour: 'รายชั่วโมง',
        day: 'รายวัน',
      },
    },
    embeddingCalls: {
      title: 'การเรียก Embedding',
      model: 'โมเดล',
      tokens: 'โทเคน',
      duration: 'ระยะเวลา',
      noData: 'ไม่พบการเรียก Embedding',
      promptTokens: 'โทเคนพรอมต์',
      totalTokens: 'โทเคนทั้งหมด',
      inputCount: 'จำนวนอินพุต',
      knowledgeBase: 'ฐานความรู้',
      queryText: 'คำค้นหา',
    },
    modelCalls: {
      title: 'การเรียกโมเดล',
      llmModel: 'LLM',
      embeddingModel: 'Embedding',
      embeddingCall: 'Embedding',
      retrieveCall: 'การดึงข้อมูล',
      noData: 'ไม่พบการเรียกโมเดล',
    },
    sessions: {
      sessionId: 'ID เซสชัน',
      messageCount: 'ข้อความ',
      duration: 'ระยะเวลา',
      lastActivity: 'กิจกรรมล่าสุด',
      noSessions: 'ไม่พบเซสชัน',
      startTime: 'เวลาเริ่มต้น',
      messageStats: 'สถิติข้อความ',
      totalMessages: 'ข้อความทั้งหมด',
      successMessages: 'สำเร็จ',
      errorMessages: 'ล้มเหลว',
      llmStats: 'สถิติ LLM',
      noData: 'ไม่พบเซสชัน',
    },
    errors: {
      title: 'ข้อผิดพลาด',
      errorType: 'ประเภทข้อผิดพลาด',
      errorMessage: 'ข้อความผิดพลาด',
      occurredAt: 'เกิดขึ้นเมื่อ',
      noErrors: 'ไม่พบข้อผิดพลาด',
      stackTrace: 'Stack Trace',
    },
    feedback: {
      title: 'ความคิดเห็นผู้ใช้',
      totalFeedback: 'ความคิดเห็นทั้งหมด',
      totalLikes: 'ถูกใจ',
      totalDislikes: 'ไม่ถูกใจ',
      satisfactionRate: 'อัตราความพึงพอใจ',
      like: 'ถูกใจ',
      dislike: 'ไม่ถูกใจ',
      noFeedback: 'ยังไม่มีความคิดเห็น',
      noFeedbackDescription: 'ความคิดเห็นของผู้ใช้จะแสดงที่นี่',
      feedbackList: 'รายการความคิดเห็น',
      feedbackContent: 'เนื้อหาความคิดเห็น',
      contextInfo: 'ข้อมูลบริบท',
      userId: 'ID ผู้ใช้',
      messageId: 'ID ข้อความ',
      streamId: 'ID คำถามที่เกี่ยวข้อง',
      inaccurateReasons: 'เหตุผลที่ไม่ถูกต้อง',
      platform: 'แพลตฟอร์ม',
      exportFeedback: 'ส่งออกความคิดเห็น',
      description:
        'Tell us what went wrong or what could be better. Instance UUID and login account are included for diagnosis.',
      placeholder: 'Describe your suggestion, issue, or reproduction steps...',
      attachImage: 'Add image',
      screenshot: 'Screenshot',
      submit: 'Submit feedback',
      privacyHint:
        'Do not include secrets, passwords, or private chat content.',
      contentRequired: 'Please enter feedback first',
      imageOnly: 'Only image attachments are supported',
      imageTooLarge: 'Each image must be under 1MB',
      tooManyImages: 'You can attach up to 3 images',
      screenshotFailed: 'Screenshot failed. Try pasting or uploading an image.',
      submitSuccess: 'Feedback submitted. Thanks!',
      submitFailed: 'Failed to submit feedback. Please try again later.',
      removeImage: 'Remove image',
    },
    queries: {
      title: 'คำค้นหา',
    },
    messageDetails: {
      noData: 'ไม่มีการเรียก LLM หรือข้อผิดพลาดสำหรับคำค้นหานี้',
    },
    queryVariables: {
      title: 'ตัวแปรคำค้นหา',
    },
    trafficChart: {
      title: 'ภาพรวมปริมาณการใช้งาน',
      messages: 'ข้อความ',
      llmCalls: 'การเรียก LLM',
      noData: 'ไม่มีข้อมูลปริมาณการใช้งาน',
    },
    viewMonitoring: 'ดูการตรวจสอบ',
    refreshData: 'รีเฟรชข้อมูล',
    exportData: 'ส่งออกข้อมูล',
    export: {
      title: 'ส่งออกข้อมูล',
      exporting: 'กำลังส่งออก...',
      messages: 'ข้อความ',
      llmCalls: 'การเรียก LLM',
      embeddingCalls: 'การเรียก Embedding',
      errors: 'บันทึกข้อผิดพลาด',
      sessions: 'เซสชัน',
      feedback: 'ความคิดเห็นผู้ใช้',
    },
    systemStatus: 'สถานะระบบ',
    pluginRuntime: 'Plugin Runtime',
    boxRuntime: 'Box Runtime',
    connected: 'เชื่อมต่อแล้ว',
    disconnected: 'ไม่ได้เชื่อมต่อ',
    disabled: 'ปิดใช้งาน',
    statusDetail: 'สถานะ',
    pluginDisabled: 'ระบบปลั๊กอินถูกปิดใช้งาน',
    boxDisabled:
      'Sandbox Box ถูกปิดใช้งานในการตั้งค่า — เครื่องมือ sandbox, การเพิ่ม/แก้ไข skill และ stdio MCP ใช้งานไม่ได้',
    boxUnavailable:
      'Sandbox Box ไม่พร้อมใช้งาน — เครื่องมือ sandbox, การเพิ่ม/แก้ไข skill และ stdio MCP ใช้งานไม่ได้',
    boxRequiredHint:
      'ฟีเจอร์นี้ต้องใช้ Box runtime กรุณาเปิดใช้งานในการตั้งค่า (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: 'งาน runtime',
    cleanupPolicy: 'นโยบายการล้างข้อมูล',
    uploadRetention: 'ระยะเวลาเก็บไฟล์อัปโหลด',
    logRetention: 'ระยะเวลาเก็บบันทึก',
    databaseType: 'ชนิดฐานข้อมูล',
    days: 'วัน',
    missing: 'ไม่มี',
    expiredUploads: 'ไฟล์อัปโหลดที่หมดอายุ',
    expiredLogs: 'บันทึกที่หมดอายุ',
    noExpiredUploads: 'ไม่มีไฟล์อัปโหลดที่หมดอายุ',
    noExpiredLogs: 'ไม่มีบันทึกที่หมดอายุ',
    sectionNames: {
      database: 'ฐานข้อมูล',
      logs: 'บันทึก',
      storage: 'ไฟล์อัปโหลด',
      vector_store: 'คลังเวกเตอร์',
      plugins: 'ปลั๊กอิน',
      mcp: 'MCP',
      temp: 'ไฟล์ชั่วคราว',
    },
  },
  limitation: {
    maxBotsReached:
      'จำนวน Bot สูงสุด ({{max}}) ถึงขีดจำกัดแล้ว กรุณาลบ Bot ที่มีอยู่ก่อนสร้างใหม่',
    maxPipelinesReached:
      'จำนวน Pipeline สูงสุด ({{max}}) ถึงขีดจำกัดแล้ว กรุณาลบ Pipeline ที่มีอยู่ก่อนสร้างใหม่',
    maxExtensionsReached:
      'จำนวนส่วนขยายสูงสุด ({{max}}) ถึงขีดจำกัดแล้ว กรุณาลบเซิร์ฟเวอร์ MCP หรือปลั๊กอินที่มีอยู่ก่อนเพิ่มใหม่',
    quotaLoadingTooltip:
      'กำลังโหลดการใช้งานพื้นที่ทำงาน โปรดรอก่อนสร้างทรัพยากร',
    quotaCheckFailed:
      'ไม่สามารถตรวจสอบโควตาปัจจุบันของพื้นที่ทำงานได้ โปรดลองอีกครั้ง',
    createDisabledTooltip:
      'ถึงขีดจำกัด {{resource}} ({{max}}) ของเวิร์กสเปซนี้แล้ว โปรดลบรายการเดิมก่อนสร้างรายการใหม่',
  },
  wizard: {
    sidebarDescription: 'สร้าง Bot ด้วยขั้นตอนที่แนะนำ',
    loading: 'กำลังโหลดตัวช่วย...',
    loadError: 'ไม่สามารถโหลดข้อมูลตัวช่วยได้',
    skip: 'ข้าม',
    skipConfirmMessage:
      'คุณสามารถเข้าสู่ตัวช่วยเริ่มต้นอย่างรวดเร็วจากเมนูบัญชีในภายหลัง หรือสร้าง Bot ด้วยตนเอง',
    skipConfirmOk: 'ตกลง',
    prev: 'ก่อนหน้า',
    next: 'ถัดไป',
    finish: 'สร้างและติดตั้ง',
    confirmCreateBot: 'ยืนยัน สร้าง Bot',
    createSuccess: 'สร้าง Pipeline และเชื่อมกับ Bot สำเร็จ!',
    botCreateSuccess: 'สร้าง Bot สำเร็จ!',
    botSaveSuccess: 'บันทึกและเปิดใช้งาน Bot สำเร็จ!',
    createError: 'ไม่สามารถสร้างทรัพยากรได้',
    skipSaveError: 'ไม่สามารถบันทึกสถานะการข้ามได้ กรุณาลองใหม่',
    completeSaveError: 'ไม่สามารถบันทึกสถานะการเสร็จสิ้นได้ กรุณาลองใหม่',
    step: {
      platform: 'แพลตฟอร์ม',
      botConfig: 'ตั้งค่า Bot',
      aiEngine: 'เครื่องมือ AI',
      done: 'เสร็จสิ้น',
    },
    platform: {
      title: 'เลือกแพลตฟอร์ม',
      description: 'เลือกแพลตฟอร์มข้อความที่ Bot ของคุณจะเชื่อมต่อ',
    },
    botConfig: {
      title: 'กำหนดค่า Bot ของคุณ',
      description: 'ตั้งค่า Bot ของคุณและตรวจสอบว่าทำงานได้ก่อนดำเนินการต่อ',
      saveBot: 'บันทึกและเปิดใช้งาน Bot',
      resaveBot: 'บันทึกการกำหนดค่าอีกครั้ง',
      botSaved:
        'บันทึกและเปิดใช้งาน Bot แล้ว ตรวจสอบบันทึกเพื่อยืนยันการเชื่อมต่อ',
      waitingForMessage:
        'เปิดใช้งาน Bot แล้ว โปรดส่งข้อความจากแพลตฟอร์มแชตเพื่อดำเนินการต่อ',
      messageReceived: 'Bot ได้รับข้อความแล้ว คุณสามารถไปยังขั้นตอนถัดไปได้',
      messageReceivedLocalAccountWarning:
        'การเชื่อมต่อฝั่ง Bot ได้รับการกำหนดค่าอย่างถูกต้องและได้รับข้อความแล้ว เนื่องจากคุณไม่ได้เข้าสู่ระบบด้วยบัญชี LangBot การเรียกใช้โมเดลอาจล้มเหลว โปรดไปยังขั้นตอนถัดไปเพื่อเพิ่มโมเดลของคุณเอง',
      pageBotTestPrompt:
        'เปิดใช้งาน Page Bot แล้ว คลิกฟองแชตที่มุมขวาล่างและส่งข้อความเพื่อตรวจสอบขั้นตอนการสนทนาทั้งหมด',
      pageBotTestNotice:
        'สำหรับการทดสอบเท่านั้น โปรดฝังโค้ดในหน้าเว็บภายนอกจริง',
      webhookTestPrompt:
        'URL Callback พร้อมแล้ว โปรดกำหนดค่าบนแพลตฟอร์มภายนอก แล้วส่งข้อความจริงถึง Bot',
      httpTestPrompt:
        'เปิดใช้งาน HTTP Bot แล้ว ส่งข้อความขาเข้าจริงที่นี่เพื่อตรวจสอบการเชื่อมต่อ',
      httpTestDefaultMessage: 'สวัสดี นี่คือข้อความทดสอบการเชื่อมต่อ',
      sendHttpTest: 'ส่งข้อความทดสอบ',
      httpTestAccepted: 'ระบบรับข้อความทดสอบแล้ว และจะแสดงในบันทึกในอีกสักครู่',
      httpTestMissingSecret:
        'โปรดกรอก Secret สำหรับลงนามข้อความขาเข้าและบันทึกการกำหนดค่าก่อน',
      httpTestFailed: 'ส่งข้อความทดสอบไม่สำเร็จ: {{error}}',
      logsTitle: 'บันทึก Bot',
      logsDescription:
        'ตรวจสอบกิจกรรม Bot เพื่อยืนยันว่าการเชื่อมต่อแพลตฟอร์มทำงานอยู่',
    },
    aiEngine: {
      title: 'กำหนดค่าเครื่องมือ AI',
      description: 'เลือกเครื่องมือ AI ที่จะขับเคลื่อนความฉลาดของ Bot',
      optionalDescription:
        'ขั้นตอนนี้ไม่บังคับ เลือกวิธีที่คุณต้องการดำเนินการต่อกับ Agent ปัจจุบัน',
      externalTitle: 'เชื่อมต่อ Agent จากแพลตฟอร์มภายนอก',
      externalDescription:
        'เชื่อมต่อ Dify, n8n, Coze หรือแพลตฟอร์มอื่น และแทนที่ Pipeline ของ Bot',
      ownModelTitle: 'ใช้โมเดลของฉันเอง',
      ownModelDescription:
        'เพิ่มผู้ให้บริการ แล้วสแกนหรือกรอกโมเดลด้วยตนเองเพื่อเสร็จสิ้นการตั้งค่า',
      ownModelSetupTitle: 'เพิ่มโมเดลของคุณเอง',
      ownModelSetupDescription:
        'เพิ่มผู้ให้บริการโมเดล ระบบจะสแกนโมเดลแชตโดยอัตโนมัติ หรือคุณสามารถกรอก ID โมเดลด้วยตนเอง',
      addProviderTitle: 'เพิ่มผู้ให้บริการ',
      addProviderDescription:
        'กรอกรายละเอียดผู้ให้บริการและ API Key ที่ใช้เชื่อมต่อและสแกนโมเดล',
      selectModelTitle: 'เลือกโมเดล',
      selectScannedModelTitle: 'เลือกโมเดล',
      selectScannedModelDescription:
        'โมเดลที่เลือกจะเป็นโมเดลหลักของ Pipeline ใหม่ และ Bot จะเปลี่ยนไปใช้โมเดลนี้',
      scanModelMode: 'สแกนโมเดล',
      manualModelMode: 'เพิ่มด้วยตนเอง',
      scanningModels: 'กำลังสแกนโมเดลที่พร้อมใช้งาน…',
      noScannedModels:
        'ไม่พบโมเดลแชตที่พร้อมใช้งาน โปรดตรวจสอบการกำหนดค่าผู้ให้บริการ',
      scanModelsFailed:
        'สแกนโมเดลไม่สำเร็จ โปรดตรวจสอบ URL และ API Key แล้วลองอีกครั้ง',
      manualFallbackFailed:
        'การสแกนอัตโนมัติไม่สำเร็จ โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
      manualFallbackEmpty: 'ไม่พบโมเดล โปรดกรอก ID โมเดลที่ผู้ให้บริการรองรับ',
      manualModelId: 'ID โมเดล',
      manualModelIdPlaceholder: 'ตัวอย่าง: gpt-4o',
      manualModelIdDescription: 'กรอกพารามิเตอร์โมเดลที่ใช้ในคำขอโมเดล',
      manualModelOptions: 'ความสามารถเพิ่มเติมของโมเดล',
      editProvider: 'แก้ไขผู้ให้บริการ',
      rescanModels: 'สแกนโมเดลอีกครั้ง',
      moreFeaturesTitle: 'เพิ่มความสามารถให้ Agent',
      moreFeaturesDescription:
        'เปิดหน้าทำงานเพื่อเพิ่มเครื่องมือ ฐานความรู้ และความสามารถอื่น ๆ ให้ Agent ที่เพิ่งสร้างขึ้นโดยอัตโนมัติ',
      runnerDescription:
        'เลือก Runner สำหรับ Agent ภายนอกและกำหนดค่าการเชื่อมต่อ',
      backToChoices: 'กลับไปยังตัวเลือก',
      createExternal: 'สร้างและผูก',
      finishWithModel: 'ใช้โมเดลที่เลือกและเสร็จสิ้น',
      openWorkbench: 'เปิดหน้าทำงาน',
    },
    config: {
      botInfo: 'ข้อมูล Bot',
      botNamePlaceholder: 'กรอกชื่อ Bot',
      botDescPlaceholder: 'กรอกคำอธิบาย Bot (ไม่บังคับ)',
      platformConfig: 'การกำหนดค่า {{platform}}',
      aiConfig: 'การกำหนดค่า {{engine}}',
    },
    done: {
      title: 'เสร็จเรียบร้อย!',
      description:
        'Bot ของคุณถูกสร้างและเชื่อมต่อกับ Pipeline AI แล้ว คุณสามารถจัดการได้จากหน้าทำงาน',
      backToWorkbench: 'กลับไปหน้าทำงาน',
    },
  },
  errorPage: {
    unexpectedError: 'เกิดข้อผิดพลาด',
    unexpectedErrorDescription:
      'เกิดข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้งในภายหลัง',
    notFound: 'ไม่พบหน้า',
    notFoundDescription: 'หน้าที่คุณกำลังมองหาไม่มีอยู่หรือถูกย้ายแล้ว',
    backendUnavailableStatus: 'แบ็กเอนด์ไม่พร้อมใช้งาน',
    goBack: 'ย้อนกลับ',
    backToHome: 'กลับหน้าหลัก',
    backToLogin: 'กลับไปหน้าเข้าสู่ระบบ',
    retrying: 'กำลังลองใหม่',
    retryFailed:
      'ยังไม่สามารถเชื่อมต่อแบ็กเอนด์ได้ โปรดเริ่มบริการแล้วลองใหม่อีกครั้ง',
  },
  feishu: {
    createApp: 'สร้างแอป Feishu ด้วยคลิกเดียว',
    scanQRCode:
      'สแกนคิวอาร์โค้ดด้านล่างด้วย Feishu เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
    waitingForScan: 'กำลังรอสแกน',
    createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
    createFailed: 'สร้างแอปไม่สำเร็จ',
    connecting: 'กำลังเชื่อมต่อบริการ Feishu...',
    expired: 'คิวอาร์โค้ดหมดอายุแล้ว กรุณาลองใหม่',
    denied: 'ผู้ใช้ปฏิเสธการอนุญาต',
    connectionLost: 'การเชื่อมต่อขาดหาย กรุณาลองใหม่',
    reconnecting: 'กำลังเชื่อมต่อใหม่...',
    retry: 'ลองใหม่',
  },
  weixin: {
    scanLogin: 'เข้าสู่ระบบ WeChat ด้วยคิวอาร์โค้ด',
    scanQRCode:
      'สแกนคิวอาร์โค้ดด้านล่างด้วย WeChat เพื่ออนุญาตและกรอกโทเคนอัตโนมัติ',
    loginSuccess: 'เข้าสู่ระบบสำเร็จ และกรอกโทเคนอัตโนมัติแล้ว',
    loginFailed: 'เข้าสู่ระบบไม่สำเร็จ',
    connecting: 'กำลังเชื่อมต่อบริการ WeChat...',
    waitingForScan: 'กำลังรอการสแกน',
    retry: 'ลองอีกครั้ง',
  },
  dingtalk: {
    createApp: 'สร้างแอป DingTalk ด้วยคลิกเดียว',
    scanQRCode:
      'สแกนคิวอาร์โค้ดด้านล่างด้วย DingTalk เพื่ออนุญาตและสร้างแอปโดยอัตโนมัติ',
    waitingForScan: 'กำลังรอสแกน',
    createSuccess: 'สร้างแอปสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
    createFailed: 'สร้างแอปไม่สำเร็จ',
    connecting: 'กำลังเชื่อมต่อบริการ DingTalk...',
    retry: 'ลองใหม่',
    robotCodeNote:
      'ไม่สามารถดึงรหัส Robot ได้โดยอัตโนมัติ กรุณาไปที่หลังบ้านนักพัฒนา DingTalk > การตั้งค่า Robot เพื่อคัดลอกด้วยตนเอง ฟิลด์นี้จำเป็นสำหรับฟังก์ชันอย่างการรู้จำภาพและการอัปโหลดไฟล์',
  },
  wecombot: {
    createBot: 'สร้างบอต WeCom ด้วยคลิกเดียว',
    scanQRCode:
      'สแกนคิวอาร์โค้ดด้านล่างด้วย WeCom เพื่ออนุญาตและสร้างบอตโดยอัตโนมัติ',
    waitingForScan: 'กำลังรอสแกน',
    createSuccess: 'สร้างบอตสำเร็จแล้ว และกรอกข้อมูลรับรองให้อัตโนมัติ',
    createFailed: 'สร้างบอตไม่สำเร็จ',
    connecting: 'กำลังเชื่อมต่อบริการ WeCom...',
    retry: 'ลองใหม่',
    robotNameNote: 'ไม่สามารถดึงชื่อบอตได้โดยอัตโนมัติ กรุณากรอกด้วยตนเอง',
  },
  qqofficial: {
    createBinding: 'ผูกบอต QQ Official ด้วย QR คลิกเดียว',
    scanQRCode:
      'สแกนคิวอาร์โค้ดด้านล่างด้วย QQ มือถือ แล้วอนุญาตการผูกใน «QQ Bot Assistant»',
    waitingForScan: 'กำลังรอสแกน',
    bindSuccess: 'ผูกสำเร็จ! AppID และ Secret ถูกกรอกอัตโนมัติแล้ว',
    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:
      'คำอธิบายสั้น ๆ ว่าสกิลนี้ทำอะไร (แสดงให้ LLM เห็น)',
    packageRoot: 'ไดเรกทอรีแพ็กเกจ',
    packageRootHelp:
      'ไม่บังคับ จำเป็นเฉพาะเมื่อนำเข้าไดเรกทอรีสกิลที่มีอยู่ เว้นว่างไว้สำหรับสกิลใหม่ การสแกนจะตรวจไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยลึกสุด 2 ระดับ',
    importLocalDirectory: 'นำเข้าไดเรกทอรีสกิลในเครื่อง',
    chooseSkillDirectory: 'เลือกไดเรกทอรีของ SKILL.md',
    chooseAnotherDirectory: 'เลือกไดเรกทอรีอื่น',
    importingDirectory: 'กำลังสร้างตัวอย่าง...',
    clearDirectoryPreview: 'ล้างไดเรกทอรีที่เลือก',
    noSkillMdInDirectory: 'ไม่พบ SKILL.md ในไดเรกทอรีที่เลือก',
    multipleSkillMdInDirectory:
      'ไดเรกทอรีที่เลือกมี SKILL.md หลายไฟล์ โปรดเลือกไดเรกทอรีสกิลเดียวโดยตรง',
    importDirectoryError: 'นำเข้าไดเรกทอรีไม่สำเร็จ: ',
    advancedSettings: 'การตั้งค่าขั้นสูง',
    searchSkills: 'ค้นหาสกิล...',
    selectSkills: 'เลือกสกิล',
    addSkill: 'เพิ่มสกิล',
    builtin: 'ในตัว',
    importFromGithub: 'ติดตั้งสกิลจาก GitHub',
    createManually: 'สร้างด้วยตนเอง',
    uploadZip: 'อัปโหลดแพ็กเกจ ZIP',
    uploadZipOnly: 'รองรับเฉพาะแพ็กเกจสกิล .zip',
    installSuccess: 'ติดตั้งสกิลสำเร็จ',
    installError: 'ติดตั้งสกิลไม่สำเร็จ: ',
    enterRepoUrl: 'ป้อน URL รีโพสitory GitHub',
    repoUrlPlaceholder: 'เช่น https://github.com/owner/repo',
    fetchingReleases: 'กำลังดึงรีลีส...',
    selectRelease: 'เลือกรีลีส',
    noReleasesFound: 'ไม่พบรีลีส',
    fetchReleasesError: 'ดึงรีลีสไม่สำเร็จ: ',
    selectAsset: 'เลือกไฟล์ที่จะติดตั้ง',
    sourceArchive: 'ซอร์สโค้ด (zip)',
    noAssetsFound: 'ไม่มีไฟล์ที่ติดตั้งได้ในรีลีสนี้',
    fetchAssetsError: 'ดึงไฟล์ไม่สำเร็จ: ',
    backToReleases: 'กลับไปที่รีลีส',
    backToRepoUrl: 'กลับไปที่ URL รีโพสitory',
    backToAssets: 'กลับไปที่ไฟล์',
    releaseTag: 'แท็ก: {{tag}}',
    publishedAt: 'เผยแพร่เมื่อ: {{date}}',
    prerelease: 'พรีรีลีส',
    assetSize: 'ขนาด: {{size}}',
    confirmInstall: 'ยืนยันการติดตั้ง',
    installing: 'กำลังติดตั้งสกิล...',
    loading: 'กำลังโหลด...',
    previewLoadError: 'โหลดตัวอย่างไม่สำเร็จ',
    selectFromSidebar: 'เลือกสกิลจากแถบด้านข้าง',
    dangerZone: 'พื้นที่อันตราย',
    dangerZoneDescription: 'การกระทำที่ย้อนกลับไม่ได้และทำลายข้อมูล',
    files: 'ไฟล์',
    noFiles: 'ไม่พบไฟล์',
    loadFilesError: 'โหลดไฟล์ไม่สำเร็จ: ',
    readFileError: 'อ่านไฟล์ไม่สำเร็จ: ',
    saveFile: 'บันทึกไฟล์',
    saveFileSuccess: 'บันทึกไฟล์สำเร็จ',
    saveFileError: 'บันทึกไฟล์ไม่สำเร็จ: ',
  },
  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: 'วาง URL GitHub',
    githubUrlTooltip:
      'ปลั๊กอิน: วาง URL รีโพสitory, Release หรือ Tag สกิล: วาง URL หน้า SKILL.md ภายในไดเรกทอรีสกิล',
    githubUrlPlaceholder: 'รีโพสitory GitHub, Release หรือลิงก์ SKILL.md',
    githubUrlRequired: 'ป้อน URL GitHub',
    previewSkill: 'ดูตัวอย่างสกิล',
    noSkillPreviewFound: 'ไม่พบสกิลที่นำเข้าได้',
    createSkill: 'สร้างสกิลใหม่',
    createSkillHint: 'นำเข้าจากไดเรกทอรีในเครื่องหรือสร้างด้วยตนเอง',
    unsupportedFileType: 'ประเภทไฟล์ไม่รองรับ รองรับเฉพาะไฟล์ .zip และ .lbpkg',
  },

  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 thTH;
