const viVN = {
  sidebar: {
    home: 'Trang chủ',
    extensions: 'Tiện ích mở rộng',
    installedPlugins: 'Plugin đã cài đặt',
    pluginMarket: 'Chợ ứng dụng',
    mcpServers: 'Máy chủ MCP',
    quickStart: 'Bắt đầu nhanh',
  },
  common: {
    login: 'Đăng nhập',
    logout: 'Đăng xuất',
    accountOptions: 'Cài đặt',
    account: 'Tài khoản',
    integration: 'Tích hợp',
    email: 'Email',
    password: 'Mật khẩu',
    welcome: 'Chào mừng trở lại LangBot 👋',
    continueToLogin: 'Đăng nhập để tiếp tục',
    loginSuccess: 'Đăng nhập thành công',
    loginFailed: 'Đăng nhập thất bại, vui lòng kiểm tra email và mật khẩu',
    loginLoadError: 'Không thể kết nối đến máy chủ',
    loginLoadErrorDesc:
      'Không thể kết nối đến máy chủ LangBot. Vui lòng đảm bảo dịch vụ đang chạy và thử lại.',
    retry: 'Thử lại',
    enterEmail: 'Nhập địa chỉ email',
    enterPassword: 'Nhập mật khẩu',
    invalidEmail: 'Vui lòng nhập địa chỉ email hợp lệ',
    emptyPassword: 'Vui lòng nhập mật khẩu',
    language: 'Ngôn ngữ',
    helpDocs: 'Trợ giúp',
    featureRequest: 'Yêu cầu tính năng',
    starOnGitHub: 'Star trên GitHub',
    create: 'Tạo',
    edit: 'Chỉnh sửa',
    delete: 'Xóa',
    add: 'Thêm',
    select: 'Chọn',
    cancel: 'Hủy',
    submit: 'Gửi',
    error: 'Lỗi',
    success: 'Thành công',
    save: 'Lưu',
    saving: 'Đang lưu...',
    confirm: 'Xác nhận',
    confirmDelete: 'Xác nhận xóa',
    deleteConfirmation: 'Bạn có chắc chắn muốn xóa mục này không?',
    selectOption: 'Chọn một tùy chọn',
    selectPreset: 'Chọn mẫu có sẵn',
    required: 'Bắt buộc',
    enable: 'Bật',
    name: 'Tên',
    description: 'Mô tả',
    icon: 'Biểu tượng',
    close: 'Đóng',
    deleteSuccess: 'Xóa thành công',
    deleteError: 'Xóa thất bại: ',
    addRound: 'Thêm lượt',
    copy: 'Sao chép',
    copySuccess: 'Sao chép thành công',
    copyFailed: 'Sao chép thất bại',
    test: 'Kiểm tra',
    forgotPassword: 'Quên mật khẩu?',
    agreementNotice: 'Bằng việc tiếp tục, bạn đồng ý với',
    privacyPolicy: 'Chính sách bảo mật',
    and: 'và',
    dataCollectionPolicy: 'Chính sách thu thập dữ liệu',
    dataCollectionPolicyUrl: 'https://link.langbot.app/en/docs/data-policy',
    loading: 'Đang tải...',
    fieldRequired: 'Trường này là bắt buộc',
    or: 'hoặc',
    loginWithSpace: 'Đăng nhập với Space',
    spaceLoginRecommended:
      'Khuyến nghị: Sử dụng API mô hình ổn định chính thức và dịch vụ đám mây',
    loginLocal: 'Đăng nhập với tài khoản cục bộ',
    loginWithPassword: 'Đăng nhập bằng mật khẩu',
    spaceLoginTitle: 'Đăng nhập với Space',
    spaceLoginDescription:
      'Quét mã QR hoặc truy cập liên kết bên dưới để ủy quyền',
    spaceLoginUserCode: 'Mã của bạn',
    spaceLoginExpires: 'Mã hết hạn sau {{seconds}} giây',
    spaceLoginWaiting: 'Đang chờ ủy quyền...',
    spaceLoginSuccess: 'Ủy quyền thành công',
    spaceLoginFailed: 'Đăng nhập Space thất bại',
    spaceLoginExpired: 'Mã ủy quyền đã hết hạn, vui lòng thử lại',
    spaceLoginCancel: 'Hủy',
    spaceLoginVisitLink: 'Truy cập liên kết',
    spaceLoginProcessing: 'Đang đăng nhập với Space',
    spaceLoginProcessingDescription:
      'Vui lòng chờ trong khi chúng tôi hoàn tất đăng nhập...',
    spaceLoginSuccessDescription: 'Đang chuyển hướng đến LangBot...',
    spaceLoginError: 'Đăng nhập thất bại',
    spaceLoginNoCode: 'Thiếu mã ủy quyền',
    backToLogin: 'Quay lại đăng nhập',
    backToHome: 'Quay lại trang chủ',
    spaceAccountCannotChangePassword:
      'Tài khoản Space không thể đổi mật khẩu tại đây',
    theme: 'Giao diện',
    changePassword: 'Đổi mật khẩu',
    currentPassword: 'Mật khẩu hiện tại',
    newPassword: 'Mật khẩu mới',
    confirmNewPassword: 'Xác nhận mật khẩu mới',
    enterCurrentPassword: 'Nhập mật khẩu hiện tại',
    enterNewPassword: 'Nhập mật khẩu mới',
    enterConfirmPassword: 'Xác nhận mật khẩu mới',
    currentPasswordRequired: 'Mật khẩu hiện tại là bắt buộc',
    newPasswordRequired: 'Mật khẩu mới là bắt buộc',
    confirmPasswordRequired: 'Xác nhận mật khẩu là bắt buộc',
    passwordsDoNotMatch: 'Mật khẩu không khớp',
    changePasswordSuccess: 'Đổi mật khẩu thành công',
    changePasswordFailed:
      'Đổi mật khẩu thất bại, vui lòng kiểm tra mật khẩu hiện tại',
    apiIntegration: 'Tích hợp API',
    apiKeys: 'Khóa API',
    manageApiIntegration: 'Quản lý tích hợp API',
    manageApiKeys: 'Quản lý khóa API',
    createApiKey: 'Tạo khóa API',
    apiKeyName: 'Tên khóa API',
    apiKeyDescription: 'Mô tả khóa API',
    apiKeyValue: 'Giá trị khóa API',
    apiKeyCreated: 'Tạo khóa API thành công',
    apiKeyDeleted: 'Xóa khóa API thành công',
    apiKeyDeleteConfirm: 'Bạn có chắc chắn muốn xóa khóa API này không?',
    apiKeyNameRequired: 'Tên khóa API là bắt buộc',
    copyApiKey: 'Sao chép khóa API',
    apiKeyCopied: 'Đã sao chép khóa API vào clipboard',
    noApiKeys: 'Chưa cấu hình khóa API nào',
    apiKeyHint:
      'Khóa API cho phép các hệ thống bên ngoài truy cập API dịch vụ LangBot',
    webhooks: 'Webhooks',
    createWebhook: 'Tạo Webhook',
    webhookName: 'Tên Webhook',
    webhookUrl: 'URL Webhook',
    webhookDescription: 'Mô tả Webhook',
    webhookEnabled: 'Đã bật',
    webhookCreated: 'Tạo Webhook thành công',
    webhookDeleted: 'Xóa Webhook thành công',
    webhookDeleteConfirm: 'Bạn có chắc chắn muốn xóa Webhook này không?',
    webhookNameRequired: 'Tên Webhook là bắt buộc',
    webhookUrlRequired: 'URL Webhook là bắt buộc',
    noWebhooks: 'Chưa cấu hình Webhook nào',
    webhookHint:
      'Webhooks cho phép LangBot đẩy sự kiện tin nhắn cá nhân và nhóm đến các hệ thống bên ngoài',
    actions: 'Hành động',
    apiKeyCreatedMessage:
      'Vui lòng sao chép khóa API này, nếu nút không hoạt động, vui lòng sao chép thủ công.',
    none: 'Không có',
    more: 'Thêm ({{count}})',
    less: 'Thu gọn',
    noItems: 'Không có mục nào',
  },
  notFound: {
    title: 'Không tìm thấy trang',
    description: 'Trang bạn đang tìm kiếm không tồn tại.',
    back: 'Quay lại',
    home: 'Trang chủ',
    help: 'Trợ giúp',
  },
  models: {
    title: 'Mô hình',
    description:
      'Cấu hình và quản lý các mô hình có thể sử dụng trong Pipeline',
    createModel: 'Tạo mô hình',
    editModel: 'Chỉnh sửa mô hình',
    getModelListError: 'Lấy danh sách mô hình thất bại: ',
    modelName: 'Tên mô hình',
    modelProvider: 'Nhà cung cấp mô hình',
    modelBaseURL: 'URL cơ sở',
    modelAbilities: 'Khả năng mô hình',
    saveSuccess: 'Lưu thành công',
    saveError: 'Lưu thất bại: ',
    createSuccess: 'Tạo thành công',
    createError: 'Tạo thất bại: ',
    deleteSuccess: 'Xóa thành công',
    deleteError: 'Xóa thất bại: ',
    deleteConfirmation: 'Bạn có chắc chắn muốn xóa mô hình này không?',
    modelNameRequired: 'Tên mô hình không được để trống',
    modelProviderRequired: 'Nhà cung cấp mô hình không được để trống',
    requestURLRequired: 'URL yêu cầu không được để trống',
    apiKeyRequired: 'API Key không được để trống',
    keyNameRequired: 'Tên khóa không được để trống',
    mustBeValidNumber: 'Phải là một số hợp lệ',
    mustBeTrueOrFalse: 'Phải là true hoặc false',
    requestURL: 'URL yêu cầu',
    scanURL: 'URL quét mô hình',
    scanURLPlaceholder: 'Để trống để sử dụng URL yêu cầu + /models',
    scanURLDescription:
      'Điền điểm cuối danh sách mô hình thực tế khi quét mô hình không sử dụng cùng địa chỉ với việc gọi mô hình.',
    apiKey: 'API Key',
    abilities: 'Khả năng',
    selectModelAbilities: 'Chọn khả năng mô hình',
    visionAbility: 'Khả năng thị giác',
    functionCallAbility: 'Gọi hàm',
    extraParameters: 'Tham số bổ sung',
    addParameter: 'Thêm tham số',
    keyName: 'Tên khóa',
    type: 'Loại',
    value: 'Giá trị',
    string: 'Chuỗi',
    number: 'Số',
    boolean: 'Boolean',
    selectModelProvider: 'Chọn nhà cung cấp mô hình',
    modelProviderDescription:
      'Vui lòng điền tên mô hình do nhà cung cấp cung cấp',
    modelManufacturer: 'Nhà sản xuất mô hình',
    aggregationPlatform: 'Nền tảng tổng hợp',
    selfDeployed: 'Tự triển khai',
    builtin: 'Tích hợp sẵn',
    selectModel: 'Chọn mô hình',
    testSuccess: 'Kiểm tra thành công',
    testError: 'Kiểm tra thất bại, vui lòng kiểm tra cấu hình mô hình',
    llmModels: 'Mô hình LLM',
    localProvider: 'Cục bộ',
    localProviderDescription: 'Các mô hình được cấu hình và quản lý cục bộ',
    spaceProviderDescription:
      'Các mô hình được đồng bộ từ tài khoản Space của bạn',
    spaceDisabledForLocalAccount:
      'Đăng nhập với Space để sử dụng mô hình đám mây',
    syncModels: 'Đồng bộ',
    syncSuccess:
      'Đồng bộ hoàn tất: {{created}} đã tạo, {{updated}} đã cập nhật',
    syncError: 'Đồng bộ thất bại: ',
    spaceModelReadOnly: 'Mô hình Space chỉ đọc',
    noSpaceModels:
      'Không có mô hình Space. Nhấn Đồng bộ để lấy mô hình từ Space.',
    noLocalModels: 'Không có mô hình cục bộ. Nhấn Tạo để thêm mô hình.',
    providerCount: '{{count}} nhà cung cấp',
    addModel: 'Thêm mô hình',
    manualAdd: 'Thủ công',
    scanAdd: 'Quét',
    scanModels: 'Quét mô hình',
    scanModelsHint:
      'Đọc danh sách mô hình khả dụng từ nhà cung cấp hiện tại rồi chọn mô hình cần thêm.',
    scannedModels: 'Kết quả quét',
    scanDebug: 'Thông tin gỡ lỗi',
    searchScannedModels: 'Tìm trong kết quả quét',
    noScannedModels: 'Chưa có kết quả quét. Nhấn nút phía trên để bắt đầu.',
    noScannedModelsMatch: 'Không có mô hình phù hợp',
    addSelectedModels: 'Thêm mục đã chọn',
    addSelectedModelsSuccess: 'Đã thêm {{count}} mô hình',
    selectAll: 'Chọn tất cả',
    alreadyAdded: 'Đã thêm',
    addLLMModel: 'Thêm mô hình LLM',
    addEmbeddingModel: 'Thêm mô hình Embedding',
    provider: 'Nhà cung cấp',
    existingProvider: 'Nhà cung cấp hiện có',
    newProvider: 'Nhà cung cấp mới',
    selectProvider: 'Chọn nhà cung cấp',
    requester: 'Loại nhà cung cấp',
    selectRequester: 'Chọn loại nhà cung cấp',
    langbotModelsDescription: 'Mô hình đám mây được cung cấp bởi LangBot Space',
    credits: 'Tín dụng',
    loginWithSpace: 'Đăng nhập với Space',
    loginToUseModels: 'Đăng nhập với Space để sử dụng mô hình đám mây',
    noModels: 'Chưa cấu hình mô hình nào',
    langbotModels: 'Mô hình LangBot',
    spaceTrialTooltip:
      'Có tín dụng dùng thử miễn phí! Đăng nhập với Space để truy cập mô hình đám mây không cần cấu hình.',
    unlockModels: 'Đăng nhập để sử dụng',
    editProvider: 'Chỉnh sửa nhà cung cấp',
    addProvider: 'Thêm nhà cung cấp',
    addProviderHint: 'Thêm nhà cung cấp để sử dụng mô hình từ các nguồn khác',
    addProviderHintSimple: 'Thêm nhà cung cấp để sử dụng mô hình',
    noProviders: 'Chưa có nhà cung cấp nào',
    providerName: 'Tên nhà cung cấp',
    providerNameRequired: 'Tên nhà cung cấp là bắt buộc',
    requesterRequired: 'Loại nhà cung cấp là bắt buộc',
    providerSaved: 'Đã lưu nhà cung cấp',
    providerCreated: 'Đã tạo nhà cung cấp',
    providerSaveError: 'Lưu nhà cung cấp thất bại: ',
    providerDeleted: 'Đã xóa nhà cung cấp',
    providerDeleteError: 'Xóa nhà cung cấp thất bại: ',
    deleteProviderConfirmation:
      'Bạn có chắc chắn muốn xóa nhà cung cấp này không?',
    loadError: 'Tải dữ liệu thất bại',
    chat: 'Trò chuyện',
    embedding: 'Embedding',
    rerank: 'Sắp xếp lại',
    rerankUrlTooltip:
      'URL đầy đủ cho endpoint sắp xếp lại (vd: https://dashscope.aliyuncs.com/compatible-api/v1/reranks)',
    rerankPathTooltip:
      'Đường dẫn thêm vào URL cơ sở (mặc định: rerank, một số dịch vụ dùng reranks)',
    modelsCount: '{{count}} mô hình',
    expandModels: 'Mở rộng',
    collapseModels: 'Thu gọn',
    fallback: {
      primary: 'Mô hình chính',
      fallbackList: 'Mô hình dự phòng',
      addFallback: 'Thêm mô hình dự phòng',
    },
  },
  bots: {
    title: 'Bot',
    description:
      'Tạo và quản lý Bot, là điểm kết nối của LangBot với các nền tảng khác nhau',
    createBot: 'Tạo Bot',
    selectFromSidebar: 'Chọn một Bot từ thanh bên',
    editBot: 'Chỉnh sửa Bot',
    getBotListError: 'Lấy danh sách Bot thất bại: ',
    botName: 'Tên Bot',
    botDescription: 'Mô tả Bot',
    botNameRequired: 'Tên Bot không được để trống',
    botDescriptionRequired: 'Mô tả Bot không được để trống',
    adapterRequired: 'Adapter không được để trống',
    defaultDescription: 'Một Bot',
    getBotConfigError: 'Lấy cấu hình Bot thất bại: ',
    saveSuccess: 'Lưu thành công',
    saveError: 'Lưu thất bại: ',
    createSuccess:
      'Tạo thành công. Vui lòng bật hoặc sửa đổi Pipeline đã liên kết',
    createError: 'Tạo thất bại: ',
    deleteSuccess: 'Xóa thành công',
    deleteError: 'Xóa thất bại: ',
    deleteConfirmation: 'Bạn có chắc chắn muốn xóa Bot này không?',
    platformAdapter: 'Nền tảng/Lựa chọn Adapter',
    selectAdapter: 'Chọn Adapter',
    adapterConfig: 'Cấu hình Adapter',
    viewAdapterDocs: 'Xem tài liệu',
    bindPipeline: 'Liên kết Pipeline',
    selectPipeline: 'Chọn Pipeline',
    selectBot: 'Chọn Bot',
    botLogTitle: 'Nhật ký Bot',
    enableAutoRefresh: 'Bật tự động làm mới',
    session: 'Phiên',
    yesterday: 'Hôm qua',
    earlier: 'Trước đó',
    dateFormat: '{{day}}/{{month}}',
    setBotEnableError: 'Thiết lập trạng thái bật Bot thất bại',
    log: 'Nhật ký',
    configuration: 'Cấu hình',
    logs: 'Nhật ký',
    basicInfo: 'Thông tin cơ bản',
    basicInfoDescription: 'Đặt tên và mô tả Bot',
    routingConnection: 'Định tuyến & Kết nối',
    routingConnectionDescription:
      'Liên kết Pipeline xử lý tin nhắn cho Bot này',
    routingRules: 'Quy tắc định tuyến có điều kiện',
    routingRulesDescription:
      'Các quy tắc được đánh giá theo thứ tự; kết quả khớp đầu tiên sẽ định tuyến đến pipeline tương ứng. Nếu không khớp, pipeline mặc định ở trên sẽ được sử dụng.',
    addRoutingRule: 'Thêm quy tắc',
    ruleTypeLauncherType: 'Loại phiên',
    ruleTypeLauncherId: 'ID phiên',
    ruleTypeMessageContent: 'Nội dung tin nhắn',
    operatorEq: 'Bằng',
    operatorNeq: 'Không bằng',
    operatorContains: 'Chứa',
    operatorNotContains: 'Không chứa',
    operatorStartsWith: 'Bắt đầu bằng',
    operatorRegex: 'Regex',
    operatorHas: 'Có',
    operatorNotHas: 'Không có',
    ruleTypeMessageHasElement: 'Phần tử tin nhắn',
    ruleValueElementPlaceholder: 'Chọn loại phần tử',
    elementImage: 'Hình ảnh',
    elementVoice: 'Giọng nói',
    elementFile: 'Tập tin',
    elementForward: 'Chuyển tiếp',
    elementFace: 'Biểu tượng cảm xúc',
    elementAt: '@Đề cập',
    elementAtAll: '@Tất cả',
    elementQuote: 'Trích dẫn',
    ruleValuePlaceholder: 'Giá trị khớp',
    ruleValueLauncherIdPlaceholder: 'ID nhóm hoặc người dùng',
    ruleValueMessagePlaceholder: 'Nội dung tin nhắn',
    ruleValuePrefixPlaceholder: 'vd. !draw',
    ruleValueRegexpPlaceholder: 'vd. ^/help',
    pipelineDiscard: 'Loại bỏ tin nhắn',
    sessionTypePerson: 'Trò chuyện riêng',
    sessionTypeGroup: 'Trò chuyện nhóm',
    adapterConfigDescription: 'Cấu hình Adapter nền tảng đã chọn',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription: 'Các hành động không thể đảo ngược và phá hủy',
    deleteBotAction: 'Xóa Bot này',
    deleteBotHint:
      'Sau khi xóa, tất cả cấu hình liên quan sẽ bị xóa vĩnh viễn.',
    webhookUrl: 'URL Webhook Callback',
    webhookUrlCopied: 'Đã sao chép URL Webhook',
    webhookUrlHint:
      'Nhấp vào ô nhập để chọn tất cả, sau đó nhấn Ctrl+C (Mac: Cmd+C) để sao chép, hoặc nhấn nút',
    webhookUrlHintEither:
      'Sử dụng một trong hai URL trên trong cấu hình nền tảng của bạn',
    webhookSaasHint:
      'Webhook yêu cầu một tên miền có thể truy cập công khai. LangBot Cloud cung cấp điểm cuối công khai sẵn sàng sử dụng cho Bot của bạn.',
    webhookSaasLink: 'Tìm hiểu thêm về LangBot Cloud',
    adapterCategory: {
      popular: 'Phổ biến',
      china: 'Trung Quốc',
      global: 'Toàn cầu',
      protocol: 'Giao thức',
    },
    logLevel: 'Mức nhật ký',
    allLevels: 'Tất cả các mức',
    selectLevel: 'Chọn mức',
    levelsSelected: 'mức đã chọn',
    viewDetailedLogs: 'Xem nhật ký chi tiết',
    viewDetails: 'Chi tiết',
    collapse: 'Thu gọn',
    imagesAttached: 'hình ảnh đính kèm',
    noLogs: 'Chưa có nhật ký',
    sessionMonitor: {
      title: 'Phiên',
      sessions: 'Phiên',
      noSessions: 'Không tìm thấy phiên nào',
      selectSession: 'Chọn một phiên để xem tin nhắn',
      noMessages: 'Không có tin nhắn trong phiên này',
      messages: 'tin nhắn',
      messageCount: '{{count}} tin nhắn',
      loading: 'Đang tải...',
      loadingSessions: 'Đang tải phiên...',
      loadingMessages: 'Đang tải tin nhắn...',
      user: 'Người dùng',
      variables: 'Biến',
      platform: 'Nền tảng',
      lastActive: 'Hoạt động lần cuối',
      refresh: 'Làm mới',
      active: 'Đang hoạt động',
      inactive: 'Không hoạt động',
      discarded: 'Đã loại bỏ',
      userMessage: 'Người dùng',
      botMessage: 'Trợ lý',
    },
  },
  plugins: {
    title: 'Tiện ích mở rộng',
    description:
      'Cài đặt và cấu hình plugin để mở rộng chức năng, vui lòng chọn chúng trong cấu hình Pipeline',
    createPlugin: 'Tạo Plugin',
    editPlugin: 'Chỉnh sửa Plugin',
    installed: 'Đã cài đặt',
    marketplace: 'Chợ ứng dụng',
    arrange: 'Sắp xếp Plugin',
    install: 'Cài đặt',
    installPlugin: 'Cài đặt Plugin',
    onlySupportGithub: 'Hiện chỉ hỗ trợ cài đặt từ GitHub',
    enterGithubLink: 'Nhập liên kết GitHub của plugin',
    installing: 'Đang cài đặt plugin...',
    installSuccess: 'Cài đặt plugin thành công',
    installFailed: 'Cài đặt plugin thất bại:',
    searchPlugin: 'Tìm kiếm plugin',
    sortBy: 'Sắp xếp theo',
    mostStars: 'Nhiều star nhất',
    recentlyAdded: 'Mới thêm gần đây',
    recentlyUpdated: 'Mới cập nhật gần đây',
    noMatchingPlugins: 'Không tìm thấy plugin phù hợp',
    loading: 'Đang tải...',
    getPluginListError: 'Lấy danh sách plugin thất bại:',
    noPluginInstalled: 'Chưa cài đặt plugin nào',
    pluginConfig: 'Cấu hình Plugin',
    pluginSort: 'Sắp xếp Plugin',
    pluginSortDescription:
      'Thứ tự plugin ảnh hưởng đến thứ tự xử lý trong cùng một sự kiện, vui lòng kéo thẻ plugin để sắp xếp',
    pluginSortSuccess: 'Sắp xếp plugin thành công',
    pluginSortError: 'Sắp xếp plugin thất bại: ',
    pluginNoConfig: 'Plugin không có mục cấu hình nào.',
    systemDisabled: 'Hệ thống Plugin đã bị tắt',
    systemDisabledDesc:
      'Hệ thống plugin chưa được bật, vui lòng sửa đổi cấu hình theo tài liệu hướng dẫn',
    connectionError: 'Lỗi kết nối hệ thống Plugin',
    connectionErrorDesc:
      'Vui lòng kiểm tra cấu hình hệ thống plugin hoặc liên hệ quản trị viên.',
    errorDetails: 'Chi tiết lỗi',
    loadingStatus: 'Đang kiểm tra trạng thái hệ thống plugin...',
    failedToGetStatus: 'Lấy trạng thái hệ thống plugin thất bại',
    pluginSystemNotReady:
      'Hệ thống plugin chưa sẵn sàng, không thể thực hiện thao tác này',
    debugInfo: 'Thông tin gỡ lỗi',
    debugInfoTitle: 'Thông tin gỡ lỗi Plugin',
    debugUrl: 'URL gỡ lỗi',
    debugKey: 'Khóa gỡ lỗi',
    noDebugKey: '(Chưa đặt)',
    debugKeyDisabled:
      'Khóa gỡ lỗi chưa được đặt, gỡ lỗi plugin không yêu cầu xác thực',
    failedToGetDebugInfo: 'Lấy thông tin gỡ lỗi thất bại',
    copiedToClipboard: 'Đã sao chép vào clipboard',
    deleting: 'Đang xóa...',
    deletePlugin: 'Xóa Plugin',
    cancel: 'Hủy',
    saveConfig: 'Lưu cấu hình',
    saving: 'Đang lưu...',
    confirmDeletePlugin:
      'Bạn có chắc chắn muốn xóa plugin ({{author}}/{{name}}) không?',
    deleteDataCheckbox: 'Đồng thời xóa cấu hình và dữ liệu lưu trữ của plugin',
    confirmDelete: 'Xác nhận xóa',
    deleteError: 'Xóa thất bại: ',
    close: 'Đóng',
    deleteConfirm: 'Xác nhận xóa',
    deleteSuccess: 'Xóa thành công',
    modifyFailed: 'Sửa đổi thất bại: ',
    componentName: {
      Tool: 'Công cụ',
      EventListener: 'Trình lắng nghe sự kiện',
      Command: 'Lệnh',
      KnowledgeEngine: 'Công cụ tri thức',
      Parser: 'Trình phân tích',
    },
    uploadLocal: 'Tải lên cục bộ',
    debugging: 'Gỡ lỗi',
    uploadLocalPlugin: 'Tải lên Plugin cục bộ',
    dragToUpload: 'Kéo tệp plugin vào đây để tải lên',
    unsupportedFileType:
      'Loại tệp không được hỗ trợ, chỉ hỗ trợ tệp .lbpkg và .zip',
    uploadingPlugin: 'Đang tải lên plugin...',
    uploadSuccess: 'Tải lên thành công',
    uploadFailed: 'Tải lên thất bại',
    selectFileToUpload: 'Chọn tệp plugin để tải lên',
    askConfirm:
      'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" ({{version}}) không?',
    fromGithub: 'Từ GitHub',
    fromLocal: 'Từ cục bộ',
    fromMarketplace: 'Từ chợ ứng dụng',
    componentsList: 'Thành phần: ',
    noComponents: 'Không có thành phần',
    delete: 'Xóa Plugin',
    update: 'Cập nhật Plugin',
    new: 'Mới',
    updateConfirm: 'Xác nhận cập nhật',
    confirmUpdatePlugin:
      'Bạn có chắc chắn muốn cập nhật plugin ({{author}}/{{name}}) không?',
    confirmUpdate: 'Xác nhận cập nhật',
    updating: 'Đang cập nhật...',
    updateSuccess: 'Cập nhật plugin thành công',
    updateError: 'Cập nhật thất bại: ',
    saveConfigSuccessNormal: 'Lưu cấu hình thành công',
    saveConfigError: 'Lưu cấu hình thất bại: ',
    config: 'Cấu hình',
    readme: 'Tài liệu',
    viewSource: 'Xem mã nguồn',
    loadingReadme: 'Đang tải tài liệu...',
    noReadme: 'Plugin này không cung cấp tài liệu README',
    fileUpload: {
      tooLarge: 'Kích thước tệp vượt quá giới hạn 10MB',
      success: 'Tải tệp lên thành công',
      failed: 'Tải tệp lên thất bại',
      uploading: 'Đang tải lên...',
      chooseFile: 'Chọn tệp',
      addFile: 'Thêm tệp',
    },
    installFromGithub: 'Từ GitHub',
    enterRepoUrl: 'Nhập URL kho lưu trữ GitHub',
    repoUrlPlaceholder: 'ví dụ: https://github.com/owner/repo',
    fetchingReleases: 'Đang lấy danh sách phiên bản...',
    selectRelease: 'Chọn phiên bản',
    noReleasesFound: 'Không tìm thấy phiên bản nào',
    fetchReleasesError: 'Lấy danh sách phiên bản thất bại: ',
    selectAsset: 'Chọn tệp để cài đặt',
    noAssetsFound: 'Không có tệp .lbpkg nào trong phiên bản này',
    fetchAssetsError: 'Lấy danh sách tệp thất bại: ',
    backToReleases: 'Quay lại danh sách phiên bản',
    backToRepoUrl: 'Quay lại URL kho lưu trữ',
    backToAssets: 'Quay lại danh sách tệp',
    releaseTag: 'Tag: {{tag}}',
    releaseName: 'Tên: {{name}}',
    publishedAt: 'Ngày phát hành: {{date}}',
    prerelease: 'Phiên bản trước phát hành',
    assetSize: 'Kích thước: {{size}}',
    confirmInstall: 'Xác nhận cài đặt',
    installFromGithubDesc: 'Cài đặt plugin từ GitHub Release',
    goToMarketplace: 'Đi đến chợ ứng dụng',
    installProgress: {
      title: 'Đang cài đặt {{name}}',
      titleGeneric: 'Cài đặt Plugin',
      overallProgress: 'Tiến độ tổng thể',
      downloading: 'Đang tải Plugin',
      installingDeps: 'Đang cài đặt phụ thuộc',
      initializing: 'Đang khởi tạo cài đặt',
      launching: 'Đang khởi chạy Plugin',
      completed: 'Hoàn thành',
      failed: 'Thất bại',
      downloadSize: 'Kích thước gói: {{size}}',
      depsInfo: '{{count}} phụ thuộc cần cài đặt',
      depsProgress: 'Đã cài {{installed}}/{{total}} · Còn lại {{remaining}}',
      installComplete: 'Cài đặt plugin thành công',
      dismiss: 'Bỏ qua',
      background: 'Chạy nền',
      taskQueue: 'Tác vụ cài đặt',
      clearCompleted: 'Xóa đã hoàn thành',
      noTasks: 'Không có tác vụ cài đặt',
    },
  },
  market: {
    searchPlaceholder: 'Tìm kiếm plugin...',
    searchResults: 'Tìm thấy {{count}} plugin',
    totalPlugins: 'Tổng cộng {{count}} plugin',
    noPlugins: 'Không có plugin nào',
    noResults: 'Không tìm thấy plugin liên quan',
    loadingMore: 'Đang tải thêm...',
    loading: 'Đang tải...',
    allLoaded: 'Đã hiển thị tất cả plugin',
    install: 'Cài đặt',
    installConfirm:
      'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" ({{version}}) không?',
    downloadComplete: 'Tải plugin "{{name}}" hoàn tất',
    installFailed: 'Cài đặt thất bại, vui lòng thử lại sau',
    loadFailed: 'Lấy danh sách plugin thất bại, vui lòng thử lại sau',
    noDescription: 'Không có mô tả',
    notFound: 'Không tìm thấy thông tin plugin',
    sortBy: 'Sắp xếp theo',
    sort: {
      recentlyAdded: 'Mới thêm gần đây',
      recentlyUpdated: 'Mới cập nhật gần đây',
      mostDownloads: 'Tải nhiều nhất',
      leastDownloads: 'Tải ít nhất',
    },
    downloads: 'lượt tải',
    download: 'Tải xuống',
    repository: 'Kho lưu trữ',
    downloadFailed: 'Tải xuống thất bại',
    noReadme: 'Plugin này không cung cấp tài liệu README',
    description: 'Mô tả',
    tagLabel: 'Thẻ',
    submissionTitle: 'Bạn có một plugin đang chờ duyệt: {{name}}',
    submissionPending: 'Plugin của bạn đang được xem xét: {{name}}',
    submissionApproved: 'Plugin của bạn đã được phê duyệt: {{name}}',
    submissionRejected: 'Plugin của bạn đã bị từ chối: {{name}}',
    clickToRevoke: 'Thu hồi',
    revokeSuccess: 'Thu hồi thành công',
    revokeFailed: 'Thu hồi thất bại',
    submissionDetails: 'Chi tiết gửi Plugin',
    markAsRead: 'Đánh dấu đã đọc',
    markAsReadSuccess: 'Đã đánh dấu đã đọc',
    markAsReadFailed: 'Đánh dấu đã đọc thất bại',
    filterByComponent: 'Thành phần',
    allComponents: 'Tất cả thành phần',
    requestPlugin: 'Yêu cầu Plugin',
    viewDetails: 'Xem chi tiết',
    deprecated: 'Không còn hỗ trợ',
    deprecatedTooltip: 'Vui lòng cài đặt plugin Công cụ tri thức tương ứng.',
    tags: {
      filterByTags: 'Lọc theo thẻ',
      selected: 'đã chọn',
      selectTags: 'Chọn thẻ',
      clearAll: 'Xóa tất cả',
      noTags: 'Không có thẻ nào',
    },
  },
  mcp: {
    title: 'MCP',
    createServer: 'Thêm máy chủ MCP',
    editServer: 'Chỉnh sửa máy chủ MCP',
    deleteServer: 'Xóa máy chủ MCP',
    confirmDeleteServer: 'Bạn có chắc chắn muốn xóa máy chủ MCP này không?',
    confirmDeleteTitle: 'Xóa máy chủ MCP',
    getServerListError: 'Lấy danh sách máy chủ MCP thất bại: ',
    serverName: 'Tên máy chủ',
    serverMode: 'Chế độ kết nối',
    selectMode: 'Chọn chế độ',
    stdio: 'Chế độ Stdio',
    sse: 'Chế độ SSE',
    http: 'Chế độ HTTP',
    noServerInstalled: 'Chưa cấu hình máy chủ MCP nào',
    serverNameRequired: 'Tên máy chủ không được để trống',
    commandRequired: 'Lệnh không được để trống',
    urlRequired: 'URL không được để trống',
    timeoutMustBePositive: 'Thời gian chờ phải là số dương',
    command: 'Lệnh',
    args: 'Tham số',
    env: 'Biến môi trường',
    url: 'URL',
    headers: 'Tiêu đề',
    timeout: 'Thời gian chờ',
    addArgument: 'Thêm tham số',
    addEnvVar: 'Thêm biến môi trường',
    addHeader: 'Thêm tiêu đề',
    keyName: 'Tên khóa',
    value: 'Giá trị',
    testing: 'Đang kiểm tra...',
    connecting: 'Đang kết nối...',
    testSuccess: 'Kiểm tra thành công',
    testFailed: 'Kiểm tra thất bại: ',
    testError: 'Lỗi kiểm tra',
    refreshSuccess: 'Làm mới thành công',
    refreshFailed: 'Làm mới thất bại: ',
    connectionSuccess: 'Kết nối thành công',
    connectionFailed: 'Kết nối thất bại, vui lòng kiểm tra URL',
    connectionFailedStatus: 'Kết nối thất bại',
    toolsFound: 'công cụ',
    unknownError: 'Lỗi không xác định',
    noToolsFound: 'Không tìm thấy công cụ nào',
    parseResultFailed: 'Phân tích kết quả kiểm tra thất bại',
    noResultReturned: 'Kiểm tra không trả về kết quả',
    getTaskFailed: 'Lấy trạng thái tác vụ thất bại',
    noTaskId: 'Không lấy được ID tác vụ',
    deleteSuccess: 'Xóa thành công',
    deleteFailed: 'Xóa thất bại: ',
    deleteError: 'Xóa thất bại: ',
    saveSuccess: 'Lưu thành công',
    saveError: 'Lưu thất bại: ',
    createSuccess: 'Tạo thành công',
    createFailed: 'Tạo thất bại: ',
    createError: 'Tạo thất bại: ',
    loadFailed: 'Tải thất bại',
    modifyFailed: 'Sửa đổi thất bại: ',
    toolCount: 'Công cụ: {{count}}',
    statusConnected: 'Đã kết nối',
    statusDisconnected: 'Đã ngắt kết nối',
    statusError: 'Lỗi kết nối',
    statusDisabled: 'Đã tắt',
    loading: 'Đang tải...',
    starCount: 'Star: {{count}}',
    install: 'Cài đặt',
    installFromGithub: 'Cài đặt máy chủ MCP từ GitHub',
    add: 'Thêm',
    name: 'Tên',
    nameRequired: 'Tên không được để trống',
    sseTimeout: 'Thời gian chờ SSE',
    sseTimeoutDescription: 'Thời gian chờ để thiết lập kết nối SSE',
    extraParametersDescription:
      'Tham số bổ sung để cấu hình hành vi cụ thể của máy chủ MCP',
    timeoutMustBeNumber: 'Thời gian chờ phải là một số',
    timeoutNonNegative: 'Thời gian chờ không được âm',
    sseTimeoutMustBeNumber: 'Thời gian chờ SSE phải là một số',
    sseTimeoutNonNegative: 'Thời gian chờ SSE không được âm',
    updateSuccess: 'Cập nhật thành công',
    updateFailed: 'Cập nhật thất bại: ',
    selectFromSidebar: 'Chọn một máy chủ MCP từ thanh bên',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription:
      'Các hành động không thể đảo ngược và phá hủy cho máy chủ MCP này.',
    deleteMCPAction: 'Xóa máy chủ MCP này',
    deleteMCPHint: 'Sau khi xóa, cấu hình máy chủ MCP này không thể khôi phục.',
  },
  pipelines: {
    title: 'Pipeline',
    description:
      'Pipeline xác định luồng xử lý sự kiện tin nhắn, dùng để liên kết với Bot',
    createPipeline: 'Tạo Pipeline',
    selectFromSidebar: 'Chọn một Pipeline từ thanh bên',
    editPipeline: 'Chỉnh sửa Pipeline',
    chat: 'Trò chuyện',
    configuration: 'Cấu hình',
    debugChat: 'Trò chuyện gỡ lỗi',
    getPipelineListError: 'Lấy danh sách Pipeline thất bại: ',
    daysAgo: 'ngày trước',
    today: 'Hôm nay',
    updateTime: 'Cập nhật ',
    defaultBadge: 'Mặc định',
    sortBy: 'Sắp xếp theo',
    newestCreated: 'Tạo mới nhất',
    earliestCreated: 'Tạo sớm nhất',
    recentlyEdited: 'Chỉnh sửa gần đây',
    earliestEdited: 'Chỉnh sửa sớm nhất',
    basicInfo: 'Thông tin cơ bản',
    basicInfoDescription: 'Đặt tên, biểu tượng và mô tả Pipeline',
    aiCapabilities: 'AI',
    triggerConditions: 'Điều kiện kích hoạt',
    safetyControls: 'An toàn',
    outputProcessing: 'Đầu ra',
    nameRequired: 'Tên không được để trống',
    descriptionRequired: 'Mô tả không được để trống',
    createSuccess: 'Tạo thành công. Vui lòng chỉnh sửa tham số Pipeline',
    createError: 'Tạo thất bại: ',
    saveSuccess: 'Lưu thành công',
    saveError: 'Lưu thất bại: ',
    copySuffix: ' Bản sao',
    deleteConfirmation:
      'Bạn có chắc chắn muốn xóa Pipeline này không? Bot liên kết với Pipeline này sẽ không hoạt động.',
    defaultPipelineCannotDelete: 'Không thể xóa Pipeline mặc định',
    deleteSuccess: 'Xóa thành công',
    deleteError: 'Xóa thất bại: ',
    copyConfirmTitle: 'Xác nhận sao chép',
    copyConfirmation:
      'Bạn có chắc chắn muốn sao chép Pipeline này không? Thao tác này sẽ tạo một Pipeline mới với tất cả cấu hình.',
    unsavedChanges: 'Bạn có thay đổi chưa lưu',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription: 'Các hành động không thể đảo ngược và phá hủy',
    deletePipelineAction: 'Xóa Pipeline này',
    deletePipelineHint:
      'Sau khi xóa, Bot liên kết với Pipeline này sẽ ngừng hoạt động.',
    copyPipelineAction: 'Sao chép Pipeline này',
    copyPipelineHint: 'Tạo một Pipeline mới với tất cả cấu hình được sao chép.',
    extensions: {
      title: 'Tiện ích mở rộng',
      loadError: 'Tải plugin thất bại',
      saveSuccess: 'Lưu thành công',
      saveError: 'Lưu thất bại',
      noPluginsAvailable: 'Không có plugin nào',
      disabled: 'Đã tắt',
      noPluginsSelected: 'Chưa chọn plugin nào',
      addPlugin: 'Thêm Plugin',
      selectPlugins: 'Chọn Plugin',
      pluginsTitle: 'Plugin',
      mcpServersTitle: 'Máy chủ MCP',
      noMCPServersSelected: 'Chưa chọn máy chủ MCP nào',
      addMCPServer: 'Thêm máy chủ MCP',
      selectMCPServers: 'Chọn máy chủ MCP',
      toolCount: '{{count}} công cụ',
      noPluginsInstalled: 'Chưa cài đặt plugin nào',
      noMCPServersConfigured: 'Chưa cấu hình máy chủ MCP nào',
      selectAll: 'Chọn tất cả',
      enableAllPlugins: 'Bật tất cả Plugin',
      enableAllMCPServers: 'Bật tất cả máy chủ MCP',
      allPluginsEnabled: 'Đã bật tất cả plugin',
      allMCPServersEnabled: 'Đã bật tất cả máy chủ MCP',
    },
    debugDialog: {
      title: 'Trò chuyện Pipeline',
      selectPipeline: 'Chọn Pipeline',
      sessionType: 'Loại phiên',
      privateChat: 'Trò chuyện riêng',
      groupChat: 'Trò chuyện nhóm',
      send: 'Gửi',
      reset: 'Đặt lại cuộc trò chuyện',
      inputPlaceholder: 'Gửi tin nhắn {{type}}...',
      noMessages: 'Không có tin nhắn',
      userMessage: 'Người dùng',
      botMessage: 'Bot',
      sendFailed: 'Gửi thất bại',
      resetSuccess: 'Đặt lại cuộc trò chuyện thành công',
      resetFailed: 'Đặt lại thất bại',
      loadMessagesFailed: 'Tải tin nhắn thất bại',
      loadPipelinesFailed: 'Tải Pipeline thất bại',
      atTips: 'Nhắc đến Bot',
      streaming: 'Đang truyền',
      streamOutput: 'Luồng',
      connected: 'WebSocket đã kết nối',
      disconnected: 'WebSocket đã ngắt kết nối',
      connectionError: 'Lỗi kết nối WebSocket',
      connectionFailed: 'Kết nối WebSocket thất bại',
      notConnected: 'WebSocket chưa kết nối, vui lòng thử lại sau',
      imageUploadFailed: 'Tải hình ảnh lên thất bại',
      reply: 'Trả lời',
      replyTo: 'Trả lời cho',
      showMarkdown: 'Hiển thị Markdown',
      showRaw: 'Hiển thị thô',
      allMembers: 'Tất cả thành viên',
      file: 'Tệp',
      voice: 'Giọng nói',
      uploadImage: 'Tải hình ảnh lên',
      uploading: 'Đang tải lên...',
    },
    monitoring: {
      title: 'Bảng điều khiển',
      description: 'Xem nhật ký thực thi và lỗi của Pipeline này (24 giờ qua)',
      detailedLogs: 'Nhật ký chi tiết',
    },
  },
  knowledge: {
    title: 'Cơ sở tri thức',
    createKnowledgeBase: 'Tạo cơ sở tri thức',
    selectFromSidebar: 'Chọn một cơ sở tri thức từ thanh bên',
    editKnowledgeBase: 'Chỉnh sửa cơ sở tri thức',
    selectKnowledgeBase: 'Chọn cơ sở tri thức',
    selectKnowledgeBases: 'Chọn cơ sở tri thức',
    addKnowledgeBase: 'Thêm cơ sở tri thức',
    noKnowledgeBaseSelected: 'Chưa chọn cơ sở tri thức nào',
    empty: 'Trống',
    editDocument: 'Tài liệu',
    description: 'Cấu hình cơ sở tri thức để cải thiện phản hồi LLM',
    metadata: 'Siêu dữ liệu',
    documents: 'Tài liệu',
    kbNameRequired: 'Tên cơ sở tri thức không được để trống',
    kbDescriptionRequired: 'Mô tả cơ sở tri thức không được để trống',
    embeddingModelUUIDRequired: 'Mô hình Embedding không được để trống',
    daysAgo: 'ngày trước',
    today: 'Hôm nay',
    kbName: 'Tên cơ sở tri thức',
    kbDescription: 'Mô tả cơ sở tri thức',
    topK: 'Top K',
    topKRequired: 'Top K không được để trống',
    topKMax: 'Giá trị tối đa của Top K là 30',
    topKdescription:
      'Dùng để chỉ định số lượng tài liệu liên quan cần truy xuất, phạm vi từ 1 đến 30.',
    defaultDescription: 'Một cơ sở tri thức',
    embeddingModelUUID: 'Mô hình Embedding',
    selectEmbeddingModel: 'Chọn mô hình Embedding',
    embeddingModelDescription:
      'Dùng để véc tơ hóa văn bản, bạn có thể cấu hình trong trang Mô hình',
    updateTime: 'Cập nhật ',
    cannotChangeEmbeddingModel:
      'Không thể thay đổi mô hình Embedding sau khi tạo cơ sở tri thức',
    updateKnowledgeBaseSuccess: 'Cập nhật cơ sở tri thức thành công',
    updateKnowledgeBaseFailed: 'Cập nhật cơ sở tri thức thất bại: ',
    documentsTab: {
      name: 'Tên',
      status: 'Trạng thái',
      noResults: 'Không có tài liệu',
      dragAndDrop: 'Kéo và thả tệp vào đây hoặc nhấp để tải lên',
      uploading: 'Đang tải lên...',
      supportedFormats:
        'Hỗ trợ các định dạng PDF, Word, TXT, Markdown, HTML, ZIP và các định dạng tài liệu khác',
      uploadSuccess: 'Tải tệp lên thành công!',
      uploadError: 'Tải tệp lên thất bại: ',
      uploadingFile: 'Đang tải tệp lên...',
      fileSizeExceeded:
        'Kích thước tệp vượt quá giới hạn 10MB. Vui lòng chia thành các tệp nhỏ hơn.',
      actions: 'Hành động',
      delete: 'Xóa tệp',
      fileDeleteSuccess: 'Xóa tệp thành công',
      fileDeleteFailed: 'Xóa tệp thất bại: ',
      processing: 'Đang xử lý',
      completed: 'Hoàn tất',
      failed: 'Thất bại',
      selectParser: 'Chọn trình phân tích',
      builtInParser: 'Được cung cấp bởi Công cụ tri thức',
      noParserAvailable:
        'Không có trình phân tích hỗ trợ loại tệp này. Vui lòng cài đặt plugin trình phân tích có thể xử lý định dạng này.',
      installParserHint: 'Duyệt plugin trình phân tích trong Marketplace →',
      confirmUpload: 'Tải lên',
      cancelUpload: 'Hủy',
    },
    deleteKnowledgeBaseConfirmation:
      'Bạn có chắc chắn muốn xóa cơ sở tri thức này không? Tất cả tài liệu trong cơ sở tri thức này sẽ bị xóa.',
    retrieve: 'Kiểm tra truy xuất',
    retrieveTest: 'Kiểm tra truy xuất',
    query: 'Truy vấn',
    queryPlaceholder: 'Nhập văn bản truy vấn...',
    distance: 'Khoảng cách',
    content: 'Nội dung',
    fileName: 'Tên tệp',
    noResults: 'Không có kết quả',
    retrieveError: 'Truy xuất thất bại: ',
    unknownEngine: 'Công cụ không xác định',
    knowledgeEngine: 'Công cụ tri thức',
    knowledgeEngineRequired: 'Công cụ tri thức là bắt buộc',
    selectKnowledgeEngine: 'Chọn công cụ tri thức',
    builtInEngine: 'Công cụ tích hợp',
    cannotChangeKnowledgeEngine:
      'Không thể thay đổi công cụ tri thức sau khi tạo',
    basicInfo: 'Thông tin cơ bản',
    basicInfoDescription: 'Đặt tên, biểu tượng và mô tả cơ sở tri thức',
    engineSettings: 'Cài đặt công cụ',
    engineSettingsDescription: 'Cấu hình cho công cụ tri thức đã chọn',
    engineSettingsReadonly: 'chỉ đọc trong chế độ chỉnh sửa',
    retrievalSettings: 'Cài đặt truy xuất',
    retrievalSettingsDescription:
      'Cấu hình cách truy xuất tài liệu từ cơ sở tri thức này',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription: 'Các hành động không thể đảo ngược và phá hủy',
    deleteKbAction: 'Xóa cơ sở tri thức này',
    deleteKbHint:
      'Sau khi xóa, tất cả tài liệu và dữ liệu trong cơ sở tri thức này sẽ bị xóa vĩnh viễn.',
    noEnginesAvailable: 'Không có công cụ cơ sở tri thức nào khả dụng',
    installEngineHint: 'Vui lòng cài đặt plugin "Công cụ tri thức" trước',
    createKnowledgeBaseFailed: 'Tạo cơ sở tri thức thất bại: ',
    loadKnowledgeBaseFailed: 'Tải cơ sở tri thức thất bại: ',
    deleteKnowledgeBaseFailed: 'Xóa cơ sở tri thức thất bại: ',
    getKnowledgeBaseListError: 'Lấy danh sách cơ sở tri thức thất bại: ',
    embeddingModel: 'Mô hình Embedding',
    embeddingModelRequired: 'Mô hình Embedding là bắt buộc cho công cụ này',
    addExternal: 'Thêm cơ sở tri thức bên ngoài',
    createExternalSuccess: 'Tạo cơ sở tri thức bên ngoài thành công',
    updateExternalSuccess: 'Cập nhật cơ sở tri thức bên ngoài thành công',
    deleteExternalSuccess: 'Xóa cơ sở tri thức bên ngoài thành công',
    retriever: 'Trình truy xuất',
    selectRetriever: 'Chọn trình truy xuất...',
    retrieverConfiguration: 'Cấu hình trình truy xuất',
    retrieverInstallInfo:
      'Bạn có thể cài đặt plugin trình truy xuất tri thức từ',
    retrieverMarketLink: 'đây',
    migration: {
      title: 'Di chuyển cơ sở tri thức',
      description:
        'Phiên bản mới đã tái cấu trúc cơ sở tri thức thành kiến trúc dựa trên plugin, hợp nhất cơ sở tri thức tích hợp và bên ngoài thành plugin "Công cụ tri thức". Cần di chuyển dữ liệu cơ sở tri thức cũ. Dữ liệu cũ của bạn đã được tự động sao lưu trong cơ sở dữ liệu.',
      detected:
        'Phát hiện {{total}} cơ sở tri thức cần di chuyển ({{internal}} nội bộ, {{external}} bên ngoài).',
      startWithInstall: 'Tự động cài đặt Plugin & Di chuyển',
      startDataOnly: 'Chỉ di chuyển dữ liệu',
      dataOnlyHint:
        '"Chỉ di chuyển dữ liệu" dành cho môi trường ngoại tuyến/mạng nội bộ. Vui lòng cài đặt plugin tương ứng thủ công sau khi di chuyển.',
      dismiss: 'Hủy bỏ dữ liệu gốc',
      running: 'Đang di chuyển cơ sở tri thức, vui lòng chờ...',
      success: 'Di chuyển cơ sở tri thức hoàn tất',
      error: 'Di chuyển cơ sở tri thức thất bại: ',
      dismissError: 'Thao tác thất bại',
      retry: 'Thử lại',
    },
  },
  register: {
    title: 'Khởi tạo LangBot 👋',
    description: 'Đây là lần đầu tiên bạn khởi động LangBot',
    adminAccountNote:
      'Tài khoản bạn sử dụng ở đây sẽ được đặt làm tài khoản quản trị viên',
    register: 'Đăng ký',
    initWithSpace: 'Khởi tạo với Space',
    spaceRecommended:
      'Khuyến nghị: Sử dụng API mô hình ổn định chính thức và dịch vụ đám mây',
    spaceInfoTip1:
      'Space cung cấp dịch vụ xác thực tài khoản thống nhất mà không tải lên bất kỳ thông tin nhạy cảm nào của bạn.',
    spaceInfoTip2:
      'Đăng nhập bằng tài khoản Space cho phép bạn truy cập Mô hình LangBot và các dịch vụ đám mây khác, bao gồm tín dụng gọi mô hình miễn phí để giúp bạn bắt đầu nhanh chóng.',
    spaceInfoTip3:
      'Phương thức đăng nhập của bạn không ảnh hưởng đến các tính năng khác. Bạn có thể cấu hình và sử dụng mô hình từ các nguồn khác bất cứ lúc nào.',
    registerLocal: 'Đăng ký tài khoản cục bộ',
    registerWithPassword: 'Đăng ký bằng email và mật khẩu',
    initSuccess: 'Khởi tạo thành công, vui lòng đăng nhập',
    initFailed: 'Khởi tạo thất bại: ',
  },
  resetPassword: {
    title: 'Đặt lại mật khẩu 🔐',
    description:
      'Nhập khóa khôi phục và mật khẩu mới để đặt lại mật khẩu tài khoản',
    recoveryKey: 'Khóa khôi phục',
    recoveryKeyDescription:
      'Được lưu trữ trong `system.recovery_key` của tệp cấu hình `data/config.yaml`',
    newPassword: 'Mật khẩu mới',
    enterRecoveryKey: 'Nhập khóa khôi phục',
    enterNewPassword: 'Nhập mật khẩu mới',
    recoveryKeyRequired: 'Khóa khôi phục không được để trống',
    newPasswordRequired: 'Mật khẩu mới không được để trống',
    resetPassword: 'Đặt lại mật khẩu',
    resetting: 'Đang đặt lại...',
    resetSuccess: 'Đặt lại mật khẩu thành công, vui lòng đăng nhập',
    resetFailed:
      'Đặt lại mật khẩu thất bại, vui lòng kiểm tra email và khóa khôi phục',
    backToLogin: 'Quay lại đăng nhập',
  },
  embedding: {
    description: 'Quản lý mô hình Embedding để véc tơ hóa văn bản',
    createModel: 'Tạo mô hình Embedding',
    editModel: 'Chỉnh sửa mô hình Embedding',
    getModelListError: 'Lấy danh sách mô hình Embedding thất bại: ',
    embeddingModels: 'Embedding',
    extraParametersDescription:
      'Sẽ được đính kèm vào nội dung yêu cầu, như encoding_format, dimensions, v.v.',
  },
  llm: {
    description: 'Quản lý mô hình LLM để sinh hội thoại',
    llmModels: 'LLM',
    extraParametersDescription:
      'Sẽ được đính kèm vào nội dung yêu cầu, như max_tokens, temperature, top_p, v.v.',
  },
  version: {
    newVersionAvailable: 'Có phiên bản mới',
    viewUpdateGuide: 'Xem hướng dẫn cập nhật',
    noReleaseNotes: 'Không có ghi chú phát hành',
  },
  account: {
    settings: 'Cài đặt tài khoản',
    setPassword: 'Đặt mật khẩu',
    passwordSetSuccess: 'Đặt mật khẩu thành công',
    passwordStatus: 'Mật khẩu cục bộ',
    passwordSet: 'Đã đặt',
    passwordNotSet: 'Chưa đặt',
    passwordSetDescription:
      'Mật khẩu đã được đặt, bạn có thể đăng nhập bằng email và mật khẩu',
    spaceStatus: 'Tài khoản Space',
    spaceBound: 'Đã liên kết',
    spaceNotBound: 'Chưa liên kết',
    spaceBoundDescription:
      'Tài khoản Space đã liên kết, có thể sử dụng API mô hình chính thức và dịch vụ đám mây',
    bindSpace: 'Liên kết tài khoản Space',
    bindSpaceDescription:
      'Liên kết để sử dụng API mô hình chính thức và dịch vụ đám mây',
    bindSpaceButton: 'Liên kết',
    bindSpaceConfirmTitle: 'Xác nhận liên kết',
    bindSpaceConfirmDescription:
      'Bạn sắp liên kết phiên bản cục bộ với tài khoản Space',
    bindSpaceWarning:
      'Sau khi liên kết, email đăng nhập của bạn sẽ được đổi từ {{localEmail}} sang email tài khoản Space.',
    bindSpaceSuccess: 'Liên kết tài khoản Space thành công',
    bindSpaceFailed: 'Liên kết tài khoản Space thất bại',
    bindSpaceInvalidState:
      'Yêu cầu liên kết không hợp lệ. Vui lòng thử lại từ cài đặt tài khoản.',
    setPasswordHint: 'Đặt mật khẩu để đăng nhập bằng email và mật khẩu',
    spaceEmailMismatch:
      'Email đăng nhập Space không khớp với email tài khoản cục bộ',
  },
  monitoring: {
    title: 'Bảng điều khiển',
    description: 'Giám sát hoạt động Bot, cuộc gọi LLM và hiệu suất hệ thống',
    overview: 'Tổng quan',
    totalMessages: 'Tổng tin nhắn',
    llmCallsCount: 'Cuộc gọi LLM',
    modelCallsCount: 'Cuộc gọi mô hình',
    successRate: 'Tỷ lệ thành công',
    activeSessions: 'Phiên đang hoạt động',
    last24Hours: '24 giờ qua',
    filters: {
      title: 'Bộ lọc',
      bot: 'Bot',
      pipeline: 'Pipeline',
      allBots: 'Tất cả Bot',
      selectBot: 'Chọn Bot',
      allPipelines: 'Tất cả Pipeline',
      selectPipeline: 'Chọn Pipeline',
      loading: 'Đang tải...',
      timeRange: 'Khoảng thời gian',
      customRange: 'Tùy chỉnh',
      from: 'Từ',
      to: 'Đến',
      apply: 'Áp dụng',
      reset: 'Đặt lại bộ lọc',
      lastHour: '1 giờ qua',
      last6Hours: '6 giờ qua',
      last24Hours: '24 giờ qua',
      last7Days: '7 ngày qua',
      last30Days: '30 ngày qua',
    },
    tabs: {
      messages: 'Bản ghi tin nhắn',
      llmCalls: 'Cuộc gọi LLM',
      embeddingCalls: 'Cuộc gọi Embedding',
      modelCalls: 'Cuộc gọi mô hình',
      sessions: 'Phân tích phiên',
      feedback: 'Phản hồi người dùng',
      errors: 'Nhật ký lỗi',
    },
    messageList: {
      timestamp: 'Thời gian',
      bot: 'Bot',
      pipeline: 'Pipeline',
      message: 'Tin nhắn',
      sessionId: 'ID phiên',
      status: 'Trạng thái',
      actions: 'Hành động',
      viewDetails: 'Xem chi tiết',
      copyId: 'Sao chép ID',
      noMessages: 'Không tìm thấy tin nhắn',
      noMessagesDescription: 'Hãy thử điều chỉnh bộ lọc hoặc kiểm tra lại sau',
      loading: 'Đang tải tin nhắn...',
      loadMore: 'Tải thêm',
      autoRefresh: 'Tự động làm mới',
      platform: 'Vai trò',
      user: 'Người dùng',
      level: 'Mức',
      runner: 'Trình chạy',
      viewConversation: 'Xem cuộc trò chuyện',
    },
    llmCalls: {
      title: 'Cuộc gọi LLM',
      model: 'Mô hình',
      tokens: 'Token',
      duration: 'Thời lượng',
      cost: 'Chi phí',
      noData: 'Không tìm thấy cuộc gọi LLM',
      inputTokens: 'Token đầu vào',
      outputTokens: 'Token đầu ra',
      totalTokens: 'Tổng Token',
      avgDuration: 'Thời lượng trung bình',
      calls: 'Cuộc gọi',
    },
    embeddingCalls: {
      title: 'Cuộc gọi Embedding',
      model: 'Mô hình',
      tokens: 'Token',
      duration: 'Thời lượng',
      noData: 'Không tìm thấy cuộc gọi Embedding',
      promptTokens: 'Token prompt',
      totalTokens: 'Tổng Token',
      inputCount: 'Số đầu vào',
      knowledgeBase: 'Cơ sở tri thức',
      queryText: 'Truy vấn',
    },
    modelCalls: {
      title: 'Cuộc gọi mô hình',
      llmModel: 'LLM',
      embeddingModel: 'Embedding',
      embeddingCall: 'Embedding',
      retrieveCall: 'Truy xuất',
      noData: 'Không tìm thấy cuộc gọi mô hình',
    },
    sessions: {
      sessionId: 'ID phiên',
      messageCount: 'Tin nhắn',
      duration: 'Thời lượng',
      lastActivity: 'Hoạt động cuối',
      noSessions: 'Không tìm thấy phiên nào',
      startTime: 'Thời gian bắt đầu',
      messageStats: 'Thống kê tin nhắn',
      totalMessages: 'Tổng tin nhắn',
      successMessages: 'Thành công',
      errorMessages: 'Thất bại',
      llmStats: 'Thống kê LLM',
      noData: 'Không tìm thấy phiên',
    },
    errors: {
      title: 'Lỗi',
      errorType: 'Loại lỗi',
      errorMessage: 'Thông báo lỗi',
      occurredAt: 'Xảy ra lúc',
      noErrors: 'Không tìm thấy lỗi',
      stackTrace: 'Stack Trace',
    },
    feedback: {
      title: 'Phản hồi người dùng',
      totalFeedback: 'Tổng phản hồi',
      totalLikes: 'Lượt thích',
      totalDislikes: 'Lượt không thích',
      satisfactionRate: 'Tỷ lệ hài lòng',
      like: 'Thích',
      dislike: 'Không thích',
      noFeedback: 'Chưa có phản hồi',
      noFeedbackDescription: 'Phản hồi của người dùng sẽ hiển thị tại đây',
      feedbackList: 'Danh sách phản hồi',
      feedbackContent: 'Nội dung phản hồi',
      contextInfo: 'Thông tin ngữ cảnh',
      userId: 'ID người dùng',
      messageId: 'ID tin nhắn',
      streamId: 'ID câu hỏi liên quan',
      inaccurateReasons: 'Lý do không chính xác',
      platform: 'Nền tảng',
      exportFeedback: 'Xuất phản hồi',
    },
    queries: {
      title: 'Truy vấn',
    },
    messageDetails: {
      noData: 'Không có cuộc gọi LLM hoặc lỗi cho truy vấn này',
    },
    queryVariables: {
      title: 'Biến truy vấn',
    },
    trafficChart: {
      title: 'Tổng quan lưu lượng',
      messages: 'Tin nhắn',
      llmCalls: 'Cuộc gọi LLM',
      noData: 'Không có dữ liệu lưu lượng',
    },
    viewMonitoring: 'Xem giám sát',
    refreshData: 'Làm mới dữ liệu',
    exportData: 'Xuất dữ liệu',
    export: {
      title: 'Xuất dữ liệu',
      exporting: 'Đang xuất...',
      messages: 'Tin nhắn',
      llmCalls: 'Cuộc gọi LLM',
      embeddingCalls: 'Cuộc gọi Embedding',
      errors: 'Nhật ký lỗi',
      sessions: 'Phiên',
      feedback: 'Phản hồi người dùng',
    },
  },
  limitation: {
    maxBotsReached:
      'Đã đạt số lượng Bot tối đa ({{max}}). Vui lòng xóa một Bot hiện có trước khi tạo mới.',
    maxPipelinesReached:
      'Đã đạt số lượng Pipeline tối đa ({{max}}). Vui lòng xóa một Pipeline hiện có trước khi tạo mới.',
    maxExtensionsReached:
      'Đã đạt số lượng tiện ích mở rộng tối đa ({{max}}). Vui lòng xóa một máy chủ MCP hoặc plugin hiện có trước khi thêm mới.',
  },
  wizard: {
    sidebarDescription: 'Tạo Bot với các bước hướng dẫn',
    loading: 'Đang tải trình hướng dẫn...',
    loadError: 'Tải dữ liệu trình hướng dẫn thất bại',
    skip: 'Bỏ qua',
    skipConfirmMessage:
      'Bạn có thể vào lại trình hướng dẫn Bắt đầu nhanh từ menu tài khoản sau, hoặc tạo Bot thủ công.',
    skipConfirmOk: 'OK',
    prev: 'Trước',
    next: 'Tiếp',
    finish: 'Tạo & Triển khai',
    confirmCreateBot: 'Xác nhận, Tạo Bot',
    createSuccess: 'Tạo Pipeline và liên kết với Bot thành công!',
    botCreateSuccess: 'Tạo Bot thành công!',
    botSaveSuccess: 'Cấu hình Bot đã lưu và bật!',
    createError: 'Tạo tài nguyên thất bại',
    spaceAuthError: 'Khởi tạo ủy quyền Space thất bại',
    skipSaveError: 'Lưu trạng thái bỏ qua thất bại. Vui lòng thử lại.',
    completeSaveError: 'Lưu trạng thái hoàn tất thất bại. Vui lòng thử lại.',
    step: {
      platform: 'Nền tảng',
      botConfig: 'Thiết lập Bot',
      aiEngine: 'Công cụ AI',
      done: 'Hoàn tất',
    },
    platform: {
      title: 'Chọn nền tảng',
      description: 'Chọn nền tảng nhắn tin mà Bot của bạn sẽ kết nối.',
    },
    botConfig: {
      title: 'Cấu hình Bot của bạn',
      description: 'Thiết lập Bot và xác minh hoạt động trước khi tiếp tục.',
      saveBot: 'Lưu & Bật Bot',
      resaveBot: 'Lưu lại cấu hình',
      botSaved:
        'Cấu hình Bot đã lưu và bật. Kiểm tra nhật ký để xác minh kết nối.',
      logsTitle: 'Nhật ký Bot',
      logsDescription:
        'Giám sát hoạt động Bot để xác minh kết nối nền tảng đang hoạt động.',
    },
    aiEngine: {
      title: 'Chọn công cụ AI',
      description: 'Chọn công cụ AI sẽ cung cấp trí tuệ cho Bot của bạn.',
    },
    spaceBanner: {
      message:
        'Kết nối với LangBot Space để nhận tín dụng dùng thử mô hình miễn phí và thiết lập tức thì không cần cấu hình!',
      action: 'Ủy quyền với Space',
    },
    config: {
      botInfo: 'Thông tin Bot',
      botNamePlaceholder: 'Nhập tên Bot',
      botDescPlaceholder: 'Nhập mô tả Bot (tùy chọn)',
      platformConfig: 'Cấu hình {{platform}}',
      aiConfig: 'Cấu hình {{engine}}',
    },
    done: {
      title: 'Hoàn tất!',
      description:
        'Bot của bạn đã được tạo và kết nối với Pipeline AI. Bạn có thể quản lý nó từ bàn làm việc.',
      backToWorkbench: 'Quay lại bàn làm việc',
    },
  },
  workflows: {
    title: 'Workflows',
    description: 'Create and manage visual workflows for complex message processing logic',
    createWorkflow: 'Create Workflow',
    selectFromSidebar: 'Select a workflow from the sidebar',
    editWorkflow: 'Edit Workflow',
    newWorkflow: 'New Workflow',
    getWorkflowListError: 'Failed to get workflow list: ',
    workflowName: 'Workflow Name',
    workflowDescription: 'Workflow Description',
    workflowNameRequired: 'Workflow name is required',
    defaultDescription: 'A workflow',
    getWorkflowError: 'Failed to get workflow: ',
    loadError: 'Failed to load workflow',
    saveSuccess: 'Saved successfully',
    saveError: 'Failed to save: ',
    createSuccess: 'Workflow created successfully',
    createError: 'Failed to create: ',
    deleteSuccess: 'Deleted successfully',
    deleteError: 'Failed to delete: ',
    deleteConfirmation: 'Are you sure you want to delete this workflow?',
    copySuccess: 'Copied successfully',
    copyError: 'Failed to copy: ',
    export: 'Export',
    import: 'Import',
    exportSuccess: 'Workflow exported',
    importSuccess: 'Workflow imported',
    importError: 'Import failed: Invalid file format',
    publish: 'Publish',
    publishSuccess: 'Published successfully',
    publishError: 'Failed to publish',
    configuration: 'Configuration',
    executions: 'Executions',
    editor: 'Editor',
    debugChat: 'Trò chuyện gỡ lỗi',
    basicInfo: 'Basic Info',
    basicInfoDesc: 'Set workflow name, icon and description',
    basicInfoDescription: 'Set workflow name and description',
    dangerZone: 'Danger Zone',
    dangerZoneDesc: 'Irreversible operations',
    dangerZoneDescription: 'Irreversible operations',
    deleteWorkflowAction: 'Delete this workflow',
    deleteWorkflowHint: 'Once deleted, all associated configurations will be permanently removed and cannot be recovered.',
    deleteWorkflow: 'Delete Workflow',
    deleteConfirm: 'Confirm Delete',
    deleteConfirmDesc: 'Are you sure you want to delete workflow "{{name}}"? This action cannot be undone.',
    // Form component
    name: 'Name',
    namePlaceholder: 'Enter workflow name',
    descriptionPlaceholder: 'Enter workflow description (optional)',
    enabled: 'Enabled',
    enabledDesc: 'When enabled, the workflow can be triggered for execution',
    loading: 'Loading...',
    info: 'Workflow Info',
    uuid: 'UUID',
    version: 'Version',
    createdAt: 'Created At',
    updatedAt: 'Updated At',
    // Executions tab
    totalExecutions: '{{count}} execution(s) total',
    statistics: 'Statistics',
    successfulCount: '{{count}} successful',
    successRate: 'Success Rate',
    averageDuration: 'Avg. Duration',
    perExecution: 'per execution',
    failedExecutions: 'Failed',
    lastExecution: 'Last run',
    filterByStatus: 'Filter by status',
    allStatuses: 'All statuses',
    manualTrigger: 'Manual Trigger',
    executionId: 'Execution ID',
    status: 'Status',
    triggerType: 'Trigger Type',
    startedAt: 'Started At',
    duration: 'Duration',
    noExecutions: 'No executions yet',
    executionDetails: 'Execution Details',
    error: 'Error',
    nodeExecutions: 'Node Executions',
    result: 'Result',
    'status.pending': 'Pending',
    'status.running': 'Running',
    'status.completed': 'Completed',
    'status.failed': 'Failed',
    'status.cancelled': 'Cancelled',
    // Editor component translations
    nodePalette: 'Node Palette',
    properties: 'Properties',
    zoomIn: 'Zoom In',
    zoomOut: 'Zoom Out',
    fitView: 'Fit View',
    unsavedChanges: 'Unsaved changes',
    paste: 'Paste',
    deleted: 'Deleted',
    nothingToCopy: 'No nodes selected to copy',
    nothingToPaste: 'Clipboard is empty',
    copied: 'Copied {{count}} node(s)',
    pasted: 'Pasted {{count}} node(s)',
    nodesSelected: '{{count}} node(s) selected',
    edgesSelected: '{{count}} edge(s) selected',
    // Node palette
    searchNodes: 'Search nodes...',
    loadingNodeTypes: 'Loading node types...',
    noNodesFound: 'No matching nodes found',
    clearSearch: 'Clear search',
    dragToAdd: 'Drag nodes to add to canvas',
    // Property panel
    selectNodeOrEdge: 'Select a node or edge',
    selectNodeOrEdgeHint: 'Click on a node or edge in the canvas to view and edit its properties',
    edgeProperties: 'Edge Properties',
    nodeProperties: 'Node Properties',
    condition: 'Condition',
    hasCondition: 'Set',
    conditionPlaceholder: 'Enter condition expression, e.g. output.success == true',
    conditionHelp: 'When condition is empty, this edge will always be executed. Use {{variable}} to reference context variables.',
    deleteEdge: 'Delete Edge',
    deleteEdgeConfirm: 'Confirm Delete Edge',
    deleteEdgeConfirmDesc: 'This edge will be permanently removed.',
    nodeLabel: 'Node Label',
    nodeLabelPlaceholder: 'Enter node display name',
    nodeId: 'Node ID',
    inputOutputVariables: 'Input/Output Variables',
    inputs: 'Inputs',
    outputs: 'Outputs',
    availableVariables: 'Available Variables',
    globalVariables: 'Global Variables',
    messageContent: 'Message Content',
    messageSender: 'Sender',
    platform: 'Platform',
    sessionId: 'Session ID',
    timestamp: 'Timestamp',
    nodeConfig: 'Node Configuration',
    noConfigOptions: 'No configuration options for this node type',
    deleteNode: 'Delete Node',
    deleteNodeConfirm: 'Confirm Delete Node',
    deleteNodeConfirmDesc: 'This node and all its connections will be permanently removed.',
    // Node inputs/outputs i18n (for port labels)
    nodeInputs: {
      // Common inputs
      input: 'Input',
      message: 'Message',
      text: 'Text',
      query: 'Query',
      data: 'Data',
      condition: 'Condition',
      value: 'Value',
      // Trigger inputs
      content: 'Content',
      context: 'Context',
      body: 'Request Body',
      variables: 'Variables',
      items: 'Items',
      arguments: 'Arguments',
      // AI/Process inputs
      question: 'Question',
      parameters: 'Parameters',
      key: 'Key',
      // Control inputs
      case_1: 'Case 1',
      case_2: 'Case 2',
      branch_1: 'Branch 1',
      branch_2: 'Branch 2',
      // Action inputs
      notification_id: 'Notification ID',
      // Integration inputs
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      scope: 'Scope',
    },
    // Data type labels
    'type.string': 'String',
    'type.object': 'Object',
    'type.array': 'Array',
    'type.boolean': 'Boolean',
    'type.number': 'Number',
    'type.any': 'Any',
    'type.datetime': 'DateTime',
    nodes: {
      trigger: 'Triggers',
      triggerDescription: 'Starting nodes for workflows',
      messageTrigger: 'Message Trigger',
      messageTriggerDescription: 'Triggered when a message is received',
      scheduleTrigger: 'Schedule Trigger',
      scheduleTriggerDescription: 'Triggered on a schedule',
      cronTrigger: 'Cron Trigger',
      cronTriggerDescription: 'Trigger workflow on a scheduled time',
      webhookTrigger: 'Webhook Trigger',
      webhookTriggerDescription: 'Triggered via HTTP request',
      eventTrigger: 'Event Trigger',
      eventTriggerDescription: 'Triggered on system events',
      process: 'AI/Process',
      processDescription: 'Data processing nodes',
      aiProcess: 'AI Processing',
      aiProcessDescription: 'Process messages using AI models',
      llmCall: 'LLM Call',
      llmCallDescription: 'Invoke large language model for conversation or generation',
      codeProcess: 'Code Processing',
      codeProcessDescription: 'Execute custom code',
      codeExecutor: 'Code Executor',
      codeExecutorDescription: 'Execute Python/JavaScript code',
      templateProcess: 'Template Processing',
      templateProcessDescription: 'Format output using templates',
      httpRequest: 'HTTP Request',
      httpRequestDescription: 'Send HTTP requests',
      dataTransform: 'Data Transform',
      dataTransformDescription: 'Transform data format',
      questionClassifier: 'Question Classifier',
      questionClassifierDescription: 'Classify user questions into predefined categories using LLM',
      parameterExtractor: 'Parameter Extractor',
      parameterExtractorDescription: 'Extract structured parameters from text using LLM',
      knowledgeRetrieval: 'Knowledge Retrieval',
      knowledgeRetrievalDescription: 'Retrieve relevant content from knowledge base',
      textTemplate: 'Text Template',
      textTemplateDescription: 'Generate text using templates with variable interpolation',
      jsonTransform: 'JSON Transform',
      jsonTransformDescription: 'Transform JSON data using expressions',
      dataAggregator: 'Data Aggregator',
      dataAggregatorDescription: 'Aggregate data from multiple sources',
      textSplitter: 'Text Splitter',
      textSplitterDescription: 'Split text into smaller chunks',
      variableAssignment: 'Variable Assignment',
      variableAssignmentDescription: 'Assign values to workflow variables',
      control: 'Control Flow',
      controlDescription: 'Flow control nodes',
      condition: 'Condition Branch',
      conditionDescription: 'Branch based on conditions',
      switch: 'Switch',
      switchDescription: 'Multi-way branching',
      loop: 'Loop',
      loopDescription: 'Repeat execution',
      iterator: 'Iterator',
      iteratorDescription: 'Iterate over array elements',
      parallel: 'Parallel',
      parallelDescription: 'Execute multiple branches in parallel',
      wait: 'Wait',
      waitDescription: 'Wait for specified time',
      delay: 'Delay',
      delayDescription: 'Wait for a specified time',
      merge: 'Merge',
      mergeDescription: 'Merge multiple branches',
      variableAggregator: 'Variable Aggregator',
      variableAggregatorDescription: 'Aggregate variable outputs from multiple branches',
      action: 'Actions',
      actionDescription: 'Action execution nodes',
      sendMessage: 'Send Message',
      sendMessageDescription: 'Send message to platform',
      replyMessage: 'Reply Message',
      replyMessageDescription: 'Reply to the message that triggered the workflow',
      storeData: 'Store Data',
      storeDataDescription: 'Store data to database',
      callPipeline: 'Call Pipeline',
      callPipelineDescription: 'Call an existing Pipeline',
      setVariable: 'Set Variable',
      setVariableDescription: 'Set context variable',
      openingStatement: 'Opening Statement',
      openingStatementDescription: 'Provide conversation opener and suggested questions',
      end: 'End',
      endDescription: 'Mark the end of workflow execution',
      log: 'Log',
      logDescription: 'Record log information',
      integration: 'Integration',
      integrationDescription: 'Third-party platform integration nodes',
      difyWorkflow: 'Dify Workflow',
      difyWorkflowDescription: 'Call Dify platform workflow',
      difyKnowledgeQuery: 'Dify Knowledge Query',
      difyKnowledgeQueryDescription: 'Query Dify knowledge base',
      n8nWorkflow: 'N8n Workflow',
      n8nWorkflowDescription: 'Call n8n workflow',
      langflowFlow: 'Langflow Flow',
      langflowFlowDescription: 'Call Langflow flow',
      cozeBot: 'Coze Bot',
      cozeBotDescription: 'Call Coze Bot',
      // Data & Tools integration nodes
      databaseQuery: 'Database Query',
      databaseQueryDescription: 'Execute database queries',
      redisOperation: 'Redis Operation',
      redisOperationDescription: 'Perform Redis cache operations',
      mcpTool: 'MCP Tool',
      mcpToolDescription: 'Invoke an MCP tool',
      memoryStore: 'Memory Store',
      memoryStoreDescription: 'Store and retrieve data from workflow memory',
    },
    executionHistory: {
      title: 'Execution History',
      noExecutions: 'No executions yet',
      status: 'Status',
      startTime: 'Start Time',
      duration: 'Duration',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      cancelled: 'Cancelled',
      viewDetails: 'View Details',
      cancel: 'Cancel Execution',
      retry: 'Retry',
      nodeResults: 'Node Execution Results',
    },
    versions: {
      title: 'Version History',
      current: 'Current Version',
      rollback: 'Rollback to this version',
      rollbackConfirm: 'Are you sure you want to rollback to this version? Current changes will be lost.',
      rollbackSuccess: 'Rollback successful',
      rollbackError: 'Failed to rollback: ',
    },
    // Debug and monitoring
    debug: 'Debug',
    debugMode: 'Debug Mode',
    debugPanel: 'Debug Panel',
    startDebug: 'Start Debug',
    pauseDebug: 'Pause',
    resumeDebug: 'Resume',
    stepDebug: 'Step',
    stopDebug: 'Stop',
    debugContext: 'Debug Context',
    simulatedMessage: 'Simulated Message',
    simulatedMessagePlaceholder: 'Enter the message content to simulate',
    senderId: 'Sender ID',
    senderIdPlaceholder: 'Sender unique identifier',
    senderName: 'Sender Name',
    senderNamePlaceholder: 'Sender display name',
    conversationId: 'Conversation ID',
    conversationIdPlaceholder: 'Conversation unique identifier',
    isGroup: 'Group Chat',
    customVariables: 'Custom Variables',
    addVariable: 'Add Variable',
    variableName: 'Variable Name',
    variableValue: 'Variable Value',
    watchedVariables: 'Watched Variables',
    addWatchVariable: 'Add Watch',
    nodeStates: 'Node States',
    breakpoints: 'Breakpoints',
    toggleBreakpoint: 'Toggle Breakpoint',
    breakpointSet: 'Breakpoint set',
    breakpointRemoved: 'Breakpoint removed',
    debugLogs: 'Debug Logs',
    noLogs: 'No logs yet',
    clearLogs: 'Clear Logs',
    autoScroll: 'Auto Scroll',
    debugState: {
      idle: 'Idle',
      running: 'Running',
      paused: 'Paused',
      completed: 'Completed',
      error: 'Error',
    },
    nodeStatus: {
      pending: 'Pending',
      running: 'Running',
      completed: 'Completed',
      failed: 'Failed',
      skipped: 'Skipped',
    },
    debugDialog: {
      title: 'Workflow Chat',
      selectWorkflow: 'Select Workflow',
      sessionType: 'Session Type',
      privateChat: 'Private Chat',
      groupChat: 'Group Chat',
      send: 'Send',
      reset: 'Reset Conversation',
      inputPlaceholder: 'Send {{type}} message...',
      noMessages: 'No messages',
      userMessage: 'User',
      botMessage: 'Bot',
      sendFailed: 'Send failed',
      resetSuccess: 'Conversation reset successfully',
      resetFailed: 'Reset failed',
      loadMessagesFailed: 'Failed to load messages',
      loadWorkflowsFailed: 'Failed to load workflows',
      atTips: 'Mention bot',
      streaming: 'Streaming',
      streamOutput: 'Stream',
      connected: 'WebSocket connected',
      disconnected: 'WebSocket disconnected',
      connectionError: 'WebSocket connection error',
      connectionFailed: 'WebSocket connection failed',
      notConnected: 'WebSocket not connected, please try again later',
      imageUploadFailed: 'Image upload failed',
      reply: 'Reply',
      replyTo: 'Reply to',
      showMarkdown: 'Render',
      showRaw: 'Raw',
      allMembers: 'All Members',
      file: 'File',
      voice: 'Voice',
      uploadImage: 'Upload Image',
      uploading: 'Uploading...',
    },
    // Execution history and monitoring
    filterByDate: 'Filter by Date',
    allTime: 'All Time',
    today: 'Today',
    lastWeek: 'Last Week',
    lastMonth: 'Last Month',
    showingExecutions: 'Showing {{shown}} / {{total}} executions',
    rerun: 'Rerun',
    rerunExecution: 'Rerun Execution',
    logs: 'Logs',
    details: 'Details',
    completedAt: 'Completed At',
    noNodeExecutions: 'No node executions yet',
    // Node config field labels (used by DynamicFormComponent)
    nodeConfigFields: {
      // trigger.py - MessageTriggerNode
      conditions: 'Trigger Conditions',
      keyword_filter: 'Keyword Filter',
      regex_filter: 'Regex Filter',
      min_length: 'Min Length',
      max_length: 'Max Length',
      require_mention: 'Require Mention',
      respond_rules: 'Group Respond Rules',
      access_control: 'Access Control',
      // trigger.py - CronTriggerNode
      cron: 'Cron Expression',
      timezone: 'Timezone',
      // trigger.py - WebhookTriggerNode
      path: 'Webhook Path',
      allowed_methods: 'Allowed HTTP Methods',
      content_type: 'Content-Type',
      auth_type: 'Authentication Type',
      auth_key: 'Auth Key',
      validation: 'Request Validation',
      timeout: 'Timeout',
      // trigger.py - EventTriggerNode
      event_types: 'Event Types',
      filter: 'Event Filter',
      debounce_ms: 'Debounce Time',
      // process.py - LLMCallNode
      model: 'Model',
      prompt_template: 'Prompt Template',
      system_prompt: 'System Prompt',
      temperature: 'Temperature',
      top_p: 'Top P',
      frequency_penalty: 'Frequency Penalty',
      presence_penalty: 'Presence Penalty',
      max_tokens: 'Max Tokens',
      stop_sequences: 'Stop Sequences',
      seed: 'Random Seed',
      stream: 'Stream Output',
      use_conversation_history: 'Use Conversation History',
      // process.py - CodeExecutorNode
      language: 'Programming Language',
      code: 'Code',
      // process.py - HTTPRequestNode
      url: 'Request URL',
      method: 'Request Method',
      auth_config: 'Auth Configuration',
      // process.py - DataTransformNode
      transform_type: 'Transform Type',
      template: 'Template',
      expression: 'Expression',
      output_type: 'Output Type',
      // process.py - QuestionClassifierNode
      categories: 'Categories',
      instruction: 'Instruction',
      // process.py - ParameterExtractorNode
      parameters: 'Parameter Definitions',
      // process.py - KnowledgeRetrievalNode
      knowledge_bases: 'Knowledge Bases',
      top_k: 'Top K Results',
      score_threshold: 'Score Threshold',
      search_method: 'Search Method',
      enable_citations: 'Enable Citations',
      // control.py - ConditionNode
      condition_type: 'Condition Type',
      condition_expression: 'Condition Expression',
      left_value: 'Left Value',
      operator: 'Comparison Operator',
      right_value: 'Right Value',
      // control.py - SwitchNode
      cases: 'Branch Cases',
      // control.py - LoopNode
      max_iterations: 'Max Iterations',
      break_condition: 'Break Condition',
      // control.py - IteratorNode
      parallel: 'Parallel Processing',
      max_concurrency: 'Max Concurrency',
      // control.py - ParallelNode
      branches: 'Branch Configuration',
      wait_all: 'Wait All',
      fail_fast: 'Fail Fast',
      // control.py - WaitNode
      duration: 'Duration',
      duration_type: 'Time Unit',
      // control.py - MergeNode
      merge_strategy: 'Merge Strategy',
      // control.py - VariableAggregatorNode
      variable_mappings: 'Variable Mappings',
      aggregation_mode: 'Aggregation Mode',
      // action.py - SendMessageNode
      target_type: 'Target Type',
      target_id: 'Target ID',
      platform: 'Platform',
      message_type: 'Message Type',
      // action.py - ReplyMessageNode
      reply_mode: 'Reply Mode',
      message_template: 'Message Template',
      long_text_processing: 'Long Text Processing',
      force_delay: 'Force Delay',
      // action.py - CallPipelineNode
      pipeline_uuid: 'Pipeline',
      inherit_context: 'Inherit Context',
      // action.py - StoreDataNode
      storage_type: 'Storage Type',
      ttl: 'TTL',
      key_prefix: 'Key Prefix',
      // action.py - SetVariableNode
      variable_name: 'Variable Name',
      variable_scope: 'Variable Scope',
      set_variable_operation: 'Operation Type',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      show_suggestions: 'Show Suggestions',
      // action.py - EndNode
      output_format: 'Output Format',
      success_message: 'Success Message',
      // integration.py - DatabaseQueryNode
      connection_type: 'Database Type',
      connection_string: 'Connection String',
      query: 'SQL Query',
      query_type: 'Query Type',
      // integration.py - RedisOperationNode
      connection_url: 'Connection URL',
      operation: 'Operation Type',
      key_template: 'Key Template',
      hash_field: 'Hash Field',
      // integration.py - MCPToolNode
      server_name: 'Server Name',
      tool_name: 'Tool Name',
      arguments_template: 'Arguments Template',
      // integration.py - MemoryStoreNode
      scope: 'Scope',
      // integration.py - DifyWorkflowNode
      'base-url': 'Base URL',
      'api-key': 'API Key',
      'app-type': 'App Type',
      // integration.py - DifyKnowledgeQueryNode
      dataset_id: 'Dataset ID',
      // integration.py - N8nWorkflowNode
      'webhook-url': 'Webhook URL',
      // integration.py - LangflowFlowNode
      'flow-id': 'Flow ID',
      // integration.py - CozeBotNode
      'bot-id': 'Bot ID',
      'api-base': 'API Base URL',
    },
    // Node outputs i18n
    nodeOutputs: {
      // trigger.py - MessageTriggerNode
      message: 'Message Content',
      sender_id: 'Sender ID',
      sender_name: 'Sender Name',
      platform: 'Platform',
      conversation_id: 'Conversation ID',
      is_group: 'Is Group Chat',
      context: 'Full Message Context',
      // trigger.py - CronTriggerNode
      timestamp: 'Trigger Time',
      schedule: 'Trigger Schedule',
      cron_timestamp: 'Cron Timestamp',
      cron_schedule: 'Cron Schedule',
      cron_context: 'Cron Context',
      // trigger.py - WebhookTriggerNode
      body: 'Request Body',
      headers: 'Request Headers',
      query: 'Query Parameters',
      method: 'Request Method',
      webhook_body: 'Webhook Body',
      webhook_headers: 'Webhook Headers',
      webhook_query: 'Webhook Query',
      webhook_method: 'Webhook Method',
      // trigger.py - EventTriggerNode
      event_type: 'Event Type',
      event_data: 'Event Data',
      event_timestamp: 'Event Timestamp',
      // process.py - LLMCallNode
      response: 'Model Response',
      usage: 'Token Usage Statistics',
      prompt: 'Prompt/Question',
      context_info: 'Context Information',
      // process.py - CodeExecutorNode
      output: 'Output Data',
      console: 'Console Output',
      code_input: 'Code Input',
      code_output: 'Code Output',
      // process.py - HTTPRequestNode
      status_code: 'Status Code',
      http_body: 'HTTP Body',
      http_headers: 'HTTP Headers',
      http_response: 'HTTP Response',
      response_headers: 'Response Headers',
      // process.py - DataTransformNode
      result: 'Transform Result',
      transform_input: 'Transform Input',
      transform_result: 'Transform Result',
      // process.py - QuestionClassifierNode
      category: 'Category Result',
      confidence: 'Confidence',
      all_scores: 'All Category Scores',
      question: 'User Question',
      // process.py - ParameterExtractorNode
      parameters: 'Extracted Parameters',
      extraction_success: 'Extraction Success',
      extract_text: 'Input Text',
      // process.py - KnowledgeRetrievalNode
      documents: 'Retrieved Documents',
      citations: 'Citation Information',
      knowledge_context: 'Merged Context',
      knowledge_query: 'Retrieval Query',
      // control.py - ConditionNode
      true: 'True Branch Output',
      false: 'False Branch Output',
      condition_input: 'Condition Input',
      // control.py - SwitchNode
      matched_case: 'Matched Branch Output',
      default: 'Default Branch Output',
      switch_input: 'Switch Input',
      // control.py - LoopNode
      item: 'Current Item',
      index: 'Current Index',
      results: 'All Iteration Results',
      completed: 'Is Completed',
      loop_items: 'Items to Iterate',
      // control.py - IteratorNode
      is_first: 'Is First',
      is_last: 'Is Last',
      iterator_array: 'Input Array',
      iterator_item: 'Current Element',
      iterator_index: 'Current Index',
      // control.py - ParallelNode
      errors: 'Error List',
      parallel_input: 'Parallel Input',
      parallel_results: 'All Branch Results',
      // control.py - WaitNode
      wait_input: 'Passthrough Input',
      wait_output: 'Passthrough Output',
      // control.py - MergeNode
      merged: 'Merged Result',
      merge_array: 'Array Result',
      merge_input_1: 'Input 1',
      merge_input_2: 'Input 2',
      merge_input_3: 'Input 3',
      merge_input_4: 'Input 4',
      // control.py - VariableAggregatorNode
      aggregated: 'Aggregated Variables',
      aggregator_variables: 'Variable Input',
      // action.py - SendMessageNode
      status: 'Send Status',
      message_id: 'Message ID',
      target: 'Target ID',
      // action.py - ReplyMessageNode
      reply_message: 'Reply Content',
      // action.py - CallPipelineNode
      pipeline_response: 'Pipeline Response',
      pipeline_result: 'Full Result',
      pipeline_query: 'Query Content',
      context_data: 'Context Data',
      // action.py - StoreDataNode
      store_status: 'Store Status',
      store_key: 'Store Key',
      store_value: 'Store Value',
      // action.py - SetVariableNode
      variable_value: 'Variable Value',
      variable_result: 'Set Variable Result',
      // action.py - OpeningStatementNode
      statement: 'Opening Statement',
      suggested_questions: 'Suggested Questions',
      // action.py - EndNode
      workflow_output: 'Workflow Output',
      final_result: 'Final Result',
      // integration.py - DatabaseQueryNode
      query_results: 'Query Results',
      row_count: 'Affected/Returned Rows',
      query_success: 'Query Success',
      query_params: 'Query Parameters',
      // integration.py - RedisOperationNode
      redis_result: 'Operation Result',
      redis_success: 'Operation Success',
      redis_key: 'Redis Key',
      redis_value: 'Redis Value',
      error: 'Error Message',
      plugin_input: 'Plugin Input',
      // integration.py - MCPToolNode
      tool_result: 'Tool Execution Result',
      tool_success: 'Tool Call Success',
      mcp_arguments: 'Tool Arguments',
      // integration.py - MemoryStoreNode
      memory_result: 'Retrieved/Stored Value',
      memory_success: 'Operation Success',
      memory_value: 'Value to Store',
      // integration.py - DifyWorkflowNode
      answer: 'Dify Answer',
      dify_success: 'Call Success',
      dify_query: 'User Input/Query',
      dify_conversation_id: 'Conversation ID',
      // integration.py - DifyKnowledgeQueryNode
      search_results: 'Search Results',
      knowledge_base_query: 'Query Content',
      // integration.py - N8nWorkflowNode
      n8n_result: 'Workflow Execution Result',
      n8n_success: 'Call Success',
      n8n_payload: 'Workflow Input Data',
      // integration.py - LangflowFlowNode
      flow_result: 'Flow Execution Result',
      flow_success: 'Call Success',
      langflow_input: 'Input Content',
      // integration.py - CozeBotNode
      bot_answer: 'Bot Reply',
      bot_success: 'Call Success',
      coze_query: 'User Input/Query',
      coze_conversation_id: 'Conversation ID',
      bot_conversation_id: 'Conversation ID',
    },
  },

};

export default viVN;
