const viVN = {
  sidebar: {
    home: 'Trang chủ',
    extensions: 'Tiện ích mở rộng',
    installedPlugins: 'Đã cài đặt',
    pluginMarket: 'Chợ ứng dụng',
    mcpServers: 'Máy chủ MCP',
    addExtension: 'Thêm tiện ích mở rộng',
    pluginPages: 'Trang plugin',
    pluginPagesTooltip:
      'Các trang trực quan được cung cấp bởi plugin đã cài đặt',
    quickStart: 'Bắt đầu nhanh',
    scrollToBottom: 'Cuộn xuống cuối',
    editionCommunity: 'Bản cộng đồng',
    editionCloud: 'Cloud',
  },
  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',
    joinDiscord: 'Tham gia Discord',
    create: 'Tạo',
    edit: 'Chỉnh sửa',
    delete: 'Xóa',
    add: 'Thêm',
    select: 'Chọn',
    skill: 'Kỹ năng',
    cancel: 'Hủy',
    submit: 'Gửi',
    error: 'Lỗi',
    success: 'Thành công',
    save: 'Lưu',
    saving: 'Đang lưu...',
    recommend: 'Đề xuất',
    start: 'Bắt đầ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',
    termsOfService: 'Điều khoản dịch vụ',
    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 bằng tài khoản LangBot',
    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 bằng tài khoản LangBot',
    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 bằng tài khoản LangBot 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 bằng tài khoản LangBot',
    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 LangBot 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',
    apiIntegrationDescription:
      'Quản lý API key và webhook cho truy cập từ bên ngoài',
    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',
    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: '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',

    apiKeyStoredSecurely: 'Secret shown only when created',
  },
  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',
    reasoningAbility: 'Khả năng suy luận',
    reasoningLevel: 'Mức độ suy luận',
    reasoningLevels: {
      providerDefault: 'Mặc định của nhà cung cấp',
      disabled: 'Tắt',
      enabled: 'Bật',
      minimal: 'Tối thiểu',
      low: 'Thấp',
      medium: 'Trung bình',
      high: 'Cao',
      xhigh: 'Rất cao',
      max: 'Tối đa',
    },
    contextLength: 'Cửa sổ ngữ cảnh',
    contextLengthPlaceholder: 'Không rõ',
    contextLengthInvalid: 'Cửa sổ ngữ cảnh phải là số nguyên dương',
    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',
    object: 'Đối tượng',
    objectJsonPlaceholder: '{ "type": "disabled" }',
    invalidJsonObject: 'Giá trị phải là một đối tượng JSON hợp lệ',
    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 LangBot của bạn',
    spaceDisabledForLocalAccount:
      'Đăng nhập bằng tài khoản LangBot để 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',
    searchProviders: 'Tìm kiếm 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 bằng tài khoản LangBot',
    loginToUseModels:
      'Đăng nhập bằng tài khoản LangBot để 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 bằng tài khoản LangBot để 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',
    },

    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: '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ý',
    },
    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: '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',
    newPlugin: 'Plugin mới',
    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',
    noExtensionInstalled: 'Chưa cài đặt tiện ích mở rộng nào',
    loadingExtensions: 'Đang tải tiện ích mở rộng...',
    groupByType: 'Nhóm theo định dạng',
    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',
    debugKeyExpires: 'Xoay vòng lúc {{time}}; mỗi Workspace có khóa riêng',
    noDebugKey: '(Chưa đặt)',
    debugKeyDisabled: 'Thông tin xác thực gỡ lỗi tạm thời không khả dụng',
    boxStatusTitle: 'Box Runtime',
    boxStatus: 'Trạng thái',
    boxConnected: 'Đã kết nối',
    boxUnavailable: 'Không khả dụng',
    boxBackend: 'Backend',
    boxProfile: 'Hồ sơ',
    boxSandboxes: 'Sandbox',
    boxErrors: 'Lỗi',
    boxSessionImage: 'Image',
    boxSessionBackend: 'Backend',
    boxSessionResources: 'Tài nguyên',
    boxSessionNetwork: 'Mạng',
    boxStatusLoadFailed: 'Tải trạng thái Box thất bại',
    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',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription: 'Các thao tác không thể hoàn tác',
    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',
      Page: 'Trang',
    },
    uploadLocal: 'Tải lên cục bộ',
    debugging: 'Gỡ lỗi',
    uploadLocalPlugin: 'Tải lên Plugin cục bộ',
    localPreview: {
      title: 'Xem trước gói plugin cục bộ',
      unpacking: 'Đang giải nén để xem trước gói...',
      unpackComplete: 'Bản xem trước gói đã sẵn sàng',
      failed: 'Không thể xem trước gói',
      pluginInfo: 'Thông tin plugin',
      packageInfo: 'Thông tin gói',
      name: 'Tên',
      author: 'Tác giả',
      version: 'Phiên bản',
      fileCount: 'Tệp',
      dependencies: 'Phụ thuộc',
      components: 'Thành phần',
      ready: 'Gói plugin đã được giải nén. Xác nhận để bắt đầu cài đặt.',
    },
    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?',
    askConfirmNoVersion:
      'Bạn có chắc chắn muốn cài đặt plugin "{{name}}" 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',
    tabDocs: 'Tài liệu',
    tabLogs: 'Nhật ký',
    logsLevelAll: 'Tất cả cấp độ',
    logsRefresh: 'Làm mới',
    logsAutoRefresh: 'Tự động làm mới',
    logsEmpty:
      'Chưa có nhật ký. Nhật ký do plugin in qua logger sẽ hiển thị ở đây.',
    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',
      titlePlugin: 'Đang cài đặt plugin {{name}}',
      titleMCP: 'Đang cài đặt máy chủ MCP {{name}}',
      titleSkill: 'Đang cài đặt kỹ năng {{name}}',
      installCompletePlugin: 'Đã cài đặt plugin thành công',
      installCompleteMCP: 'Đã cài đặt máy chủ MCP thành công',
      installCompleteSkill: 'Đã cài đặt kỹ năng thành công',
    },
    uploadPluginOnly: 'Chỉ hỗ trợ gói plugin .lbpkg',
  },
  market: {
    searchPlaceholder: 'Tìm kiếm plugin...',
    searchPlaceholderCount:
      'Tìm kiếm {{count}} tiện ích mở rộng, khả năng hoặc tình huống...',
    searchResults: 'Tìm thấy {{count}} tiện ích mở rộng',
    totalPlugins: 'Tổng cộng {{count}} tiện ích mở rộng',
    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',
    allLoadedCount: 'Đã hiển thị tất cả {{count}} tiện ích mở rộng',
    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ả',
    recommendation: {
      pause: 'Tạm dừng tự động xoay',
      resume: 'Tiếp tục tự động xoay',
    },
    notFound: 'Không tìm thấy thông tin plugin',
    sortBy: 'Sắp xếp theo',
    sort: {
      hottest: 'Phổ biến nhất',
      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',
    like: 'Thích',
    unlike: 'Bỏ thích',
    likeFailed: 'Không thể cập nhật lượt thích. Vui lòng thử lại.',
    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 plugin',
    filterByComponentHint:
      'Các loại năng lực mà plugin cung cấp — Công cụ (Tool), Lệnh (Command), Trình lắng nghe sự kiện (EventListener), v.v. — dùng để mở rộng các khả năng của LangBot. Lọc theo thành phần để chỉ xem những plugin cung cấp năng lực đó.',
    allComponents: 'Tất cả thành phần',
    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',
      Page: 'Trang',
    },
    filterByType: 'Loại',
    allTypes: 'Tất cả loại',
    typePlugin: 'Plugin',
    typeMCP: 'MCP',
    typeSkill: 'Kỹ năng',
    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.',
    filters: {
      allFormats: 'Tất cả loại',
      more: 'Thêm',
      advancedTitle: 'Bộ lọc nâng cao',
      advancedDescription: 'Lọc theo loại phần mở rộng',
      technicalType: 'Loại kỹ thuật',
    },
    allExtensions: 'Tất cả phần mở rộ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',
    },
    installCard: 'Cài đặt {{name}}',
  },
  mcp: {
    title: 'MCP',
    createServer: 'Thêm máy chủ MCP',
    addMCPServer: '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',
    local: 'Cục bộ (Stdio)',
    remote: 'Từ xa',
    localModeDescription:
      'Chạy máy chủ MCP cục bộ dưới dạng tiến trình con bên trong sandbox Box.',
    remoteModeDescription:
      'Kết nối đến máy chủ MCP từ xa bằng URL. Phương thức truyền tải (Streamable HTTP hoặc SSE) được phát hiện tự động.',
    remoteUrlPlaceholder: 'https://example.com/mcp',
    remoteUrlDescription:
      'Dán URL của máy chủ MCP. Hỗ trợ cả endpoint Streamable HTTP và SSE cũ.',
    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ờ',
    toolCallTimeout: 'Thời gian chờ gọi công cụ (giây)',
    toolCallTimeoutDescription:
      'Thời gian chờ tối đa cho một lần gọi công cụ. Đặt 0 để không giới hạn. Mặc định là 300 giây.',
    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',
    boxDisabledStdioRefused:
      'MCP server ở chế độ stdio cần Sandbox Box, hiện đã bị tắt trong cấu hình (box.enabled = false).',
    boxUnavailableStdioRefused:
      'MCP server ở chế độ stdio cần Sandbox Box, hiện không thể kết nối.',
    boxStdioRefusedSuggestion:
      'Hãy bật Box (box.enabled = true) và đảm bảo runtime hoạt động, hoặc chuyển server này sang chế độ http/sse.',
    boxRequired: 'cần Box',
    disabledByPolicy: 'bị tắt theo chính sách',
    stdioDisabledByPolicy:
      'Stdio MCP đã bị tắt trong bản triển khai này. Hãy dùng máy chủ MCP từ xa.',
    stdioBlockedByBoxToast:
      'Không thể lưu MCP ở chế độ stdio khi Sandbox Box bị tắt hoặc không khả dụng. Hãy bật Box hoặc chọn chế độ http/sse.',
    toolsFound: 'công cụ',
    unknownError: 'Lỗi không xác định',
    noToolsFound: 'Không tìm thấy công cụ nào',
    noResourcesFound: 'Không tìm thấy tài nguyên nào',
    tabTools: 'Công cụ',
    tabResources: 'Tài nguyên',
    tabDocs: 'Tài liệu',
    tabLogs: 'Nhật ký',
    logsLevelAll: 'Tất cả cấp độ',
    logsRefresh: 'Làm mới',
    logsAutoRefresh: 'Tự động làm mới',
    logsEmpty:
      'Chưa có nhật ký. Nhật ký chạy của MCP Server sẽ hiển thị ở đây.',
    noReadme: 'Không có tài liệu',
    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}}',
    parameterCount: 'Tham số: {{count}}',
    noParameters: 'Không có tham số',
    resourceCount: 'Tài nguyên: {{count}}',
    resourceBinaryContent: 'Nội dung nhị phân (không thể hiển thị)',
    resourceBinaryOmitted:
      'Nội dung nhị phân đã bị lược bỏ theo chính sách an toàn tài nguyên',
    resourceTruncated: 'Nội dung đã bị cắt theo giới hạn byte hoặc token',
    resourceReadFailed: 'Không thể đọc nội dung tài nguyên',
    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: 'Quy trình',
    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',
      mcpResourcesTitle: 'Tài nguyên MCP',
      noMCPServersSelected: 'Chưa chọn máy chủ MCP nào',
      noMCPResourcesAvailable: 'Không có tài nguyên MCP nào',
      addMCPServer: 'Thêm máy chủ MCP',
      selectMCPServers: 'Chọn máy chủ MCP',
      enableMCPResourceAgentRead: 'Cho phép mô hình đọc',
      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',
      enableAllSkills: 'Bật tất cả kỹ năng',
      allSkillsEnabled: 'Tất cả kỹ năng đã được bật',
      skillsTitle: 'Kỹ năng',
      noSkillsSelected: 'Chưa chọn kỹ năng',
      addSkill: 'Thêm kỹ năng',
      selectSkills: 'Chọn kỹ năng',
      noSkillsAvailable: 'Không có kỹ năng khả dụng',
      mcpServersScopeTooltip:
        'Tại đây chỉ kiểm soát máy chủ MCP được liên kết với Pipeline. Công cụ và tài nguyên MCP cụ thể được chọn trong AI Feature > Local Agent.',
      enableAllMCPServersTooltip:
        'Khi bật, mọi máy chủ MCP đã cấu hình và bật sẽ trở thành ứng viên cho công cụ và tài nguyên MCP trong AI Feature.',
    },
    localAgent: {
      toolsTitle: 'Công cụ',
      toolsDescription:
        'Chọn công cụ plugin, MCP và công cụ tích hợp sẵn cho Local Agent này.',
      toolsScopeTooltip:
        'Công cụ MCP chỉ đến từ máy chủ MCP đã liên kết trong Tiện ích mở rộng. Hãy liên kết máy chủ tại đó trước nếu muốn chọn thêm tại đây.',
      enableAllTools: 'Bật tất cả công cụ',
      allToolsEnabled: 'Tất cả công cụ khả dụng đã được bật',
      noToolsSelected: 'Chưa chọn công cụ nào',
      editTools: 'Sửa công cụ',
      builtinTools: 'Công cụ tích hợp sẵn',
      pluginTools: 'Công cụ plugin',
      skillTools: 'Công cụ kỹ năng',
      mcpTools: 'Công cụ MCP',
      mcpToolsScopeTooltip:
        'Tại đây chỉ hiển thị công cụ từ máy chủ MCP hiện được cho phép trong Tiện ích mở rộng.',
      skillToolsScopeTooltip:
        'Công cụ kỹ năng khả dụng khi dịch vụ kỹ năng LangBot và backend sandbox Box đã sẵn sàng. Chúng cho phép Agent kích hoạt hoặc đăng ký kỹ năng.',
      selectTools: 'Chọn công cụ',
      resourcesTitle: 'Tài nguyên',
      resourcesDescription:
        'Chọn tài nguyên MCP và kho tri thức cho Local Agent này.',
      knowledgeBases: 'Kho tri thức',
      mcpResources: 'Tài nguyên MCP',
      mcpResourcesScopeTooltip:
        'Tại đây chỉ hiển thị tài nguyên từ máy chủ MCP hiện được cho phép trong Tiện ích mở rộng.',
      enableMCPResourceRead: 'Cho phép mô hình đọc tài nguyên MCP',
      mcpResourceReadTooltip:
        'Khi tắt, tài nguyên MCP đã chọn sẽ không được đưa vào ngữ cảnh mô hình.',
      noMCPResourcesAvailable: 'Không có tài nguyên MCP nào',
      selectKnowledgeBases: 'Chọn kho tri thức',
    },
    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',
    engineSettingsInvalid:
      'Cài đặt công cụ không hợp lệ, vui lòng kiểm tra các trường bắt buộc',
    retrievalSettingsInvalid:
      'Cài đặt truy xuất không hợp lệ, vui lòng kiểm tra các trường bắt buộc',
    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 bằng tài khoản LangBot',
    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 LangBot 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',
    settingsDescription: 'Quản lý mật khẩu và các tài khoản liên kết của bạ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 LangBot',
    spaceBound: 'Đã liên kết',
    spaceNotBound: 'Chưa liên kết',
    spaceBoundDescription:
      'Tài khoản LangBot đã 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 LangBot',
    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 LangBot',
    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 LangBot.',
    bindSpaceSuccess: 'Liên kết tài khoản LangBot thành công',
    bindSpaceFailed: 'Liên kết tài khoản LangBot 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 tài khoản LangBot không khớp với email tài khoản cục bộ',

    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: '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',
      tokens: 'Giám sát Token',
      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',
      turns: '{{count}} lượt hội thoại',
      userMessage: 'Người dùng',
      noUserMessage: 'Chưa ghi nhận đầu vào người dùng',
      assistantMessage: 'Trợ lý',
      assistantMessageCount: 'Trợ lý +{{count}}',
      noAssistantMessage: 'Chưa ghi nhận phản hồi của trợ lý',
      messageCount: 'Số tin nhắn',
      conversationTrace: 'Luồng hội thoại',
      noLlmCalls: 'Chưa ghi nhận lệnh gọi mô hình',
      roles: {
        user: 'Người dùng',
        assistant: 'Trợ lý',
        message: 'Tin nhắ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',
    },
    toolCalls: {
      title: 'Lượt gọi công cụ',
      totalCalls: 'Lượt gọi',
      duration: 'Thời lượng công cụ',
      errorCalls: 'Lượt gọi thất bại',
      arguments: 'Tham số',
      result: 'Kết quả',
      noToolCalls: 'Chưa ghi nhận lượt gọi công cụ',
    },
    tokens: {
      totalTokens: 'Tổng số Token',
      inputTokens: 'Token đầu vào',
      outputTokens: 'Token đầu ra',
      avgPerCall: 'TB / lượt gọi',
      throughput: 'Thông lượng',
      tokensPerSec: 'token/giây',
      errorCalls: 'Lượt gọi thất bại',
      acrossCalls: 'trong {{count}} lượt gọi',
      ofTotal: 'trên tổng {{count}}',
      usageOverTime: 'Mức sử dụng Token theo thời gian',
      byModel: 'Theo mô hình',
      model: 'Mô hình',
      calls: 'Lượt gọi',
      avgLatency: 'Độ trễ trung bình',
      noData: 'Không có mức sử dụng Token trong khoảng thời gian đã chọn',
      loadError: 'Không thể tải thống kê Token: {{error}}',
      zeroTokenWarning:
        '{{count}} lượt gọi thành công báo cáo mức sử dụng Token bằng 0. Điều này thường có nghĩa là nhà cung cấp thượng nguồn không trả về thông tin sử dụng — hãy kiểm tra cấu hình nhà cung cấp mô hình.',
      bucket: {
        hour: 'Theo giờ',
        day: 'Theo ngày',
      },
    },
    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',
      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: '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',
    },
    systemStatus: 'Trạng thái hệ thống',
    pluginRuntime: 'Plugin Runtime',
    boxRuntime: 'Box Runtime',
    connected: 'Đã kết nối',
    disconnected: 'Chưa kết nối',
    disabled: 'Đã tắt',
    statusDetail: 'Trạng thái',
    pluginDisabled: 'Hệ thống plugin đã tắt',
    boxDisabled:
      'Sandbox Box đã tắt trong cấu hình — công cụ sandbox, thêm/chỉnh sửa skill và stdio MCP đều không khả dụng',
    boxUnavailable:
      'Sandbox Box không khả dụng — công cụ sandbox, thêm/chỉnh sửa skill và stdio MCP đều không khả dụng',
    boxRequiredHint:
      'Tính năng này cần Box runtime. Hãy bật trong cấu hình (box.enabled = true) và đảm bảo runtime đang hoạt động.',
    boxBackend: 'Backend',
    boxProfile: 'Hồ sơ',
    boxSandboxes: 'Sandbox',
    boxSessionCreated: 'Đã tạo',
    boxSessionLastUsed: 'Lần cuối sử dụng',
  },
  settingsDialog: {
    title: 'Cài đặt',
    nav: {
      models: 'Mô hình',
      api: 'API',
      storage: 'Lưu trữ',
      account: 'Tài khoản',

      workspace: 'Workspace',
    },
  },
  storageAnalysis: {
    title: 'Phân tích lưu trữ',
    description: 'Kiểm tra dung lượng lưu trữ và các mục có thể dọn dẹp',
    openDialog: 'Xem phân tích',
    dialogTitle: 'Phân tích lưu trữ',
    generatedAt: 'Tạo lúc {{time}}',
    loading: 'Đang tải...',
    refresh: 'Làm mới',
    totalSize: 'Tổng dung lượng',
    binaryStorage: 'Lưu trữ nhị phân plugin',
    uploadCleanup: 'Tệp tải lên hết hạn',
    logCleanup: 'Nhật ký hết hạn',
    sections: 'Khu vực lưu trữ',
    monitoringTables: 'Bảng giám sát',
    runtimeTasks: 'Tác vụ runtime',
    cleanupPolicy: 'Chính sách dọn dẹp',
    uploadRetention: 'Thời gian giữ tệp tải lên',
    logRetention: 'Thời gian giữ nhật ký',
    databaseType: 'Loại cơ sở dữ liệu',
    days: 'ngày',
    missing: 'Thiếu',
    expiredUploads: 'Tệp tải lên hết hạn',
    expiredLogs: 'Nhật ký hết hạn',
    noExpiredUploads: 'Không có tệp tải lên hết hạn',
    noExpiredLogs: 'Không có nhật ký hết hạn',
    sectionNames: {
      database: 'Cơ sở dữ liệu',
      logs: 'Nhật ký',
      storage: 'Tệp tải lên',
      vector_store: 'Kho vector',
      plugins: 'Plugin',
      mcp: 'MCP',
      temp: 'Tệp tạm',
    },
  },
  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.',
    quotaLoadingTooltip:
      'Dữ liệu sử dụng không gian làm việc đang tải. Vui lòng chờ trước khi tạo tài nguyên.',
    quotaCheckFailed:
      'Không thể kiểm tra hạn mức hiện tại của không gian làm việc. Vui lòng thử lại.',
    createDisabledTooltip:
      'Đã đạt giới hạn {{resource}} ({{max}}) của workspace này. Hãy xóa một mục hiện có trước khi tạo 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',
    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.',
      waitingForMessage:
        'Bot đã được bật. Hãy gửi cho Bot một tin nhắn từ nền tảng nhắn tin để tiếp tục.',
      messageReceived:
        'Bot đã nhận được tin nhắn. Bạn có thể tiếp tục sang bước tiếp theo.',
      messageReceivedLocalAccountWarning:
        'Kết nối phía Bot đã được cấu hình đúng và đã nhận được tin nhắn. Vì bạn không đăng nhập bằng tài khoản LangBot, lệnh gọi mô hình có thể thất bại; hãy tiếp tục sang bước tiếp theo để thêm mô hình của riêng bạn.',
      pageBotTestPrompt:
        'Page Bot đã được bật. Nhấp vào bong bóng trò chuyện ở góc dưới bên phải và gửi tin nhắn để xác minh toàn bộ luồng hội thoại.',
      pageBotTestNotice:
        'Chỉ dùng để kiểm thử. Hãy nhúng mã vào một trang web bên ngoài thực tế.',
      webhookTestPrompt:
        'URL callback đã sẵn sàng. Hãy cấu hình URL này trên nền tảng bên ngoài, sau đó gửi một tin nhắn thực cho Bot.',
      httpTestPrompt:
        'HTTP Bot đã được bật. Gửi một tin nhắn đến thực tế tại đây để xác minh kết nối.',
      httpTestDefaultMessage: 'Xin chào, đây là tin nhắn kiểm tra kết nối.',
      sendHttpTest: 'Gửi tin nhắn kiểm tra',
      httpTestAccepted:
        'Tin nhắn kiểm tra đã được chấp nhận và sẽ sớm xuất hiện trong nhật ký.',
      httpTestMissingSecret:
        'Hãy nhập khóa bí mật ký yêu cầu đến và lưu cấu hình trước.',
      httpTestFailed: 'Không thể gửi tin nhắn kiểm tra: {{error}}',
      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: 'Cấu hình công cụ AI',
      description: 'Chọn công cụ AI sẽ cung cấp trí tuệ cho Bot của bạn.',
      optionalDescription:
        'Bước này không bắt buộc. Hãy chọn cách bạn muốn tiếp tục với Agent hiện tại.',
      externalTitle: 'Kết nối Agent từ nền tảng bên ngoài',
      externalDescription:
        'Kết nối Dify, n8n, Coze hoặc nền tảng khác và thay thế Pipeline của Bot.',
      ownModelTitle: 'Sử dụng mô hình của riêng tôi',
      ownModelDescription:
        'Thêm nhà cung cấp, sau đó quét hoặc nhập mô hình thủ công để hoàn tất thiết lập.',
      ownModelSetupTitle: 'Thêm mô hình của riêng bạn',
      ownModelSetupDescription:
        'Thêm nhà cung cấp mô hình. Các mô hình trò chuyện sẽ được quét tự động, hoặc bạn có thể nhập ID mô hình thủ công.',
      addProviderTitle: 'Thêm nhà cung cấp',
      addProviderDescription:
        'Nhập thông tin nhà cung cấp và API Key dùng để kết nối và quét mô hình.',
      selectModelTitle: 'Chọn mô hình',
      selectScannedModelTitle: 'Chọn mô hình',
      selectScannedModelDescription:
        'Mô hình đã chọn sẽ là mô hình chính của Pipeline mới và Bot sẽ chuyển sang sử dụng mô hình đó.',
      scanModelMode: 'Quét mô hình',
      manualModelMode: 'Thêm thủ công',
      scanningModels: 'Đang quét các mô hình khả dụng…',
      noScannedModels:
        'Không tìm thấy mô hình trò chuyện khả dụng. Hãy kiểm tra cấu hình nhà cung cấp.',
      scanModelsFailed:
        'Quét mô hình thất bại. Hãy kiểm tra URL và API Key rồi thử lại.',
      manualFallbackFailed:
        'Quét tự động thất bại. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
      manualFallbackEmpty:
        'Không tìm thấy mô hình. Hãy nhập ID mô hình được nhà cung cấp hỗ trợ.',
      manualModelId: 'ID mô hình',
      manualModelIdPlaceholder: 'Ví dụ: gpt-4o',
      manualModelIdDescription:
        'Nhập tham số mô hình được sử dụng trong các yêu cầu mô hình.',
      manualModelOptions: 'Khả năng mô hình tùy chọn',
      editProvider: 'Chỉnh sửa nhà cung cấp',
      rescanModels: 'Quét lại mô hình',
      moreFeaturesTitle: 'Thêm khả năng cho Agent',
      moreFeaturesDescription:
        'Mở bàn làm việc để thêm công cụ, cơ sở tri thức và các khả năng khác cho Agent vừa được tạo tự động.',
      runnerDescription: 'Chọn Runner cho Agent bên ngoài và cấu hình kết nối.',
      backToChoices: 'Quay lại các tùy chọn',
      createExternal: 'Tạo và liên kết',
      finishWithModel: 'Sử dụng mô hình đã chọn và hoàn tất',
      openWorkbench: 'Mở bàn làm việc',
    },
    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',
    },
  },
  errorPage: {
    unexpectedError: 'Đã xảy ra lỗi',
    unexpectedErrorDescription:
      'Đã xảy ra lỗi không mong muốn. Vui lòng thử lại sau.',
    notFound: 'Không tìm thấy trang',
    notFoundDescription:
      'Trang bạn tìm kiếm không tồn tại hoặc đã được di chuyển.',
    backendUnavailableStatus: 'Backend không khả dụng',
    goBack: 'Quay lại',
    backToHome: 'Về trang chủ',
    backToLogin: 'Quay lại đăng nhập',
    retrying: 'Đang thử lại',
    retryFailed:
      'Vẫn không thể kết nối backend. Hãy khởi động dịch vụ rồi thử lại.',
  },
  feishu: {
    createApp: 'Tạo ứng dụng Feishu chỉ với một lần nhấp',
    scanQRCode:
      'Quét mã QR bên dưới bằng Feishu để ủy quyền và tự động tạo ứng dụng',
    waitingForScan: 'Đang chờ quét',
    createSuccess:
      'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
    createFailed: 'Tạo ứng dụng thất bại',
    connecting: 'Đang kết nối tới dịch vụ Feishu...',
    expired: 'Mã QR đã hết hạn, vui lòng thử lại',
    denied: 'Người dùng đã từ chối ủy quyền',
    connectionLost: 'Kết nối đã bị mất, vui lòng thử lại',
    reconnecting: 'Đang kết nối lại...',
    retry: 'Thử lại',
  },
  weixin: {
    scanLogin: 'Đăng nhập WeChat bằng mã QR',
    scanQRCode:
      'Quét mã QR bên dưới bằng WeChat để ủy quyền và tự động điền token',
    loginSuccess: 'Đăng nhập thành công! Token đã được điền tự động',
    loginFailed: 'Đăng nhập thất bại',
    connecting: 'Đang kết nối tới dịch vụ WeChat...',
    waitingForScan: 'Đang chờ quét mã',
    retry: 'Thử lại',
  },
  dingtalk: {
    createApp: 'Tạo ứng dụng DingTalk chỉ với một lần nhấp',
    scanQRCode:
      'Quét mã QR bên dưới bằng DingTalk để ủy quyền và tự động tạo ứng dụng',
    waitingForScan: 'Đang chờ quét',
    createSuccess:
      'Tạo ứng dụng thành công! Thông tin xác thực đã được điền tự động',
    createFailed: 'Tạo ứng dụng thất bại',
    connecting: 'Đang kết nối tới dịch vụ DingTalk...',
    retry: 'Thử lại',
    robotCodeNote:
      'Không thể tự động lấy Robot Code. Vui lòng vào trang quản trị nhà phát triển DingTalk > Cấu hình robot để sao chép thủ công. Trường này là bắt buộc cho các tính năng như nhận diện hình ảnh và tải tệp lên.',
  },
  wecombot: {
    createBot: 'Tạo bot WeCom chỉ với một lần nhấp',
    scanQRCode: 'Quét mã QR bên dưới bằng WeCom để ủy quyền và tự động tạo bot',
    waitingForScan: 'Đang chờ quét',
    createSuccess:
      'Tạo bot thành công! Thông tin xác thực đã được điền tự động',
    createFailed: 'Tạo bot thất bại',
    connecting: 'Đang kết nối tới dịch vụ WeCom...',
    retry: 'Thử lại',
    robotNameNote: 'Không thể tự động lấy tên bot. Vui lòng điền thủ công.',
  },
  qqofficial: {
    createBinding: 'Liên kết bot QQ Official bằng QR một chạm',
    scanQRCode:
      'Quét mã QR bên dưới bằng QQ trên di động và xác nhận liên kết trong «QQ Bot Assistant»',
    waitingForScan: 'Đang chờ quét',
    bindSuccess: 'Liên kết thành công! AppID và Secret đã được điền tự động',
    bindFailed: 'Liên kết thất bại',
    connecting: 'Đang kết nối tới dịch vụ QQ...',
    retry: 'Thử lại',
    tokenNote:
      'Bộ chuyển đổi hiện tại không dùng trường Token; có thể để trống.',
    boundBy: 'Được liên kết bởi người dùng QQ {{openid}}',
  },
  pluginPages: {
    selectFromSidebar: 'Chọn một trang plugin từ thanh bên',
    invalidPage: 'Trang plugin không hợp lệ',
  },
  skills: {
    title: 'Kỹ năng',
    description:
      'Tạo và quản lý các kỹ năng có thể được kích hoạt trong cuộc trò chuyện',
    createSkill: 'Tạo kỹ năng',
    createSkillDescription:
      'Nhập thư mục cục bộ hoặc tạo bằng cách điền thông tin',
    editSkill: 'Chỉnh sửa kỹ năng',
    getSkillListError: 'Không thể lấy danh sách kỹ năng: ',
    skillName: 'Tên kỹ năng',
    displayName: 'Tên kỹ năng',
    displayNamePlaceholder: 'Tên hiển thị (hỗ trợ mọi ngôn ngữ)',
    skillSlug: 'Tên thư mục',
    skillSlugPlaceholder: 'english-name-only',
    skillSlugHelp:
      'Dùng làm tên thư mục kỹ năng. Chỉ hỗ trợ chữ cái, số, dấu gạch nối và dấu gạch dưới.',
    skillDescription: 'Mô tả kỹ năng',
    skillInstructions: 'Hướng dẫn',
    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 muốn xóa kỹ năng này không?',
    delete: 'Xóa kỹ năng',
    skillNameRequired: 'Tên kỹ năng không được để trống',
    skillDescriptionRequired: 'Mô tả kỹ năng không được để trống',
    packageRootRequired: 'Đường dẫn gốc của gói không được để trống',
    scan: 'Quét',
    scanSuccess: 'Đã quét thư mục thành công',
    scanError: 'Quét thư mục thất bại: ',
    noSkills: 'Chưa cấu hình kỹ năng nào',
    preview: 'Xem trước',
    previewInstructions: 'Xem trước nội dung SKILL.md',
    instructionsPlaceholder:
      'Nhập hướng dẫn kỹ năng theo định dạng Markdown...',
    descriptionPlaceholder:
      'Mô tả ngắn về chức năng của kỹ năng này (hiển thị cho LLM)',
    packageRoot: 'Thư mục gói',
    packageRootHelp:
      'Tùy chọn. Chỉ cần khi nhập một thư mục kỹ năng hiện có. Để trống với kỹ năng mới. Quá trình quét kiểm tra thư mục hiện tại và thư mục con sâu tối đa 2 cấp.',
    importLocalDirectory: 'Nhập thư mục kỹ năng cục bộ',
    chooseSkillDirectory: 'Chọn thư mục chứa SKILL.md',
    chooseAnotherDirectory: 'Chọn thư mục khác',
    importingDirectory: 'Đang tạo bản xem trước...',
    clearDirectoryPreview: 'Xóa thư mục đã chọn',
    noSkillMdInDirectory: 'Không tìm thấy SKILL.md trong thư mục đã chọn',
    multipleSkillMdInDirectory:
      'Thư mục đã chọn chứa nhiều tệp SKILL.md. Vui lòng chọn trực tiếp một thư mục kỹ năng duy nhất.',
    importDirectoryError: 'Nhập thư mục thất bại: ',
    advancedSettings: 'Cài đặt nâng cao',
    searchSkills: 'Tìm kiếm kỹ năng...',
    selectSkills: 'Chọn kỹ năng',
    addSkill: 'Thêm kỹ năng',
    builtin: 'Tích hợp sẵn',
    importFromGithub: 'Cài đặt kỹ năng từ GitHub',
    createManually: 'Tạo thủ công',
    uploadZip: 'Tải lên gói ZIP',
    uploadZipOnly: 'Chỉ hỗ trợ gói kỹ năng .zip',
    installSuccess: 'Đã cài đặt kỹ năng thành công',
    installError: 'Cài đặt kỹ năng thất bại: ',
    enterRepoUrl: 'Nhập URL kho GitHub',
    repoUrlPlaceholder: 'ví dụ: https://github.com/owner/repo',
    fetchingReleases: 'Đang tải release...',
    selectRelease: 'Chọn release',
    noReleasesFound: 'Không tìm thấy release',
    fetchReleasesError: 'Không thể tải release: ',
    selectAsset: 'Chọn tệp để cài đặt',
    sourceArchive: 'Mã nguồn (zip)',
    noAssetsFound: 'Không có tệp có thể cài đặt trong release này',
    fetchAssetsError: 'Không thể tải tệp: ',
    backToReleases: 'Quay lại release',
    backToRepoUrl: 'Quay lại URL kho',
    backToAssets: 'Quay lại tệp',
    releaseTag: 'Thẻ: {{tag}}',
    publishedAt: 'Phát hành lúc: {{date}}',
    prerelease: 'Bản phát hành trước',
    assetSize: 'Kích thước: {{size}}',
    confirmInstall: 'Xác nhận cài đặt',
    installing: 'Đang cài đặt kỹ năng...',
    loading: 'Đang tải...',
    previewLoadError: 'Không thể tải bản xem trước',
    selectFromSidebar: 'Chọn một kỹ năng từ thanh bên',
    dangerZone: 'Vùng nguy hiểm',
    dangerZoneDescription: 'Các thao tác không thể hoàn tác và có tính phá hủy',
    files: 'Tệp',
    noFiles: 'Không tìm thấy tệp',
    loadFilesError: 'Không thể tải tệp: ',
    readFileError: 'Không thể đọc tệp: ',
    saveFile: 'Lưu tệp',
    saveFileSuccess: 'Đã lưu tệp thành công',
    saveFileError: 'Lưu tệp thất bại: ',
  },
  addExtension: {
    installTitle: 'Cài đặt {{type}}',
    installConfirm: 'Cài đặt {{type}} "{{name}}"?',
    installInfoType: 'Loại',
    installInfoId: 'ID',
    installInfoVersion: 'Phiên bản',
    installSuccess: 'Cài đặt thành công',
    installStage: {
      mcpInstalling: 'Đang thêm và kết nối máy chủ MCP…',
      skillInstalling: 'Đang cài đặt kỹ năng…',
      installed: 'Hoàn tất',
    },
    manualAdd: 'Thêm thủ công',
    uploadExtension: 'Kéo thả hoặc nhấp để tải lên',
    uploadHint: 'Hỗ trợ tệp .zip (kỹ năng) và .lbpkg (plugin)',
    orContinueWith: 'hoặc chọn một thao tác bên dưới',
    addMCPServerHint: 'Kết nối tiện ích máy chủ công cụ MCP',
    installFromGithub: 'Cài đặt từ GitHub',
    installFromGithubHint: 'Gói plugin hoặc kỹ năng (SKILL.md)',
    githubUrlHelp: 'Dán URL GitHub',
    githubUrlTooltip:
      'Plugin: dán URL kho, Release hoặc Tag. Kỹ năng: dán URL trang SKILL.md trong thư mục kỹ năng.',
    githubUrlPlaceholder: 'Kho GitHub, Release hoặc liên kết SKILL.md',
    githubUrlRequired: 'Nhập URL GitHub',
    previewSkill: 'Xem trước kỹ năng',
    noSkillPreviewFound: 'Không tìm thấy kỹ năng có thể nhập',
    createSkill: 'Tạo kỹ năng mới',
    createSkillHint: 'Nhập từ thư mục cục bộ hoặc tạo thủ công',
    unsupportedFileType:
      'Loại tệp không được hỗ trợ. Chỉ hỗ trợ tệp .zip và .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 viVN;
