tr]:last:border-b-0',
+ className,
+ )}
+ {...props}
+ />
+ );
+}
+
+function TableRow({ className, ...props }: React.ComponentProps<'tr'>) {
+ return (
+
+ );
+}
+
+function TableHead({ className, ...props }: React.ComponentProps<'th'>) {
+ return (
+ [role=checkbox]]:translate-y-[2px]',
+ className,
+ )}
+ {...props}
+ />
+ );
+}
+
+function TableCell({ className, ...props }: React.ComponentProps<'td'>) {
+ return (
+ | [role=checkbox]]:translate-y-[2px]',
+ className,
+ )}
+ {...props}
+ />
+ );
+}
+
+function TableCaption({
+ className,
+ ...props
+}: React.ComponentProps<'caption'>) {
+ return (
+
+ );
+}
+
+export {
+ Table,
+ TableHeader,
+ TableBody,
+ TableFooter,
+ TableHead,
+ TableRow,
+ TableCell,
+ TableCaption,
+};
diff --git a/web/src/i18n/index.ts b/web/src/i18n/index.ts
index fd8f5c7c..74995e00 100644
--- a/web/src/i18n/index.ts
+++ b/web/src/i18n/index.ts
@@ -6,6 +6,7 @@ import LanguageDetector from 'i18next-browser-languagedetector';
import enUS from './locales/en-US';
import zhHans from './locales/zh-Hans';
+import zhHant from './locales/zh-Hant';
import jaJP from './locales/ja-JP';
i18n
@@ -19,6 +20,9 @@ i18n
'zh-Hans': {
translation: zhHans,
},
+ 'zh-Hant': {
+ translation: zhHant,
+ },
'ja-JP': {
translation: jaJP,
},
diff --git a/web/src/i18n/locales/en-US.ts b/web/src/i18n/locales/en-US.ts
index dd276519..2da16025 100644
--- a/web/src/i18n/locales/en-US.ts
+++ b/web/src/i18n/locales/en-US.ts
@@ -39,6 +39,8 @@ const enUS = {
addRound: 'Add Round',
copySuccess: 'Copy Successfully',
test: 'Test',
+ forgotPassword: 'Forgot Password?',
+ loading: 'Loading...',
},
notFound: {
title: 'Page not found',
@@ -85,14 +87,13 @@ const enUS = {
string: 'String',
number: 'Number',
boolean: 'Boolean',
- extraParametersDescription:
- 'Will be attached to the request body, such as max_tokens, temperature, top_p, etc.',
selectModelProvider: 'Select Model Provider',
modelProviderDescription:
'Please fill in the model name provided by the supplier',
selectModel: 'Select Model',
testSuccess: 'Test successful',
testError: 'Test failed, please check your model configuration',
+ llmModels: 'LLM Models',
},
bots: {
title: 'Bots',
@@ -194,6 +195,10 @@ const enUS = {
today: 'Today',
updateTime: 'Updated ',
defaultBadge: 'Default',
+ sortBy: 'Sort by',
+ newestCreated: 'Newest Created',
+ recentlyEdited: 'Recently Edited',
+ earliestEdited: 'Earliest Edited',
basicInfo: 'Basic',
aiCapabilities: 'AI',
triggerConditions: 'Trigger',
@@ -231,6 +236,64 @@ const enUS = {
streaming: 'Streaming',
},
},
+ knowledge: {
+ title: 'Knowledge',
+ createKnowledgeBase: 'Create Knowledge Base',
+ editKnowledgeBase: 'Edit Knowledge Base',
+ selectKnowledgeBase: 'Select Knowledge Base',
+ empty: 'Empty',
+ editDocument: 'Documents',
+ description: 'Configuring knowledge bases for improved LLM responses',
+ metadata: 'Metadata',
+ documents: 'Documents',
+ kbNameRequired: 'Knowledge base name cannot be empty',
+ kbDescriptionRequired: 'Knowledge base description cannot be empty',
+ embeddingModelUUIDRequired: 'Embedding model cannot be empty',
+ daysAgo: 'days ago',
+ today: 'Today',
+ kbName: 'Knowledge Base Name',
+ kbDescription: 'Knowledge Base Description',
+ defaultDescription: 'A knowledge base',
+ embeddingModelUUID: 'Embedding Model',
+ selectEmbeddingModel: 'Select Embedding Model',
+ embeddingModelDescription:
+ 'Used to vectorize the text, you can configure it in the Models page',
+ updateTime: 'Updated ',
+ cannotChangeEmbeddingModel:
+ 'Knowledge base created cannot be modified embedding model',
+ updateKnowledgeBaseSuccess: 'Knowledge base updated successfully',
+ updateKnowledgeBaseFailed: 'Knowledge base update failed',
+ documentsTab: {
+ name: 'Name',
+ status: 'Status',
+ noResults: 'No documents',
+ dragAndDrop: 'Drag and drop files here or click to upload',
+ uploading: 'Uploading...',
+ supportedFormats:
+ 'Supports PDF, Word, TXT, Markdown and other document formats',
+ uploadSuccess: 'File uploaded successfully!',
+ uploadError: 'File upload failed, please try again',
+ uploadingFile: 'Uploading file...',
+ actions: 'Actions',
+ delete: 'Delete File',
+ fileDeleteSuccess: 'File deleted successfully',
+ fileDeleteFailed: 'File deletion failed',
+ processing: 'Processing',
+ completed: 'Completed',
+ failed: 'Failed',
+ },
+ deleteKnowledgeBaseConfirmation:
+ 'Are you sure you want to delete this knowledge base? All documents in this knowledge base will be deleted.',
+ retrieve: 'Retrieve Test',
+ retrieveTest: 'Retrieve Test',
+ query: 'Query',
+ queryPlaceholder: 'Enter query text...',
+ distance: 'Distance',
+ content: 'Content',
+ fileName: 'File Name',
+ noResults: 'No results',
+ retrieveError: 'Retrieve failed',
+ },
register: {
title: 'Initialize LangBot 👋',
description: 'This is your first time starting LangBot',
@@ -240,6 +303,40 @@ const enUS = {
initSuccess: 'Initialization successful, please login',
initFailed: 'Initialization failed: ',
},
+ resetPassword: {
+ title: 'Reset Password 🔐',
+ description:
+ 'Enter your recovery key and new password to reset your account password',
+ recoveryKey: 'Recovery Key',
+ recoveryKeyDescription:
+ 'Stored in `system.recovery_key` of config file `data/config.yaml`',
+ newPassword: 'New Password',
+ enterRecoveryKey: 'Enter recovery key',
+ enterNewPassword: 'Enter new password',
+ recoveryKeyRequired: 'Recovery key cannot be empty',
+ newPasswordRequired: 'New password cannot be empty',
+ resetPassword: 'Reset Password',
+ resetting: 'Resetting...',
+ resetSuccess: 'Password reset successfully, please login',
+ resetFailed:
+ 'Password reset failed, please check your email and recovery key',
+ backToLogin: 'Back to Login',
+ },
+ embedding: {
+ description: 'Manage Embedding models for text vectorization',
+ createModel: 'Create Embedding Model',
+ editModel: 'Edit Embedding Model',
+ getModelListError: 'Failed to get Embedding model list: ',
+ embeddingModels: 'Embedding',
+ extraParametersDescription:
+ 'Will be attached to the request body, such as encoding_format, dimensions, etc.',
+ },
+ llm: {
+ description: 'Manage LLM models for conversation generation',
+ llmModels: 'LLM',
+ extraParametersDescription:
+ 'Will be attached to the request body, such as max_tokens, temperature, top_p, etc.',
+ },
};
export default enUS;
diff --git a/web/src/i18n/locales/ja-JP.ts b/web/src/i18n/locales/ja-JP.ts
index 9a600d3a..03ec8398 100644
--- a/web/src/i18n/locales/ja-JP.ts
+++ b/web/src/i18n/locales/ja-JP.ts
@@ -40,6 +40,8 @@ const jaJP = {
addRound: 'ラウンドを追加',
copySuccess: 'コピーに成功しました',
test: 'テスト',
+ forgotPassword: 'パスワードを忘れた?',
+ loading: '読み込み中...',
},
notFound: {
title: 'ページが見つかりません',
@@ -194,6 +196,10 @@ const jaJP = {
today: '今日',
updateTime: '更新日時',
defaultBadge: 'デフォルト',
+ sortBy: '並び順',
+ newestCreated: '最新作成',
+ recentlyEdited: '最近編集',
+ earliestEdited: '最古編集',
basicInfo: '基本情報',
aiCapabilities: 'AI機能',
triggerConditions: 'トリガー条件',
@@ -232,6 +238,65 @@ const jaJP = {
streaming: 'ストリーミング',
},
},
+ knowledge: {
+ title: '知識ベース',
+ createKnowledgeBase: '知識ベースを作成',
+ editKnowledgeBase: '知識ベースを編集',
+ selectKnowledgeBase: '知識ベースを選択',
+ empty: 'なし',
+ editDocument: 'ドキュメント',
+ description: 'LLMの回答品質向上のための知識ベースを設定します',
+ metadata: 'メタデータ',
+ documents: 'ドキュメント',
+ kbNameRequired: '知識ベース名は必須です',
+ kbDescriptionRequired: '知識ベースの説明は必須です',
+ embeddingModelUUIDRequired: '埋め込みモデルは必須です',
+ daysAgo: '日前',
+ today: '今日',
+ kbName: '知識ベース名',
+ kbDescription: '知識ベースの説明',
+ defaultDescription: '知識ベース',
+ embeddingModelUUID: '埋め込みモデル',
+ selectEmbeddingModel: '埋め込みモデルを選択',
+ embeddingModelDescription:
+ 'テキストのベクトル化に使用する埋め込みモデルを管理します',
+ updateTime: '更新日時',
+ cannotChangeEmbeddingModel:
+ '知識ベース作成後は埋め込みモデルを変更できません',
+ updateKnowledgeBaseSuccess: '知識ベースの更新に成功しました',
+ updateKnowledgeBaseFailed: '知識ベースの更新に失敗しました',
+ documentsTab: {
+ name: '名前',
+ status: 'ステータス',
+ noResults: 'ドキュメントがありません',
+ dragAndDrop:
+ 'ファイルをここにドラッグ&ドロップするか、クリックしてアップロードしてください',
+ uploading: 'アップロード中...',
+ supportedFormats:
+ 'PDF、Word、TXT、Markdownなどのドキュメントファイルをサポートしています',
+ uploadSuccess: 'ファイルのアップロードに成功しました!',
+ uploadError: 'ファイルのアップロードに失敗しました。再度お試しください',
+ uploadingFile: 'ファイルをアップロード中...',
+ actions: 'アクション',
+ delete: 'ドキュメントを削除',
+ fileDeleteSuccess: 'ドキュメントの削除に成功しました',
+ fileDeleteFailed: 'ドキュメントの削除に失敗しました',
+ processing: '処理中',
+ completed: '完了',
+ failed: '失敗',
+ },
+ deleteKnowledgeBaseConfirmation:
+ '本当にこの知識ベースを削除しますか?この知識ベースに紐付けられたドキュメントは削除されます。',
+ retrieve: '検索テスト',
+ retrieveTest: '検索テスト',
+ query: '検索',
+ queryPlaceholder: '検索内容を入力...',
+ distance: '距離',
+ content: '内容',
+ fileName: 'ファイル名',
+ noResults: '検索結果がありません',
+ retrieveError: '検索に失敗しました',
+ },
register: {
title: 'LangBot を初期化 👋',
description: 'これはLangBotの初回起動です',
@@ -241,6 +306,40 @@ const jaJP = {
initSuccess: '初期化に成功しました。ログインしてください',
initFailed: '初期化に失敗しました:',
},
+ resetPassword: {
+ title: 'パスワードをリセット 🔐',
+ description:
+ '復旧キーと新しいパスワードを入力して、アカウントのパスワードをリセットします',
+ recoveryKey: '復旧キー',
+ recoveryKeyDescription:
+ '設定ファイル `data/config.yaml` の `system.recovery_key` に保存されています',
+ newPassword: '新しいパスワード',
+ enterRecoveryKey: '復旧キーを入力',
+ enterNewPassword: '新しいパスワードを入力',
+ recoveryKeyRequired: '復旧キーは必須です',
+ newPasswordRequired: '新しいパスワードは必須です',
+ resetPassword: 'パスワードをリセット',
+ resetting: 'リセット中...',
+ resetSuccess: 'パスワードのリセットに成功しました。ログインしてください',
+ resetFailed:
+ 'パスワードのリセットに失敗しました。メールアドレスと復旧キーを確認してください',
+ backToLogin: 'ログインに戻る',
+ },
+ embedding: {
+ description: 'テキストのベクトル化に使用する埋め込みモデルを管理します',
+ createModel: '埋め込みモデルを作成',
+ editModel: '埋め込みモデルを編集',
+ getModelListError: '埋め込みモデルリストの取得に失敗しました:',
+ embeddingModels: '埋め込みモデル',
+ extraParametersDescription:
+ 'リクエストボディに追加されるパラメータ(encoding_format、dimensions など)',
+ },
+ llm: {
+ description: 'チャットメッセージの生成に使用するLLMモデルを管理します',
+ llmModels: 'LLMモデル',
+ extraParametersDescription:
+ 'リクエストボディに追加されるパラメータ(max_tokens、temperature、top_p など)',
+ },
};
export default jaJP;
diff --git a/web/src/i18n/locales/zh-Hans.ts b/web/src/i18n/locales/zh-Hans.ts
index 62eb6563..cb156e46 100644
--- a/web/src/i18n/locales/zh-Hans.ts
+++ b/web/src/i18n/locales/zh-Hans.ts
@@ -39,6 +39,8 @@ const zhHans = {
addRound: '添加回合',
copySuccess: '复制成功',
test: '测试',
+ forgotPassword: '忘记密码?',
+ loading: '加载中...',
},
notFound: {
title: '页面不存在',
@@ -86,13 +88,12 @@ const zhHans = {
string: '字符串',
number: '数字',
boolean: '布尔值',
- extraParametersDescription:
- '将在请求时附加到请求体中,如 max_tokens, temperature, top_p 等',
selectModelProvider: '选择模型供应商',
modelProviderDescription: '请填写供应商向您提供的模型名称',
selectModel: '请选择模型',
testSuccess: '测试成功',
testError: '测试失败,请检查模型配置',
+ llmModels: '对话模型',
},
bots: {
title: '机器人',
@@ -189,6 +190,10 @@ const zhHans = {
today: '今天',
updateTime: '更新于',
defaultBadge: '默认',
+ sortBy: '排序方式',
+ newestCreated: '最新创建',
+ recentlyEdited: '最近编辑',
+ earliestEdited: '最早编辑',
basicInfo: '基础信息',
aiCapabilities: 'AI 能力',
triggerConditions: '触发条件',
@@ -226,6 +231,61 @@ const zhHans = {
streaming: '流式传输',
},
},
+ knowledge: {
+ title: '知识库',
+ createKnowledgeBase: '创建知识库',
+ editKnowledgeBase: '编辑知识库',
+ selectKnowledgeBase: '选择知识库',
+ empty: '无',
+ editDocument: '文档',
+ description: '配置可用于提升模型回复质量的知识库',
+ metadata: '元数据',
+ documents: '文档',
+ kbNameRequired: '知识库名称不能为空',
+ kbDescriptionRequired: '知识库描述不能为空',
+ embeddingModelUUIDRequired: '嵌入模型不能为空',
+ daysAgo: '天前',
+ today: '今天',
+ kbName: '知识库名称',
+ kbDescription: '知识库描述',
+ defaultDescription: '一个知识库',
+ embeddingModelUUID: '嵌入模型',
+ selectEmbeddingModel: '选择嵌入模型',
+ embeddingModelDescription: '用于向量化文本,可在模型配置页面配置',
+ updateTime: '更新于',
+ cannotChangeEmbeddingModel: '知识库创建后不可修改嵌入模型',
+ updateKnowledgeBaseSuccess: '知识库更新成功',
+ updateKnowledgeBaseFailed: '知识库更新失败',
+ documentsTab: {
+ name: '名称',
+ status: '状态',
+ noResults: '暂无文档',
+ dragAndDrop: '拖拽文件到此处或点击上传',
+ uploading: '上传中...',
+ supportedFormats: '支持 PDF、Word、TXT、Markdown 等文档格式',
+ uploadSuccess: '文件上传成功!',
+ uploadError: '文件上传失败,请重试',
+ uploadingFile: '上传文件中...',
+ actions: '操作',
+ delete: '删除文件',
+ fileDeleteSuccess: '文件删除成功',
+ fileDeleteFailed: '文件删除失败',
+ processing: '处理中',
+ completed: '完成',
+ failed: '失败',
+ },
+ deleteKnowledgeBaseConfirmation:
+ '你确定要删除这个知识库吗?此知识库下的所有文档将被删除。',
+ retrieve: '检索测试',
+ retrieveTest: '检索测试',
+ query: '查询',
+ queryPlaceholder: '输入查询内容...',
+ distance: '距离',
+ content: '内容',
+ fileName: '文件名',
+ noResults: '暂无结果',
+ retrieveError: '检索失败',
+ },
register: {
title: '初始化 LangBot 👋',
description: '这是您首次启动 LangBot',
@@ -234,6 +294,38 @@ const zhHans = {
initSuccess: '初始化成功 请登录',
initFailed: '初始化失败:',
},
+ resetPassword: {
+ title: '重置密码 🔐',
+ description: '输入恢复密钥和新的密码来重置您的账户密码',
+ recoveryKey: '恢复密钥',
+ recoveryKeyDescription:
+ '存储在配置文件`data/config.yaml`的`system.recovery_key`中',
+ newPassword: '新密码',
+ enterRecoveryKey: '输入恢复密钥',
+ enterNewPassword: '输入新密码',
+ recoveryKeyRequired: '恢复密钥不能为空',
+ newPasswordRequired: '新密码不能为空',
+ resetPassword: '重置密码',
+ resetting: '重置中...',
+ resetSuccess: '密码重置成功,请登录',
+ resetFailed: '密码重置失败,请检查邮箱和恢复密钥是否正确',
+ backToLogin: '返回登录',
+ },
+ embedding: {
+ description: '管理嵌入模型,用于向量化文本',
+ createModel: '创建嵌入模型',
+ editModel: '编辑嵌入模型',
+ getModelListError: '获取嵌入模型列表失败:',
+ embeddingModels: '嵌入模型',
+ extraParametersDescription:
+ '将在请求时附加到请求体中,如 encoding_format, dimensions 等',
+ },
+ llm: {
+ llmModels: '对话模型',
+ description: '管理 LLM 模型,用于对话消息生成',
+ extraParametersDescription:
+ '将在请求时附加到请求体中,如 max_tokens, temperature, top_p 等',
+ },
};
export default zhHans;
diff --git a/web/src/i18n/locales/zh-Hant.ts b/web/src/i18n/locales/zh-Hant.ts
new file mode 100644
index 00000000..e71f0e53
--- /dev/null
+++ b/web/src/i18n/locales/zh-Hant.ts
@@ -0,0 +1,330 @@
+const zhHant = {
+ common: {
+ login: '登入',
+ logout: '登出',
+ email: '電子郵件',
+ password: '密碼',
+ welcome: '歡迎回到 LangBot 👋',
+ continueToLogin: '登入以繼續',
+ loginSuccess: '登入成功',
+ loginFailed: '登入失敗,請檢查電子郵件和密碼是否正確',
+ enterEmail: '輸入電子郵件地址',
+ enterPassword: '輸入密碼',
+ invalidEmail: '請輸入有效的電子郵件地址',
+ emptyPassword: '請輸入密碼',
+ language: '語言',
+ helpDocs: '輔助說明',
+ create: '建立',
+ edit: '編輯',
+ delete: '刪除',
+ add: '新增',
+ select: '請選擇',
+ cancel: '取消',
+ submit: '提交',
+ error: '錯誤',
+ success: '成功',
+ save: '儲存',
+ saving: '儲存中...',
+ confirm: '確認',
+ confirmDelete: '確認刪除',
+ deleteConfirmation: '您確定要刪除這個嗎?',
+ selectOption: '選擇一個選項',
+ required: '必填',
+ enable: '是否啟用',
+ name: '名稱',
+ description: '描述',
+ close: '關閉',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ addRound: '新增回合',
+ copySuccess: '複製成功',
+ test: '測試',
+ forgotPassword: '忘記密碼?',
+ loading: '載入中...',
+ },
+ notFound: {
+ title: '頁面不存在',
+ description:
+ '您要查詢的頁面似乎不存在。請檢查您輸入的 URL 是否正確,或返回首頁。',
+ back: '上一級',
+ home: '返回主頁',
+ help: '查看說明文件',
+ },
+ models: {
+ title: '模型設定',
+ description: '設定和管理可在流程線中使用的模型',
+ createModel: '建立模型',
+ editModel: '編輯模型',
+ getModelListError: '取得模型清單失敗:',
+ modelName: '模型名稱',
+ modelProvider: '模型供應商',
+ modelBaseURL: '基礎 URL',
+ modelAbilities: '模型能力',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ createSuccess: '建立成功',
+ createError: '建立失敗:',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ deleteConfirmation: '您確定要刪除這個模型嗎?',
+ modelNameRequired: '模型名稱不能為空',
+ modelProviderRequired: '模型供應商不能為空',
+ requestURLRequired: '請求URL不能為空',
+ apiKeyRequired: 'API Key不能為空',
+ keyNameRequired: '鍵名不能為空',
+ mustBeValidNumber: '必須是有效的數字',
+ mustBeTrueOrFalse: '必須是 true 或 false',
+ requestURL: '請求URL',
+ apiKey: 'API Key',
+ abilities: '能力',
+ selectModelAbilities: '選擇模型能力',
+ visionAbility: '視覺能力',
+ functionCallAbility: '函數呼叫',
+ extraParameters: '額外參數',
+ addParameter: '新增參數',
+ keyName: '鍵名',
+ type: '類型',
+ value: '值',
+ string: '字串',
+ number: '數字',
+ boolean: '布林值',
+ selectModelProvider: '選擇模型供應商',
+ modelProviderDescription: '請填寫供應商向您提供的模型名稱',
+ selectModel: '請選擇模型',
+ testSuccess: '測試成功',
+ testError: '測試失敗,請檢查模型設定',
+ llmModels: '對話模型',
+ },
+ bots: {
+ title: '機器人',
+ description: '建立和管理機器人,這是 LangBot 與各個平台連接的入口',
+ createBot: '建立機器人',
+ editBot: '編輯機器人',
+ getBotListError: '取得機器人清單失敗:',
+ botName: '機器人名稱',
+ botDescription: '機器人描述',
+ botNameRequired: '機器人名稱不能為空',
+ botDescriptionRequired: '機器人描述不能為空',
+ adapterRequired: '適配器不能為空',
+ defaultDescription: '一個機器人',
+ getBotConfigError: '取得機器人設定失敗:',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ createSuccess: '建立成功 請啟用或修改綁定流程線',
+ createError: '建立失敗:',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ deleteConfirmation: '您確定要刪除這個機器人嗎?',
+ platformAdapter: '平台/適配器選擇',
+ selectAdapter: '選擇適配器',
+ adapterConfig: '適配器設定',
+ bindPipeline: '綁定流程線',
+ selectPipeline: '選擇流程線',
+ botLogTitle: '機器人日誌',
+ enableAutoRefresh: '開啟自動重新整理',
+ session: '對話',
+ yesterday: '昨天',
+ earlier: '更久之前',
+ dateFormat: '{{month}}月{{day}}日',
+ setBotEnableError: '設定機器人啟用狀態失敗',
+ log: '日誌',
+ configuration: '設定',
+ logs: '日誌',
+ },
+ plugins: {
+ title: '外掛管理',
+ description: '安裝和設定用於擴展 LangBot 功能的外掛',
+ createPlugin: '建立外掛',
+ editPlugin: '編輯外掛',
+ installed: '已安裝',
+ marketplace: 'Marketplace',
+ arrange: '編排',
+ install: '安裝',
+ installFromGithub: '從 GitHub 安裝外掛',
+ onlySupportGithub: '目前僅支援從 GitHub 安裝',
+ enterGithubLink: '請輸入外掛的Github連結',
+ installing: '正在安裝外掛...',
+ installSuccess: '外掛安裝成功',
+ installFailed: '外掛安裝失敗:',
+ searchPlugin: '搜尋外掛',
+ sortBy: '排序方式',
+ mostStars: '最多星標',
+ recentlyAdded: '最近新增',
+ recentlyUpdated: '最近更新',
+ noMatchingPlugins: '沒有找到符合的外掛',
+ loading: '載入中...',
+ getPluginListError: '取得外掛清單失敗:',
+ pluginConfig: '外掛設定',
+ noPluginInstalled: '暫未安裝任何外掛',
+ pluginSort: '外掛排序',
+ pluginSortDescription:
+ '外掛順序會影響同一事件內的處理順序,請拖曳外掛卡片排序',
+ pluginSortSuccess: '外掛排序成功',
+ pluginSortError: '外掛排序失敗:',
+ pluginNoConfig: '外掛沒有設定項目。',
+ deleting: '刪除中...',
+ deletePlugin: '刪除外掛',
+ cancel: '取消',
+ saveConfig: '儲存設定',
+ saving: '儲存中...',
+ confirmDeletePlugin: '您確定要刪除外掛({{author}}/{{name}})嗎?',
+ confirmDelete: '確認刪除',
+ deleteError: '刪除失敗:',
+ close: '關閉',
+ deleteConfirm: '刪除確認',
+ modifyFailed: '修改失敗:',
+ eventCount: '事件:{{count}}',
+ toolCount: '工具:{{count}}',
+ starCount: '星標:{{count}}',
+ },
+ pipelines: {
+ title: '流程線',
+ description: '流程線定義了對訊息事件的處理流程,用於綁定到機器人',
+ createPipeline: '建立流程線',
+ editPipeline: '編輯流程線',
+ chat: '對話',
+ configuration: '設定',
+ debugChat: '對話除錯',
+ getPipelineListError: '取得流程線清單失敗:',
+ daysAgo: '天前',
+ today: '今天',
+ updateTime: '更新於',
+ defaultBadge: '預設',
+ sortBy: '排序方式',
+ newestCreated: '最新建立',
+ recentlyEdited: '最近編輯',
+ earliestEdited: '最早編輯',
+ basicInfo: '基本資訊',
+ aiCapabilities: 'AI 能力',
+ triggerConditions: '觸發條件',
+ safetyControls: '安全控制',
+ outputProcessing: '輸出處理',
+ nameRequired: '名稱不能為空',
+ descriptionRequired: '描述不能為空',
+ createSuccess: '建立成功 請編輯流程線詳細參數',
+ createError: '建立失敗:',
+ saveSuccess: '儲存成功',
+ saveError: '儲存失敗:',
+ deleteConfirmation:
+ '您確定要刪除這個流程線嗎?已綁定此流程線的機器人將無法使用。',
+ defaultPipelineCannotDelete: '預設流程線不可刪除',
+ deleteSuccess: '刪除成功',
+ deleteError: '刪除失敗:',
+ debugDialog: {
+ title: '流程線對話',
+ selectPipeline: '選擇流程線',
+ sessionType: '對話類型',
+ privateChat: '私聊',
+ groupChat: '群聊',
+ send: '傳送',
+ reset: '重設對話',
+ inputPlaceholder: '傳送 {{type}} 訊息...',
+ noMessages: '暫無訊息',
+ userMessage: '使用者',
+ botMessage: '機器人',
+ sendFailed: '傳送失敗',
+ resetSuccess: '對話已重設',
+ resetFailed: '重設失敗',
+ loadMessagesFailed: '載入訊息失敗',
+ loadPipelinesFailed: '載入流程線失敗',
+ atTips: '提及機器人',
+ },
+ },
+ knowledge: {
+ title: '知識庫',
+ createKnowledgeBase: '建立知識庫',
+ editKnowledgeBase: '編輯知識庫',
+ selectKnowledgeBase: '選擇知識庫',
+ empty: '無',
+ editDocument: '文件',
+ description: '設定可用於提升模型回覆品質的知識庫',
+ metadata: '中繼資料',
+ documents: '文件',
+ kbNameRequired: '知識庫名稱不能為空',
+ kbDescriptionRequired: '知識庫描述不能為空',
+ embeddingModelUUIDRequired: '嵌入模型不能為空',
+ daysAgo: '天前',
+ today: '今天',
+ kbName: '知識庫名稱',
+ kbDescription: '知識庫描述',
+ defaultDescription: '一個知識庫',
+ embeddingModelUUID: '嵌入模型',
+ selectEmbeddingModel: '選擇嵌入模型',
+ embeddingModelDescription: '用於向量化文字,可在模型設定頁面設定',
+ updateTime: '更新於',
+ cannotChangeEmbeddingModel: '知識庫建立後不可修改嵌入模型',
+ updateKnowledgeBaseSuccess: '知識庫更新成功',
+ updateKnowledgeBaseFailed: '知識庫更新失敗',
+ documentsTab: {
+ name: '名稱',
+ status: '狀態',
+ noResults: '暫無文件',
+ dragAndDrop: '拖曳檔案到此處或點擊上傳',
+ uploading: '上傳中...',
+ supportedFormats: '支援 PDF、Word、TXT、Markdown 等文件格式',
+ uploadSuccess: '檔案上傳成功!',
+ uploadError: '檔案上傳失敗,請重試',
+ uploadingFile: '上傳檔案中...',
+ actions: '操作',
+ delete: '刪除檔案',
+ fileDeleteSuccess: '檔案刪除成功',
+ fileDeleteFailed: '檔案刪除失敗',
+ processing: '處理中',
+ completed: '完成',
+ failed: '失敗',
+ },
+ deleteKnowledgeBaseConfirmation:
+ '您確定要刪除這個知識庫嗎?此知識庫下的所有文件將被刪除。',
+ retrieve: '檢索測試',
+ retrieveTest: '檢索測試',
+ query: '查詢',
+ queryPlaceholder: '輸入查詢內容...',
+ distance: '距離',
+ content: '內容',
+ fileName: '檔案名稱',
+ noResults: '暫無結果',
+ retrieveError: '檢索失敗',
+ },
+ register: {
+ title: '初始化 LangBot 👋',
+ description: '這是您首次啟動 LangBot',
+ adminAccountNote: '您填寫的電子郵件和密碼將作為初始管理員帳號',
+ register: '註冊',
+ initSuccess: '初始化成功 請登入',
+ initFailed: '初始化失敗:',
+ },
+ resetPassword: {
+ title: '重設密碼 🔐',
+ description: '輸入恢復金鑰和新的密碼來重設您的帳戶密碼',
+ recoveryKey: '恢復金鑰',
+ recoveryKeyDescription:
+ '儲存在設定檔案`data/config.yaml`的`system.recovery_key`中',
+ newPassword: '新密碼',
+ enterRecoveryKey: '輸入恢復金鑰',
+ enterNewPassword: '輸入新密碼',
+ recoveryKeyRequired: '恢復金鑰不能為空',
+ newPasswordRequired: '新密碼不能為空',
+ resetPassword: '重設密碼',
+ resetting: '重設中...',
+ resetSuccess: '密碼重設成功,請登入',
+ resetFailed: '密碼重設失敗,請檢查電子郵件和恢復金鑰是否正確',
+ backToLogin: '返回登入',
+ },
+ embedding: {
+ description: '管理嵌入模型,用於向量化文字',
+ createModel: '建立嵌入模型',
+ editModel: '編輯嵌入模型',
+ getModelListError: '取得嵌入模型清單失敗:',
+ embeddingModels: '嵌入模型',
+ extraParametersDescription:
+ '將在請求時附加到請求體中,如 encoding_format, dimensions 等',
+ },
+ llm: {
+ llmModels: '對話模型',
+ description: '管理 LLM 模型,用於對話訊息產生',
+ extraParametersDescription:
+ '將在請求時附加到請求體中,如 max_tokens, temperature, top_p 等',
+ },
+};
+
+export default zhHant;
|