export type Lang = "zh-CN" | "en"; export type I18nKey = | "nav.features" | "nav.screenshots" | "nav.quickStart" | "nav.agentLogin" | "nav.menu" | "common.github" | "common.to" | "common.save" | "common.saving" | "common.restoreEnv" | "common.loading" | "common.search" | "common.prevPage" | "common.nextPage" | "common.copy" | "home.hero.tagline" | "home.hero.title" | "home.hero.subtitle" | "home.hero.cta.tryNow" | "home.hero.cta.agentLogin" | "home.hero.hint" | "home.stats.trustedBy" | "home.stats.clients" | "home.stats.conversations" | "home.stats.latency" | "home.stats.satisfaction" | "home.stats.val.clients" | "home.stats.val.conversations" | "home.stats.val.latency" | "home.stats.val.satisfaction" | "home.features.title" | "home.features.lead" | "home.cap.multimodel.title" | "home.cap.multimodel.desc" | "home.cap.kb.title" | "home.cap.kb.desc" | "home.cap.prompt.title" | "home.cap.prompt.desc" | "home.cap.human.title" | "home.cap.human.desc" | "home.cap.reports.title" | "home.cap.reports.desc" | "home.cap.logs.title" | "home.cap.logs.desc" | "home.screenshots.title" | "home.screenshots.lead" | "home.screenshots.prevAria" | "home.screenshots.nextAria" | "home.ss.dashboard.title" | "home.ss.dashboard.placeholder" | "home.ss.dashboard.alt" | "home.ss.visitor.title" | "home.ss.visitor.placeholder" | "home.ss.visitor.alt" | "home.ss.aiconfig.title" | "home.ss.aiconfig.placeholder" | "home.ss.aiconfig.alt" | "home.ss.users.title" | "home.ss.users.placeholder" | "home.ss.users.alt" | "home.ss.faq.title" | "home.ss.faq.placeholder" | "home.ss.faq.alt" | "home.ss.knowledge.title" | "home.ss.knowledge.placeholder" | "home.ss.knowledge.alt" | "home.ss.kbtest.title" | "home.ss.kbtest.placeholder" | "home.ss.kbtest.alt" | "home.ss.prompts.title" | "home.ss.prompts.placeholder" | "home.ss.prompts.alt" | "home.ss.logs.title" | "home.ss.logs.placeholder" | "home.ss.logs.alt" | "home.ss.analytics.title" | "home.ss.analytics.placeholder" | "home.ss.analytics.alt" | "home.quickStart.title" | "home.quickStart.lead" | "home.step1.title" | "home.step1.body" | "home.step2.title" | "home.step2.body" | "home.step3.title" | "home.step3.body" | "home.cta.title" | "home.cta.subtitle" | "home.cta.starRepo" | "home.cta.feedback" | "home.cta.mailSubject" | "home.cta.mailBody" | "footer.blurb" | "footer.column.product" | "footer.column.friendLinks" | "footer.column.contact" | "footer.noFriendLinks" | "footer.onlineChat" | "footer.openSourceLicense" | "footer.poweredBy" | "footer.allRightsReserved" | "footer.emailLabel" | "footer.qqGroup" | "footer.qqGroupAria" | "agent.page.dashboard" | "agent.page.internalChat" | "agent.page.knowledge" | "agent.page.faqs" | "agent.page.analytics" | "agent.page.logs" | "agent.page.users" | "agent.page.prompts" | "agent.page.settings" | "agent.profile" | "agent.logout" | "agent.chat.conversation" | "agent.chat.lastSeen" | "agent.chat.lastSeenUnknown" | "agent.chat.showAI" | "agent.chat.hideAI" | "agent.chat.closeConversation" | "agent.chat.refresh" | "agent.chat.soundOn" | "agent.chat.soundOff" | "agent.chat.toast.conversationClosed" | "agent.chat.toast.closeFailed" | "agent.chat.emptyPick" | "agent.layout.openNavMenu" | "agent.layout.openVisitorPanel" | "agent.internalChat.webSearchThisTurn" | "agent.internalChat.aiThinking" | "agent.internalChat.emptyHint" | "agent.internalChat.createFailed" | "agent.login.title" | "agent.login.subtitle" | "agent.login.username" | "agent.login.password" | "agent.login.submit" | "agent.login.submitting" | "agent.login.error.empty" | "agent.login.error.failed" | "agent.login.error.network" | "agent.login.demoHint" | "agent.logs.title" | "agent.logs.subtitle" | "agent.logs.policy.title" | "agent.logs.policy.desc" | "agent.logs.policy.current" | "agent.logs.policy.env" | "agent.logs.policy.overridden" | "agent.logs.level.all" | "agent.logs.category.all" | "agent.logs.source.all" | "agent.logs.event.placeholder" | "agent.logs.conversationId.placeholder" | "agent.logs.keyword.placeholder" | "agent.logs.table.time" | "agent.logs.table.level" | "agent.logs.table.category" | "agent.logs.table.event" | "agent.logs.table.conversation" | "agent.logs.table.source" | "agent.logs.table.message" | "agent.logs.paginationSummary" | "agent.logs.empty" | "agent.logs.detail.title" | "agent.logs.detail.time" | "agent.logs.detail.sourceEvent" | "agent.logs.detail.category" | "agent.logs.detail.traceId" | "agent.logs.detail.conversationId" | "agent.logs.detail.userVisitor" | "agent.logs.detail.message" | "agent.logs.detail.metaJson" | "agent.logs.detail.noMeta" | "agent.logs.toast.loadPolicyFailed" | "agent.logs.toast.loadLogsFailed" | "agent.logs.toast.savePolicyFailed" | "agent.logs.toast.restorePolicyFailed" | "agent.logs.toast.policySaved" | "agent.logs.toast.policyRestored" | "agent.logs.toast.messageCopied" | "agent.logs.toast.copyFailed" | "agent.conversationsPage.title" | "agent.conversationsPage.loading" | "agent.conversationsPage.empty" | "agent.conversationsPage.convLabel" | "agent.conversationsPage.visitorLabel" | "agent.conversationsPage.createdAt" | "agent.conversationsPage.updatedAt" | "agent.conversations.filter.all" | "agent.conversations.filter.mine" | "agent.conversations.filter.others" | "agent.conversations.status.open" | "agent.conversations.status.closed" | "agent.internalChat.title" | "agent.internalChat.new" | "agent.conversation.noMessage" | "agent.conversation.online" | "agent.conversation.visitor" | "agent.input.upload" | "agent.input.placeholder" | "agent.input.placeholder.withAttachment" | "agent.input.sending" | "agent.input.uploading" | "agent.input.send" | "agent.input.fileTooLarge" | "agent.input.fileTypeNotSupported" | "agent.input.uploadFailed" | "agent.aiSource.kb" | "agent.aiSource.llm" | "agent.aiSource.web" | "agent.common.back" | "agent.common.cancel" | "agent.common.create" | "agent.common.update" | "agent.common.delete" | "agent.common.edit" | "agent.common.keywordSearch" | "agent.common.noMatch" | "agent.common.none" | "agent.common.confirm" | "agent.faqs.title" | "agent.faqs.subtitle" | "agent.faqs.search.placeholder" | "agent.faqs.createButton" | "agent.faqs.empty" | "agent.faqs.empty.filtered" | "agent.faqs.dialog.createTitle" | "agent.faqs.dialog.editTitle" | "agent.faqs.dialog.deleteTitle" | "agent.faqs.form.question" | "agent.faqs.form.answer" | "agent.faqs.form.keywords" | "agent.faqs.form.keywordsHint" | "agent.faqs.toast.loadFailed" | "agent.faqs.toast.createFailed" | "agent.faqs.toast.updateFailed" | "agent.faqs.toast.deleteFailed" | "agent.faqs.toast.createSuccess" | "agent.faqs.toast.updateSuccess" | "agent.faqs.toast.deleteSuccess" | "agent.faqs.quickSearch.placeholder" | "agent.faqs.quickSearch.searching" | "agent.faqs.quickSearch.noResults" | "agent.faqs.quickSearch.startTyping" | "agent.faqs.toast.emptyRequired" | "agent.faqs.card.keywords" | "agent.faqs.card.createdAt" | "agent.faqs.card.edit" | "agent.faqs.dialog.createTitle2" | "agent.faqs.dialog.createDesc" | "agent.faqs.dialog.editDesc" | "agent.faqs.dialog.deleteConfirm" | "agent.faqs.form.placeholder.question" | "agent.faqs.form.placeholder.answer" | "agent.faqs.form.placeholder.keywords" | "agent.faqs.form.keywordsOptional" | "agent.faqs.form.keywordsTip" | "agent.faqs.submit.creating" | "agent.faqs.submit.deleting" | "agent.perm.analytics" | "agent.perm.chat" | "agent.perm.faqs" | "agent.perm.kb_test" | "agent.perm.knowledge" | "agent.perm.logs" | "agent.perm.prompts" | "agent.perm.settings" | "agent.perm.users" | "agent.settings.aiCard.titleAdd" | "agent.settings.aiCard.titleEdit" | "agent.settings.aiForm.active" | "agent.settings.aiForm.apiKey" | "agent.settings.aiForm.apiUrl" | "agent.settings.aiForm.apiUrlPh" | "agent.settings.aiForm.descPh" | "agent.settings.aiForm.description" | "agent.settings.aiForm.model" | "agent.settings.aiForm.modelType" | "agent.settings.aiForm.modelPh" | "agent.settings.aiForm.provider" | "agent.settings.aiForm.providerPh" | "agent.settings.aiForm.public" | "agent.settings.aiForm.submitCreate" | "agent.settings.aiForm.submitUpdate" | "agent.settings.aiForm.submitting" | "agent.settings.backDashboard" | "agent.settings.badge.active" | "agent.settings.badge.public" | "agent.settings.confirmDeleteConfig" | "agent.settings.embedding.apiKey" | "agent.settings.embedding.apiKeyKeepEmpty" | "agent.settings.embedding.apiKeyInput" | "agent.settings.embedding.apiUrl" | "agent.settings.embedding.apiUrlPh" | "agent.settings.embedding.bgeLocal" | "agent.settings.embedding.customerKb" | "agent.settings.embedding.lead" | "agent.settings.embedding.model" | "agent.settings.embedding.modelPh" | "agent.settings.embedding.openaiCompatible" | "agent.settings.embedding.save" | "agent.settings.embedding.title" | "agent.settings.embedding.type" | "agent.settings.error.delete" | "agent.settings.error.loadConfigs" | "agent.settings.error.loadEmbedding" | "agent.settings.error.operation" | "agent.settings.global.noReceiveAi" | "agent.settings.global.noReceiveAiHint" | "agent.settings.list.apiUrlLabel" | "agent.settings.list.descLabel" | "agent.settings.list.empty" | "agent.settings.list.modelTypeLabel" | "agent.settings.list.title" | "agent.settings.modelType.audio" | "agent.settings.modelType.image" | "agent.settings.modelType.text" | "agent.settings.modelType.video" | "agent.settings.section.global" | "agent.settings.autoClose.title" | "agent.settings.autoClose.lead" | "agent.settings.autoClose.daysLabel" | "agent.settings.autoClose.daysHint" | "agent.settings.autoClose.statusEffective" | "agent.settings.autoClose.statusEnv" | "agent.settings.autoClose.statusDb" | "agent.settings.autoClose.statusEnvOnly" | "agent.settings.autoClose.save" | "agent.settings.autoClose.resetEnv" | "agent.settings.autoClose.errorLoad" | "agent.settings.autoClose.errorInvalid" | "agent.settings.autoClose.toastSaved" | "agent.settings.autoClose.toastReset" | "agent.settings.offlineEmail.title" | "agent.settings.offlineEmail.lead" | "agent.settings.offlineEmail.enabled" | "agent.settings.offlineEmail.delayLabel" | "agent.settings.offlineEmail.delayHint" | "agent.settings.offlineEmail.smtpHost" | "agent.settings.offlineEmail.smtpPort" | "agent.settings.offlineEmail.smtpUser" | "agent.settings.offlineEmail.smtpPassword" | "agent.settings.offlineEmail.smtpPasswordKeepEmpty" | "agent.settings.offlineEmail.fromEmail" | "agent.settings.offlineEmail.fromName" | "agent.settings.offlineEmail.statusEffective" | "agent.settings.offlineEmail.statusEnv" | "agent.settings.offlineEmail.statusDb" | "agent.settings.offlineEmail.statusEnvOnly" | "agent.settings.offlineEmail.save" | "agent.settings.offlineEmail.resetEnv" | "agent.settings.offlineEmail.testTo" | "agent.settings.offlineEmail.testSend" | "agent.settings.offlineEmail.adminOnly" | "agent.settings.offlineEmail.errorLoad" | "agent.settings.offlineEmail.errorInvalidDelay" | "agent.settings.offlineEmail.toastSaved" | "agent.settings.offlineEmail.toastReset" | "agent.settings.offlineEmail.toastTestSent" | "agent.settings.offlineEmail.statusOn" | "agent.settings.offlineEmail.statusOff" | "agent.settings.subtitle" | "agent.settings.title" | "agent.settings.toast.embeddingSaved" | "agent.settings.toast.profileUpdateFailed" | "agent.settings.webSearch.lead" | "agent.settings.webSearch.mode" | "agent.settings.webSearch.modeCustom" | "agent.settings.webSearch.modeHint" | "agent.settings.webSearch.modeVendor" | "agent.settings.webSearch.save" | "agent.settings.webSearch.title" | "agent.settings.webSearch.visitorToggle" | "agent.users.card.edit" | "agent.users.card.password" | "agent.users.createButton" | "agent.users.dialog.createTitle" | "agent.users.dialog.deleteConfirm" | "agent.users.dialog.deleteNote" | "agent.users.dialog.deleteTitle" | "agent.users.dialog.editTitle" | "agent.users.dialog.passwordTitle" | "agent.users.empty" | "agent.users.empty.filtered" | "agent.users.field.createdAt" | "agent.users.field.email" | "agent.users.field.username" | "agent.users.form.email" | "agent.users.form.newPassword" | "agent.users.form.oldPassword" | "agent.users.form.password" | "agent.users.form.permissions" | "agent.users.form.permissionsHint" | "agent.users.form.role" | "agent.users.form.username" | "agent.users.placeholder.email" | "agent.users.placeholder.emailOptional" | "agent.users.placeholder.nickname" | "agent.users.placeholder.nicknameOptional" | "agent.users.placeholder.oldPassword" | "agent.users.placeholder.password" | "agent.users.placeholder.username" | "agent.users.receiveAiLabel" | "agent.users.role.admin" | "agent.users.role.agent" | "agent.users.search.placeholder" | "agent.users.submit.creating" | "agent.users.submit.deleting" | "agent.users.submit.updating" | "agent.users.title" | "agent.users.toast.adminDeleteDisabled" | "agent.users.toast.adminPasswordDisabled" | "agent.users.toast.createFailed" | "agent.users.toast.createSuccess" | "agent.users.toast.deleteFailed" | "agent.users.toast.deleteSuccess" | "agent.users.toast.deleteTransferred" | "agent.users.toast.loadFailed" | "agent.users.toast.newPasswordRequired" | "agent.users.toast.oldPasswordRequired" | "agent.users.toast.passwordFailed" | "agent.users.toast.passwordSuccess" | "agent.users.toast.updateFailed" | "agent.users.toast.updateSuccess" | "agent.users.toast.usernamePasswordRequired" | "agent.users.tooltip.adminDeleteDbOnly" | "agent.users.tooltip.adminPasswordDbOnly" | "agent.users.tooltip.cannotDeleteSelf" | "agent.users.usernameImmutableHint" | "agent.users.form.nickname" | "agent.knowledge.title" | "agent.knowledge.rag" | "agent.knowledge.kb.create" | "agent.knowledge.kb.empty" | "agent.knowledge.kb.selectOne" | "agent.knowledge.kb.docCount" | "agent.knowledge.import.url" | "agent.knowledge.import.file" | "agent.knowledge.import.tabFile" | "agent.knowledge.import.tabUrl" | "agent.knowledge.import.pickFiles" | "agent.knowledge.import.filesSelected" | "agent.knowledge.import.action" | "agent.knowledge.import.urlListLabel" | "agent.knowledge.doc.create" | "agent.knowledge.doc.searchPh" | "agent.knowledge.doc.empty" | "agent.knowledge.doc.empty.filtered" | "agent.knowledge.doc.type" | "agent.knowledge.doc.createdAt" | "agent.knowledge.doc.publish" | "agent.knowledge.doc.unpublish" | "agent.knowledge.filter.all" | "agent.knowledge.pagination" | "agent.knowledge.status.draft" | "agent.knowledge.status.published" | "agent.knowledge.embedding.pending" | "agent.knowledge.embedding.processing" | "agent.knowledge.embedding.completed" | "agent.knowledge.embedding.failed" | "agent.knowledge.dialog.kbCreateTitle" | "agent.knowledge.dialog.kbCreateDesc" | "agent.knowledge.dialog.kbEditTitle" | "agent.knowledge.dialog.kbEditDesc" | "agent.knowledge.dialog.kbDeleteTitle" | "agent.knowledge.dialog.kbDeleteConfirm" | "agent.knowledge.dialog.kbDeleteHint" | "agent.knowledge.dialog.docCreateTitle" | "agent.knowledge.dialog.docCreateDesc" | "agent.knowledge.dialog.docEditTitle" | "agent.knowledge.dialog.docEditDesc" | "agent.knowledge.dialog.docDeleteTitle" | "agent.knowledge.dialog.docDeleteConfirm" | "agent.knowledge.dialog.importTitle" | "agent.knowledge.dialog.importDesc" | "agent.knowledge.field.name" | "agent.knowledge.field.descOptional" | "agent.knowledge.field.title" | "agent.knowledge.field.summaryOptional" | "agent.knowledge.field.content" | "agent.knowledge.ph.kbName" | "agent.knowledge.ph.kbDesc" | "agent.knowledge.ph.docTitle" | "agent.knowledge.ph.docSummary" | "agent.knowledge.ph.docContent" | "agent.knowledge.submitting.creating" | "agent.knowledge.submitting.updating" | "agent.knowledge.submitting.deleting" | "agent.knowledge.submitting.importing" | "agent.knowledge.toast.loadKbFailed" | "agent.knowledge.toast.loadDocFailed" | "agent.knowledge.toast.kbNameRequired" | "agent.knowledge.toast.selectKbFirst" | "agent.knowledge.toast.docTitleContentRequired" | "agent.knowledge.toast.createSuccess" | "agent.knowledge.toast.updateSuccess" | "agent.knowledge.toast.deleteSuccess" | "agent.knowledge.toast.updateFailed" | "agent.knowledge.toast.createKbFailed" | "agent.knowledge.toast.updateKbFailed" | "agent.knowledge.toast.deleteKbFailed" | "agent.knowledge.toast.createDocFailed" | "agent.knowledge.toast.updateDocFailed" | "agent.knowledge.toast.deleteDocFailed" | "agent.knowledge.toast.publishSuccess" | "agent.knowledge.toast.publishFailed" | "agent.knowledge.toast.unpublishSuccess" | "agent.knowledge.toast.unpublishFailed" | "agent.knowledge.toast.selectFiles" | "agent.knowledge.toast.urlRequired" | "agent.knowledge.toast.importDocFailed" | "agent.knowledge.toast.importUrlFailed" | "agent.knowledge.toast.importRefreshFailed" | "agent.knowledge.toast.importFailed.files" | "agent.knowledge.toast.importFailed.urls" | "agent.knowledge.toast.importDone.files" | "agent.knowledge.toast.importDone.urls" | "agent.knowledge.toast.importDone.partial" | "agent.prompts.title" | "agent.prompts.subtitle" | "agent.prompts.loadFailed" | "agent.prompts.saveSuccess" | "agent.prompts.saveFailed" | "agent.prompts.usageLabel" | "agent.prompts.ph.shortReply" | "agent.prompts.ph.withPlaceholders" | "agent.prompts.saving" | "agent.prompts.save" | "agent.prompts.hint.rag_prompt" | "agent.prompts.hint.rag_prompt_with_web_optional" | "agent.prompts.hint.no_kb_prompt" | "agent.prompts.hint.web_search_result_prompt" | "agent.prompts.hint.no_source_reply" | "agent.prompts.hint.ai_fail_reply" | "agent.prompts.hint.default" | "agent.prompts.usage.rag_prompt" | "agent.prompts.usage.rag_prompt_with_web_optional" | "agent.prompts.usage.no_kb_prompt" | "agent.prompts.usage.web_search_result_prompt" | "agent.prompts.usage.no_source_reply" | "agent.prompts.usage.ai_fail_reply" | "agent.analytics.title" | "agent.analytics.subtitle" | "agent.analytics.from" | "agent.analytics.to" | "agent.analytics.query" | "agent.analytics.loading" | "agent.analytics.empty" | "agent.analytics.emptyOrFailed" | "agent.analytics.stat.widgetOpens" | "agent.analytics.stat.widgetOpensSub" | "agent.analytics.stat.sessions" | "agent.analytics.stat.messages" | "agent.analytics.stat.aiReplies" | "agent.analytics.stat.aiFailed" | "agent.analytics.stat.aiFailureRate" | "agent.analytics.stat.aiFailureRateSub" | "agent.analytics.stat.kbHits" | "agent.analytics.stat.kbHitRate" | "agent.analytics.stat.kbHitRateSub" | "agent.analytics.stat.maxAiRounds" | "agent.analytics.stat.maxAiRoundsSub" | "agent.analytics.stat.sessionsWithAi" | "agent.analytics.stat.sessionsWithAiSub" | "agent.analytics.stat.aiToHuman" | "agent.analytics.stat.aiToHumanSub" | "agent.analytics.stat.humanToAi" | "agent.analytics.stat.humanToAiSub" | "agent.analytics.chart.widgetOpens" | "agent.analytics.chart.sessions" | "agent.analytics.chart.messages" | "agent.analytics.chart.aiReplies" | "common.irreversibleHint" | "chat.title" | "chat.mode.human" | "chat.mode.ai" | "chat.email.placeholder" | "chat.email.optional" | "chat.email.privacy" | "chat.input.placeholder"; export const DEFAULT_LANG: Lang = "zh-CN"; export const LANG_STORAGE_KEY = "aics_lang"; export const DICT: Record> = { "zh-CN": { "nav.features": "核心能力", "nav.screenshots": "界面展示", "nav.quickStart": "快速接入", "nav.agentLogin": "客服登录", "nav.menu": "菜单", "common.github": "GitHub", "common.to": "到", "common.save": "保存到服务器", "common.saving": "保存中...", "common.restoreEnv": "恢复环境变量", "common.loading": "加载中...", "common.search": "查询", "common.prevPage": "上一页", "common.nextPage": "下一页", "common.copy": "复制", "home.hero.tagline": "AI 智能客服", "home.hero.title": "让客户服务更简单、更高效", "home.hero.subtitle": "7×24 小时智能应答,AI 与人工无缝切换,释放团队时间专注更有价值的事", "home.hero.cta.tryNow": "立即体验", "home.hero.cta.agentLogin": "客服登录", "home.hero.hint": "无需等待,可立即使用", "home.stats.trustedBy": "深受企业信赖", "home.stats.clients": "服务企业", "home.stats.conversations": "处理对话", "home.stats.latency": "响应时间", "home.stats.satisfaction": "满意度", "home.stats.val.clients": "1000+", "home.stats.val.conversations": "100万+", "home.stats.val.latency": "<100ms", "home.stats.val.satisfaction": "98%", "home.features.title": "核心能力", "home.features.lead": "从模型、知识库、提示词到人工协作、报表与日志,一套系统串起来。", "home.cap.multimodel.title": "多模型 AI 客服", "home.cap.multimodel.desc": "支持配置多家大模型与绘画等能力,访客与后台可统一管理模型与使用方式,便于替换供应商、控制成本。", "home.cap.kb.title": "知识库与 RAG", "home.cap.kb.desc": "文档入库、向量检索,让回答贴近你的业务资料;回复可标记是否使用知识库、模型或联网,便于核对与优化。", "home.cap.prompt.title": "提示词工程", "home.cap.prompt.desc": "配置系统中使用的提示词模板,用于不同领域 RAG、联网等不同的业务场景。", "home.cap.human.title": "人工客服与实时协作", "home.cap.human.desc": "在线状态、会话实时推送(WebSocket),支持人工接管与日常协作;访客小窗可嵌入任意站点。", "home.cap.reports.title": "可视化报表", "home.cap.reports.desc": "按日或自定义区间查看访客小窗打开、会话与消息、AI 回复与失败率、知识库命中率等指标,快速掌握运营态势。", "home.cap.logs.title": "日志中心", "home.cap.logs.desc": "结构化日志按分类与事件落库,支持 trace_id 与关键字筛选,关键链路与异常可追溯,便于排障与审计。", "home.screenshots.title": "界面展示", "home.screenshots.lead": "精心设计的界面,让管理更轻松", "home.screenshots.prevAria": "查看上一张", "home.screenshots.nextAria": "查看下一张", "home.ss.dashboard.title": "工作台", "home.ss.dashboard.placeholder": "工作台界面", "home.ss.dashboard.alt": "AI-CS 工作台界面", "home.ss.visitor.title": "访客端", "home.ss.visitor.placeholder": "访客端界面", "home.ss.visitor.alt": "AI-CS 访客端界面", "home.ss.aiconfig.title": "AI 配置", "home.ss.aiconfig.placeholder": "AI 配置界面", "home.ss.aiconfig.alt": "AI-CS AI 配置界面", "home.ss.users.title": "用户管理", "home.ss.users.placeholder": "用户管理界面", "home.ss.users.alt": "AI-CS 用户管理界面", "home.ss.faq.title": "FAQ 管理", "home.ss.faq.placeholder": "FAQ 管理界面", "home.ss.faq.alt": "AI-CS FAQ 管理界面", "home.ss.knowledge.title": "知识库管理", "home.ss.knowledge.placeholder": "知识库管理界面", "home.ss.knowledge.alt": "AI-CS 知识库管理界面", "home.ss.kbtest.title": "知识库测试", "home.ss.kbtest.placeholder": "知识库测试界面", "home.ss.kbtest.alt": "AI-CS 知识库测试界面", "home.ss.prompts.title": "提示词工程", "home.ss.prompts.placeholder": "提示词工程界面", "home.ss.prompts.alt": "AI-CS 提示词工程界面", "home.ss.logs.title": "日志中心", "home.ss.logs.placeholder": "日志中心界面", "home.ss.logs.alt": "AI-CS 日志中心界面", "home.ss.analytics.title": "可视化报表", "home.ss.analytics.placeholder": "可视化报表界面", "home.ss.analytics.alt": "AI-CS 可视化报表界面", "home.quickStart.title": "快速接入", "home.quickStart.lead": "三步跑通,从仓库到访客小窗。", "home.step1.title": "克隆与配置", "home.step1.body": "复制 .env 模板,填好数据库与管理员等必填项。", "home.step2.title": "一键启动", "home.step2.body": "使用 Docker Compose 拉起前后端与依赖服务(详见 README)。", "home.step3.title": "嵌入访客端", "home.step3.body": "在站点中挂载聊天小窗,后台完成模型与知识库配置后即可对外服务。", "home.cta.title": "准备好把 AI-CS 接到你的产品里了吗?", "home.cta.subtitle": "从开源仓库开始,或用在线 Demo 先看交互与能力边界。", "home.cta.starRepo": "Star / Fork 仓库", "home.cta.feedback": "建议反馈", "home.cta.mailSubject": "AI-CS 建议反馈", "home.cta.mailBody": "你好,我想反馈:\n\n1)问题/建议:\n2)影响范围/环境:\n3)期望结果:\n\n---\n联系方式(可选):", "footer.blurb": "AI-CS 是一款 AI 驱动的智能客服系统,融合 AI 技术与人工客服,为企业提供高效、智能的客户服务解决方案。", "footer.column.product": "产品", "footer.column.friendLinks": "友情链接", "footer.column.contact": "联系我们", "footer.noFriendLinks": "暂无友情链接", "footer.onlineChat": "在线客服", "footer.openSourceLicense": "开源协议", "footer.poweredBy": "Powered by Next.js & Go |", "footer.allRightsReserved": "保留所有权利。", "footer.emailLabel": "邮箱", "footer.qqGroup": "QQ 交流群", "footer.qqGroupAria": "加入 QQ 交流群", "agent.page.dashboard": "对话", "agent.page.internalChat": "知识库测试", "agent.page.knowledge": "知识库", "agent.page.faqs": "事件管理", "agent.page.analytics": "数据报表", "agent.page.logs": "日志中心", "agent.page.users": "用户管理", "agent.page.prompts": "提示词", "agent.page.settings": "AI 配置", "agent.profile": "个人资料", "agent.logout": "退出登录", "agent.chat.conversation": "对话", "agent.chat.lastSeen": "最后活跃", "agent.chat.lastSeenUnknown": "最后活跃 未知", "agent.chat.showAI": "显示 AI 消息", "agent.chat.hideAI": "隐藏 AI 消息", "agent.chat.closeConversation": "关闭会话", "agent.chat.refresh": "刷新", "agent.chat.soundOn": "关闭声音提示", "agent.chat.soundOff": "开启声音提示", "agent.chat.toast.conversationClosed": "已关闭会话", "agent.chat.toast.closeFailed": "关闭会话失败", "agent.chat.emptyPick": "选择一个对话开始聊天", "agent.layout.openNavMenu": "打开导航与对话列表", "agent.layout.openVisitorPanel": "打开访客详情", "agent.internalChat.webSearchThisTurn": "本回合联网搜索", "agent.internalChat.aiThinking": "AI 正在思考...", "agent.internalChat.emptyHint": "选择或新建内部对话,测试知识库效果", "agent.internalChat.createFailed": "创建内部对话失败", "agent.login.title": "客服登录", "agent.login.subtitle": "管理员和客服请在此登录", "agent.login.username": "用户名", "agent.login.password": "密码", "agent.login.submit": "登录", "agent.login.submitting": "登录中...", "agent.login.error.empty": "用户名和密码不能为空", "agent.login.error.failed": "登录失败", "agent.login.error.network": "登录失败,请检查网络连接", "agent.login.demoHint": "默认管理员账号:admin / admin123", "agent.logs.title": "日志中心", "agent.logs.subtitle": "按分类查看 AI / RAG / 系统 / 前端日志,用于排障定位。", "agent.logs.policy.title": "落库级别(性能)", "agent.logs.policy.desc": "仅将不低于所选级别的记录写入数据库。设为 warn 可大幅减少成功类 info 写入。也可在根目录 SYSTEM_LOG_MIN_LEVEL 配置默认值;此处保存后会写入数据库并覆盖环境变量,直至点击「恢复环境变量」。", "agent.logs.policy.current": "当前生效:", "agent.logs.policy.env": "环境变量默认:", "agent.logs.policy.overridden": "(已由控制台覆盖)", "agent.logs.level.all": "全部级别", "agent.logs.category.all": "全部分类", "agent.logs.source.all": "全部来源", "agent.logs.event.placeholder": "事件名(event)", "agent.logs.conversationId.placeholder": "会话ID", "agent.logs.keyword.placeholder": "关键词(message/meta)", "agent.logs.table.time": "时间", "agent.logs.table.level": "级别", "agent.logs.table.category": "分类", "agent.logs.table.event": "事件", "agent.logs.table.conversation": "会话", "agent.logs.table.source": "来源", "agent.logs.table.message": "消息", "agent.logs.paginationSummary": "共 {{total}} 条,当前第 {{page}}/{{pages}} 页", "agent.logs.empty": "暂无日志", "agent.logs.detail.title": "日志详情", "agent.logs.detail.time": "时间", "agent.logs.detail.sourceEvent": "source / event", "agent.logs.detail.category": "category", "agent.logs.detail.traceId": "trace_id", "agent.logs.detail.conversationId": "conversation_id", "agent.logs.detail.userVisitor": "user_id / visitor_id", "agent.logs.detail.message": "message", "agent.logs.detail.metaJson": "meta_json", "agent.logs.detail.noMeta": "(无 meta_json)", "agent.logs.toast.loadPolicyFailed": "加载落库策略失败", "agent.logs.toast.loadLogsFailed": "加载日志失败", "agent.logs.toast.savePolicyFailed": "保存失败", "agent.logs.toast.restorePolicyFailed": "恢复失败", "agent.logs.toast.policySaved": "已保存", "agent.logs.toast.policyRestored": "已恢复为环境变量默认", "agent.logs.toast.messageCopied": "已复制 message", "agent.logs.toast.copyFailed": "复制失败", "agent.conversationsPage.title": "对话列表", "agent.conversationsPage.loading": "加载中...", "agent.conversationsPage.empty": "暂无对话", "agent.conversationsPage.convLabel": "对话 #{{id}}", "agent.conversationsPage.visitorLabel": "访客ID: {{id}}", "agent.conversationsPage.createdAt": "创建时间: {{time}}", "agent.conversationsPage.updatedAt": "最后更新: {{time}}", "agent.conversations.filter.all": "全部对话", "agent.conversations.filter.mine": "我的对话", "agent.conversations.filter.others": "他人对话", "agent.conversations.status.open": "进行中", "agent.conversations.status.closed": "历史", "agent.internalChat.title": "知识库测试", "agent.internalChat.new": "新建", "agent.conversation.noMessage": "暂无消息", "agent.conversation.online": "在线", "agent.conversation.visitor": "访客", "agent.input.upload": "上传文件", "agent.input.placeholder": "输入消息...", "agent.input.placeholder.withAttachment": "添加消息(可选)...", "agent.input.sending": "发送中...", "agent.input.uploading": "上传中...", "agent.input.send": "发送", "agent.input.fileTooLarge": "文件大小超过限制(最大10MB)", "agent.input.fileTypeNotSupported": "不支持的文件类型", "agent.input.uploadFailed": "文件上传失败", "agent.aiSource.kb": "已使用知识库", "agent.aiSource.llm": "已使用大模型", "agent.aiSource.web": "已使用联网搜索", "agent.common.back": "返回", "agent.common.cancel": "取消", "agent.common.create": "创建", "agent.common.update": "更新", "agent.common.delete": "删除", "agent.common.edit": "编辑", "agent.common.keywordSearch": "关键词搜索", "agent.common.noMatch": "没有找到匹配的内容", "agent.common.none": "暂无", "agent.common.confirm": "确定", "agent.faqs.title": "事件管理(FAQ)", "agent.faqs.subtitle": "维护常见问题/事件模板,支持关键词搜索。", "agent.faqs.search.placeholder": "关键词搜索(用 % 分隔,例如:openai%api%调用)...", "agent.faqs.createButton": "创建事件", "agent.faqs.empty": "暂无事件", "agent.faqs.empty.filtered": "没有找到匹配的事件", "agent.faqs.dialog.createTitle": "创建事件", "agent.faqs.dialog.editTitle": "编辑事件", "agent.faqs.dialog.deleteTitle": "删除事件", "agent.faqs.form.question": "问题", "agent.faqs.form.answer": "答案", "agent.faqs.form.keywords": "关键词", "agent.faqs.form.keywordsHint": "多个关键词建议用 % 分隔,便于检索命中", "agent.faqs.toast.loadFailed": "加载 FAQ 列表失败", "agent.faqs.toast.createFailed": "创建 FAQ 失败", "agent.faqs.toast.updateFailed": "更新 FAQ 失败", "agent.faqs.toast.deleteFailed": "删除 FAQ 失败", "agent.faqs.toast.createSuccess": "创建成功", "agent.faqs.toast.updateSuccess": "更新成功", "agent.faqs.toast.deleteSuccess": "删除成功", "agent.faqs.quickSearch.placeholder": "输入关键词搜索 FAQ...", "agent.faqs.quickSearch.searching": "搜索中...", "agent.faqs.quickSearch.noResults": "未找到匹配的 FAQ", "agent.faqs.quickSearch.startTyping": "输入关键词开始搜索", "agent.faqs.toast.emptyRequired": "问题和答案不能为空", "agent.faqs.card.keywords": "关键词", "agent.faqs.card.createdAt": "创建时间", "agent.faqs.card.edit": "编辑", "agent.faqs.dialog.createTitle2": "创建新事件", "agent.faqs.dialog.createDesc": "填写问题和答案,可以添加关键词以便搜索", "agent.faqs.dialog.editDesc": "修改问题和答案,可以更新关键词以便搜索", "agent.faqs.dialog.deleteConfirm": "确定要删除事件 \"{{name}}\" 吗?", "agent.faqs.form.placeholder.question": "请输入问题", "agent.faqs.form.placeholder.answer": "请输入答案", "agent.faqs.form.placeholder.keywords": "例如:API、错误、配置(用逗号或空格分隔)", "agent.faqs.form.keywordsOptional": "关键词(可选)", "agent.faqs.form.keywordsTip": "提示:即使不填写关键词,系统也会自动搜索问题和答案中的内容。关键词字段用于添加额外的搜索索引,帮助用户更快找到相关内容。", "agent.faqs.submit.creating": "创建中...", "agent.faqs.submit.deleting": "删除中...", "agent.perm.analytics": "数据报表", "agent.perm.chat": "对话", "agent.perm.faqs": "事件管理", "agent.perm.kb_test": "知识库测试", "agent.perm.knowledge": "知识库", "agent.perm.logs": "日志中心", "agent.perm.prompts": "提示词", "agent.perm.settings": "AI 配置", "agent.perm.users": "用户管理", "agent.settings.aiCard.titleAdd": "添加 AI 配置", "agent.settings.aiCard.titleEdit": "编辑 AI 配置", "agent.settings.aiForm.active": "启用配置", "agent.settings.aiForm.apiKey": "API Key", "agent.settings.aiForm.apiUrl": "API 地址", "agent.settings.aiForm.apiUrlPh": "https://api.openai.com/v1/chat/completions", "agent.settings.aiForm.descPh": "例如:OpenAI GPT-3.5 Turbo 模型", "agent.settings.aiForm.description": "配置描述", "agent.settings.aiForm.model": "模型名称", "agent.settings.aiForm.modelType": "模型类型", "agent.settings.aiForm.modelPh": "例如:gpt-3.5-turbo、gpt-4", "agent.settings.aiForm.provider": "服务商名称", "agent.settings.aiForm.providerPh": "例如:OpenAI、Claude、自定义", "agent.settings.aiForm.public": "开放给访客使用", "agent.settings.aiForm.submitCreate": "创建配置", "agent.settings.aiForm.submitUpdate": "更新配置", "agent.settings.aiForm.submitting": "提交中...", "agent.settings.backDashboard": "返回工作台", "agent.settings.badge.active": "启用", "agent.settings.badge.public": "开放", "agent.settings.confirmDeleteConfig": "确定要删除这个配置吗?", "agent.settings.embedding.apiKey": "API Key", "agent.settings.embedding.apiKeyKeepEmpty": "留空则不更新", "agent.settings.embedding.apiKeyInput": "输入 API Key", "agent.settings.embedding.apiUrl": "API 地址", "agent.settings.embedding.apiUrlPh": "https://api.openai.com/v1 或兼容地址", "agent.settings.embedding.bgeLocal": "BGE 本地", "agent.settings.embedding.customerKb": "开放知识库给客服使用(允许创建知识库、上传文档、对话中引用)", "agent.settings.embedding.lead": "用于知识库文档向量化与 RAG 检索。仅管理员可修改;保存后立即生效,无需重启。", "agent.settings.embedding.model": "模型", "agent.settings.embedding.modelPh": "text-embedding-3-small", "agent.settings.embedding.openaiCompatible": "OpenAI / 兼容 API", "agent.settings.embedding.save": "保存配置", "agent.settings.embedding.title": "知识库向量模型", "agent.settings.embedding.type": "类型", "agent.settings.error.delete": "删除失败", "agent.settings.error.loadConfigs": "加载配置失败", "agent.settings.error.loadEmbedding": "加载失败", "agent.settings.error.operation": "操作失败", "agent.settings.global.noReceiveAi": "客服不接收 AI 对话", "agent.settings.global.noReceiveAiHint": "开启后,AI 对话将不会显示在对话列表中,也不会收到 AI 消息通知。但您仍可在会话页面手动开启「显示 AI 消息」查看 AI 对话历史。", "agent.settings.list.apiUrlLabel": "API 地址:", "agent.settings.list.descLabel": "描述:", "agent.settings.list.empty": "暂无配置,请添加", "agent.settings.list.modelTypeLabel": "模型类型:", "agent.settings.list.title": "已配置的 AI 服务", "agent.settings.modelType.audio": "语音", "agent.settings.modelType.image": "图片", "agent.settings.modelType.text": "文本", "agent.settings.modelType.video": "视频", "agent.settings.section.global": "全局设置", "agent.settings.autoClose.title": "会话维护", "agent.settings.autoClose.lead": "超过指定天数未更新的「进行中」访客会话将自动标记为「已关闭」。仅改状态,不删除记录;可在会话列表「历史」中查看。填 0 表示禁用。", "agent.settings.autoClose.daysLabel": "自动关闭天数", "agent.settings.autoClose.daysHint": "按会话最后更新时间(updated_at)计算。默认 7 天;0 = 不自动关闭。", "agent.settings.autoClose.statusEffective": "当前生效", "agent.settings.autoClose.statusEnv": "环境变量默认", "agent.settings.autoClose.statusDb": "已保存到数据库(覆盖 .env)", "agent.settings.autoClose.statusEnvOnly": "使用 .env 默认值", "agent.settings.autoClose.save": "保存会话维护设置", "agent.settings.autoClose.resetEnv": "恢复为 .env 默认", "agent.settings.autoClose.errorLoad": "加载会话维护配置失败", "agent.settings.autoClose.errorInvalid": "请输入 0 或正整数", "agent.settings.autoClose.toastSaved": "会话维护设置已保存,下次定时任务起生效", "agent.settings.autoClose.toastReset": "已恢复为 .env 默认配置", "agent.settings.offlineEmail.title": "离线邮件通知", "agent.settings.offlineEmail.lead": "访客离线且已留邮箱时,客服发送人工消息后延迟 N 秒推送邮件;访客重新上线则取消待发邮件。支持阿里云等云厂商 SMTP,也可在 .env 中配置默认值。", "agent.settings.offlineEmail.enabled": "启用离线邮件通知", "agent.settings.offlineEmail.delayLabel": "离线延迟(秒)", "agent.settings.offlineEmail.delayHint": "客服发消息后等待的秒数,默认 60;访客在此期间上线则不发邮件。", "agent.settings.offlineEmail.smtpHost": "SMTP 服务器", "agent.settings.offlineEmail.smtpPort": "SMTP 端口", "agent.settings.offlineEmail.smtpUser": "SMTP 用户名", "agent.settings.offlineEmail.smtpPassword": "SMTP 密码 / 授权码", "agent.settings.offlineEmail.smtpPasswordKeepEmpty": "留空则保留已保存的密码", "agent.settings.offlineEmail.fromEmail": "发件人邮箱", "agent.settings.offlineEmail.fromName": "发件人名称", "agent.settings.offlineEmail.statusEffective": "当前生效", "agent.settings.offlineEmail.statusEnv": "环境变量默认", "agent.settings.offlineEmail.statusDb": "已保存到数据库(覆盖 .env)", "agent.settings.offlineEmail.statusEnvOnly": "使用 .env 默认值", "agent.settings.offlineEmail.save": "保存离线邮件设置", "agent.settings.offlineEmail.resetEnv": "恢复为 .env 默认", "agent.settings.offlineEmail.testTo": "测试收件邮箱", "agent.settings.offlineEmail.testSend": "发送测试邮件", "agent.settings.offlineEmail.adminOnly": "仅管理员可修改与测试", "agent.settings.offlineEmail.errorLoad": "加载离线邮件配置失败", "agent.settings.offlineEmail.errorInvalidDelay": "延迟秒数不能为负数", "agent.settings.offlineEmail.toastSaved": "离线邮件设置已保存,立即生效", "agent.settings.offlineEmail.toastReset": "已恢复为 .env 默认配置", "agent.settings.offlineEmail.toastTestSent": "测试邮件已发送", "agent.settings.offlineEmail.statusOn": "已启用", "agent.settings.offlineEmail.statusOff": "未启用", "agent.settings.subtitle": "管理 AI 服务商配置", "agent.settings.title": "AI 配置管理", "agent.settings.toast.embeddingSaved": "保存成功,配置已立即生效。", "agent.settings.toast.profileUpdateFailed": "更新设置失败,请重试", "agent.settings.webSearch.lead": "控制对话中的联网搜索方式与访客端是否显示联网选项。与「知识库向量模型」无关,仅影响 AI 对话时的联网行为。", "agent.settings.webSearch.mode": "联网方式", "agent.settings.webSearch.modeCustom": "自建 (Serper)", "agent.settings.webSearch.modeHint": "自建:由后端通过 Serper(MCP 或 HTTP)执行;厂商内置:使用当前对话所用 AI 厂商自带的联网搜索,不占用 Serper。", "agent.settings.webSearch.modeVendor": "厂商内置", "agent.settings.webSearch.save": "保存联网设置", "agent.settings.webSearch.title": "联网搜索设置", "agent.settings.webSearch.visitorToggle": "访客小窗显示「本回合联网搜索」选项", "agent.users.card.edit": "编辑", "agent.users.card.password": "密码", "agent.users.createButton": "创建用户", "agent.users.dialog.createTitle": "创建新用户", "agent.users.dialog.deleteConfirm": "确定要删除用户 {{username}} 吗?", "agent.users.dialog.deleteNote": "此操作不可恢复。若该用户有 AI 配置,系统会自动转移给当前管理员,避免配置丢失。", "agent.users.dialog.deleteTitle": "删除用户", "agent.users.dialog.editTitle": "编辑用户", "agent.users.dialog.passwordTitle": "修改密码", "agent.users.empty": "暂无用户", "agent.users.empty.filtered": "没有找到匹配的用户", "agent.users.field.createdAt": "创建时间", "agent.users.field.email": "邮箱", "agent.users.field.username": "用户名", "agent.users.form.email": "邮箱", "agent.users.form.newPassword": "新密码", "agent.users.form.oldPassword": "旧密码", "agent.users.form.password": "密码", "agent.users.form.permissions": "功能权限", "agent.users.form.permissionsHint": "默认仅开启「对话」。关闭后对应菜单不可见且后端接口会返回 403。", "agent.users.form.role": "角色", "agent.users.form.username": "用户名", "agent.users.form.nickname": "昵称", "agent.users.placeholder.email": "请输入邮箱", "agent.users.placeholder.emailOptional": "请输入邮箱(可选)", "agent.users.placeholder.nickname": "请输入昵称", "agent.users.placeholder.nicknameOptional": "请输入昵称(可选)", "agent.users.placeholder.oldPassword": "请输入旧密码", "agent.users.placeholder.password": "请输入密码", "agent.users.placeholder.username": "请输入用户名", "agent.users.receiveAiLabel": "接收 AI 对话", "agent.users.role.admin": "管理员", "agent.users.role.agent": "客服", "agent.users.search.placeholder": "搜索用户(用户名、昵称、邮箱)...", "agent.users.submit.creating": "创建中...", "agent.users.submit.deleting": "删除中...", "agent.users.submit.updating": "更新中...", "agent.users.title": "用户管理", "agent.users.toast.adminDeleteDisabled": "管理员账号仅支持数据库删除,前端已禁用", "agent.users.toast.adminPasswordDisabled": "管理员密码仅支持数据库修改,前端已禁用", "agent.users.toast.createFailed": "创建用户失败", "agent.users.toast.createSuccess": "创建成功", "agent.users.toast.deleteFailed": "删除用户失败", "agent.users.toast.deleteSuccess": "删除成功", "agent.users.toast.deleteTransferred": "删除成功,已自动转移 {{count}} 条 AI 配置到当前管理员", "agent.users.toast.loadFailed": "加载用户列表失败", "agent.users.toast.newPasswordRequired": "新密码不能为空", "agent.users.toast.oldPasswordRequired": "修改自己的密码需要提供旧密码", "agent.users.toast.passwordFailed": "更新密码失败", "agent.users.toast.passwordSuccess": "密码更新成功", "agent.users.toast.updateFailed": "更新用户失败", "agent.users.toast.updateSuccess": "更新成功", "agent.users.toast.usernamePasswordRequired": "用户名和密码不能为空", "agent.users.tooltip.adminDeleteDbOnly": "管理员账号仅支持数据库删除", "agent.users.tooltip.adminPasswordDbOnly": "管理员密码仅支持数据库修改", "agent.users.tooltip.cannotDeleteSelf": "不能删除当前登录用户", "agent.users.usernameImmutableHint": "用户名不能修改", "agent.knowledge.title": "知识库管理", "agent.knowledge.rag": "参与 RAG", "agent.knowledge.kb.create": "新建知识库", "agent.knowledge.kb.empty": "暂无知识库", "agent.knowledge.kb.selectOne": "请选择一个知识库", "agent.knowledge.kb.docCount": "{{count}} 篇文档", "agent.knowledge.import.url": "导入 URL", "agent.knowledge.import.file": "导入文件", "agent.knowledge.import.tabFile": "文件上传", "agent.knowledge.import.tabUrl": "URL 导入", "agent.knowledge.import.pickFiles": "选择文件", "agent.knowledge.import.filesSelected": "已选择 {{count}} 个文件", "agent.knowledge.import.action": "导入", "agent.knowledge.import.urlListLabel": "URL 列表(每行一个)", "agent.knowledge.doc.create": "新建文档", "agent.knowledge.doc.searchPh": "搜索文档...", "agent.knowledge.doc.empty": "暂无文档", "agent.knowledge.doc.empty.filtered": "没有找到匹配的文档", "agent.knowledge.doc.type": "类型", "agent.knowledge.doc.createdAt": "创建时间", "agent.knowledge.doc.publish": "发布", "agent.knowledge.doc.unpublish": "取消发布", "agent.knowledge.filter.all": "全部状态", "agent.knowledge.pagination": "第 {{page}} / {{totalPage}} 页,共 {{total}} 条", "agent.knowledge.status.draft": "草稿", "agent.knowledge.status.published": "已发布", "agent.knowledge.embedding.pending": "待处理", "agent.knowledge.embedding.processing": "处理中", "agent.knowledge.embedding.completed": "已完成", "agent.knowledge.embedding.failed": "失败", "agent.knowledge.dialog.kbCreateTitle": "创建知识库", "agent.knowledge.dialog.kbCreateDesc": "填写知识库名称和描述", "agent.knowledge.dialog.kbEditTitle": "编辑知识库", "agent.knowledge.dialog.kbEditDesc": "修改知识库名称和描述", "agent.knowledge.dialog.kbDeleteTitle": "删除知识库", "agent.knowledge.dialog.kbDeleteConfirm": "确定要删除知识库 \"{{name}}\" 吗?", "agent.knowledge.dialog.kbDeleteHint": "此操作将同时删除该知识库下的所有文档,此操作不可恢复,请谨慎操作。", "agent.knowledge.dialog.docCreateTitle": "创建文档", "agent.knowledge.dialog.docCreateDesc": "填写文档标题和内容", "agent.knowledge.dialog.docEditTitle": "编辑文档", "agent.knowledge.dialog.docEditDesc": "修改文档标题和内容", "agent.knowledge.dialog.docDeleteTitle": "删除文档", "agent.knowledge.dialog.docDeleteConfirm": "确定要删除文档 \"{{title}}\" 吗?", "agent.knowledge.dialog.importTitle": "导入文档", "agent.knowledge.dialog.importDesc": "选择文件上传或输入 URL 批量导入。当前支持的文件格式:Markdown(.md、.markdown)、PDF(.pdf)、Word(.docx);旧版 .doc 请先转为 .docx。", "agent.knowledge.field.name": "名称", "agent.knowledge.field.descOptional": "描述(可选)", "agent.knowledge.field.title": "标题", "agent.knowledge.field.summaryOptional": "摘要(可选)", "agent.knowledge.field.content": "内容", "agent.knowledge.ph.kbName": "请输入知识库名称", "agent.knowledge.ph.kbDesc": "请输入知识库描述", "agent.knowledge.ph.docTitle": "请输入文档标题", "agent.knowledge.ph.docSummary": "请输入文档摘要", "agent.knowledge.ph.docContent": "请输入文档内容", "agent.knowledge.submitting.creating": "创建中...", "agent.knowledge.submitting.updating": "更新中...", "agent.knowledge.submitting.deleting": "删除中...", "agent.knowledge.submitting.importing": "导入中...", "agent.knowledge.toast.loadKbFailed": "加载知识库列表失败", "agent.knowledge.toast.loadDocFailed": "加载文档列表失败", "agent.knowledge.toast.kbNameRequired": "知识库名称不能为空", "agent.knowledge.toast.selectKbFirst": "请先选择知识库", "agent.knowledge.toast.docTitleContentRequired": "标题和内容不能为空", "agent.knowledge.toast.createSuccess": "创建成功", "agent.knowledge.toast.updateSuccess": "更新成功", "agent.knowledge.toast.deleteSuccess": "删除成功", "agent.knowledge.toast.updateFailed": "更新失败", "agent.knowledge.toast.createKbFailed": "创建知识库失败", "agent.knowledge.toast.updateKbFailed": "更新知识库失败", "agent.knowledge.toast.deleteKbFailed": "删除知识库失败", "agent.knowledge.toast.createDocFailed": "创建文档失败", "agent.knowledge.toast.updateDocFailed": "更新文档失败", "agent.knowledge.toast.deleteDocFailed": "删除文档失败", "agent.knowledge.toast.publishSuccess": "发布成功", "agent.knowledge.toast.publishFailed": "发布文档失败", "agent.knowledge.toast.unpublishSuccess": "取消发布成功", "agent.knowledge.toast.unpublishFailed": "取消发布文档失败", "agent.knowledge.toast.selectFiles": "请选择要导入的文件", "agent.knowledge.toast.urlRequired": "请输入至少一个 URL", "agent.knowledge.toast.importDocFailed": "导入文档失败", "agent.knowledge.toast.importUrlFailed": "导入 URL 失败", "agent.knowledge.toast.importRefreshFailed": "导入成功,但刷新列表失败,请手动刷新页面", "agent.knowledge.toast.importFailed.files": "导入失败:{{count}} 个文件未成功", "agent.knowledge.toast.importFailed.urls": "导入失败:{{count}} 个 URL 未成功", "agent.knowledge.toast.importDone.files": "导入完成:成功 {{success}} 个文件", "agent.knowledge.toast.importDone.urls": "导入完成:成功 {{success}} 个 URL", "agent.knowledge.toast.importDone.partial": "导入完成:成功 {{success}},失败 {{failed}} {{err}}", "agent.prompts.title": "提示词", "agent.prompts.subtitle": "配置系统中使用的提示词模板,用于 RAG、联网等场景。仅管理员可修改。占位符说明见下方各卡片。", "agent.prompts.loadFailed": "加载提示词失败", "agent.prompts.saveSuccess": "保存成功,将立即生效。", "agent.prompts.saveFailed": "保存失败", "agent.prompts.usageLabel": "使用场景:", "agent.prompts.ph.shortReply": "请输入一句完整回复语", "agent.prompts.ph.withPlaceholders": "请输入提示词内容,保留占位符", "agent.prompts.saving": "保存中...", "agent.prompts.save": "保存", "agent.prompts.hint.rag_prompt": "占位符:{{rag_context}} 为知识库检索内容,{{user_message}} 为用户问题。", "agent.prompts.hint.rag_prompt_with_web_optional": "占位符:{{rag_context}} 为知识库检索内容,{{user_message}} 为用户问题。", "agent.prompts.hint.no_kb_prompt": "占位符:{{user_message}} 为用户问题。", "agent.prompts.hint.web_search_result_prompt": "占位符:{{web_context}} 为联网搜索结果,{{user_message}} 为用户问题。(当前流程未使用此模板)", "agent.prompts.hint.no_source_reply": "无占位符,内容将作为完整回复语直接展示给用户。", "agent.prompts.hint.ai_fail_reply": "无占位符,内容将作为完整回复语直接展示给用户。", "agent.prompts.hint.default": "请勿删除占位符,保存后由系统替换为实际内容。", "agent.prompts.usage.rag_prompt": "有知识库检索结果,且本回合未勾选「联网搜索」时,用此模板拼成 prompt 发给模型。", "agent.prompts.usage.rag_prompt_with_web_optional": "有知识库检索结果且本回合勾选「联网搜索」时,用此模板并传入联网工具,由模型决定是否调用联网。", "agent.prompts.usage.no_kb_prompt": "没有知识库检索结果且本回合未走联网时,用此模板让模型仅凭自身知识回答。", "agent.prompts.usage.web_search_result_prompt": "预留:若将来有「先联网搜再拼成一段 prompt」的流程,会使用此模板。当前未使用。", "agent.prompts.usage.no_source_reply": "既未命中知识库、也未使用大模型或联网时(如用户关闭了所有数据源),直接向用户展示这句话。", "agent.prompts.usage.ai_fail_reply": "调用 AI 接口失败(超时、报错等)时,向用户展示这句话。", "agent.analytics.title": "数据报表", "agent.analytics.subtitle": "访客小窗与 AI 客服统计(按上海时区自然日,不含「知识库测试」内部会话)", "agent.analytics.from": "从", "agent.analytics.to": "到", "agent.analytics.query": "查询", "agent.analytics.loading": "加载中…", "agent.analytics.empty": "暂无数据", "agent.analytics.emptyOrFailed": "暂无数据或加载失败", "agent.analytics.stat.widgetOpens": "小窗打开次数", "agent.analytics.stat.widgetOpensSub": "需前端埋点,历史数据可能为 0", "agent.analytics.stat.sessions": "新建会话数", "agent.analytics.stat.messages": "消息数", "agent.analytics.stat.aiReplies": "AI 回复次数", "agent.analytics.stat.aiFailed": "AI 失败次数", "agent.analytics.stat.aiFailureRate": "AI 失败率", "agent.analytics.stat.aiFailureRateSub": "占 AI 回复条数", "agent.analytics.stat.kbHits": "知识库命中次数", "agent.analytics.stat.kbHitRate": "知识库命中率", "agent.analytics.stat.kbHitRateSub": "占成功 AI 回复", "agent.analytics.stat.maxAiRounds": "最大 AI 对话轮数", "agent.analytics.stat.maxAiRoundsSub": "单会话内用户+AI 一轮", "agent.analytics.stat.sessionsWithAi": "AI 参与会话", "agent.analytics.stat.sessionsWithAiSub": "占新建会话 {{pct}}", "agent.analytics.stat.aiToHuman": "AI→人工(会话数)", "agent.analytics.stat.aiToHumanSub": "占有过 AI 发言的会话 {{pct}}", "agent.analytics.stat.humanToAi": "人工→AI(会话数)", "agent.analytics.stat.humanToAiSub": "占有过人工发言的会话 {{pct}}", "agent.analytics.chart.widgetOpens": "每日小窗打开", "agent.analytics.chart.sessions": "每日新建会话", "agent.analytics.chart.messages": "每日消息数", "agent.analytics.chart.aiReplies": "每日 AI 回复", "common.irreversibleHint": "此操作不可恢复,请谨慎操作。", "chat.title": "客服聊天", "chat.mode.human": "人工客服", "chat.mode.ai": "AI 客服", "chat.email.placeholder": "留下邮箱,离线也能收消息", "chat.email.optional": "选填", "chat.email.privacy": "邮箱仅用于接收客服回复,不会用于营销", "chat.input.placeholder": "输入消息", }, en: { "nav.features": "Features", "nav.screenshots": "Screenshots", "nav.quickStart": "Quick Start", "nav.agentLogin": "Agent Login", "nav.menu": "Menu", "common.github": "GitHub", "common.to": "to", "common.save": "Save", "common.saving": "Saving...", "common.restoreEnv": "Use env default", "common.loading": "Loading...", "common.search": "Search", "common.prevPage": "Prev", "common.nextPage": "Next", "common.copy": "Copy", "home.hero.tagline": "AI Customer Support", "home.hero.title": "Make customer support simpler and faster", "home.hero.subtitle": "24/7 AI responses with seamless handoff to human agents—free your team to focus on what matters.", "home.hero.cta.tryNow": "Try now", "home.hero.cta.agentLogin": "Agent Login", "home.hero.hint": "No waiting—ready to use", "home.stats.trustedBy": "Trusted by teams", "home.stats.clients": "Teams served", "home.stats.conversations": "Conversations handled", "home.stats.latency": "Response time", "home.stats.satisfaction": "Satisfaction", "home.stats.val.clients": "1000+", "home.stats.val.conversations": "1M+", "home.stats.val.latency": "<100ms", "home.stats.val.satisfaction": "98%", "home.features.title": "Capabilities", "home.features.lead": "From models and knowledge bases to prompts, human collaboration, analytics, and logs—one cohesive system.", "home.cap.multimodel.title": "Multi-model AI support", "home.cap.multimodel.desc": "Configure multiple LLM and multimodal providers; visitors and admins share one place to manage models and usage—easy to swap vendors and control cost.", "home.cap.kb.title": "Knowledge base & RAG", "home.cap.kb.desc": "Ingest documents and retrieve with vectors so answers stay on-brand; replies can show whether KB, model, or web search was used for review and tuning.", "home.cap.prompt.title": "Prompt engineering", "home.cap.prompt.desc": "Edit the prompt templates that power RAG, optional web search, and other flows across your scenarios.", "home.cap.human.title": "Human agents & real-time collaboration", "home.cap.human.desc": "Online presence, live sessions over WebSocket, seamless handoff and teamwork; embed the visitor widget on any site.", "home.cap.reports.title": "Analytics", "home.cap.reports.desc": "Daily or custom ranges for widget opens, sessions, messages, AI success/failure, KB hit rate, and more—see how operations are trending.", "home.cap.logs.title": "Structured logs", "home.cap.logs.desc": "Persisted by category and event with trace_id and keyword search—trace critical paths and incidents for troubleshooting and audit.", "home.screenshots.title": "Product screenshots", "home.screenshots.lead": "A polished UI that makes day-to-day admin work easier.", "home.screenshots.prevAria": "Previous screenshot", "home.screenshots.nextAria": "Next screenshot", "home.ss.dashboard.title": "Agent workspace", "home.ss.dashboard.placeholder": "Workspace preview", "home.ss.dashboard.alt": "AI-CS agent workspace", "home.ss.visitor.title": "Visitor widget", "home.ss.visitor.placeholder": "Visitor UI preview", "home.ss.visitor.alt": "AI-CS visitor experience", "home.ss.aiconfig.title": "AI configuration", "home.ss.aiconfig.placeholder": "AI settings preview", "home.ss.aiconfig.alt": "AI-CS AI configuration", "home.ss.users.title": "User management", "home.ss.users.placeholder": "User admin preview", "home.ss.users.alt": "AI-CS user management", "home.ss.faq.title": "FAQ management", "home.ss.faq.placeholder": "FAQ admin preview", "home.ss.faq.alt": "AI-CS FAQ management", "home.ss.knowledge.title": "Knowledge base", "home.ss.knowledge.placeholder": "Knowledge base preview", "home.ss.knowledge.alt": "AI-CS knowledge base", "home.ss.kbtest.title": "KB test chat", "home.ss.kbtest.placeholder": "KB test preview", "home.ss.kbtest.alt": "AI-CS knowledge base test", "home.ss.prompts.title": "Prompts", "home.ss.prompts.placeholder": "Prompts preview", "home.ss.prompts.alt": "AI-CS prompt management", "home.ss.logs.title": "Logs", "home.ss.logs.placeholder": "Logs preview", "home.ss.logs.alt": "AI-CS log center", "home.ss.analytics.title": "Analytics", "home.ss.analytics.placeholder": "Analytics preview", "home.ss.analytics.alt": "AI-CS analytics", "home.quickStart.title": "Quick start", "home.quickStart.lead": "Three steps from the repo to the visitor widget.", "home.step1.title": "Clone & configure", "home.step1.body": "Copy the .env template and fill required database and admin settings.", "home.step2.title": "Launch", "home.step2.body": "Bring up backend, frontend, and dependencies with Docker Compose (see README).", "home.step3.title": "Embed for visitors", "home.step3.body": "Mount the chat widget on your site; configure models and KB in the console, then go live.", "home.cta.title": "Ready to wire AI-CS into your product?", "home.cta.subtitle": "Start from the open-source repo, or explore the online demo first.", "home.cta.starRepo": "Star / Fork on GitHub", "home.cta.feedback": "Send feedback", "home.cta.mailSubject": "AI-CS feedback", "home.cta.mailBody": "Hi,\n\n1) Issue or suggestion:\n2) Scope / environment:\n3) Expected outcome:\n\n---\nContact (optional):", "footer.blurb": "AI-CS is an AI-powered customer support stack that blends automation and human agents for efficient, modern service.", "footer.column.product": "Product", "footer.column.friendLinks": "Friends", "footer.column.contact": "Contact", "footer.noFriendLinks": "No links yet", "footer.onlineChat": "Live chat", "footer.openSourceLicense": "Open-source license", "footer.poweredBy": "Powered by Next.js & Go |", "footer.allRightsReserved": "All rights reserved.", "footer.emailLabel": "Email", "footer.qqGroup": "QQ group", "footer.qqGroupAria": "Join QQ group", "agent.page.dashboard": "Chats", "agent.page.internalChat": "KB Test", "agent.page.knowledge": "Knowledge Base", "agent.page.faqs": "FAQs", "agent.page.analytics": "Analytics", "agent.page.logs": "Logs", "agent.page.users": "Users", "agent.page.prompts": "Prompts", "agent.page.settings": "AI Settings", "agent.profile": "Profile", "agent.logout": "Log out", "agent.chat.conversation": "Chat", "agent.chat.lastSeen": "Last seen", "agent.chat.lastSeenUnknown": "Last seen unknown", "agent.chat.showAI": "Show AI messages", "agent.chat.hideAI": "Hide AI messages", "agent.chat.closeConversation": "Close", "agent.chat.refresh": "Refresh", "agent.chat.soundOn": "Turn sound off", "agent.chat.soundOff": "Turn sound on", "agent.chat.toast.conversationClosed": "Conversation closed", "agent.chat.toast.closeFailed": "Failed to close conversation", "agent.chat.emptyPick": "Select a conversation to start", "agent.layout.openNavMenu": "Open navigation and conversation list", "agent.layout.openVisitorPanel": "Open visitor details", "agent.internalChat.webSearchThisTurn": "Web search this turn", "agent.internalChat.aiThinking": "AI is thinking...", "agent.internalChat.emptyHint": "Select or create an internal chat to test the knowledge base", "agent.internalChat.createFailed": "Failed to create internal chat", "agent.login.title": "Agent Login", "agent.login.subtitle": "Admins and agents sign in here", "agent.login.username": "Username", "agent.login.password": "Password", "agent.login.submit": "Sign in", "agent.login.submitting": "Signing in...", "agent.login.error.empty": "Username and password are required", "agent.login.error.failed": "Sign-in failed", "agent.login.error.network": "Sign-in failed. Check your connection.", "agent.login.demoHint": "Default admin: admin / admin123", "agent.logs.title": "Logs", "agent.logs.subtitle": "Filter AI / RAG / system / frontend logs for troubleshooting.", "agent.logs.policy.title": "Persist level (performance)", "agent.logs.policy.desc": "Only logs at or above this level are persisted. Set to warn to reduce successful info writes. You can set SYSTEM_LOG_MIN_LEVEL in .env as default; saving here persists to DB and overrides env until restored.", "agent.logs.policy.current": "Effective:", "agent.logs.policy.env": "Env default:", "agent.logs.policy.overridden": "(overridden in console)", "agent.logs.level.all": "All levels", "agent.logs.category.all": "All categories", "agent.logs.source.all": "All sources", "agent.logs.event.placeholder": "Event", "agent.logs.conversationId.placeholder": "Conversation ID", "agent.logs.keyword.placeholder": "Keyword (message/meta)", "agent.logs.table.time": "Time", "agent.logs.table.level": "Level", "agent.logs.table.category": "Category", "agent.logs.table.event": "Event", "agent.logs.table.conversation": "Conversation", "agent.logs.table.source": "Source", "agent.logs.table.message": "Message", "agent.logs.paginationSummary": "{{total}} rows · page {{page}} / {{pages}}", "agent.logs.empty": "No logs", "agent.logs.detail.title": "Log detail", "agent.logs.detail.time": "Time", "agent.logs.detail.sourceEvent": "source / event", "agent.logs.detail.category": "category", "agent.logs.detail.traceId": "trace_id", "agent.logs.detail.conversationId": "conversation_id", "agent.logs.detail.userVisitor": "user_id / visitor_id", "agent.logs.detail.message": "message", "agent.logs.detail.metaJson": "meta_json", "agent.logs.detail.noMeta": "(no meta_json)", "agent.logs.toast.loadPolicyFailed": "Failed to load persist policy", "agent.logs.toast.loadLogsFailed": "Failed to load logs", "agent.logs.toast.savePolicyFailed": "Save failed", "agent.logs.toast.restorePolicyFailed": "Restore failed", "agent.logs.toast.policySaved": "Saved", "agent.logs.toast.policyRestored": "Restored to env default", "agent.logs.toast.messageCopied": "Message copied", "agent.logs.toast.copyFailed": "Copy failed", "agent.conversationsPage.title": "Conversations", "agent.conversationsPage.loading": "Loading...", "agent.conversationsPage.empty": "No conversations", "agent.conversationsPage.convLabel": "Chat #{{id}}", "agent.conversationsPage.visitorLabel": "Visitor ID: {{id}}", "agent.conversationsPage.createdAt": "Created: {{time}}", "agent.conversationsPage.updatedAt": "Updated: {{time}}", "agent.conversations.filter.all": "All chats", "agent.conversations.filter.mine": "My chats", "agent.conversations.filter.others": "Others", "agent.conversations.status.open": "Open", "agent.conversations.status.closed": "History", "agent.internalChat.title": "KB Test", "agent.internalChat.new": "New", "agent.conversation.noMessage": "No messages yet", "agent.conversation.online": "Online", "agent.conversation.visitor": "Visitor", "agent.input.upload": "Upload", "agent.input.placeholder": "Type a message...", "agent.input.placeholder.withAttachment": "Add a message (optional)...", "agent.input.sending": "Sending...", "agent.input.uploading": "Uploading...", "agent.input.send": "Send", "agent.input.fileTooLarge": "File is too large (max 10MB)", "agent.input.fileTypeNotSupported": "Unsupported file type", "agent.input.uploadFailed": "Upload failed", "agent.aiSource.kb": "Knowledge base used", "agent.aiSource.llm": "LLM used", "agent.aiSource.web": "Web search used", "agent.common.back": "Back", "agent.common.cancel": "Cancel", "agent.common.create": "Create", "agent.common.update": "Update", "agent.common.delete": "Delete", "agent.common.edit": "Edit", "agent.common.keywordSearch": "Keyword search", "agent.common.noMatch": "No results found", "agent.common.none": "None", "agent.common.confirm": "Confirm", "agent.faqs.title": "FAQs", "agent.faqs.subtitle": "Manage FAQ/event templates with keyword search.", "agent.faqs.search.placeholder": "Keyword search (use % as separator)...", "agent.faqs.createButton": "Create", "agent.faqs.empty": "No FAQs", "agent.faqs.empty.filtered": "No matching FAQs", "agent.faqs.dialog.createTitle": "Create FAQ", "agent.faqs.dialog.editTitle": "Edit FAQ", "agent.faqs.dialog.deleteTitle": "Delete FAQ", "agent.faqs.form.question": "Question", "agent.faqs.form.answer": "Answer", "agent.faqs.form.keywords": "Keywords", "agent.faqs.form.keywordsHint": "Separate keywords with % for better matching", "agent.faqs.toast.loadFailed": "Failed to load FAQs", "agent.faqs.toast.createFailed": "Failed to create FAQ", "agent.faqs.toast.updateFailed": "Failed to update FAQ", "agent.faqs.toast.deleteFailed": "Failed to delete FAQ", "agent.faqs.toast.createSuccess": "Created", "agent.faqs.toast.updateSuccess": "Updated", "agent.faqs.toast.deleteSuccess": "Deleted", "agent.faqs.quickSearch.placeholder": "Type to search FAQs...", "agent.faqs.quickSearch.searching": "Searching...", "agent.faqs.quickSearch.noResults": "No matching FAQs found", "agent.faqs.quickSearch.startTyping": "Type keywords to search", "agent.faqs.toast.emptyRequired": "Question and answer are required", "agent.faqs.card.keywords": "Keywords", "agent.faqs.card.createdAt": "Created", "agent.faqs.card.edit": "Edit", "agent.faqs.dialog.createTitle2": "Create FAQ", "agent.faqs.dialog.createDesc": "Provide question and answer. Add keywords for search.", "agent.faqs.dialog.editDesc": "Update question/answer and keywords for search.", "agent.faqs.dialog.deleteConfirm": "Delete \"{{name}}\"?", "agent.faqs.form.placeholder.question": "Enter question", "agent.faqs.form.placeholder.answer": "Enter answer", "agent.faqs.form.placeholder.keywords": "e.g. API, error, config (comma or space separated)", "agent.faqs.form.keywordsOptional": "Keywords (optional)", "agent.faqs.form.keywordsTip": "Tip: Even without keywords, the system searches question and answer content. Keywords add extra search index for faster matching.", "agent.faqs.submit.creating": "Creating...", "agent.faqs.submit.deleting": "Deleting...", "agent.perm.analytics": "Analytics", "agent.perm.chat": "Chat", "agent.perm.faqs": "FAQs", "agent.perm.kb_test": "KB test", "agent.perm.knowledge": "Knowledge base", "agent.perm.logs": "Logs", "agent.perm.prompts": "Prompts", "agent.perm.settings": "AI settings", "agent.perm.users": "Users", "agent.settings.aiCard.titleAdd": "Add AI config", "agent.settings.aiCard.titleEdit": "Edit AI config", "agent.settings.aiForm.active": "Enabled", "agent.settings.aiForm.apiKey": "API key", "agent.settings.aiForm.apiUrl": "API URL", "agent.settings.aiForm.apiUrlPh": "https://api.openai.com/v1/chat/completions", "agent.settings.aiForm.descPh": "e.g. OpenAI GPT-3.5 Turbo", "agent.settings.aiForm.description": "Description", "agent.settings.aiForm.model": "Model name", "agent.settings.aiForm.modelType": "Model type", "agent.settings.aiForm.modelPh": "e.g. gpt-3.5-turbo, gpt-4", "agent.settings.aiForm.provider": "Provider", "agent.settings.aiForm.providerPh": "e.g. OpenAI, Claude, Custom", "agent.settings.aiForm.public": "Available to visitors", "agent.settings.aiForm.submitCreate": "Create", "agent.settings.aiForm.submitUpdate": "Update", "agent.settings.aiForm.submitting": "Submitting...", "agent.settings.backDashboard": "Back to workspace", "agent.settings.badge.active": "On", "agent.settings.badge.public": "Public", "agent.settings.confirmDeleteConfig": "Delete this configuration?", "agent.settings.embedding.apiKey": "API key", "agent.settings.embedding.apiKeyKeepEmpty": "Leave blank to keep unchanged", "agent.settings.embedding.apiKeyInput": "Enter API key", "agent.settings.embedding.apiUrl": "API URL", "agent.settings.embedding.apiUrlPh": "https://api.openai.com/v1 or compatible URL", "agent.settings.embedding.bgeLocal": "BGE local", "agent.settings.embedding.customerKb": "Let agents use the knowledge base (create KBs, upload docs, cite in chat)", "agent.settings.embedding.lead": "Embeddings for KB documents and RAG. Admins only; changes apply immediately without restart.", "agent.settings.embedding.model": "Model", "agent.settings.embedding.modelPh": "text-embedding-3-small", "agent.settings.embedding.openaiCompatible": "OpenAI / compatible API", "agent.settings.embedding.save": "Save", "agent.settings.embedding.title": "Embedding model (knowledge base)", "agent.settings.embedding.type": "Type", "agent.settings.error.delete": "Delete failed", "agent.settings.error.loadConfigs": "Failed to load configs", "agent.settings.error.loadEmbedding": "Load failed", "agent.settings.error.operation": "Operation failed", "agent.settings.global.noReceiveAi": "Do not receive AI conversations", "agent.settings.global.noReceiveAiHint": "When enabled, AI conversations won't appear in your list or notify you. You can still open a chat and turn on “Show AI messages” to view history.", "agent.settings.list.apiUrlLabel": "API URL:", "agent.settings.list.descLabel": "Description:", "agent.settings.list.empty": "No configs yet — add one", "agent.settings.list.modelTypeLabel": "Model type:", "agent.settings.list.title": "Configured providers", "agent.settings.modelType.audio": "Audio", "agent.settings.modelType.image": "Image", "agent.settings.modelType.text": "Text", "agent.settings.modelType.video": "Video", "agent.settings.section.global": "Global", "agent.settings.autoClose.title": "Conversation maintenance", "agent.settings.autoClose.lead": "Open visitor conversations with no activity for N days are marked closed (not deleted). Find them under History in the chat list. Set 0 to disable.", "agent.settings.autoClose.daysLabel": "Auto-close after (days)", "agent.settings.autoClose.daysHint": "Based on conversation updated_at. Default 7; 0 = disabled.", "agent.settings.autoClose.statusEffective": "Effective", "agent.settings.autoClose.statusEnv": "Env default", "agent.settings.autoClose.statusDb": "Saved in database (overrides .env)", "agent.settings.autoClose.statusEnvOnly": "Using .env default", "agent.settings.autoClose.save": "Save maintenance settings", "agent.settings.autoClose.resetEnv": "Reset to .env default", "agent.settings.autoClose.errorLoad": "Failed to load maintenance settings", "agent.settings.autoClose.errorInvalid": "Enter 0 or a positive integer", "agent.settings.autoClose.toastSaved": "Saved. Takes effect on the next scheduled run.", "agent.settings.autoClose.toastReset": "Reset to .env default", "agent.settings.offlineEmail.title": "Offline email notifications", "agent.settings.offlineEmail.lead": "When a visitor is offline but left an email, agent messages are emailed after a delay. Cancelled if the visitor comes back online. Use cloud SMTP (e.g. Aliyun) or .env defaults.", "agent.settings.offlineEmail.enabled": "Enable offline email", "agent.settings.offlineEmail.delayLabel": "Offline delay (seconds)", "agent.settings.offlineEmail.delayHint": "Wait time after an agent message before sending email. Default 60. Skipped if visitor reconnects.", "agent.settings.offlineEmail.smtpHost": "SMTP host", "agent.settings.offlineEmail.smtpPort": "SMTP port", "agent.settings.offlineEmail.smtpUser": "SMTP username", "agent.settings.offlineEmail.smtpPassword": "SMTP password / app password", "agent.settings.offlineEmail.smtpPasswordKeepEmpty": "Leave blank to keep saved password", "agent.settings.offlineEmail.fromEmail": "From email", "agent.settings.offlineEmail.fromName": "From name", "agent.settings.offlineEmail.statusEffective": "Effective", "agent.settings.offlineEmail.statusEnv": "Env default", "agent.settings.offlineEmail.statusDb": "Saved in database (overrides .env)", "agent.settings.offlineEmail.statusEnvOnly": "Using .env default", "agent.settings.offlineEmail.save": "Save offline email settings", "agent.settings.offlineEmail.resetEnv": "Reset to .env default", "agent.settings.offlineEmail.testTo": "Test recipient", "agent.settings.offlineEmail.testSend": "Send test email", "agent.settings.offlineEmail.adminOnly": "Admin only: edit and test", "agent.settings.offlineEmail.errorLoad": "Failed to load offline email settings", "agent.settings.offlineEmail.errorInvalidDelay": "Delay cannot be negative", "agent.settings.offlineEmail.toastSaved": "Offline email settings saved", "agent.settings.offlineEmail.toastReset": "Reset to .env default", "agent.settings.offlineEmail.toastTestSent": "Test email sent", "agent.settings.offlineEmail.statusOn": "Enabled", "agent.settings.offlineEmail.statusOff": "Disabled", "agent.settings.subtitle": "Manage AI provider settings", "agent.settings.title": "AI configuration", "agent.settings.toast.embeddingSaved": "Saved. Changes are live.", "agent.settings.toast.profileUpdateFailed": "Failed to update settings. Try again.", "agent.settings.webSearch.lead": "Web search mode and whether visitors see the toggle. Unrelated to embedding settings above.", "agent.settings.webSearch.mode": "Web search mode", "agent.settings.webSearch.modeCustom": "Self-hosted (Serper)", "agent.settings.webSearch.modeHint": "Custom: backend uses Serper (MCP or HTTP). Vendor: use the model provider’s built-in web search (no Serper).", "agent.settings.webSearch.modeVendor": "Vendor built-in", "agent.settings.webSearch.save": "Save web search settings", "agent.settings.webSearch.title": "Web search", "agent.settings.webSearch.visitorToggle": "Show “web search this turn” in the visitor widget", "agent.users.card.edit": "Edit", "agent.users.card.password": "Password", "agent.users.createButton": "Create user", "agent.users.dialog.createTitle": "Create user", "agent.users.dialog.deleteConfirm": "Delete user {{username}}?", "agent.users.dialog.deleteNote": "This cannot be undone. If this user has AI configs, they are transferred to the current admin.", "agent.users.dialog.deleteTitle": "Delete user", "agent.users.dialog.editTitle": "Edit user", "agent.users.dialog.passwordTitle": "Change password", "agent.users.empty": "No users", "agent.users.empty.filtered": "No matching users", "agent.users.field.createdAt": "Created", "agent.users.field.email": "Email", "agent.users.field.username": "Username", "agent.users.form.email": "Email", "agent.users.form.newPassword": "New password", "agent.users.form.oldPassword": "Old password", "agent.users.form.password": "Password", "agent.users.form.permissions": "Permissions", "agent.users.form.permissionsHint": "Only “Chat” is on by default. Turning off hides the menu and returns 403 from APIs.", "agent.users.form.role": "Role", "agent.users.form.username": "Username", "agent.users.form.nickname": "Nickname", "agent.users.placeholder.email": "Email", "agent.users.placeholder.emailOptional": "Email (optional)", "agent.users.placeholder.nickname": "Nickname", "agent.users.placeholder.nicknameOptional": "Nickname (optional)", "agent.users.placeholder.oldPassword": "Current password", "agent.users.placeholder.password": "Password", "agent.users.placeholder.username": "Username", "agent.users.receiveAiLabel": "Receive AI conversations", "agent.users.role.admin": "Admin", "agent.users.role.agent": "Agent", "agent.users.search.placeholder": "Search by username, nickname, email…", "agent.users.submit.creating": "Creating...", "agent.users.submit.deleting": "Deleting...", "agent.users.submit.updating": "Updating...", "agent.users.title": "Users", "agent.users.toast.adminDeleteDisabled": "Admin accounts can only be removed via database; disabled in UI", "agent.users.toast.adminPasswordDisabled": "Admin passwords can only be changed via database; disabled in UI", "agent.users.toast.createFailed": "Failed to create user", "agent.users.toast.createSuccess": "Created", "agent.users.toast.deleteFailed": "Failed to delete user", "agent.users.toast.deleteSuccess": "Deleted", "agent.users.toast.deleteTransferred": "Deleted. {{count}} AI config(s) moved to the current admin", "agent.users.toast.loadFailed": "Failed to load users", "agent.users.toast.newPasswordRequired": "New password is required", "agent.users.toast.oldPasswordRequired": "Current password is required to change your own password", "agent.users.toast.passwordFailed": "Failed to update password", "agent.users.toast.passwordSuccess": "Password updated", "agent.users.toast.updateFailed": "Failed to update user", "agent.users.toast.updateSuccess": "Updated", "agent.users.toast.usernamePasswordRequired": "Username and password are required", "agent.users.tooltip.adminDeleteDbOnly": "Admin deletion is database-only", "agent.users.tooltip.adminPasswordDbOnly": "Admin password is database-only", "agent.users.tooltip.cannotDeleteSelf": "You cannot delete the signed-in user", "agent.users.usernameImmutableHint": "Username cannot be changed", "agent.knowledge.title": "Knowledge base", "agent.knowledge.rag": "RAG", "agent.knowledge.kb.create": "New knowledge base", "agent.knowledge.kb.empty": "No knowledge bases", "agent.knowledge.kb.selectOne": "Select a knowledge base", "agent.knowledge.kb.docCount": "{{count}} docs", "agent.knowledge.import.url": "Import URL", "agent.knowledge.import.file": "Import files", "agent.knowledge.import.tabFile": "Files", "agent.knowledge.import.tabUrl": "URLs", "agent.knowledge.import.pickFiles": "Choose files", "agent.knowledge.import.filesSelected": "{{count}} file(s) selected", "agent.knowledge.import.action": "Import", "agent.knowledge.import.urlListLabel": "URL list (one per line)", "agent.knowledge.doc.create": "New doc", "agent.knowledge.doc.searchPh": "Search docs...", "agent.knowledge.doc.empty": "No docs", "agent.knowledge.doc.empty.filtered": "No matching docs", "agent.knowledge.doc.type": "Type", "agent.knowledge.doc.createdAt": "Created", "agent.knowledge.doc.publish": "Publish", "agent.knowledge.doc.unpublish": "Unpublish", "agent.knowledge.filter.all": "All statuses", "agent.knowledge.pagination": "Page {{page}} / {{totalPage}}, total {{total}}", "agent.knowledge.status.draft": "Draft", "agent.knowledge.status.published": "Published", "agent.knowledge.embedding.pending": "Pending", "agent.knowledge.embedding.processing": "Processing", "agent.knowledge.embedding.completed": "Completed", "agent.knowledge.embedding.failed": "Failed", "agent.knowledge.dialog.kbCreateTitle": "Create knowledge base", "agent.knowledge.dialog.kbCreateDesc": "Enter name and description", "agent.knowledge.dialog.kbEditTitle": "Edit knowledge base", "agent.knowledge.dialog.kbEditDesc": "Update name and description", "agent.knowledge.dialog.kbDeleteTitle": "Delete knowledge base", "agent.knowledge.dialog.kbDeleteConfirm": "Delete knowledge base \"{{name}}\"?", "agent.knowledge.dialog.kbDeleteHint": "This will also delete all docs in the knowledge base. This action cannot be undone.", "agent.knowledge.dialog.docCreateTitle": "Create doc", "agent.knowledge.dialog.docCreateDesc": "Enter title and content", "agent.knowledge.dialog.docEditTitle": "Edit doc", "agent.knowledge.dialog.docEditDesc": "Update title and content", "agent.knowledge.dialog.docDeleteTitle": "Delete doc", "agent.knowledge.dialog.docDeleteConfirm": "Delete doc \"{{title}}\"?", "agent.knowledge.dialog.importTitle": "Import docs", "agent.knowledge.dialog.importDesc": "Upload files or import by URL. Supported: Markdown (.md, .markdown), PDF (.pdf), Word (.docx). Legacy .doc files must be converted to .docx first.", "agent.knowledge.field.name": "Name", "agent.knowledge.field.descOptional": "Description (optional)", "agent.knowledge.field.title": "Title", "agent.knowledge.field.summaryOptional": "Summary (optional)", "agent.knowledge.field.content": "Content", "agent.knowledge.ph.kbName": "Knowledge base name", "agent.knowledge.ph.kbDesc": "Knowledge base description", "agent.knowledge.ph.docTitle": "Doc title", "agent.knowledge.ph.docSummary": "Doc summary", "agent.knowledge.ph.docContent": "Doc content", "agent.knowledge.submitting.creating": "Creating...", "agent.knowledge.submitting.updating": "Updating...", "agent.knowledge.submitting.deleting": "Deleting...", "agent.knowledge.submitting.importing": "Importing...", "agent.knowledge.toast.loadKbFailed": "Failed to load knowledge bases", "agent.knowledge.toast.loadDocFailed": "Failed to load docs", "agent.knowledge.toast.kbNameRequired": "Knowledge base name is required", "agent.knowledge.toast.selectKbFirst": "Please select a knowledge base first", "agent.knowledge.toast.docTitleContentRequired": "Title and content are required", "agent.knowledge.toast.createSuccess": "Created", "agent.knowledge.toast.updateSuccess": "Updated", "agent.knowledge.toast.deleteSuccess": "Deleted", "agent.knowledge.toast.updateFailed": "Update failed", "agent.knowledge.toast.createKbFailed": "Failed to create knowledge base", "agent.knowledge.toast.updateKbFailed": "Failed to update knowledge base", "agent.knowledge.toast.deleteKbFailed": "Failed to delete knowledge base", "agent.knowledge.toast.createDocFailed": "Failed to create doc", "agent.knowledge.toast.updateDocFailed": "Failed to update doc", "agent.knowledge.toast.deleteDocFailed": "Failed to delete doc", "agent.knowledge.toast.publishSuccess": "Published", "agent.knowledge.toast.publishFailed": "Failed to publish doc", "agent.knowledge.toast.unpublishSuccess": "Unpublished", "agent.knowledge.toast.unpublishFailed": "Failed to unpublish doc", "agent.knowledge.toast.selectFiles": "Please choose files to import", "agent.knowledge.toast.urlRequired": "Please enter at least one URL", "agent.knowledge.toast.importDocFailed": "Failed to import docs", "agent.knowledge.toast.importUrlFailed": "Failed to import URLs", "agent.knowledge.toast.importRefreshFailed": "Imported, but failed to refresh list. Please refresh the page.", "agent.knowledge.toast.importFailed.files": "Import failed: {{count}} file(s)", "agent.knowledge.toast.importFailed.urls": "Import failed: {{count}} URL(s)", "agent.knowledge.toast.importDone.files": "Imported: {{success}} file(s)", "agent.knowledge.toast.importDone.urls": "Imported: {{success}} URL(s)", "agent.knowledge.toast.importDone.partial": "Imported: {{success}} success, {{failed}} failed {{err}}", "agent.prompts.title": "Prompts", "agent.prompts.subtitle": "Edit system prompt templates for RAG and web search. Admin only. Placeholder hints are shown per card.", "agent.prompts.loadFailed": "Failed to load prompts", "agent.prompts.saveSuccess": "Saved. Changes apply immediately.", "agent.prompts.saveFailed": "Save failed", "agent.prompts.usageLabel": "When used:", "agent.prompts.ph.shortReply": "Enter a full short reply sentence", "agent.prompts.ph.withPlaceholders": "Enter prompt text; keep placeholders", "agent.prompts.saving": "Saving...", "agent.prompts.save": "Save", "agent.prompts.hint.rag_prompt": "Placeholders: {{rag_context}} = retrieved KB text, {{user_message}} = user question.", "agent.prompts.hint.rag_prompt_with_web_optional": "Placeholders: {{rag_context}} = retrieved KB text, {{user_message}} = user question.", "agent.prompts.hint.no_kb_prompt": "Placeholder: {{user_message}} = user question.", "agent.prompts.hint.web_search_result_prompt": "Placeholders: {{web_context}} = web results, {{user_message}} = user question. (Not used in current flow)", "agent.prompts.hint.no_source_reply": "No placeholders; shown to the user as a full reply.", "agent.prompts.hint.ai_fail_reply": "No placeholders; shown to the user as a full reply.", "agent.prompts.hint.default": "Do not remove placeholders; they are filled in by the system.", "agent.prompts.usage.rag_prompt": "When KB retrieval succeeded and web search is off for this turn, this template is sent to the model.", "agent.prompts.usage.rag_prompt_with_web_optional": "When KB retrieval succeeded and web search is on, this template enables the model to optionally use web tools.", "agent.prompts.usage.no_kb_prompt": "When there is no KB hit and no web flow, the model answers from its own knowledge only.", "agent.prompts.usage.web_search_result_prompt": "Reserved for a future “web first, then prompt” flow. Not used today.", "agent.prompts.usage.no_source_reply": "When no KB/model/web sources apply, show this sentence to the user.", "agent.prompts.usage.ai_fail_reply": "When the AI API errors or times out, show this sentence to the user.", "agent.analytics.title": "Analytics", "agent.analytics.subtitle": "Visitor widget & AI support stats (calendar day in Shanghai; excludes internal “KB test” chats)", "agent.analytics.from": "From", "agent.analytics.to": "To", "agent.analytics.query": "Query", "agent.analytics.loading": "Loading…", "agent.analytics.empty": "No data", "agent.analytics.emptyOrFailed": "No data or failed to load", "agent.analytics.stat.widgetOpens": "Widget opens", "agent.analytics.stat.widgetOpensSub": "Requires frontend tracking; history may be 0", "agent.analytics.stat.sessions": "New sessions", "agent.analytics.stat.messages": "Messages", "agent.analytics.stat.aiReplies": "AI replies", "agent.analytics.stat.aiFailed": "AI failures", "agent.analytics.stat.aiFailureRate": "AI failure rate", "agent.analytics.stat.aiFailureRateSub": "Of AI reply rows", "agent.analytics.stat.kbHits": "KB hits", "agent.analytics.stat.kbHitRate": "KB hit rate", "agent.analytics.stat.kbHitRateSub": "Of successful AI replies", "agent.analytics.stat.maxAiRounds": "Max AI rounds / session", "agent.analytics.stat.maxAiRoundsSub": "One round = user + AI once", "agent.analytics.stat.sessionsWithAi": "Sessions with AI", "agent.analytics.stat.sessionsWithAiSub": "{{pct}} of new sessions", "agent.analytics.stat.aiToHuman": "AI → human (sessions)", "agent.analytics.stat.aiToHumanSub": "{{pct}} of sessions that had AI messages", "agent.analytics.stat.humanToAi": "Human → AI (sessions)", "agent.analytics.stat.humanToAiSub": "{{pct}} of sessions that had human messages", "agent.analytics.chart.widgetOpens": "Widget opens by day", "agent.analytics.chart.sessions": "New sessions by day", "agent.analytics.chart.messages": "Messages by day", "agent.analytics.chart.aiReplies": "AI replies by day", "common.irreversibleHint": "This action cannot be undone.", "chat.title": "Chat", "chat.mode.human": "Human", "chat.mode.ai": "AI", "chat.email.placeholder": "Leave your email to get replies when offline", "chat.email.optional": "Optional", "chat.email.privacy": "Email is only used for support replies, not marketing", "chat.input.placeholder": "Type a message", }, };