Password security policy (#4765)
* Psw (#4748) * feat: 添加重置密码功能及相关接口 - 在用户模型中新增 passwordUpdateTime 字段以记录密码更新时间。 - 更新用户模式以支持密码更新时间的存储。 - 新增重置密码的模态框组件,允许用户重置密码。 - 实现重置密码的 API 接口,支持根据用户 ID 更新密码。 - 更新相关国际化文件,添加重置密码的提示信息。 * 更新国际化文件,添加重置密码相关提示信息,并优化重置密码模态框的实现。修复部分代码逻辑,确保用户体验流畅。 * 更新国际化文件,添加重置密码相关提示信息,优化重置密码模态框的实现,修复部分代码逻辑,确保用户体验流畅。新增获取用户密码更新时间的API接口,并调整相关逻辑以支持密码重置功能。 * update * fix * fix * Added environment variables NEXT_PUBLIC_PASSWORD_UPDATETIME to support password update time configuration, update related logic to implement password mandatory update function, and optimize the implementation of reset password modal box to improve user experience. * update index * 更新用户密码重置功能,调整相关API接口,优化重置密码模态框的实现,确保用户体验流畅。修复部分代码逻辑,更新国际化提示信息。 * 删除获取用户密码更新时间的API接口,并在布局组件中移除不必要的重置密码模态框。优化代码结构,提升可维护性。 * update * perf: reset expired password code * perf: layout child components * doc * remove invalid env * perf: update password code --------- Co-authored-by: dreamer6680 <1468683855@qq.com>
This commit is contained in:
parent
96e7dd581e
commit
c75f154728
@ -14,6 +14,7 @@ weight: 792
|
|||||||
2. 将所有内置任务,从非 stream 模式调整成 stream 模式,避免部分模型不支持非 stream 模式。如需覆盖,则可以在模型`额外 Body`参数中,强制指定`stream=false`。
|
2. 将所有内置任务,从非 stream 模式调整成 stream 模式,避免部分模型不支持非 stream 模式。如需覆盖,则可以在模型`额外 Body`参数中,强制指定`stream=false`。
|
||||||
3. qwen3 模型预设
|
3. qwen3 模型预设
|
||||||
4. 语雀知识库支持设置根目录。
|
4. 语雀知识库支持设置根目录。
|
||||||
|
5. 可配置密码过期时间,过期后下次登录会强制要求修改密码。
|
||||||
|
|
||||||
## ⚙️ 优化
|
## ⚙️ 优化
|
||||||
|
|
||||||
|
|||||||
1
env.d.ts
vendored
1
env.d.ts
vendored
@ -36,6 +36,7 @@ declare global {
|
|||||||
SHOW_COUPON?: string;
|
SHOW_COUPON?: string;
|
||||||
CONFIG_JSON_PATH?: string;
|
CONFIG_JSON_PATH?: string;
|
||||||
PASSWORD_LOGIN_LOCK_SECONDS?: string;
|
PASSWORD_LOGIN_LOCK_SECONDS?: string;
|
||||||
|
PASSWORD_EXPIRED_MONTH?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
1
packages/global/support/user/type.d.ts
vendored
1
packages/global/support/user/type.d.ts
vendored
@ -14,6 +14,7 @@ export type UserModelSchema = {
|
|||||||
timezone: string;
|
timezone: string;
|
||||||
status: `${UserStatusEnum}`;
|
status: `${UserStatusEnum}`;
|
||||||
lastLoginTmbId?: string;
|
lastLoginTmbId?: string;
|
||||||
|
passwordUpdateTime?: Date;
|
||||||
fastgpt_sem?: {
|
fastgpt_sem?: {
|
||||||
keyword: string;
|
keyword: string;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,6 +3,7 @@ const { Schema } = connectionMongo;
|
|||||||
import { hashStr } from '@fastgpt/global/common/string/tools';
|
import { hashStr } from '@fastgpt/global/common/string/tools';
|
||||||
import type { UserModelSchema } from '@fastgpt/global/support/user/type';
|
import type { UserModelSchema } from '@fastgpt/global/support/user/type';
|
||||||
import { UserStatusEnum, userStatusMap } from '@fastgpt/global/support/user/constant';
|
import { UserStatusEnum, userStatusMap } from '@fastgpt/global/support/user/constant';
|
||||||
|
import { TeamMemberCollectionName } from '@fastgpt/global/support/user/team/constant';
|
||||||
|
|
||||||
export const userCollectionName = 'users';
|
export const userCollectionName = 'users';
|
||||||
|
|
||||||
@ -18,9 +19,7 @@ const UserSchema = new Schema({
|
|||||||
required: true,
|
required: true,
|
||||||
unique: true // 唯一
|
unique: true // 唯一
|
||||||
},
|
},
|
||||||
phonePrefix: {
|
phonePrefix: Number,
|
||||||
type: Number
|
|
||||||
},
|
|
||||||
password: {
|
password: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
@ -28,13 +27,14 @@ const UserSchema = new Schema({
|
|||||||
get: (val: string) => hashStr(val),
|
get: (val: string) => hashStr(val),
|
||||||
select: false
|
select: false
|
||||||
},
|
},
|
||||||
|
passwordUpdateTime: Date,
|
||||||
createTime: {
|
createTime: {
|
||||||
type: Date,
|
type: Date,
|
||||||
default: () => new Date()
|
default: () => new Date()
|
||||||
},
|
},
|
||||||
promotionRate: {
|
promotionRate: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 15
|
default: 0
|
||||||
},
|
},
|
||||||
openaiAccount: {
|
openaiAccount: {
|
||||||
type: {
|
type: {
|
||||||
@ -47,7 +47,8 @@ const UserSchema = new Schema({
|
|||||||
default: 'Asia/Shanghai'
|
default: 'Asia/Shanghai'
|
||||||
},
|
},
|
||||||
lastLoginTmbId: {
|
lastLoginTmbId: {
|
||||||
type: Schema.Types.ObjectId
|
type: Schema.Types.ObjectId,
|
||||||
|
ref: TeamMemberCollectionName
|
||||||
},
|
},
|
||||||
|
|
||||||
inviterId: {
|
inviterId: {
|
||||||
|
|||||||
@ -55,6 +55,7 @@
|
|||||||
"please_bind_notification_receiving_path": "Please bind the notification receiving method first",
|
"please_bind_notification_receiving_path": "Please bind the notification receiving method first",
|
||||||
"purchase_extra_package": "Upgrade",
|
"purchase_extra_package": "Upgrade",
|
||||||
"reminder_create_bound_notification_account": "Remind the creator to bind the notification account",
|
"reminder_create_bound_notification_account": "Remind the creator to bind the notification account",
|
||||||
|
"reset_password": "reset password",
|
||||||
"resource_usage": "Usages",
|
"resource_usage": "Usages",
|
||||||
"select_avatar": "Click to select avatar",
|
"select_avatar": "Click to select avatar",
|
||||||
"standard_package_and_extra_resource_package": "Includes standard and extra plans",
|
"standard_package_and_extra_resource_package": "Includes standard and extra plans",
|
||||||
|
|||||||
@ -1,7 +1,28 @@
|
|||||||
{
|
{
|
||||||
|
"Action": "Action",
|
||||||
|
"Add": "Add",
|
||||||
|
"Add Success": "Added Successfully",
|
||||||
|
"Add_new_input": "Add new input",
|
||||||
|
"All": "All",
|
||||||
"App": "Application",
|
"App": "Application",
|
||||||
|
"Cancel": "Cancel",
|
||||||
|
"Choose": "Choose",
|
||||||
"Click_to_expand": "Click to expand",
|
"Click_to_expand": "Click to expand",
|
||||||
|
"Close": "Close",
|
||||||
|
"Code": "Code",
|
||||||
|
"Config": "Configuration",
|
||||||
|
"Confirm": "Confirm",
|
||||||
|
"Continue_Adding": "Continue adding",
|
||||||
|
"Copy": "Copy",
|
||||||
|
"Creating": "Creating",
|
||||||
|
"Delete": "Delete",
|
||||||
|
"Detail": "Detail",
|
||||||
|
"Documents": "Documents",
|
||||||
|
"Done": "Done",
|
||||||
"Download": "Download",
|
"Download": "Download",
|
||||||
|
"Edit": "Edit",
|
||||||
|
"Error": "Error",
|
||||||
|
"Exit": "Exit",
|
||||||
"Export": "Export",
|
"Export": "Export",
|
||||||
"FAQ.ai_point_a": "Each time an AI model is called, a certain amount of AI points will be consumed. \nFor specific calculation standards, please refer to the \"AI integral calculation standards\" above. \nThe system will give priority to the actual usage returned by the model manufacturer. If it is empty, the calculation method of GPT3.5 is used for estimation. 1Token≈0.7 Chinese characters ≈0.9 English words, and the characters that appear continuously may be considered as 1 Tokens.",
|
"FAQ.ai_point_a": "Each time an AI model is called, a certain amount of AI points will be consumed. \nFor specific calculation standards, please refer to the \"AI integral calculation standards\" above. \nThe system will give priority to the actual usage returned by the model manufacturer. If it is empty, the calculation method of GPT3.5 is used for estimation. 1Token≈0.7 Chinese characters ≈0.9 English words, and the characters that appear continuously may be considered as 1 Tokens.",
|
||||||
"FAQ.ai_point_expire_a": "Yes, they will expire. After the current package expires, the AI points will be reset to the new package's AI points. Annual package AI points are valid for one year, not monthly.",
|
"FAQ.ai_point_expire_a": "Yes, they will expire. After the current package expires, the AI points will be reset to the new package's AI points. Annual package AI points are valid for one year, not monthly.",
|
||||||
@ -19,36 +40,76 @@
|
|||||||
"FAQ.package_overlay_q": "Can additional resource packs be stacked?",
|
"FAQ.package_overlay_q": "Can additional resource packs be stacked?",
|
||||||
"FAQ.switch_package_a": "The package usage rule is to prioritize the use of higher-level packages. Therefore, if the newly purchased package is higher than the current package, the new package will take effect immediately; otherwise, the current package will continue to be used.",
|
"FAQ.switch_package_a": "The package usage rule is to prioritize the use of higher-level packages. Therefore, if the newly purchased package is higher than the current package, the new package will take effect immediately; otherwise, the current package will continue to be used.",
|
||||||
"FAQ.switch_package_q": "Will the subscription package be switched?",
|
"FAQ.switch_package_q": "Will the subscription package be switched?",
|
||||||
|
"File": "File",
|
||||||
|
"Finish": "Finish",
|
||||||
"Folder": "Folder",
|
"Folder": "Folder",
|
||||||
|
"FullScreen": "FullScreen",
|
||||||
|
"FullScreenLight": "FullScreenLight",
|
||||||
|
"Import": "Import",
|
||||||
|
"Input": "Input",
|
||||||
"Instructions": "Instruction",
|
"Instructions": "Instruction",
|
||||||
|
"Intro": "Introduction",
|
||||||
|
"Loading": "Loading...",
|
||||||
"Login": "Login",
|
"Login": "Login",
|
||||||
|
"More": "More",
|
||||||
"Move": "Move",
|
"Move": "Move",
|
||||||
"Name": "Name",
|
"Name": "Name",
|
||||||
"None": "None",
|
"None": "None",
|
||||||
|
"OK": "OK",
|
||||||
|
"Open": "Open",
|
||||||
"Operation": "Operation",
|
"Operation": "Operation",
|
||||||
|
"Other": "Other",
|
||||||
|
"Output": "Output",
|
||||||
|
"Params": "Parameters",
|
||||||
|
"Parse": "Analysis",
|
||||||
|
"Permission": "Permission",
|
||||||
|
"Permission_tip": "Individual permissions are greater than group permissions",
|
||||||
|
"Please Input Name": "Please Enter a Name",
|
||||||
|
"Preview": "Preview",
|
||||||
|
"Remove": "Remove",
|
||||||
|
"Rename": "Rename",
|
||||||
"Required_input": "Required",
|
"Required_input": "Required",
|
||||||
|
"Reset": "Reset",
|
||||||
|
"Restart": "Restart",
|
||||||
"Resume": "Resume",
|
"Resume": "Resume",
|
||||||
|
"Role": "Permission",
|
||||||
|
"Run": "Run",
|
||||||
"Running": "Running",
|
"Running": "Running",
|
||||||
|
"Save": "Save",
|
||||||
|
"Save_and_exit": "Save and Exit",
|
||||||
|
"Search": "Search",
|
||||||
"Select_all": "Select all",
|
"Select_all": "Select all",
|
||||||
|
"Setting": "Setting",
|
||||||
|
"Status": "Status",
|
||||||
"Submit": "Submit",
|
"Submit": "Submit",
|
||||||
|
"Success": "Success",
|
||||||
|
"Team": "Team",
|
||||||
|
"UnKnow": "Unknown",
|
||||||
|
"Unlimited": "Unlimited",
|
||||||
|
"Update": "Update",
|
||||||
|
"Username": "Username",
|
||||||
|
"Waiting": "Waiting",
|
||||||
|
"Warning": "Warning",
|
||||||
|
"Website": "Website",
|
||||||
|
"action_confirm": "Confirm",
|
||||||
"add_new": "add_new",
|
"add_new": "add_new",
|
||||||
"add_new_param": "Add new param",
|
"add_new_param": "Add new param",
|
||||||
"all_quotes": "All quotes",
|
"all_quotes": "All quotes",
|
||||||
"templateTags.Image_generation": "Image generation",
|
"all_result": "Full Results",
|
||||||
"templateTags.Office_services": "Office Services",
|
|
||||||
"templateTags.Roleplay": "role play",
|
|
||||||
"templateTags.Web_search": "Search online",
|
|
||||||
"templateTags.Writing": "Writing",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
|
"base_config": "Basic Configuration",
|
||||||
"bill_already_processed": "Order has been processed",
|
"bill_already_processed": "Order has been processed",
|
||||||
"bill_expired": "Order expired",
|
"bill_expired": "Order expired",
|
||||||
"bill_not_pay_processed": "Non-online orders",
|
"bill_not_pay_processed": "Non-online orders",
|
||||||
"button.extra_dataset_size_tip": "You are purchasing [Extra Knowledge Base Capacity]",
|
"button.extra_dataset_size_tip": "You are purchasing [Extra Knowledge Base Capacity]",
|
||||||
"button.extra_points_tip": "You are purchasing [Extra AI Points]",
|
"button.extra_points_tip": "You are purchasing [Extra AI Points]",
|
||||||
"can_copy_content_tip": "It is not possible to copy automatically using the browser, please manually copy the following content",
|
"can_copy_content_tip": "It is not possible to copy automatically using the browser, please manually copy the following content",
|
||||||
|
"choosable": "Choosable",
|
||||||
"chose_condition": "Choose Condition",
|
"chose_condition": "Choose Condition",
|
||||||
"chosen": "Chosen",
|
"chosen": "Chosen",
|
||||||
"classification": "Classification",
|
"classification": "Classification",
|
||||||
|
"click_drag_tip": "Click to Drag",
|
||||||
|
"click_select_avatar": "Click to Select Avatar",
|
||||||
"click_to_copy": "Click to copy",
|
"click_to_copy": "Click to copy",
|
||||||
"click_to_resume": "Click to Resume",
|
"click_to_resume": "Click to Resume",
|
||||||
"code_editor": "Code Editor",
|
"code_editor": "Code Editor",
|
||||||
@ -116,163 +177,21 @@
|
|||||||
"code_error.user_error.balance_not_enough": "Insufficient Account Balance",
|
"code_error.user_error.balance_not_enough": "Insufficient Account Balance",
|
||||||
"code_error.user_error.bin_visitor_guest": "You Are Currently a Guest, Unauthorized to Operate",
|
"code_error.user_error.bin_visitor_guest": "You Are Currently a Guest, Unauthorized to Operate",
|
||||||
"code_error.user_error.un_auth_user": "User Not Found",
|
"code_error.user_error.un_auth_user": "User Not Found",
|
||||||
"commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/",
|
|
||||||
"Action": "Action",
|
|
||||||
"Add": "Add",
|
|
||||||
"Add Success": "Added Successfully",
|
|
||||||
"Add_new_input": "Add new input",
|
|
||||||
"All": "All",
|
|
||||||
"Cancel": "Cancel",
|
|
||||||
"Choose": "Choose",
|
|
||||||
"Close": "Close",
|
|
||||||
"Code": "Code",
|
|
||||||
"Config": "Configuration",
|
|
||||||
"Confirm": "Confirm",
|
|
||||||
"comfirn_create": "Confirm Creation",
|
|
||||||
"comfirm_import": "comfirm_import",
|
"comfirm_import": "comfirm_import",
|
||||||
"confirm_move": "Move Here",
|
|
||||||
"confirm_update": "confirm_update",
|
|
||||||
"comfirm_leave_page": "Confirm to Leave This Page?",
|
"comfirm_leave_page": "Confirm to Leave This Page?",
|
||||||
"Continue_Adding": "Continue adding",
|
"comfirn_create": "Confirm Creation",
|
||||||
"Copy": "Copy",
|
"commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/",
|
||||||
"copy_successful": "Copied Successfully",
|
|
||||||
"create_failed": "Creation Failed",
|
|
||||||
"create_success": "Created Successfully",
|
|
||||||
"create_time": "Creation Time",
|
|
||||||
"Creating": "Creating",
|
|
||||||
"custom_title": "Custom Title",
|
|
||||||
"Delete": "Delete",
|
|
||||||
"delete_failed": "Deletion Failed",
|
|
||||||
"delete_success": "Deleted Successfully",
|
|
||||||
"delete_warning": "Deletion Warning",
|
|
||||||
"delete_folder": "Delete Folder",
|
|
||||||
"Detail": "Detail",
|
|
||||||
"Documents": "Documents",
|
|
||||||
"Done": "Done",
|
|
||||||
"Edit": "Edit",
|
|
||||||
"Error": "Error",
|
|
||||||
"Exit": "Exit",
|
|
||||||
"exit_directly": "exit_directly",
|
|
||||||
"expired_time": "Expiration Time",
|
|
||||||
"File": "File",
|
|
||||||
"Finish": "Finish",
|
|
||||||
"FullScreen": "FullScreen",
|
|
||||||
"FullScreenLight": "FullScreenLight",
|
|
||||||
"Import": "Import",
|
|
||||||
"import_failed": "Import Failed",
|
|
||||||
"import_success": "Imported Successfully",
|
|
||||||
"Input": "Input",
|
|
||||||
"folder_description": "Folder Description",
|
|
||||||
"input_name": "Enter a Name",
|
|
||||||
"Intro": "Introduction",
|
|
||||||
"last_step": "Previous",
|
|
||||||
"last_use_time": "Last Use Time",
|
|
||||||
"load_failed": "load_failed",
|
|
||||||
"Loading": "Loading...",
|
|
||||||
"More": "More",
|
|
||||||
"no_select_data": "No Data Available",
|
|
||||||
"next_step": "Next",
|
|
||||||
"no_more_data": "No More Data",
|
|
||||||
"not_open": "Not Open",
|
|
||||||
"OK": "OK",
|
|
||||||
"Open": "Open",
|
|
||||||
"Other": "Other",
|
|
||||||
"Output": "Output",
|
|
||||||
"Params": "Parameters",
|
|
||||||
"Parse": "Analysis",
|
|
||||||
"psw_inconsistency": "Passwords Do Not Match",
|
|
||||||
"Permission": "Permission",
|
|
||||||
"Permission_tip": "Individual permissions are greater than group permissions",
|
|
||||||
"Please Input Name": "Please Enter a Name",
|
|
||||||
"Preview": "Preview",
|
|
||||||
"read_doc": "Read Document",
|
|
||||||
"Remove": "Remove",
|
|
||||||
"Rename": "Rename",
|
|
||||||
"request_error": "request_error",
|
|
||||||
"Reset": "Reset",
|
|
||||||
"Restart": "Restart",
|
|
||||||
"Role": "Permission",
|
|
||||||
"root_folder": "Root Folder",
|
|
||||||
"Run": "Run",
|
|
||||||
"Save": "Save",
|
|
||||||
"save_failed": "save_failed",
|
|
||||||
"save_success": "Saved Successfully",
|
|
||||||
"Save_and_exit": "Save and Exit",
|
|
||||||
"Search": "Search",
|
|
||||||
"select_file_failed": "File Selection Failed",
|
|
||||||
"select_template": "Select Template",
|
|
||||||
"set_avatar": "Click to set_avatar",
|
|
||||||
"Setting": "Setting",
|
|
||||||
"Status": "Status",
|
|
||||||
"submit_failed": "Submission Failed",
|
|
||||||
"Success": "Success",
|
|
||||||
"sync_success": "Synced Successfully",
|
|
||||||
"Team": "Team",
|
|
||||||
"un_used": "Unused",
|
|
||||||
"UnKnow": "Unknown",
|
|
||||||
"unknow_source": "Unknown Source",
|
|
||||||
"Unlimited": "Unlimited",
|
|
||||||
"Update": "Update",
|
|
||||||
"update_failed": "Update Failed",
|
|
||||||
"update_success": "Updated Successfully",
|
|
||||||
"Username": "Username",
|
|
||||||
"Waiting": "Waiting",
|
|
||||||
"Warning": "Warning",
|
|
||||||
"Website": "Website",
|
|
||||||
"all_result": "Full Results",
|
|
||||||
"click_select_avatar": "Click to Select Avatar",
|
|
||||||
"base_config": "Basic Configuration",
|
|
||||||
"choosable": "Choosable",
|
|
||||||
"action_confirm": "Confirm",
|
|
||||||
"copy_to_clipboard": "Copy to Clipboard",
|
|
||||||
"read_course": "Read Course",
|
|
||||||
"error.unKnow": "An Unexpected Error Occurred",
|
|
||||||
"export_to_json": "Export to JSON",
|
|
||||||
"failed": "Failed",
|
|
||||||
"click_drag_tip": "Click to Drag",
|
|
||||||
"move_success": "Moved Successfully",
|
|
||||||
"move_to": "Move to",
|
|
||||||
"no_child_folder": "No Subdirectories, Place Here",
|
|
||||||
"open_folder": "Open Folder",
|
|
||||||
"folder.empty": "No More Items in This Directory",
|
|
||||||
"folder.open_dataset": "Open Dataset",
|
|
||||||
"have_done": "Completed",
|
|
||||||
"input.Repeat Value": "Duplicate Value",
|
|
||||||
"is_requesting": "Requesting...",
|
|
||||||
"json_parse_error": "Possible JSON Error, Please Check Carefully",
|
|
||||||
"json_config": "JSON Configuration",
|
|
||||||
"link.UnValid": "Invalid Link",
|
|
||||||
"month": "Month",
|
|
||||||
"name_is_empty": "Name Cannot Be Empty",
|
|
||||||
"no_intro": "No Introduction Available",
|
|
||||||
"not_support": "Not Supported",
|
|
||||||
"page_center": "Page Center",
|
|
||||||
"redo_tip": "Redo ctrl shift z",
|
|
||||||
"redo_tip_mac": "Redo ⌘ shift z",
|
|
||||||
"request_end": "All Loaded",
|
|
||||||
"request_more": "Click to Load More",
|
|
||||||
"speech_error_tip": "Speech to Text Failed",
|
|
||||||
"speech_not_support": "Your Browser Does Not Support Speech Input",
|
|
||||||
"submit_success": "Submitted Successfully",
|
|
||||||
"submitted": "Submitted",
|
|
||||||
"support": "Support",
|
|
||||||
"system_help_chatbot": "Help Chatbot",
|
|
||||||
"use_helper": "Use Helper",
|
|
||||||
"ui.textarea.Magnifying": "Magnifying",
|
|
||||||
"undo_tip": "Undo ctrl z",
|
|
||||||
"undo_tip_mac": "Undo ⌘ z ",
|
|
||||||
"upload_file": "Upload File",
|
|
||||||
"zoomin_tip": "Zoom Out ctrl -",
|
|
||||||
"zoomin_tip_mac": "Zoom Out ⌘ -",
|
|
||||||
"zoomout_tip": "Zoom In ctrl +",
|
|
||||||
"zoomout_tip_mac": "Zoom In ⌘ +",
|
|
||||||
"comon.Continue_Adding": "Continue Adding",
|
"comon.Continue_Adding": "Continue Adding",
|
||||||
"compliance.chat": "The content is generated by third-party AI and cannot be guaranteed to be true and accurate. It is for reference only.",
|
"compliance.chat": "The content is generated by third-party AI and cannot be guaranteed to be true and accurate. It is for reference only.",
|
||||||
"compliance.compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
|
"compliance.compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
|
||||||
"compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
|
"compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
|
||||||
"confirm_choice": "Confirm Choice",
|
"confirm_choice": "Confirm Choice",
|
||||||
|
"confirm_move": "Move Here",
|
||||||
|
"confirm_update": "confirm_update",
|
||||||
"contact_way": "Notification Received",
|
"contact_way": "Notification Received",
|
||||||
"contribute_app_template": "Contribute Template",
|
"contribute_app_template": "Contribute Template",
|
||||||
|
"copy_successful": "Copied Successfully",
|
||||||
|
"copy_to_clipboard": "Copy to Clipboard",
|
||||||
"core.Chat": "Chat",
|
"core.Chat": "Chat",
|
||||||
"core.ai.Max context": "Max Context",
|
"core.ai.Max context": "Max Context",
|
||||||
"core.ai.Model": "Model",
|
"core.ai.Model": "Model",
|
||||||
@ -492,7 +411,6 @@
|
|||||||
"core.chat.response.user_select_result": "User Selection Result",
|
"core.chat.response.user_select_result": "User Selection Result",
|
||||||
"core.chat.retry": "Regenerate",
|
"core.chat.retry": "Regenerate",
|
||||||
"core.chat.tts.Stop Speech": "Stop",
|
"core.chat.tts.Stop Speech": "Stop",
|
||||||
"core.tip.leave page": "Content has been modified, confirm to leave the page?",
|
|
||||||
"core.dataset.Choose Dataset": "Associate Dataset",
|
"core.dataset.Choose Dataset": "Associate Dataset",
|
||||||
"core.dataset.Collection": "Dataset",
|
"core.dataset.Collection": "Dataset",
|
||||||
"core.dataset.Create dataset": "Create a {{name}}",
|
"core.dataset.Create dataset": "Create a {{name}}",
|
||||||
@ -567,7 +485,6 @@
|
|||||||
"core.dataset.import.Custom text desc": "Manually enter a piece of text as a dataset",
|
"core.dataset.import.Custom text desc": "Manually enter a piece of text as a dataset",
|
||||||
"core.dataset.import.Data process params": "Data Processing Parameters",
|
"core.dataset.import.Data process params": "Data Processing Parameters",
|
||||||
"core.dataset.import.Down load csv template": "Click to Download CSV Template",
|
"core.dataset.import.Down load csv template": "Click to Download CSV Template",
|
||||||
"core.dataset.import.import_success": "Import Successful, Please Wait for Training",
|
|
||||||
"core.dataset.import.Link name": "Web Link",
|
"core.dataset.import.Link name": "Web Link",
|
||||||
"core.dataset.import.Link name placeholder": "Only supports static links. If the data is empty after uploading, the link may not be readable\nEach line one, up to 10 links at a time",
|
"core.dataset.import.Link name placeholder": "Only supports static links. If the data is empty after uploading, the link may not be readable\nEach line one, up to 10 links at a time",
|
||||||
"core.dataset.import.Local file": "Local File",
|
"core.dataset.import.Local file": "Local File",
|
||||||
@ -588,6 +505,7 @@
|
|||||||
"core.dataset.import.Upload status": "Status",
|
"core.dataset.import.Upload status": "Status",
|
||||||
"core.dataset.import.Web link": "Web Link",
|
"core.dataset.import.Web link": "Web Link",
|
||||||
"core.dataset.import.Web link desc": "Read static web page content as a dataset",
|
"core.dataset.import.Web link desc": "Read static web page content as a dataset",
|
||||||
|
"core.dataset.import.import_success": "Import Successful, Please Wait for Training",
|
||||||
"core.dataset.link": "Link",
|
"core.dataset.link": "Link",
|
||||||
"core.dataset.search.Dataset Search Params": "Dataset Search Configuration",
|
"core.dataset.search.Dataset Search Params": "Dataset Search Configuration",
|
||||||
"core.dataset.search.Empty result response": "Empty Search Response",
|
"core.dataset.search.Empty result response": "Empty Search Response",
|
||||||
@ -769,6 +687,7 @@
|
|||||||
"core.plugin.Get Plugin Module Detail Failed": "Failed to Retrieve Plugin Information",
|
"core.plugin.Get Plugin Module Detail Failed": "Failed to Retrieve Plugin Information",
|
||||||
"core.plugin.Http plugin intro placeholder": "For display only, no actual effect",
|
"core.plugin.Http plugin intro placeholder": "For display only, no actual effect",
|
||||||
"core.plugin.cost": "Points Consumption:",
|
"core.plugin.cost": "Points Consumption:",
|
||||||
|
"core.tip.leave page": "Content has been modified, confirm to leave the page?",
|
||||||
"core.view_chat_detail": "View Chat Details",
|
"core.view_chat_detail": "View Chat Details",
|
||||||
"core.workflow.Can not delete node": "This Node Cannot Be Deleted",
|
"core.workflow.Can not delete node": "This Node Cannot Be Deleted",
|
||||||
"core.workflow.Change input type tip": "Changing the input type will clear the filled values, please confirm!",
|
"core.workflow.Change input type tip": "Changing the input type will clear the filled values, please confirm!",
|
||||||
@ -822,7 +741,11 @@
|
|||||||
"core.workflow.value": "Value",
|
"core.workflow.value": "Value",
|
||||||
"core.workflow.variable": "Variable",
|
"core.workflow.variable": "Variable",
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
|
"create_failed": "Creation Failed",
|
||||||
|
"create_success": "Created Successfully",
|
||||||
|
"create_time": "Creation Time",
|
||||||
"cron_job_run_app": "Scheduled Task",
|
"cron_job_run_app": "Scheduled Task",
|
||||||
|
"custom_title": "Custom Title",
|
||||||
"data_index_custom": "Custom index",
|
"data_index_custom": "Custom index",
|
||||||
"data_index_default": "Default index",
|
"data_index_default": "Default index",
|
||||||
"data_index_image": "Image Index",
|
"data_index_image": "Image Index",
|
||||||
@ -872,6 +795,10 @@
|
|||||||
"dataset_text_model_tip": "Used for text processing in the knowledge base preprocessing stage, such as automatic supplementary indexing, Q&A pair extraction.",
|
"dataset_text_model_tip": "Used for text processing in the knowledge base preprocessing stage, such as automatic supplementary indexing, Q&A pair extraction.",
|
||||||
"deep_rag_search": "In-depth search",
|
"deep_rag_search": "In-depth search",
|
||||||
"delete_api": "Are you sure you want to delete this API key? \nAfter deletion, the key will become invalid immediately and the corresponding conversation log will not be deleted. Please confirm!",
|
"delete_api": "Are you sure you want to delete this API key? \nAfter deletion, the key will become invalid immediately and the corresponding conversation log will not be deleted. Please confirm!",
|
||||||
|
"delete_failed": "Deletion Failed",
|
||||||
|
"delete_folder": "Delete Folder",
|
||||||
|
"delete_success": "Deleted Successfully",
|
||||||
|
"delete_warning": "Deletion Warning",
|
||||||
"embedding_model_not_config": "No index model is detected",
|
"embedding_model_not_config": "No index model is detected",
|
||||||
"error.Create failed": "Create failed",
|
"error.Create failed": "Create failed",
|
||||||
"error.code_error": "Verification code error",
|
"error.code_error": "Verification code error",
|
||||||
@ -881,6 +808,7 @@
|
|||||||
"error.missingParams": "Insufficient parameters",
|
"error.missingParams": "Insufficient parameters",
|
||||||
"error.send_auth_code_too_frequently": "Please do not obtain verification code frequently",
|
"error.send_auth_code_too_frequently": "Please do not obtain verification code frequently",
|
||||||
"error.too_many_request": "Too many request",
|
"error.too_many_request": "Too many request",
|
||||||
|
"error.unKnow": "An Unexpected Error Occurred",
|
||||||
"error.upload_file_error_filename": "{{name}} Upload Failed",
|
"error.upload_file_error_filename": "{{name}} Upload Failed",
|
||||||
"error.upload_image_error": "File upload failed",
|
"error.upload_image_error": "File upload failed",
|
||||||
"error.username_empty": "Account cannot be empty",
|
"error.username_empty": "Account cannot be empty",
|
||||||
@ -890,13 +818,23 @@
|
|||||||
"error_llm_not_config": "Unconfigured file understanding model",
|
"error_llm_not_config": "Unconfigured file understanding model",
|
||||||
"error_un_permission": "No permission to operate",
|
"error_un_permission": "No permission to operate",
|
||||||
"error_vlm_not_config": "Image comprehension model not configured",
|
"error_vlm_not_config": "Image comprehension model not configured",
|
||||||
|
"exit_directly": "exit_directly",
|
||||||
|
"expired_time": "Expiration Time",
|
||||||
|
"export_to_json": "Export to JSON",
|
||||||
"extraction_results": "Extraction Results",
|
"extraction_results": "Extraction Results",
|
||||||
|
"failed": "Failed",
|
||||||
"field_name": "Field Name",
|
"field_name": "Field Name",
|
||||||
|
"folder.empty": "No More Items in This Directory",
|
||||||
|
"folder.open_dataset": "Open Dataset",
|
||||||
|
"folder_description": "Folder Description",
|
||||||
"free": "Free",
|
"free": "Free",
|
||||||
"get_QR_failed": "Failed to Get QR Code",
|
"get_QR_failed": "Failed to Get QR Code",
|
||||||
"get_app_failed": "Failed to Retrieve App",
|
"get_app_failed": "Failed to Retrieve App",
|
||||||
"get_laf_failed": "Failed to Retrieve Laf Function List",
|
"get_laf_failed": "Failed to Retrieve Laf Function List",
|
||||||
"has_verification": "Verified, Click to Unbind",
|
"has_verification": "Verified, Click to Unbind",
|
||||||
|
"have_done": "Completed",
|
||||||
|
"import_failed": "Import Failed",
|
||||||
|
"import_success": "Imported Successfully",
|
||||||
"info.buy_extra": "Buy Extra Package",
|
"info.buy_extra": "Buy Extra Package",
|
||||||
"info.csv_download": "Click to Download Batch Test Template",
|
"info.csv_download": "Click to Download Batch Test Template",
|
||||||
"info.csv_message": "Read the first column of the CSV file for batch testing, supporting up to 100 groups of data at a time.",
|
"info.csv_message": "Read the first column of the CSV file for batch testing, supporting up to 100 groups of data at a time.",
|
||||||
@ -908,14 +846,23 @@
|
|||||||
"info.open_api_notice": "You can fill in the relevant keys of OpenAI/OneAPI. If you fill in this content, the 'AI Chat', 'Question Classification', and 'Content Extraction' on the online platform will use the key you filled in and will not be charged. Please check if your key has access to the corresponding model. GPT models can choose FastAI.",
|
"info.open_api_notice": "You can fill in the relevant keys of OpenAI/OneAPI. If you fill in this content, the 'AI Chat', 'Question Classification', and 'Content Extraction' on the online platform will use the key you filled in and will not be charged. Please check if your key has access to the corresponding model. GPT models can choose FastAI.",
|
||||||
"info.open_api_placeholder": "Request address, default is the official OpenAI. You can fill in the transit address, 'v1' will not be automatically completed",
|
"info.open_api_placeholder": "Request address, default is the official OpenAI. You can fill in the transit address, 'v1' will not be automatically completed",
|
||||||
"info.resource": "Resource Usage",
|
"info.resource": "Resource Usage",
|
||||||
|
"input.Repeat Value": "Duplicate Value",
|
||||||
|
"input_name": "Enter a Name",
|
||||||
"invalid_variable": "Invalid Variable",
|
"invalid_variable": "Invalid Variable",
|
||||||
"is_open": "Is Open",
|
"is_open": "Is Open",
|
||||||
|
"is_requesting": "Requesting...",
|
||||||
"is_using": "In Use",
|
"is_using": "In Use",
|
||||||
"item_description": "Field Description",
|
"item_description": "Field Description",
|
||||||
"item_name": "Field Name",
|
"item_name": "Field Name",
|
||||||
|
"json_config": "JSON Configuration",
|
||||||
|
"json_parse_error": "Possible JSON Error, Please Check Carefully",
|
||||||
"just_now": "just",
|
"just_now": "just",
|
||||||
"key_repetition": "Key Repetition",
|
"key_repetition": "Key Repetition",
|
||||||
|
"last_step": "Previous",
|
||||||
|
"last_use_time": "Last Use Time",
|
||||||
|
"link.UnValid": "Invalid Link",
|
||||||
"llm_model_not_config": "No language model was detected",
|
"llm_model_not_config": "No language model was detected",
|
||||||
|
"load_failed": "load_failed",
|
||||||
"max_quote_tokens": "Quote cap",
|
"max_quote_tokens": "Quote cap",
|
||||||
"max_quote_tokens_tips": "The maximum number of tokens in a single search, about 1 character in Chinese = 1.7 tokens, and about 1 character in English = 1 token",
|
"max_quote_tokens_tips": "The maximum number of tokens in a single search, about 1 character in Chinese = 1.7 tokens, and about 1 character in English = 1 token",
|
||||||
"mcp_server": "MCP Services",
|
"mcp_server": "MCP Services",
|
||||||
@ -948,7 +895,11 @@
|
|||||||
"model_sparkdesk": "SprkDesk",
|
"model_sparkdesk": "SprkDesk",
|
||||||
"model_stepfun": "StepFun",
|
"model_stepfun": "StepFun",
|
||||||
"model_yi": "Yi",
|
"model_yi": "Yi",
|
||||||
|
"month": "Month",
|
||||||
"move.confirm": "Confirm move",
|
"move.confirm": "Confirm move",
|
||||||
|
"move_success": "Moved Successfully",
|
||||||
|
"move_to": "Move to",
|
||||||
|
"name_is_empty": "Name Cannot Be Empty",
|
||||||
"navbar.Account": "Account",
|
"navbar.Account": "Account",
|
||||||
"navbar.Chat": "Chat",
|
"navbar.Chat": "Chat",
|
||||||
"navbar.Datasets": "Dataset",
|
"navbar.Datasets": "Dataset",
|
||||||
@ -956,13 +907,22 @@
|
|||||||
"navbar.Toolkit": "Toolkit",
|
"navbar.Toolkit": "Toolkit",
|
||||||
"navbar.Tools": "Tools",
|
"navbar.Tools": "Tools",
|
||||||
"new_create": "Create New",
|
"new_create": "Create New",
|
||||||
|
"next_step": "Next",
|
||||||
"no": "No",
|
"no": "No",
|
||||||
|
"no_child_folder": "No Subdirectories, Place Here",
|
||||||
|
"no_intro": "No Introduction Available",
|
||||||
"no_laf_env": "System Not Configured with Laf Environment",
|
"no_laf_env": "System Not Configured with Laf Environment",
|
||||||
|
"no_more_data": "No More Data",
|
||||||
"no_pay_way": "There is no suitable payment channel in the system",
|
"no_pay_way": "There is no suitable payment channel in the system",
|
||||||
|
"no_select_data": "No Data Available",
|
||||||
"not_model_config": "No related model configured",
|
"not_model_config": "No related model configured",
|
||||||
|
"not_open": "Not Open",
|
||||||
"not_permission": "The current subscription package does not support team operation logs",
|
"not_permission": "The current subscription package does not support team operation logs",
|
||||||
|
"not_support": "Not Supported",
|
||||||
"not_yet_introduced": "No Introduction Yet",
|
"not_yet_introduced": "No Introduction Yet",
|
||||||
|
"open_folder": "Open Folder",
|
||||||
"option": "Option",
|
"option": "Option",
|
||||||
|
"page_center": "Page Center",
|
||||||
"pay.amount": "Amount",
|
"pay.amount": "Amount",
|
||||||
"pay.error_desc": "There was a problem when converting payment routes",
|
"pay.error_desc": "There was a problem when converting payment routes",
|
||||||
"pay.noclose": "After payment is completed, please wait for the system to update automatically",
|
"pay.noclose": "After payment is completed, please wait for the system to update automatically",
|
||||||
@ -1025,14 +985,34 @@
|
|||||||
"plugin.path": "Path",
|
"plugin.path": "Path",
|
||||||
"price_over_wx_limit": "Exceed payment provider limit: WeChat Pay only supports less than 6,000 yuan",
|
"price_over_wx_limit": "Exceed payment provider limit: WeChat Pay only supports less than 6,000 yuan",
|
||||||
"prompt_input_placeholder": "Please enter the prompt word",
|
"prompt_input_placeholder": "Please enter the prompt word",
|
||||||
|
"psw_inconsistency": "Passwords Do Not Match",
|
||||||
"question_feedback": "Work order",
|
"question_feedback": "Work order",
|
||||||
|
"read_course": "Read Course",
|
||||||
|
"read_doc": "Read Document",
|
||||||
"read_quote": "View citations",
|
"read_quote": "View citations",
|
||||||
|
"redo_tip": "Redo ctrl shift z",
|
||||||
|
"redo_tip_mac": "Redo ⌘ shift z",
|
||||||
|
"request_end": "All Loaded",
|
||||||
|
"request_error": "request_error",
|
||||||
|
"request_more": "Click to Load More",
|
||||||
"required": "Required",
|
"required": "Required",
|
||||||
"rerank_weight": "Rearrange weights",
|
"rerank_weight": "Rearrange weights",
|
||||||
"resume_failed": "Resume Failed",
|
"resume_failed": "Resume Failed",
|
||||||
|
"root_folder": "Root Folder",
|
||||||
|
"save_failed": "save_failed",
|
||||||
|
"save_success": "Saved Successfully",
|
||||||
"scan_code": "Scan the QR code to pay",
|
"scan_code": "Scan the QR code to pay",
|
||||||
|
"select_file_failed": "File Selection Failed",
|
||||||
"select_reference_variable": "Select Reference Variable",
|
"select_reference_variable": "Select Reference Variable",
|
||||||
|
"select_template": "Select Template",
|
||||||
|
"set_avatar": "Click to set_avatar",
|
||||||
"share_link": "Share Link",
|
"share_link": "Share Link",
|
||||||
|
"speech_error_tip": "Speech to Text Failed",
|
||||||
|
"speech_not_support": "Your Browser Does Not Support Speech Input",
|
||||||
|
"submit_failed": "Submission Failed",
|
||||||
|
"submit_success": "Submitted Successfully",
|
||||||
|
"submitted": "Submitted",
|
||||||
|
"support": "Support",
|
||||||
"support.account.Individuation": "Personalization",
|
"support.account.Individuation": "Personalization",
|
||||||
"support.inform.Read": "Read",
|
"support.inform.Read": "Read",
|
||||||
"support.openapi.Api baseurl": "API Base URL",
|
"support.openapi.Api baseurl": "API Base URL",
|
||||||
@ -1210,18 +1190,34 @@
|
|||||||
"support.wallet.usage.Usage Detail": "Usage Details",
|
"support.wallet.usage.Usage Detail": "Usage Details",
|
||||||
"support.wallet.usage.Whisper": "Voice Input",
|
"support.wallet.usage.Whisper": "Voice Input",
|
||||||
"sync_link": "Sync Link",
|
"sync_link": "Sync Link",
|
||||||
|
"sync_success": "Synced Successfully",
|
||||||
"system.Concat us": "Contact Us",
|
"system.Concat us": "Contact Us",
|
||||||
"system.Help Document": "Help Document",
|
"system.Help Document": "Help Document",
|
||||||
|
"system_help_chatbot": "Help Chatbot",
|
||||||
"tag_list": "Tag List",
|
"tag_list": "Tag List",
|
||||||
"team_tag": "Team Tag",
|
"team_tag": "Team Tag",
|
||||||
|
"templateTags.Image_generation": "Image generation",
|
||||||
|
"templateTags.Office_services": "Office Services",
|
||||||
|
"templateTags.Roleplay": "role play",
|
||||||
|
"templateTags.Web_search": "Search online",
|
||||||
|
"templateTags.Writing": "Writing",
|
||||||
"template_market": "Template Market",
|
"template_market": "Template Market",
|
||||||
"textarea_variable_picker_tip": "Enter \"/\" to select a variable",
|
"textarea_variable_picker_tip": "Enter \"/\" to select a variable",
|
||||||
|
"ui.textarea.Magnifying": "Magnifying",
|
||||||
|
"un_used": "Unused",
|
||||||
"unauth_token": "The certificate has expired, please log in again",
|
"unauth_token": "The certificate has expired, please log in again",
|
||||||
|
"undo_tip": "Undo ctrl z",
|
||||||
|
"undo_tip_mac": "Undo ⌘ z ",
|
||||||
"unit.character": "Character",
|
"unit.character": "Character",
|
||||||
"unit.minute": "Minute",
|
"unit.minute": "Minute",
|
||||||
"unit.seconds": "Second",
|
"unit.seconds": "Second",
|
||||||
|
"unknow_source": "Unknown Source",
|
||||||
"unusable_variable": "No Usable Variables",
|
"unusable_variable": "No Usable Variables",
|
||||||
|
"update_failed": "Update Failed",
|
||||||
|
"update_success": "Updated Successfully",
|
||||||
|
"upload_file": "Upload File",
|
||||||
"upload_file_error": "File Upload Failed",
|
"upload_file_error": "File Upload Failed",
|
||||||
|
"use_helper": "Use Helper",
|
||||||
"user.Account": "Account",
|
"user.Account": "Account",
|
||||||
"user.Amount of earnings": "Earnings (¥)",
|
"user.Amount of earnings": "Earnings (¥)",
|
||||||
"user.Amount of inviter": "Total Number of Invites",
|
"user.Amount of inviter": "Total Number of Invites",
|
||||||
@ -1235,11 +1231,13 @@
|
|||||||
"user.Laf Account Setting": "Laf Account Configuration",
|
"user.Laf Account Setting": "Laf Account Configuration",
|
||||||
"user.Language": "Language",
|
"user.Language": "Language",
|
||||||
"user.Member Name": "Nickname",
|
"user.Member Name": "Nickname",
|
||||||
|
"user.No_right_to_reset_password": "You do not have the right to reset the password",
|
||||||
"user.Notification Receive": "Notification Receive",
|
"user.Notification Receive": "Notification Receive",
|
||||||
"user.Notification Receive Bind": "Please bind the notification receive method first",
|
"user.Notification Receive Bind": "Please bind the notification receive method first",
|
||||||
"user.Old password is error": "Old Password is Incorrect",
|
"user.Old password is error": "Old Password is Incorrect",
|
||||||
"user.OpenAI Account Setting": "OpenAI Account Configuration",
|
"user.OpenAI Account Setting": "OpenAI Account Configuration",
|
||||||
"user.Password": "Password",
|
"user.Password": "Password",
|
||||||
|
"user.Password has no change": "New password is the same as the old password",
|
||||||
"user.Pay": "Recharge",
|
"user.Pay": "Recharge",
|
||||||
"user.Promotion": "Promotion",
|
"user.Promotion": "Promotion",
|
||||||
"user.Promotion Rate": "Cashback Rate",
|
"user.Promotion Rate": "Cashback Rate",
|
||||||
@ -1254,12 +1252,16 @@
|
|||||||
"user.Update password successful": "Password Updated Successfully",
|
"user.Update password successful": "Password Updated Successfully",
|
||||||
"user.apikey.key": "API Key",
|
"user.apikey.key": "API Key",
|
||||||
"user.confirm_password": "Confirm Password",
|
"user.confirm_password": "Confirm Password",
|
||||||
|
"user.init_password": "Please initialize password",
|
||||||
"user.new_password": "New Password",
|
"user.new_password": "New Password",
|
||||||
"user.no_invite_records": "No Invite Records",
|
"user.no_invite_records": "No Invite Records",
|
||||||
"user.no_notice": "No Notices",
|
"user.no_notice": "No Notices",
|
||||||
"user.no_usage_records": "No Usage Records",
|
"user.no_usage_records": "No Usage Records",
|
||||||
"user.old_password": "Old Password",
|
"user.old_password": "Old Password",
|
||||||
"user.password_message": "Password must be at least 4 characters and at most 60 characters",
|
"user.password_message": "Password must be at least 4 characters and at most 60 characters",
|
||||||
|
"user.password_tip": "Password must be at least 6 characters long and contain at least two combinations: numbers, letters, or special characters",
|
||||||
|
"user.reset_password": "Reset Password",
|
||||||
|
"user.reset_password_tip": "The initial password is not set/the password has not been modified for a long time, please reset the password",
|
||||||
"user.team.Balance": "Team Balance",
|
"user.team.Balance": "Team Balance",
|
||||||
"user.team.Check Team": "Switch",
|
"user.team.Check Team": "Switch",
|
||||||
"user.team.Confirm Invite": "Confirm Invite",
|
"user.team.Confirm Invite": "Confirm Invite",
|
||||||
@ -1299,5 +1301,9 @@
|
|||||||
"xx_search_result": "{{key}} Search Results",
|
"xx_search_result": "{{key}} Search Results",
|
||||||
"yes": "Yes",
|
"yes": "Yes",
|
||||||
"yesterday": "yesterday",
|
"yesterday": "yesterday",
|
||||||
"yesterday_detail_time": "Yesterday {{time}}"
|
"yesterday_detail_time": "Yesterday {{time}}",
|
||||||
|
"zoomin_tip": "Zoom Out ctrl -",
|
||||||
|
"zoomin_tip_mac": "Zoom Out ⌘ -",
|
||||||
|
"zoomout_tip": "Zoom In ctrl +",
|
||||||
|
"zoomout_tip_mac": "Zoom In ⌘ +"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
"login.success": "Login Successful",
|
"login.success": "Login Successful",
|
||||||
"manage_team": "Manage team",
|
"manage_team": "Manage team",
|
||||||
"name": "Name",
|
"name": "Name",
|
||||||
|
"new_password": "New Password",
|
||||||
"notification.remind_owner_bind": "Please remind the creator to bind a notification account",
|
"notification.remind_owner_bind": "Please remind the creator to bind a notification account",
|
||||||
"operations": "Actions",
|
"operations": "Actions",
|
||||||
"owner": "owner",
|
"owner": "owner",
|
||||||
|
|||||||
@ -65,6 +65,7 @@
|
|||||||
"type": "类型",
|
"type": "类型",
|
||||||
"unlimited": "无限制",
|
"unlimited": "无限制",
|
||||||
"update_password": "修改密码",
|
"update_password": "修改密码",
|
||||||
|
"reset_password": "重置密码",
|
||||||
"update_success_tip": "更新数据成功",
|
"update_success_tip": "更新数据成功",
|
||||||
"upgrade_package": "升级套餐",
|
"upgrade_package": "升级套餐",
|
||||||
"usage_balance": "使用余额: 使用余额",
|
"usage_balance": "使用余额: 使用余额",
|
||||||
|
|||||||
@ -1,7 +1,28 @@
|
|||||||
{
|
{
|
||||||
|
"Action": "操作",
|
||||||
|
"Add": "添加",
|
||||||
|
"Add Success": "添加成功",
|
||||||
|
"Add_new_input": "新增输入",
|
||||||
|
"All": "全部",
|
||||||
"App": "应用",
|
"App": "应用",
|
||||||
|
"Cancel": "取消",
|
||||||
|
"Choose": "选择",
|
||||||
"Click_to_expand": "点击查看详情",
|
"Click_to_expand": "点击查看详情",
|
||||||
|
"Close": "关闭",
|
||||||
|
"Code": "源码",
|
||||||
|
"Config": "配置",
|
||||||
|
"Confirm": "确认",
|
||||||
|
"Continue_Adding": "继续添加",
|
||||||
|
"Copy": "复制",
|
||||||
|
"Creating": "创建中",
|
||||||
|
"Delete": "删除",
|
||||||
|
"Detail": "详情",
|
||||||
|
"Documents": "文档",
|
||||||
|
"Done": "完成",
|
||||||
"Download": "下载",
|
"Download": "下载",
|
||||||
|
"Edit": "编辑",
|
||||||
|
"Error": "错误",
|
||||||
|
"Exit": "退出",
|
||||||
"Export": "导出",
|
"Export": "导出",
|
||||||
"FAQ.ai_point_a": "每次调用AI模型时,都会消耗一定的AI积分。具体的计算标准可参考上方的“AI 积分计算标准”。系统会优先采用模型厂商返回的实际 usage,若为空,则采用GPT3.5的计算方式进行估算,1Token≈0.7中文字符≈0.9英文单词,连续出现的字符可能被认为是1个Tokens。",
|
"FAQ.ai_point_a": "每次调用AI模型时,都会消耗一定的AI积分。具体的计算标准可参考上方的“AI 积分计算标准”。系统会优先采用模型厂商返回的实际 usage,若为空,则采用GPT3.5的计算方式进行估算,1Token≈0.7中文字符≈0.9英文单词,连续出现的字符可能被认为是1个Tokens。",
|
||||||
"FAQ.ai_point_expire_a": "会过期。当前套餐过期后,AI积分将会清空,并更新为新套餐的AI积分。年度套餐的AI积分时长为1年,而不是每个月。",
|
"FAQ.ai_point_expire_a": "会过期。当前套餐过期后,AI积分将会清空,并更新为新套餐的AI积分。年度套餐的AI积分时长为1年,而不是每个月。",
|
||||||
@ -19,34 +40,76 @@
|
|||||||
"FAQ.package_overlay_q": "额外资源包可以叠加么?",
|
"FAQ.package_overlay_q": "额外资源包可以叠加么?",
|
||||||
"FAQ.switch_package_a": "套餐使用规则为优先使用更高级的套餐,因此,购买的新套餐若比当前套餐更高级,则新套餐立即生效:否则将继续使用当前套餐。",
|
"FAQ.switch_package_a": "套餐使用规则为优先使用更高级的套餐,因此,购买的新套餐若比当前套餐更高级,则新套餐立即生效:否则将继续使用当前套餐。",
|
||||||
"FAQ.switch_package_q": "是否切换订阅套餐?",
|
"FAQ.switch_package_q": "是否切换订阅套餐?",
|
||||||
|
"File": "文件",
|
||||||
|
"Finish": "完成",
|
||||||
"Folder": "文件夹",
|
"Folder": "文件夹",
|
||||||
|
"FullScreen": "全屏",
|
||||||
|
"FullScreenLight": "全屏预览",
|
||||||
|
"Import": "导入",
|
||||||
|
"Input": "输入",
|
||||||
"Instructions": "使用说明",
|
"Instructions": "使用说明",
|
||||||
|
"Intro": "介绍",
|
||||||
|
"Loading": "加载中...",
|
||||||
"Login": "登录",
|
"Login": "登录",
|
||||||
|
"More": "更多",
|
||||||
|
"Move": "移动",
|
||||||
|
"Name": "名称",
|
||||||
"None": "无",
|
"None": "无",
|
||||||
|
"OK": "好的",
|
||||||
|
"Open": "打开",
|
||||||
"Operation": "操作",
|
"Operation": "操作",
|
||||||
|
"Other": "其他",
|
||||||
|
"Output": "输出",
|
||||||
|
"Params": "参数",
|
||||||
|
"Parse": "解析",
|
||||||
|
"Permission": "权限",
|
||||||
|
"Permission_tip": "个人权限大于群组权限",
|
||||||
|
"Please Input Name": "请输入名称",
|
||||||
|
"Preview": "预览",
|
||||||
|
"Remove": "移除",
|
||||||
|
"Rename": "重命名",
|
||||||
"Required_input": "必填",
|
"Required_input": "必填",
|
||||||
|
"Reset": "恢复默认",
|
||||||
|
"Restart": "重新开始",
|
||||||
"Resume": "恢复",
|
"Resume": "恢复",
|
||||||
|
"Role": "权限",
|
||||||
|
"Run": "运行",
|
||||||
"Running": "运行中",
|
"Running": "运行中",
|
||||||
|
"Save": "保存",
|
||||||
|
"Save_and_exit": "保存并退出",
|
||||||
|
"Search": "搜索",
|
||||||
"Select_all": "全选",
|
"Select_all": "全选",
|
||||||
|
"Setting": "设置",
|
||||||
|
"Status": "状态",
|
||||||
"Submit": "提交",
|
"Submit": "提交",
|
||||||
|
"Success": "成功",
|
||||||
|
"Team": "团队",
|
||||||
|
"UnKnow": "未知",
|
||||||
|
"Unlimited": "无限制",
|
||||||
|
"Update": "更新",
|
||||||
|
"Username": "用户名",
|
||||||
|
"Waiting": "等待中",
|
||||||
|
"Warning": "警告",
|
||||||
|
"Website": "网站",
|
||||||
|
"action_confirm": "操作确认",
|
||||||
"add_new": "新增",
|
"add_new": "新增",
|
||||||
"add_new_param": "新增参数",
|
"add_new_param": "新增参数",
|
||||||
"all_quotes": "全部引用",
|
"all_quotes": "全部引用",
|
||||||
"templateTags.Image_generation": "图片生成",
|
"all_result": "完整结果",
|
||||||
"templateTags.Office_services": "办公服务",
|
|
||||||
"templateTags.Roleplay": "角色扮演",
|
|
||||||
"templateTags.Web_search": "联网搜索",
|
|
||||||
"templateTags.Writing": "文本创作",
|
|
||||||
"back": "返回",
|
"back": "返回",
|
||||||
|
"base_config": "基础配置",
|
||||||
"bill_already_processed": "订单已处理",
|
"bill_already_processed": "订单已处理",
|
||||||
"bill_expired": "订单已过期",
|
"bill_expired": "订单已过期",
|
||||||
"bill_not_pay_processed": "非在线订单",
|
"bill_not_pay_processed": "非在线订单",
|
||||||
"button.extra_dataset_size_tip": "您正在购买【额外知识库容量】",
|
"button.extra_dataset_size_tip": "您正在购买【额外知识库容量】",
|
||||||
"button.extra_points_tip": "您正在购买【额外 AI 积分】",
|
"button.extra_points_tip": "您正在购买【额外 AI 积分】",
|
||||||
"can_copy_content_tip": "无法使用浏览器自动复制,请手动复制下面内容",
|
"can_copy_content_tip": "无法使用浏览器自动复制,请手动复制下面内容",
|
||||||
|
"choosable": "可选",
|
||||||
"chose_condition": "选择条件",
|
"chose_condition": "选择条件",
|
||||||
"chosen": "已选",
|
"chosen": "已选",
|
||||||
"classification": "分类",
|
"classification": "分类",
|
||||||
|
"click_drag_tip": "点我可拖动",
|
||||||
|
"click_select_avatar": "点击选择头像",
|
||||||
"click_to_copy": "点击复制",
|
"click_to_copy": "点击复制",
|
||||||
"click_to_resume": "点击恢复",
|
"click_to_resume": "点击恢复",
|
||||||
"code_editor": "代码编辑",
|
"code_editor": "代码编辑",
|
||||||
@ -114,164 +177,20 @@
|
|||||||
"code_error.user_error.balance_not_enough": "账号余额不足~",
|
"code_error.user_error.balance_not_enough": "账号余额不足~",
|
||||||
"code_error.user_error.bin_visitor_guest": "您当前身份为游客,无权操作",
|
"code_error.user_error.bin_visitor_guest": "您当前身份为游客,无权操作",
|
||||||
"code_error.user_error.un_auth_user": "找不到该用户",
|
"code_error.user_error.un_auth_user": "找不到该用户",
|
||||||
"commercial_function_tip": "请升级商业版后使用该功能:https://doc.fastgpt.cn/docs/commercial/intro/",
|
|
||||||
"Action": "操作",
|
|
||||||
"Add": "添加",
|
|
||||||
"Add Success": "添加成功",
|
|
||||||
"Add_new_input": "新增输入",
|
|
||||||
"All": "全部",
|
|
||||||
"Cancel": "取消",
|
|
||||||
"Choose": "选择",
|
|
||||||
"Close": "关闭",
|
|
||||||
"Code": "源码",
|
|
||||||
"Config": "配置",
|
|
||||||
"Confirm": "确认",
|
|
||||||
"comfirn_create": "确认创建",
|
|
||||||
"comfirm_import": "确认导入",
|
"comfirm_import": "确认导入",
|
||||||
"confirm_move": "移动到这",
|
|
||||||
"confirm_update": "确认更新",
|
|
||||||
"comfirm_leave_page": "确认离开该页面?",
|
"comfirm_leave_page": "确认离开该页面?",
|
||||||
"Continue_Adding": "继续添加",
|
"comfirn_create": "确认创建",
|
||||||
"Copy": "复制",
|
"commercial_function_tip": "请升级商业版后使用该功能:https://doc.fastgpt.cn/docs/commercial/intro/",
|
||||||
"copy_successful": "复制成功",
|
|
||||||
"create_failed": "创建异常",
|
|
||||||
"create_success": "创建成功",
|
|
||||||
"create_time": "创建时间",
|
|
||||||
"Creating": "创建中",
|
|
||||||
"custom_title": "自定义标题",
|
|
||||||
"Delete": "删除",
|
|
||||||
"delete_failed": "删除失败",
|
|
||||||
"delete_success": "删除成功",
|
|
||||||
"delete_warning": "删除警告",
|
|
||||||
"delete_folder": "删除文件夹",
|
|
||||||
"Detail": "详情",
|
|
||||||
"Documents": "文档",
|
|
||||||
"Done": "完成",
|
|
||||||
"Edit": "编辑",
|
|
||||||
"Error": "错误",
|
|
||||||
"Exit": "退出",
|
|
||||||
"exit_directly": "直接退出",
|
|
||||||
"expired_time": "过期时间",
|
|
||||||
"File": "文件",
|
|
||||||
"Finish": "完成",
|
|
||||||
"FullScreen": "全屏",
|
|
||||||
"FullScreenLight": "全屏预览",
|
|
||||||
"Import": "导入",
|
|
||||||
"import_failed": "导入失败",
|
|
||||||
"import_success": "导入成功",
|
|
||||||
"Input": "输入",
|
|
||||||
"folder_description": "文件夹描述",
|
|
||||||
"input_name": "取个名字",
|
|
||||||
"Intro": "介绍",
|
|
||||||
"last_step": "上一步",
|
|
||||||
"last_use_time": "最后使用时间",
|
|
||||||
"load_failed": "加载失败",
|
|
||||||
"Loading": "加载中...",
|
|
||||||
"More": "更多",
|
|
||||||
"Move": "移动",
|
|
||||||
"no_select_data": "没有可选值",
|
|
||||||
"Name": "名称",
|
|
||||||
"next_step": "下一步",
|
|
||||||
"no_more_data": "没有更多了~",
|
|
||||||
"not_open": "未开启",
|
|
||||||
"OK": "好的",
|
|
||||||
"Open": "打开",
|
|
||||||
"Other": "其他",
|
|
||||||
"Output": "输出",
|
|
||||||
"Params": "参数",
|
|
||||||
"Parse": "解析",
|
|
||||||
"psw_inconsistency": "两次密码不一致",
|
|
||||||
"Permission": "权限",
|
|
||||||
"Permission_tip": "个人权限大于群组权限",
|
|
||||||
"Please Input Name": "请输入名称",
|
|
||||||
"Preview": "预览",
|
|
||||||
"read_doc": "查看文档",
|
|
||||||
"Remove": "移除",
|
|
||||||
"Rename": "重命名",
|
|
||||||
"request_error": "请求异常",
|
|
||||||
"Reset": "恢复默认",
|
|
||||||
"Restart": "重新开始",
|
|
||||||
"Role": "权限",
|
|
||||||
"root_folder": "根目录",
|
|
||||||
"Run": "运行",
|
|
||||||
"Save": "保存",
|
|
||||||
"save_failed": "保存异常",
|
|
||||||
"save_success": "保存成功",
|
|
||||||
"Save_and_exit": "保存并退出",
|
|
||||||
"Search": "搜索",
|
|
||||||
"select_file_failed": "选择文件异常",
|
|
||||||
"select_template": "选择模板",
|
|
||||||
"set_avatar": "点击设置头像",
|
|
||||||
"Setting": "设置",
|
|
||||||
"Status": "状态",
|
|
||||||
"submit_failed": "提交失败",
|
|
||||||
"Success": "成功",
|
|
||||||
"sync_success": "同步成功",
|
|
||||||
"Team": "团队",
|
|
||||||
"un_used": "未使用",
|
|
||||||
"UnKnow": "未知",
|
|
||||||
"unknow_source": "未知来源",
|
|
||||||
"Unlimited": "无限制",
|
|
||||||
"Update": "更新",
|
|
||||||
"update_failed": "更新异常",
|
|
||||||
"update_success": "更新成功",
|
|
||||||
"Username": "用户名",
|
|
||||||
"Waiting": "等待中",
|
|
||||||
"Warning": "警告",
|
|
||||||
"Website": "网站",
|
|
||||||
"all_result": "完整结果",
|
|
||||||
"click_select_avatar": "点击选择头像",
|
|
||||||
"base_config": "基础配置",
|
|
||||||
"choosable": "可选",
|
|
||||||
"action_confirm": "操作确认",
|
|
||||||
"copy_to_clipboard": "复制到剪贴板",
|
|
||||||
"read_course": "查看教程",
|
|
||||||
"error.unKnow": "出现了点意外~",
|
|
||||||
"export_to_json": "导出为 JSON",
|
|
||||||
"failed": "失败",
|
|
||||||
"click_drag_tip": "点我可拖动",
|
|
||||||
"move_success": "移动成功",
|
|
||||||
"move_to": "移动到",
|
|
||||||
"no_child_folder": "没有子目录了,就放这里吧",
|
|
||||||
"open_folder": "打开文件夹",
|
|
||||||
"folder.empty": "这个目录已经没东西可选了~",
|
|
||||||
"folder.open_dataset": "打开知识库",
|
|
||||||
"have_done": "已完成",
|
|
||||||
"input.Repeat Value": "有重复的值",
|
|
||||||
"is_requesting": "请求中……",
|
|
||||||
"json_parse_error": "JSON 可能有误,请仔细检查",
|
|
||||||
"json_config": "JSON 配置",
|
|
||||||
"link.UnValid": "无效的链接",
|
|
||||||
"month": "月",
|
|
||||||
"name_is_empty": "名称不能为空",
|
|
||||||
"no_intro": "暂无介绍",
|
|
||||||
"not_support": "不支持",
|
|
||||||
"page_center": "页面居中",
|
|
||||||
"redo_tip": "恢复 ctrl shift z",
|
|
||||||
"redo_tip_mac": "恢复 ⌘ shift z",
|
|
||||||
"request_end": "已加载全部",
|
|
||||||
"request_more": "点击加载更多",
|
|
||||||
"speech_error_tip": "语音转文字失败",
|
|
||||||
"speech_not_support": "您的浏览器不支持语音输入",
|
|
||||||
"submit_success": "提交成功",
|
|
||||||
"submitted": "已提交",
|
|
||||||
"support": "支持",
|
|
||||||
"system_help_chatbot": "机器人助手",
|
|
||||||
"use_helper": "使用帮助",
|
|
||||||
"ui.textarea.Magnifying": "放大",
|
|
||||||
"undo_tip": "撤销 ctrl z",
|
|
||||||
"undo_tip_mac": "撤销 ⌘ z ",
|
|
||||||
"upload_file": "上传文件",
|
|
||||||
"zoomin_tip": "缩小 ctrl -",
|
|
||||||
"zoomin_tip_mac": "缩小 ⌘ -",
|
|
||||||
"zoomout_tip": "放大 ctrl +",
|
|
||||||
"zoomout_tip_mac": "放大 ⌘ +",
|
|
||||||
"comon.Continue_Adding": "继续添加",
|
"comon.Continue_Adding": "继续添加",
|
||||||
"compliance.chat": "内容由第三方 AI 生成,无法确保真实准确,仅供参考",
|
"compliance.chat": "内容由第三方 AI 生成,无法确保真实准确,仅供参考",
|
||||||
"compliance.dataset": "请确保您的内容严格遵守相关法律法规,避免包含任何违法或侵权的内容。请谨慎上传可能涉及敏感信息的资料。",
|
"compliance.dataset": "请确保您的内容严格遵守相关法律法规,避免包含任何违法或侵权的内容。请谨慎上传可能涉及敏感信息的资料。",
|
||||||
"confirm_choice": "确认选择",
|
"confirm_choice": "确认选择",
|
||||||
|
"confirm_move": "移动到这",
|
||||||
|
"confirm_update": "确认更新",
|
||||||
"contact_way": "通知接收",
|
"contact_way": "通知接收",
|
||||||
"contribute_app_template": "贡献模板",
|
"contribute_app_template": "贡献模板",
|
||||||
|
"copy_successful": "复制成功",
|
||||||
|
"copy_to_clipboard": "复制到剪贴板",
|
||||||
"core.Chat": "对话",
|
"core.Chat": "对话",
|
||||||
"core.ai.Max context": "最大上下文",
|
"core.ai.Max context": "最大上下文",
|
||||||
"core.ai.Model": "AI 模型",
|
"core.ai.Model": "AI 模型",
|
||||||
@ -491,7 +410,6 @@
|
|||||||
"core.chat.response.user_select_result": "用户选择结果",
|
"core.chat.response.user_select_result": "用户选择结果",
|
||||||
"core.chat.retry": "重新生成",
|
"core.chat.retry": "重新生成",
|
||||||
"core.chat.tts.Stop Speech": "停止",
|
"core.chat.tts.Stop Speech": "停止",
|
||||||
"core.tip.leave page": "内容已修改,确认离开页面吗?",
|
|
||||||
"core.dataset.Choose Dataset": "关联知识库",
|
"core.dataset.Choose Dataset": "关联知识库",
|
||||||
"core.dataset.Collection": "数据集",
|
"core.dataset.Collection": "数据集",
|
||||||
"core.dataset.Create dataset": "创建一个{{name}}",
|
"core.dataset.Create dataset": "创建一个{{name}}",
|
||||||
@ -567,7 +485,6 @@
|
|||||||
"core.dataset.import.Custom text desc": "手动输入一段文本作为数据集",
|
"core.dataset.import.Custom text desc": "手动输入一段文本作为数据集",
|
||||||
"core.dataset.import.Data process params": "数据处理参数",
|
"core.dataset.import.Data process params": "数据处理参数",
|
||||||
"core.dataset.import.Down load csv template": "点击下载 CSV 模板",
|
"core.dataset.import.Down load csv template": "点击下载 CSV 模板",
|
||||||
"core.dataset.import.import_success": "导入成功,请等待训练",
|
|
||||||
"core.dataset.import.Link name": "网络链接",
|
"core.dataset.import.Link name": "网络链接",
|
||||||
"core.dataset.import.Link name placeholder": "仅支持静态链接,如果上传后数据为空,可能该链接无法被读取\n每行一个,每次最多 10 个链接",
|
"core.dataset.import.Link name placeholder": "仅支持静态链接,如果上传后数据为空,可能该链接无法被读取\n每行一个,每次最多 10 个链接",
|
||||||
"core.dataset.import.Local file": "本地文件",
|
"core.dataset.import.Local file": "本地文件",
|
||||||
@ -588,6 +505,7 @@
|
|||||||
"core.dataset.import.Upload status": "状态",
|
"core.dataset.import.Upload status": "状态",
|
||||||
"core.dataset.import.Web link": "网页链接",
|
"core.dataset.import.Web link": "网页链接",
|
||||||
"core.dataset.import.Web link desc": "读取静态网页内容作为数据集",
|
"core.dataset.import.Web link desc": "读取静态网页内容作为数据集",
|
||||||
|
"core.dataset.import.import_success": "导入成功,请等待训练",
|
||||||
"core.dataset.link": "链接",
|
"core.dataset.link": "链接",
|
||||||
"core.dataset.search.Dataset Search Params": "知识库搜索配置",
|
"core.dataset.search.Dataset Search Params": "知识库搜索配置",
|
||||||
"core.dataset.search.Empty result response": "空搜索回复",
|
"core.dataset.search.Empty result response": "空搜索回复",
|
||||||
@ -768,6 +686,7 @@
|
|||||||
"core.plugin.Get Plugin Module Detail Failed": "加载插件异常",
|
"core.plugin.Get Plugin Module Detail Failed": "加载插件异常",
|
||||||
"core.plugin.Http plugin intro placeholder": "仅做展示,无实际效果",
|
"core.plugin.Http plugin intro placeholder": "仅做展示,无实际效果",
|
||||||
"core.plugin.cost": "积分消耗:",
|
"core.plugin.cost": "积分消耗:",
|
||||||
|
"core.tip.leave page": "内容已修改,确认离开页面吗?",
|
||||||
"core.view_chat_detail": "查看对话详情",
|
"core.view_chat_detail": "查看对话详情",
|
||||||
"core.workflow.Can not delete node": "该节点不允许删除",
|
"core.workflow.Can not delete node": "该节点不允许删除",
|
||||||
"core.workflow.Change input type tip": "修改输入类型会清空已填写的值,请确认!",
|
"core.workflow.Change input type tip": "修改输入类型会清空已填写的值,请确认!",
|
||||||
@ -821,7 +740,11 @@
|
|||||||
"core.workflow.value": "值",
|
"core.workflow.value": "值",
|
||||||
"core.workflow.variable": "变量",
|
"core.workflow.variable": "变量",
|
||||||
"create": "去创建",
|
"create": "去创建",
|
||||||
|
"create_failed": "创建异常",
|
||||||
|
"create_success": "创建成功",
|
||||||
|
"create_time": "创建时间",
|
||||||
"cron_job_run_app": "定时任务",
|
"cron_job_run_app": "定时任务",
|
||||||
|
"custom_title": "自定义标题",
|
||||||
"data_index_custom": "自定义索引",
|
"data_index_custom": "自定义索引",
|
||||||
"data_index_default": "默认索引",
|
"data_index_default": "默认索引",
|
||||||
"data_index_image": "图片索引",
|
"data_index_image": "图片索引",
|
||||||
@ -871,6 +794,10 @@
|
|||||||
"dataset_text_model_tip": "用于知识库预处理阶段的文本处理,例如自动补充索引、问答对提取。",
|
"dataset_text_model_tip": "用于知识库预处理阶段的文本处理,例如自动补充索引、问答对提取。",
|
||||||
"deep_rag_search": "深度搜索",
|
"deep_rag_search": "深度搜索",
|
||||||
"delete_api": "确认删除该API密钥?删除后该密钥立即失效,对应的对话日志不会删除,请确认!",
|
"delete_api": "确认删除该API密钥?删除后该密钥立即失效,对应的对话日志不会删除,请确认!",
|
||||||
|
"delete_failed": "删除失败",
|
||||||
|
"delete_folder": "删除文件夹",
|
||||||
|
"delete_success": "删除成功",
|
||||||
|
"delete_warning": "删除警告",
|
||||||
"embedding_model_not_config": "检测到没有可用的索引模型",
|
"embedding_model_not_config": "检测到没有可用的索引模型",
|
||||||
"error.Create failed": "创建失败",
|
"error.Create failed": "创建失败",
|
||||||
"error.code_error": "验证码错误",
|
"error.code_error": "验证码错误",
|
||||||
@ -880,6 +807,7 @@
|
|||||||
"error.missingParams": "参数缺失",
|
"error.missingParams": "参数缺失",
|
||||||
"error.send_auth_code_too_frequently": "请勿频繁获取验证码",
|
"error.send_auth_code_too_frequently": "请勿频繁获取验证码",
|
||||||
"error.too_many_request": "请求太频繁了,请稍后重试",
|
"error.too_many_request": "请求太频繁了,请稍后重试",
|
||||||
|
"error.unKnow": "出现了点意外~",
|
||||||
"error.upload_file_error_filename": "{{name}} 上传失败",
|
"error.upload_file_error_filename": "{{name}} 上传失败",
|
||||||
"error.upload_image_error": "上传文件失败",
|
"error.upload_image_error": "上传文件失败",
|
||||||
"error.username_empty": "账号不能为空",
|
"error.username_empty": "账号不能为空",
|
||||||
@ -889,13 +817,23 @@
|
|||||||
"error_llm_not_config": "未配置文件理解模型",
|
"error_llm_not_config": "未配置文件理解模型",
|
||||||
"error_un_permission": "无权操作",
|
"error_un_permission": "无权操作",
|
||||||
"error_vlm_not_config": "未配置图片理解模型",
|
"error_vlm_not_config": "未配置图片理解模型",
|
||||||
|
"exit_directly": "直接退出",
|
||||||
|
"expired_time": "过期时间",
|
||||||
|
"export_to_json": "导出为 JSON",
|
||||||
"extraction_results": "提取结果",
|
"extraction_results": "提取结果",
|
||||||
|
"failed": "失败",
|
||||||
"field_name": "字段名",
|
"field_name": "字段名",
|
||||||
|
"folder.empty": "这个目录已经没东西可选了~",
|
||||||
|
"folder.open_dataset": "打开知识库",
|
||||||
|
"folder_description": "文件夹描述",
|
||||||
"free": "免费",
|
"free": "免费",
|
||||||
"get_QR_failed": "获取二维码失败",
|
"get_QR_failed": "获取二维码失败",
|
||||||
"get_app_failed": "获取应用失败",
|
"get_app_failed": "获取应用失败",
|
||||||
"get_laf_failed": "获取Laf函数列表失败",
|
"get_laf_failed": "获取Laf函数列表失败",
|
||||||
"has_verification": "已验证,点击取消绑定",
|
"has_verification": "已验证,点击取消绑定",
|
||||||
|
"have_done": "已完成",
|
||||||
|
"import_failed": "导入失败",
|
||||||
|
"import_success": "导入成功",
|
||||||
"info.buy_extra": "购买额外套餐",
|
"info.buy_extra": "购买额外套餐",
|
||||||
"info.csv_download": "点击下载批量测试模板",
|
"info.csv_download": "点击下载批量测试模板",
|
||||||
"info.csv_message": "读取 CSV 文件第一列进行批量测试,单次最多支持 100 组数据。",
|
"info.csv_message": "读取 CSV 文件第一列进行批量测试,单次最多支持 100 组数据。",
|
||||||
@ -907,14 +845,23 @@
|
|||||||
"info.open_api_notice": "可以填写 OpenAI/OneAPI的相关密钥。如果你填写了该内容,在线上平台使用【AI对话】、【问题分类】和【内容提取】将会走你填写的Key,不会计费。请注意你的Key 是否有访问对应模型的权限。GPT模型可以选择 FastAI。",
|
"info.open_api_notice": "可以填写 OpenAI/OneAPI的相关密钥。如果你填写了该内容,在线上平台使用【AI对话】、【问题分类】和【内容提取】将会走你填写的Key,不会计费。请注意你的Key 是否有访问对应模型的权限。GPT模型可以选择 FastAI。",
|
||||||
"info.open_api_placeholder": "请求地址,默认为 openai 官方。可填中转地址,未自动补全 \"v1\"",
|
"info.open_api_placeholder": "请求地址,默认为 openai 官方。可填中转地址,未自动补全 \"v1\"",
|
||||||
"info.resource": "资源用量",
|
"info.resource": "资源用量",
|
||||||
|
"input.Repeat Value": "有重复的值",
|
||||||
|
"input_name": "取个名字",
|
||||||
"invalid_variable": "无效变量",
|
"invalid_variable": "无效变量",
|
||||||
"is_open": "是否开启",
|
"is_open": "是否开启",
|
||||||
|
"is_requesting": "请求中……",
|
||||||
"is_using": "正在使用",
|
"is_using": "正在使用",
|
||||||
"item_description": "字段描述",
|
"item_description": "字段描述",
|
||||||
"item_name": "字段名",
|
"item_name": "字段名",
|
||||||
|
"json_config": "JSON 配置",
|
||||||
|
"json_parse_error": "JSON 可能有误,请仔细检查",
|
||||||
"just_now": "刚刚",
|
"just_now": "刚刚",
|
||||||
"key_repetition": "key 重复",
|
"key_repetition": "key 重复",
|
||||||
|
"last_step": "上一步",
|
||||||
|
"last_use_time": "最后使用时间",
|
||||||
|
"link.UnValid": "无效的链接",
|
||||||
"llm_model_not_config": "检测到没有可用的语言模型",
|
"llm_model_not_config": "检测到没有可用的语言模型",
|
||||||
|
"load_failed": "加载失败",
|
||||||
"max_quote_tokens": "引用上限",
|
"max_quote_tokens": "引用上限",
|
||||||
"max_quote_tokens_tips": "单次搜索最大的 token 数量,中文约 1 字=1.7 tokens,英文约 1 字=1 token",
|
"max_quote_tokens_tips": "单次搜索最大的 token 数量,中文约 1 字=1.7 tokens,英文约 1 字=1 token",
|
||||||
"mcp_server": "MCP 服务",
|
"mcp_server": "MCP 服务",
|
||||||
@ -947,7 +894,11 @@
|
|||||||
"model_sparkdesk": "讯飞星火",
|
"model_sparkdesk": "讯飞星火",
|
||||||
"model_stepfun": "阶跃星辰",
|
"model_stepfun": "阶跃星辰",
|
||||||
"model_yi": "零一万物",
|
"model_yi": "零一万物",
|
||||||
|
"month": "月",
|
||||||
"move.confirm": "确认移动",
|
"move.confirm": "确认移动",
|
||||||
|
"move_success": "移动成功",
|
||||||
|
"move_to": "移动到",
|
||||||
|
"name_is_empty": "名称不能为空",
|
||||||
"navbar.Account": "账号",
|
"navbar.Account": "账号",
|
||||||
"navbar.Chat": "聊天",
|
"navbar.Chat": "聊天",
|
||||||
"navbar.Datasets": "知识库",
|
"navbar.Datasets": "知识库",
|
||||||
@ -955,13 +906,22 @@
|
|||||||
"navbar.Toolkit": "工具箱",
|
"navbar.Toolkit": "工具箱",
|
||||||
"navbar.Tools": "工具",
|
"navbar.Tools": "工具",
|
||||||
"new_create": "新建",
|
"new_create": "新建",
|
||||||
|
"next_step": "下一步",
|
||||||
"no": "否",
|
"no": "否",
|
||||||
|
"no_child_folder": "没有子目录了,就放这里吧",
|
||||||
|
"no_intro": "暂无介绍",
|
||||||
"no_laf_env": "系统未配置Laf环境",
|
"no_laf_env": "系统未配置Laf环境",
|
||||||
|
"no_more_data": "没有更多了~",
|
||||||
"no_pay_way": "系统无合适的支付渠道",
|
"no_pay_way": "系统无合适的支付渠道",
|
||||||
|
"no_select_data": "没有可选值",
|
||||||
"not_model_config": "未配置相关模型",
|
"not_model_config": "未配置相关模型",
|
||||||
|
"not_open": "未开启",
|
||||||
"not_permission": "当前订阅套餐不支持团队操作日志",
|
"not_permission": "当前订阅套餐不支持团队操作日志",
|
||||||
|
"not_support": "不支持",
|
||||||
"not_yet_introduced": "暂无介绍",
|
"not_yet_introduced": "暂无介绍",
|
||||||
|
"open_folder": "打开文件夹",
|
||||||
"option": "选项",
|
"option": "选项",
|
||||||
|
"page_center": "页面居中",
|
||||||
"pay.amount": "金额",
|
"pay.amount": "金额",
|
||||||
"pay.error_desc": "转换支付途径时出现了问题",
|
"pay.error_desc": "转换支付途径时出现了问题",
|
||||||
"pay.noclose": "支付完成后,请等待系统自动更新",
|
"pay.noclose": "支付完成后,请等待系统自动更新",
|
||||||
@ -1024,14 +984,34 @@
|
|||||||
"plugin.path": "路径",
|
"plugin.path": "路径",
|
||||||
"price_over_wx_limit": "超出支付提供商限额:微信支付仅支持 6000 元以下",
|
"price_over_wx_limit": "超出支付提供商限额:微信支付仅支持 6000 元以下",
|
||||||
"prompt_input_placeholder": "请输入提示词",
|
"prompt_input_placeholder": "请输入提示词",
|
||||||
|
"psw_inconsistency": "两次密码不一致",
|
||||||
"question_feedback": "工单咨询",
|
"question_feedback": "工单咨询",
|
||||||
|
"read_course": "查看教程",
|
||||||
|
"read_doc": "查看文档",
|
||||||
"read_quote": "查看引用",
|
"read_quote": "查看引用",
|
||||||
|
"redo_tip": "恢复 ctrl shift z",
|
||||||
|
"redo_tip_mac": "恢复 ⌘ shift z",
|
||||||
|
"request_end": "已加载全部",
|
||||||
|
"request_error": "请求异常",
|
||||||
|
"request_more": "点击加载更多",
|
||||||
"required": "必须",
|
"required": "必须",
|
||||||
"rerank_weight": "重排权重",
|
"rerank_weight": "重排权重",
|
||||||
"resume_failed": "恢复失败",
|
"resume_failed": "恢复失败",
|
||||||
|
"root_folder": "根目录",
|
||||||
|
"save_failed": "保存异常",
|
||||||
|
"save_success": "保存成功",
|
||||||
"scan_code": "扫码支付",
|
"scan_code": "扫码支付",
|
||||||
|
"select_file_failed": "选择文件异常",
|
||||||
"select_reference_variable": "选择引用变量",
|
"select_reference_variable": "选择引用变量",
|
||||||
|
"select_template": "选择模板",
|
||||||
|
"set_avatar": "点击设置头像",
|
||||||
"share_link": "分享链接",
|
"share_link": "分享链接",
|
||||||
|
"speech_error_tip": "语音转文字失败",
|
||||||
|
"speech_not_support": "您的浏览器不支持语音输入",
|
||||||
|
"submit_failed": "提交失败",
|
||||||
|
"submit_success": "提交成功",
|
||||||
|
"submitted": "已提交",
|
||||||
|
"support": "支持",
|
||||||
"support.account.Individuation": "个性化",
|
"support.account.Individuation": "个性化",
|
||||||
"support.inform.Read": "已读",
|
"support.inform.Read": "已读",
|
||||||
"support.openapi.Api baseurl": "API 根地址",
|
"support.openapi.Api baseurl": "API 根地址",
|
||||||
@ -1209,18 +1189,34 @@
|
|||||||
"support.wallet.usage.Usage Detail": "使用详情",
|
"support.wallet.usage.Usage Detail": "使用详情",
|
||||||
"support.wallet.usage.Whisper": "语音输入",
|
"support.wallet.usage.Whisper": "语音输入",
|
||||||
"sync_link": "同步链接",
|
"sync_link": "同步链接",
|
||||||
|
"sync_success": "同步成功",
|
||||||
"system.Concat us": "联系我们",
|
"system.Concat us": "联系我们",
|
||||||
"system.Help Document": "帮助文档",
|
"system.Help Document": "帮助文档",
|
||||||
|
"system_help_chatbot": "机器人助手",
|
||||||
"tag_list": "标签列表",
|
"tag_list": "标签列表",
|
||||||
"team_tag": "团队标签",
|
"team_tag": "团队标签",
|
||||||
|
"templateTags.Image_generation": "图片生成",
|
||||||
|
"templateTags.Office_services": "办公服务",
|
||||||
|
"templateTags.Roleplay": "角色扮演",
|
||||||
|
"templateTags.Web_search": "联网搜索",
|
||||||
|
"templateTags.Writing": "文本创作",
|
||||||
"template_market": "模板市场",
|
"template_market": "模板市场",
|
||||||
"textarea_variable_picker_tip": "输入\"/\"可选择变量",
|
"textarea_variable_picker_tip": "输入\"/\"可选择变量",
|
||||||
|
"ui.textarea.Magnifying": "放大",
|
||||||
|
"un_used": "未使用",
|
||||||
"unauth_token": "凭证已过期,请重新登录",
|
"unauth_token": "凭证已过期,请重新登录",
|
||||||
|
"undo_tip": "撤销 ctrl z",
|
||||||
|
"undo_tip_mac": "撤销 ⌘ z ",
|
||||||
"unit.character": "字符",
|
"unit.character": "字符",
|
||||||
"unit.minute": "分钟",
|
"unit.minute": "分钟",
|
||||||
"unit.seconds": "秒",
|
"unit.seconds": "秒",
|
||||||
|
"unknow_source": "未知来源",
|
||||||
"unusable_variable": "无可用变量",
|
"unusable_variable": "无可用变量",
|
||||||
|
"update_failed": "更新异常",
|
||||||
|
"update_success": "更新成功",
|
||||||
|
"upload_file": "上传文件",
|
||||||
"upload_file_error": "上传文件失败",
|
"upload_file_error": "上传文件失败",
|
||||||
|
"use_helper": "使用帮助",
|
||||||
"user.Account": "账号",
|
"user.Account": "账号",
|
||||||
"user.Amount of earnings": "收益(¥)",
|
"user.Amount of earnings": "收益(¥)",
|
||||||
"user.Amount of inviter": "累计邀请人数",
|
"user.Amount of inviter": "累计邀请人数",
|
||||||
@ -1234,11 +1230,13 @@
|
|||||||
"user.Laf Account Setting": "laf 账号配置",
|
"user.Laf Account Setting": "laf 账号配置",
|
||||||
"user.Language": "语言",
|
"user.Language": "语言",
|
||||||
"user.Member Name": "昵称",
|
"user.Member Name": "昵称",
|
||||||
|
"user.No_right_to_reset_password": "没有重置密码的权限",
|
||||||
"user.Notification Receive": "通知接收",
|
"user.Notification Receive": "通知接收",
|
||||||
"user.Notification Receive Bind": "请先绑定通知接收途径",
|
"user.Notification Receive Bind": "请先绑定通知接收途径",
|
||||||
"user.Old password is error": "旧密码错误",
|
"user.Old password is error": "旧密码错误",
|
||||||
"user.OpenAI Account Setting": "OpenAI 账号配置",
|
"user.OpenAI Account Setting": "OpenAI 账号配置",
|
||||||
"user.Password": "密码",
|
"user.Password": "密码",
|
||||||
|
"user.Password has no change": "新密码和旧密码重复",
|
||||||
"user.Pay": "充值",
|
"user.Pay": "充值",
|
||||||
"user.Promotion": "促销",
|
"user.Promotion": "促销",
|
||||||
"user.Promotion Rate": "返现比例",
|
"user.Promotion Rate": "返现比例",
|
||||||
@ -1253,12 +1251,16 @@
|
|||||||
"user.Update password successful": "修改密码成功",
|
"user.Update password successful": "修改密码成功",
|
||||||
"user.apikey.key": "API 密钥",
|
"user.apikey.key": "API 密钥",
|
||||||
"user.confirm_password": "确认密码",
|
"user.confirm_password": "确认密码",
|
||||||
|
"user.init_password": "请初始化密码",
|
||||||
"user.new_password": "新密码",
|
"user.new_password": "新密码",
|
||||||
"user.no_invite_records": "暂无邀请记录",
|
"user.no_invite_records": "暂无邀请记录",
|
||||||
"user.no_notice": "暂无通知",
|
"user.no_notice": "暂无通知",
|
||||||
"user.no_usage_records": "暂无使用记录",
|
"user.no_usage_records": "暂无使用记录",
|
||||||
"user.old_password": "旧密码",
|
"user.old_password": "旧密码",
|
||||||
"user.password_message": "密码最少 4 位最多 60 位",
|
"user.password_message": "密码最少 4 位最多 60 位",
|
||||||
|
"user.password_tip": "密码至少 6 位,且至少包含两种组合:数字、字母或特殊字符",
|
||||||
|
"user.reset_password": "重置密码",
|
||||||
|
"user.reset_password_tip": "未设置初始密码/长时间未修改密码,请重置密码",
|
||||||
"user.team.Balance": "团队余额",
|
"user.team.Balance": "团队余额",
|
||||||
"user.team.Check Team": "切换",
|
"user.team.Check Team": "切换",
|
||||||
"user.team.Leave Team": "离开团队",
|
"user.team.Leave Team": "离开团队",
|
||||||
@ -1293,5 +1295,9 @@
|
|||||||
"xx_search_result": "{{key}} 的搜索结果",
|
"xx_search_result": "{{key}} 的搜索结果",
|
||||||
"yes": "是",
|
"yes": "是",
|
||||||
"yesterday": "昨天",
|
"yesterday": "昨天",
|
||||||
"yesterday_detail_time": "昨天 {{time}}"
|
"yesterday_detail_time": "昨天 {{time}}",
|
||||||
|
"zoomin_tip": "缩小 ctrl -",
|
||||||
|
"zoomin_tip_mac": "缩小 ⌘ -",
|
||||||
|
"zoomout_tip": "放大 ctrl +",
|
||||||
|
"zoomout_tip_mac": "放大 ⌘ +"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
"login.success": "登录成功",
|
"login.success": "登录成功",
|
||||||
"manage_team": "管理团队",
|
"manage_team": "管理团队",
|
||||||
"name": "名称",
|
"name": "名称",
|
||||||
|
"new_password": "新密码",
|
||||||
"notification.remind_owner_bind": "请提醒创建者绑定通知账号",
|
"notification.remind_owner_bind": "请提醒创建者绑定通知账号",
|
||||||
"operations": "操作",
|
"operations": "操作",
|
||||||
"owner": "所有者",
|
"owner": "所有者",
|
||||||
|
|||||||
@ -55,6 +55,7 @@
|
|||||||
"please_bind_notification_receiving_path": "請先綁定通知接收途徑",
|
"please_bind_notification_receiving_path": "請先綁定通知接收途徑",
|
||||||
"purchase_extra_package": "購買額外套餐",
|
"purchase_extra_package": "購買額外套餐",
|
||||||
"reminder_create_bound_notification_account": "提醒建立者綁定通知帳號",
|
"reminder_create_bound_notification_account": "提醒建立者綁定通知帳號",
|
||||||
|
"reset_password": "重置密碼",
|
||||||
"resource_usage": "資源用量",
|
"resource_usage": "資源用量",
|
||||||
"select_avatar": "點選選擇頭像",
|
"select_avatar": "點選選擇頭像",
|
||||||
"standard_package_and_extra_resource_package": "包含標準套餐與額外資源包",
|
"standard_package_and_extra_resource_package": "包含標準套餐與額外資源包",
|
||||||
|
|||||||
@ -1,7 +1,28 @@
|
|||||||
{
|
{
|
||||||
|
"Action": "操作",
|
||||||
|
"Add": "新增",
|
||||||
|
"Add Success": "新增成功",
|
||||||
|
"Add_new_input": "新增輸入",
|
||||||
|
"All": "全部",
|
||||||
"App": "應用程式",
|
"App": "應用程式",
|
||||||
|
"Cancel": "取消",
|
||||||
|
"Choose": "選擇",
|
||||||
"Click_to_expand": "點選檢視詳細資訊",
|
"Click_to_expand": "點選檢視詳細資訊",
|
||||||
|
"Close": "關閉",
|
||||||
|
"Code": "原始碼",
|
||||||
|
"Config": "設定",
|
||||||
|
"Confirm": "確認",
|
||||||
|
"Continue_Adding": "繼續新增",
|
||||||
|
"Copy": "複製",
|
||||||
|
"Creating": "建立中",
|
||||||
|
"Delete": "刪除",
|
||||||
|
"Detail": "詳細資料",
|
||||||
|
"Documents": "文件",
|
||||||
|
"Done": "完成",
|
||||||
"Download": "下載",
|
"Download": "下載",
|
||||||
|
"Edit": "編輯",
|
||||||
|
"Error": "錯誤",
|
||||||
|
"Exit": "離開",
|
||||||
"Export": "匯出",
|
"Export": "匯出",
|
||||||
"FAQ.ai_point_a": "每次調用AI模型時,都會消耗一定的AI積分。\n具體的計算標準可參考上方的“AI 積分計算標準”。\n系統會優先採用模型廠商返回的實際 usage,若為空,則採用GPT3.5的計算方式進行估算,1Token≈0.7中文字符≈0.9英文單詞,連續出現的字符可能被認為是1個Tokens。",
|
"FAQ.ai_point_a": "每次調用AI模型時,都會消耗一定的AI積分。\n具體的計算標準可參考上方的“AI 積分計算標準”。\n系統會優先採用模型廠商返回的實際 usage,若為空,則採用GPT3.5的計算方式進行估算,1Token≈0.7中文字符≈0.9英文單詞,連續出現的字符可能被認為是1個Tokens。",
|
||||||
"FAQ.ai_point_expire_a": "會過期。目前方案過期後,AI 點數將會清空並更新為新方案的 AI 點數。年度方案的 AI 點數有效期為一年,而不是每個月重設。",
|
"FAQ.ai_point_expire_a": "會過期。目前方案過期後,AI 點數將會清空並更新為新方案的 AI 點數。年度方案的 AI 點數有效期為一年,而不是每個月重設。",
|
||||||
@ -19,33 +40,76 @@
|
|||||||
"FAQ.package_overlay_q": "額外資源包可以重疊使用嗎?",
|
"FAQ.package_overlay_q": "額外資源包可以重疊使用嗎?",
|
||||||
"FAQ.switch_package_a": "方案使用規則為優先使用較進階的方案。因此,若購買的新方案比目前方案更進階,則新方案會立即生效;否則將繼續使用目前方案。",
|
"FAQ.switch_package_a": "方案使用規則為優先使用較進階的方案。因此,若購買的新方案比目前方案更進階,則新方案會立即生效;否則將繼續使用目前方案。",
|
||||||
"FAQ.switch_package_q": "是否會切換訂閱方案?",
|
"FAQ.switch_package_q": "是否會切換訂閱方案?",
|
||||||
|
"File": "檔案",
|
||||||
|
"Finish": "完成",
|
||||||
"Folder": "資料夾",
|
"Folder": "資料夾",
|
||||||
|
"FullScreen": "全屏",
|
||||||
|
"FullScreenLight": "全屏預覽",
|
||||||
|
"Import": "匯入",
|
||||||
|
"Input": "輸入",
|
||||||
"Instructions": "使用說明",
|
"Instructions": "使用說明",
|
||||||
|
"Intro": "介紹",
|
||||||
|
"Loading": "載入中...",
|
||||||
"Login": "登入",
|
"Login": "登入",
|
||||||
|
"More": "更多",
|
||||||
|
"Move": "移動",
|
||||||
|
"Name": "名稱",
|
||||||
"None": "無",
|
"None": "無",
|
||||||
|
"OK": "確定",
|
||||||
|
"Open": "開啟",
|
||||||
"Operation": "操作",
|
"Operation": "操作",
|
||||||
|
"Other": "其他",
|
||||||
|
"Output": "輸出",
|
||||||
|
"Params": "參數",
|
||||||
|
"Parse": "解析",
|
||||||
|
"Permission": "權限",
|
||||||
|
"Permission_tip": "個人權限大於群組權限",
|
||||||
|
"Please Input Name": "請輸入名稱",
|
||||||
|
"Preview": "預覽",
|
||||||
|
"Remove": "移除",
|
||||||
|
"Rename": "重新命名",
|
||||||
"Required_input": "必填",
|
"Required_input": "必填",
|
||||||
|
"Reset": "恢復預設",
|
||||||
|
"Restart": "重新開始",
|
||||||
"Resume": "繼續",
|
"Resume": "繼續",
|
||||||
|
"Role": "權限",
|
||||||
|
"Run": "執行",
|
||||||
"Running": "執行中",
|
"Running": "執行中",
|
||||||
|
"Save": "儲存",
|
||||||
|
"Save_and_exit": "儲存並離開",
|
||||||
|
"Search": "搜尋",
|
||||||
"Select_all": "全選",
|
"Select_all": "全選",
|
||||||
|
"Setting": "設定",
|
||||||
|
"Status": "狀態",
|
||||||
"Submit": "送出",
|
"Submit": "送出",
|
||||||
|
"Success": "成功",
|
||||||
|
"Team": "團隊",
|
||||||
|
"UnKnow": "未知",
|
||||||
|
"Unlimited": "無限制",
|
||||||
|
"Update": "更新",
|
||||||
|
"Username": "使用者名稱",
|
||||||
|
"Waiting": "等待中",
|
||||||
|
"Warning": "警告",
|
||||||
|
"Website": "網站",
|
||||||
|
"action_confirm": "確認",
|
||||||
|
"add_new": "新增",
|
||||||
"add_new_param": "新增參數",
|
"add_new_param": "新增參數",
|
||||||
"all_quotes": "全部引用",
|
"all_quotes": "全部引用",
|
||||||
"templateTags.Image_generation": "圖片生成",
|
"all_result": "完整結果",
|
||||||
"templateTags.Office_services": "辦公服務",
|
|
||||||
"templateTags.Roleplay": "角色扮演",
|
|
||||||
"templateTags.Web_search": "聯網搜索",
|
|
||||||
"templateTags.Writing": "文字創作",
|
|
||||||
"back": "返回",
|
"back": "返回",
|
||||||
|
"base_config": "基本設定",
|
||||||
"bill_already_processed": "訂單已處理",
|
"bill_already_processed": "訂單已處理",
|
||||||
"bill_expired": "訂單已過期",
|
"bill_expired": "訂單已過期",
|
||||||
"bill_not_pay_processed": "非在線訂單",
|
"bill_not_pay_processed": "非在線訂單",
|
||||||
"button.extra_dataset_size_tip": "您正在購買【額外知識庫容量】",
|
"button.extra_dataset_size_tip": "您正在購買【額外知識庫容量】",
|
||||||
"button.extra_points_tip": "您正在購買【額外 AI 積分】",
|
"button.extra_points_tip": "您正在購買【額外 AI 積分】",
|
||||||
"can_copy_content_tip": "無法使用瀏覽器自動複製,請手動複製下面內容",
|
"can_copy_content_tip": "無法使用瀏覽器自動複製,請手動複製下面內容",
|
||||||
|
"choosable": "可選擇",
|
||||||
"chose_condition": "選擇條件",
|
"chose_condition": "選擇條件",
|
||||||
"chosen": "已選擇",
|
"chosen": "已選擇",
|
||||||
"classification": "分類",
|
"classification": "分類",
|
||||||
|
"click_drag_tip": "點選可拖曳",
|
||||||
|
"click_select_avatar": "點選選擇頭像",
|
||||||
"click_to_copy": "點選複製",
|
"click_to_copy": "點選複製",
|
||||||
"click_to_resume": "點選繼續",
|
"click_to_resume": "點選繼續",
|
||||||
"code_editor": "程式碼編輯器",
|
"code_editor": "程式碼編輯器",
|
||||||
@ -112,166 +176,21 @@
|
|||||||
"code_error.user_error.balance_not_enough": "帳戶餘額不足",
|
"code_error.user_error.balance_not_enough": "帳戶餘額不足",
|
||||||
"code_error.user_error.bin_visitor_guest": "您目前身份為訪客,無權操作",
|
"code_error.user_error.bin_visitor_guest": "您目前身份為訪客,無權操作",
|
||||||
"code_error.user_error.un_auth_user": "找不到此使用者",
|
"code_error.user_error.un_auth_user": "找不到此使用者",
|
||||||
"commercial_function_tip": "請升級為商業版後使用此功能:https://doc.fastgpt.cn/docs/commercial/intro/",
|
|
||||||
"Action": "操作",
|
|
||||||
"Add": "新增",
|
|
||||||
"add_new": "新增",
|
|
||||||
"Add Success": "新增成功",
|
|
||||||
"Add_new_input": "新增輸入",
|
|
||||||
"All": "全部",
|
|
||||||
"Cancel": "取消",
|
|
||||||
"Choose": "選擇",
|
|
||||||
"Close": "關閉",
|
|
||||||
"Code": "原始碼",
|
|
||||||
"Config": "設定",
|
|
||||||
"Confirm": "確認",
|
|
||||||
"comfirn_create": "確認建立",
|
|
||||||
"comfirm_import": "確認匯入",
|
"comfirm_import": "確認匯入",
|
||||||
"confirm_move": "移動至此",
|
|
||||||
"confirm_update": "確認更新",
|
|
||||||
"comfirm_leave_page": "確認離開此頁面?",
|
"comfirm_leave_page": "確認離開此頁面?",
|
||||||
"Continue_Adding": "繼續新增",
|
"comfirn_create": "確認建立",
|
||||||
"Copy": "複製",
|
"commercial_function_tip": "請升級為商業版後使用此功能:https://doc.fastgpt.cn/docs/commercial/intro/",
|
||||||
"copy_successful": "複製成功",
|
|
||||||
"create_failed": "建立失敗",
|
|
||||||
"create_success": "建立成功",
|
|
||||||
"create_time": "建立時間",
|
|
||||||
"Creating": "建立中",
|
|
||||||
"custom_title": "自訂標題",
|
|
||||||
"Delete": "刪除",
|
|
||||||
"delete_failed": "刪除失敗",
|
|
||||||
"delete_success": "刪除成功",
|
|
||||||
"delete_warning": "刪除警告",
|
|
||||||
"delete_folder": "刪除資料夾",
|
|
||||||
"Detail": "詳細資料",
|
|
||||||
"Documents": "文件",
|
|
||||||
"Done": "完成",
|
|
||||||
"Edit": "編輯",
|
|
||||||
"Error": "錯誤",
|
|
||||||
"Exit": "離開",
|
|
||||||
"exit_directly": "直接離開",
|
|
||||||
"expired_time": "到期時間",
|
|
||||||
"File": "檔案",
|
|
||||||
"Finish": "完成",
|
|
||||||
"FullScreen": "全屏",
|
|
||||||
"FullScreenLight": "全屏預覽",
|
|
||||||
"Import": "匯入",
|
|
||||||
"import_failed": "匯入失敗",
|
|
||||||
"import_success": "匯入成功",
|
|
||||||
"Input": "輸入",
|
|
||||||
"folder_description": "資料夾描述",
|
|
||||||
"input_name": "輸入名稱",
|
|
||||||
"Intro": "介紹",
|
|
||||||
"last_step": "上一步",
|
|
||||||
"last_use_time": "最後使用時間",
|
|
||||||
"load_failed": "載入失敗",
|
|
||||||
"Loading": "載入中...",
|
|
||||||
"More": "更多",
|
|
||||||
"Move": "移動",
|
|
||||||
"no_select_data": "沒有可選擇的資料",
|
|
||||||
"Name": "名稱",
|
|
||||||
"next_step": "下一步",
|
|
||||||
"no_more_data": "沒有更多資料了",
|
|
||||||
"not_open": "未開啟",
|
|
||||||
"OK": "確定",
|
|
||||||
"Open": "開啟",
|
|
||||||
"Other": "其他",
|
|
||||||
"Output": "輸出",
|
|
||||||
"Params": "參數",
|
|
||||||
"Parse": "解析",
|
|
||||||
"psw_inconsistency": "兩次密碼不一致",
|
|
||||||
"Permission": "權限",
|
|
||||||
"Permission_tip": "個人權限大於群組權限",
|
|
||||||
"Please Input Name": "請輸入名稱",
|
|
||||||
"Preview": "預覽",
|
|
||||||
"read_doc": "閱讀文件",
|
|
||||||
"Remove": "移除",
|
|
||||||
"Rename": "重新命名",
|
|
||||||
"request_error": "請求錯誤",
|
|
||||||
"Reset": "恢復預設",
|
|
||||||
"Restart": "重新開始",
|
|
||||||
"Role": "權限",
|
|
||||||
"root_folder": "根目錄",
|
|
||||||
"Run": "執行",
|
|
||||||
"Save": "儲存",
|
|
||||||
"save_failed": "儲存失敗",
|
|
||||||
"save_success": "儲存成功",
|
|
||||||
"Save_and_exit": "儲存並離開",
|
|
||||||
"Search": "搜尋",
|
|
||||||
"select_file_failed": "選擇檔案失敗",
|
|
||||||
"select_template": "選擇範本",
|
|
||||||
"set_avatar": "點選設定頭像",
|
|
||||||
"Setting": "設定",
|
|
||||||
"Status": "狀態",
|
|
||||||
"submit_failed": "送出失敗",
|
|
||||||
"Success": "成功",
|
|
||||||
"sync_success": "同步成功",
|
|
||||||
"Team": "團隊",
|
|
||||||
"un_used": "未使用",
|
|
||||||
"UnKnow": "未知",
|
|
||||||
"unknow_source": "未知來源",
|
|
||||||
"Unlimited": "無限制",
|
|
||||||
"Update": "更新",
|
|
||||||
"update_failed": "更新失敗",
|
|
||||||
"update_success": "更新成功",
|
|
||||||
"Username": "使用者名稱",
|
|
||||||
"Waiting": "等待中",
|
|
||||||
"Warning": "警告",
|
|
||||||
"Website": "網站",
|
|
||||||
"all_result": "完整結果",
|
|
||||||
"click_select_avatar": "點選選擇頭像",
|
|
||||||
"base_config": "基本設定",
|
|
||||||
"choosable": "可選擇",
|
|
||||||
"action_confirm": "確認",
|
|
||||||
"copy_to_clipboard": "複製到剪貼簿",
|
|
||||||
"read_course": "閱讀教學",
|
|
||||||
"error.unKnow": "發生未預期的錯誤",
|
|
||||||
"export_to_json": "匯出為 JSON",
|
|
||||||
"failed": "失敗",
|
|
||||||
"click_drag_tip": "點選可拖曳",
|
|
||||||
"move_success": "移動成功",
|
|
||||||
"move_to": "移動至",
|
|
||||||
"no_child_folder": "無子目錄,放置在此",
|
|
||||||
"open_folder": "開啟資料夾",
|
|
||||||
"folder.empty": "此目錄中沒有更多項目了",
|
|
||||||
"folder.open_dataset": "開啟知識庫",
|
|
||||||
"have_done": "已完成",
|
|
||||||
"input.Repeat Value": "重複的值",
|
|
||||||
"is_requesting": "請求中...",
|
|
||||||
"json_parse_error": "可能有 JSON 錯誤,請仔細檢查",
|
|
||||||
"json_config": "JSON 設定",
|
|
||||||
"link.UnValid": "無效的連結",
|
|
||||||
"month": "月",
|
|
||||||
"name_is_empty": "名稱不能為空",
|
|
||||||
"no_intro": "暫無介紹",
|
|
||||||
"not_support": "不支援",
|
|
||||||
"page_center": "頁面置中",
|
|
||||||
"redo_tip": "重做 ctrl shift z",
|
|
||||||
"redo_tip_mac": "重做 ⌘ shift z",
|
|
||||||
"request_end": "已載入全部",
|
|
||||||
"request_more": "點選載入更多",
|
|
||||||
"speech_error_tip": "語音轉文字失敗",
|
|
||||||
"speech_not_support": "您的瀏覽器不支援語音輸入",
|
|
||||||
"submit_success": "送出成功",
|
|
||||||
"submitted": "已送出",
|
|
||||||
"support": "支援",
|
|
||||||
"system_help_chatbot": "機器人助手",
|
|
||||||
"use_helper": "使用說明",
|
|
||||||
"ui.textarea.Magnifying": "放大",
|
|
||||||
"undo_tip": "復原 ctrl z",
|
|
||||||
"undo_tip_mac": "復原 ⌘ z ",
|
|
||||||
"upload_file": "上傳檔案",
|
|
||||||
"zoomin_tip": "縮小 ctrl -",
|
|
||||||
"zoomin_tip_mac": "縮小 ⌘ -",
|
|
||||||
"zoomout_tip": "放大 ctrl +",
|
|
||||||
"zoomout_tip_mac": "放大 ⌘ +",
|
|
||||||
"comon.Continue_Adding": "繼續新增",
|
"comon.Continue_Adding": "繼續新增",
|
||||||
"compliance.chat": "內容由第三方 AI 產生,無法保證其真實性與準確性,僅供參考。",
|
"compliance.chat": "內容由第三方 AI 產生,無法保證其真實性與準確性,僅供參考。",
|
||||||
"compliance.compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。",
|
"compliance.compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。",
|
||||||
"compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。",
|
"compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。",
|
||||||
"confirm_choice": "確認選擇",
|
"confirm_choice": "確認選擇",
|
||||||
|
"confirm_move": "移動至此",
|
||||||
|
"confirm_update": "確認更新",
|
||||||
"contact_way": "通知接收",
|
"contact_way": "通知接收",
|
||||||
"contribute_app_template": "貢獻範本",
|
"contribute_app_template": "貢獻範本",
|
||||||
|
"copy_successful": "複製成功",
|
||||||
|
"copy_to_clipboard": "複製到剪貼簿",
|
||||||
"core.Chat": "對話",
|
"core.Chat": "對話",
|
||||||
"core.ai.Max context": "最大上下文",
|
"core.ai.Max context": "最大上下文",
|
||||||
"core.ai.Model": "AI 模型",
|
"core.ai.Model": "AI 模型",
|
||||||
@ -491,7 +410,6 @@
|
|||||||
"core.chat.response.user_select_result": "使用者選擇結果",
|
"core.chat.response.user_select_result": "使用者選擇結果",
|
||||||
"core.chat.retry": "重新產生",
|
"core.chat.retry": "重新產生",
|
||||||
"core.chat.tts.Stop Speech": "停止",
|
"core.chat.tts.Stop Speech": "停止",
|
||||||
"core.tip.leave page": "內容已修改,確認離開頁面嗎?",
|
|
||||||
"core.dataset.Choose Dataset": "關聯知識庫",
|
"core.dataset.Choose Dataset": "關聯知識庫",
|
||||||
"core.dataset.Collection": "資料集",
|
"core.dataset.Collection": "資料集",
|
||||||
"core.dataset.Create dataset": "建立一個{{name}}",
|
"core.dataset.Create dataset": "建立一個{{name}}",
|
||||||
@ -566,7 +484,6 @@
|
|||||||
"core.dataset.import.Custom text desc": "手動輸入一段文字作為資料集",
|
"core.dataset.import.Custom text desc": "手動輸入一段文字作為資料集",
|
||||||
"core.dataset.import.Data process params": "資料處理參數",
|
"core.dataset.import.Data process params": "資料處理參數",
|
||||||
"core.dataset.import.Down load csv template": "點選下載 CSV 範本",
|
"core.dataset.import.Down load csv template": "點選下載 CSV 範本",
|
||||||
"core.dataset.import.import_success": "匯入成功,請等待訓練",
|
|
||||||
"core.dataset.import.Link name": "網路連結",
|
"core.dataset.import.Link name": "網路連結",
|
||||||
"core.dataset.import.Link name placeholder": "僅支援靜態連結。如果上傳後資料為空,可能該連結無法被讀取\n每行一個,每次最多 10 個連結",
|
"core.dataset.import.Link name placeholder": "僅支援靜態連結。如果上傳後資料為空,可能該連結無法被讀取\n每行一個,每次最多 10 個連結",
|
||||||
"core.dataset.import.Local file": "本機檔案",
|
"core.dataset.import.Local file": "本機檔案",
|
||||||
@ -587,6 +504,7 @@
|
|||||||
"core.dataset.import.Upload status": "狀態",
|
"core.dataset.import.Upload status": "狀態",
|
||||||
"core.dataset.import.Web link": "網頁連結",
|
"core.dataset.import.Web link": "網頁連結",
|
||||||
"core.dataset.import.Web link desc": "讀取靜態網頁內容作為資料集",
|
"core.dataset.import.Web link desc": "讀取靜態網頁內容作為資料集",
|
||||||
|
"core.dataset.import.import_success": "匯入成功,請等待訓練",
|
||||||
"core.dataset.link": "連結",
|
"core.dataset.link": "連結",
|
||||||
"core.dataset.search.Dataset Search Params": "知識庫搜尋設定",
|
"core.dataset.search.Dataset Search Params": "知識庫搜尋設定",
|
||||||
"core.dataset.search.Empty result response": "空搜尋回應",
|
"core.dataset.search.Empty result response": "空搜尋回應",
|
||||||
@ -768,6 +686,7 @@
|
|||||||
"core.plugin.Get Plugin Module Detail Failed": "取得外掛程式資訊失敗",
|
"core.plugin.Get Plugin Module Detail Failed": "取得外掛程式資訊失敗",
|
||||||
"core.plugin.Http plugin intro placeholder": "僅供展示,無實際效果",
|
"core.plugin.Http plugin intro placeholder": "僅供展示,無實際效果",
|
||||||
"core.plugin.cost": "點數消耗:",
|
"core.plugin.cost": "點數消耗:",
|
||||||
|
"core.tip.leave page": "內容已修改,確認離開頁面嗎?",
|
||||||
"core.view_chat_detail": "檢視對話詳細資料",
|
"core.view_chat_detail": "檢視對話詳細資料",
|
||||||
"core.workflow.Can not delete node": "此節點不允許刪除",
|
"core.workflow.Can not delete node": "此節點不允許刪除",
|
||||||
"core.workflow.Change input type tip": "修改輸入類型將清空已填寫的值,請確認!",
|
"core.workflow.Change input type tip": "修改輸入類型將清空已填寫的值,請確認!",
|
||||||
@ -821,7 +740,11 @@
|
|||||||
"core.workflow.value": "值",
|
"core.workflow.value": "值",
|
||||||
"core.workflow.variable": "變數",
|
"core.workflow.variable": "變數",
|
||||||
"create": "建立",
|
"create": "建立",
|
||||||
|
"create_failed": "建立失敗",
|
||||||
|
"create_success": "建立成功",
|
||||||
|
"create_time": "建立時間",
|
||||||
"cron_job_run_app": "排程任務",
|
"cron_job_run_app": "排程任務",
|
||||||
|
"custom_title": "自訂標題",
|
||||||
"data_index_custom": "自定義索引",
|
"data_index_custom": "自定義索引",
|
||||||
"data_index_default": "預設索引",
|
"data_index_default": "預設索引",
|
||||||
"data_index_image": "圖片索引",
|
"data_index_image": "圖片索引",
|
||||||
@ -872,6 +795,10 @@
|
|||||||
"dataset_text_model_tip": "用於知識庫預處理階段的文字處理,例如自動補充索引、問答對提取。",
|
"dataset_text_model_tip": "用於知識庫預處理階段的文字處理,例如自動補充索引、問答對提取。",
|
||||||
"deep_rag_search": "深度搜尋",
|
"deep_rag_search": "深度搜尋",
|
||||||
"delete_api": "確認刪除此 API 金鑰?\n刪除後該金鑰將立即失效,對應的對話記錄不會被刪除,請確認!",
|
"delete_api": "確認刪除此 API 金鑰?\n刪除後該金鑰將立即失效,對應的對話記錄不會被刪除,請確認!",
|
||||||
|
"delete_failed": "刪除失敗",
|
||||||
|
"delete_folder": "刪除資料夾",
|
||||||
|
"delete_success": "刪除成功",
|
||||||
|
"delete_warning": "刪除警告",
|
||||||
"embedding_model_not_config": "偵測到沒有可用的索引模型",
|
"embedding_model_not_config": "偵測到沒有可用的索引模型",
|
||||||
"error.Create failed": "建立失敗",
|
"error.Create failed": "建立失敗",
|
||||||
"error.code_error": "驗證碼錯誤",
|
"error.code_error": "驗證碼錯誤",
|
||||||
@ -881,6 +808,7 @@
|
|||||||
"error.missingParams": "參數不足",
|
"error.missingParams": "參數不足",
|
||||||
"error.send_auth_code_too_frequently": "請勿頻繁取得驗證碼",
|
"error.send_auth_code_too_frequently": "請勿頻繁取得驗證碼",
|
||||||
"error.too_many_request": "請求太頻繁了,請稍後重試",
|
"error.too_many_request": "請求太頻繁了,請稍後重試",
|
||||||
|
"error.unKnow": "發生未預期的錯誤",
|
||||||
"error.upload_file_error_filename": "{{name}} 上傳失敗",
|
"error.upload_file_error_filename": "{{name}} 上傳失敗",
|
||||||
"error.upload_image_error": "上傳文件失敗",
|
"error.upload_image_error": "上傳文件失敗",
|
||||||
"error.username_empty": "帳號不能為空",
|
"error.username_empty": "帳號不能為空",
|
||||||
@ -890,13 +818,23 @@
|
|||||||
"error_llm_not_config": "未設定文件理解模型",
|
"error_llm_not_config": "未設定文件理解模型",
|
||||||
"error_un_permission": "無權操作",
|
"error_un_permission": "無權操作",
|
||||||
"error_vlm_not_config": "未設定圖片理解模型",
|
"error_vlm_not_config": "未設定圖片理解模型",
|
||||||
|
"exit_directly": "直接離開",
|
||||||
|
"expired_time": "到期時間",
|
||||||
|
"export_to_json": "匯出為 JSON",
|
||||||
"extraction_results": "提取結果",
|
"extraction_results": "提取結果",
|
||||||
|
"failed": "失敗",
|
||||||
"field_name": "欄位名稱",
|
"field_name": "欄位名稱",
|
||||||
|
"folder.empty": "此目錄中沒有更多項目了",
|
||||||
|
"folder.open_dataset": "開啟知識庫",
|
||||||
|
"folder_description": "資料夾描述",
|
||||||
"free": "免費",
|
"free": "免費",
|
||||||
"get_QR_failed": "取得 QR Code 失敗",
|
"get_QR_failed": "取得 QR Code 失敗",
|
||||||
"get_app_failed": "取得應用程式失敗",
|
"get_app_failed": "取得應用程式失敗",
|
||||||
"get_laf_failed": "取得 LAF 函式清單失敗",
|
"get_laf_failed": "取得 LAF 函式清單失敗",
|
||||||
"has_verification": "已驗證,點選解除綁定",
|
"has_verification": "已驗證,點選解除綁定",
|
||||||
|
"have_done": "已完成",
|
||||||
|
"import_failed": "匯入失敗",
|
||||||
|
"import_success": "匯入成功",
|
||||||
"info.buy_extra": "購買額外方案",
|
"info.buy_extra": "購買額外方案",
|
||||||
"info.csv_download": "點選下載批次測試範本",
|
"info.csv_download": "點選下載批次測試範本",
|
||||||
"info.csv_message": "讀取 CSV 檔案的第一欄進行批次測試,每次最多支援 100 組資料。",
|
"info.csv_message": "讀取 CSV 檔案的第一欄進行批次測試,每次最多支援 100 組資料。",
|
||||||
@ -908,14 +846,23 @@
|
|||||||
"info.open_api_notice": "您可以填寫 OpenAI/OneAPI 的相關金鑰。如果您填寫了此內容,在線上平臺使用【AI 對話】、【問題分類】和【內容提取】將使用您填寫的金鑰,不會計費。請確認您的金鑰是否有存取對應模型的權限。GPT 模型可以選擇 FastAI。",
|
"info.open_api_notice": "您可以填寫 OpenAI/OneAPI 的相關金鑰。如果您填寫了此內容,在線上平臺使用【AI 對話】、【問題分類】和【內容提取】將使用您填寫的金鑰,不會計費。請確認您的金鑰是否有存取對應模型的權限。GPT 模型可以選擇 FastAI。",
|
||||||
"info.open_api_placeholder": "請求網址,預設為 OpenAI 官方。可填寫中轉網址,未自動補全 \"v1\"",
|
"info.open_api_placeholder": "請求網址,預設為 OpenAI 官方。可填寫中轉網址,未自動補全 \"v1\"",
|
||||||
"info.resource": "資源使用量",
|
"info.resource": "資源使用量",
|
||||||
|
"input.Repeat Value": "重複的值",
|
||||||
|
"input_name": "輸入名稱",
|
||||||
"invalid_variable": "無效變數",
|
"invalid_variable": "無效變數",
|
||||||
"is_open": "是否開啟",
|
"is_open": "是否開啟",
|
||||||
|
"is_requesting": "請求中...",
|
||||||
"is_using": "使用中",
|
"is_using": "使用中",
|
||||||
"item_description": "欄位描述",
|
"item_description": "欄位描述",
|
||||||
"item_name": "欄位名稱",
|
"item_name": "欄位名稱",
|
||||||
|
"json_config": "JSON 設定",
|
||||||
|
"json_parse_error": "可能有 JSON 錯誤,請仔細檢查",
|
||||||
"just_now": "剛剛",
|
"just_now": "剛剛",
|
||||||
"key_repetition": "鍵值重複",
|
"key_repetition": "鍵值重複",
|
||||||
|
"last_step": "上一步",
|
||||||
|
"last_use_time": "最後使用時間",
|
||||||
|
"link.UnValid": "無效的連結",
|
||||||
"llm_model_not_config": "偵測到沒有可用的語言模型",
|
"llm_model_not_config": "偵測到沒有可用的語言模型",
|
||||||
|
"load_failed": "載入失敗",
|
||||||
"max_quote_tokens": "引用上限",
|
"max_quote_tokens": "引用上限",
|
||||||
"max_quote_tokens_tips": "單次搜尋最大的 token 數量,中文約 1 字=1.7 tokens,英文約 1 字=1 token",
|
"max_quote_tokens_tips": "單次搜尋最大的 token 數量,中文約 1 字=1.7 tokens,英文約 1 字=1 token",
|
||||||
"mcp_server": "MCP 服務",
|
"mcp_server": "MCP 服務",
|
||||||
@ -947,7 +894,11 @@
|
|||||||
"model_sparkdesk": "訊飛星火",
|
"model_sparkdesk": "訊飛星火",
|
||||||
"model_stepfun": "階躍星辰",
|
"model_stepfun": "階躍星辰",
|
||||||
"model_yi": "零一萬物",
|
"model_yi": "零一萬物",
|
||||||
|
"month": "月",
|
||||||
"move.confirm": "確認移動",
|
"move.confirm": "確認移動",
|
||||||
|
"move_success": "移動成功",
|
||||||
|
"move_to": "移動至",
|
||||||
|
"name_is_empty": "名稱不能為空",
|
||||||
"navbar.Account": "帳戶",
|
"navbar.Account": "帳戶",
|
||||||
"navbar.Chat": "對話",
|
"navbar.Chat": "對話",
|
||||||
"navbar.Datasets": "知識庫",
|
"navbar.Datasets": "知識庫",
|
||||||
@ -955,13 +906,22 @@
|
|||||||
"navbar.Toolkit": "工具箱",
|
"navbar.Toolkit": "工具箱",
|
||||||
"navbar.Tools": "工具",
|
"navbar.Tools": "工具",
|
||||||
"new_create": "建立新項目",
|
"new_create": "建立新項目",
|
||||||
|
"next_step": "下一步",
|
||||||
"no": "否",
|
"no": "否",
|
||||||
|
"no_child_folder": "無子目錄,放置在此",
|
||||||
|
"no_intro": "暫無介紹",
|
||||||
"no_laf_env": "系統未設定 LAF 環境",
|
"no_laf_env": "系統未設定 LAF 環境",
|
||||||
|
"no_more_data": "沒有更多資料了",
|
||||||
"no_pay_way": "系統無合適的支付渠道",
|
"no_pay_way": "系統無合適的支付渠道",
|
||||||
|
"no_select_data": "沒有可選擇的資料",
|
||||||
"not_model_config": "未設定相關模型",
|
"not_model_config": "未設定相關模型",
|
||||||
|
"not_open": "未開啟",
|
||||||
"not_permission": "當前訂閱套餐不支持團隊操作日誌",
|
"not_permission": "當前訂閱套餐不支持團隊操作日誌",
|
||||||
|
"not_support": "不支援",
|
||||||
"not_yet_introduced": "暫無介紹",
|
"not_yet_introduced": "暫無介紹",
|
||||||
|
"open_folder": "開啟資料夾",
|
||||||
"option": "選項",
|
"option": "選項",
|
||||||
|
"page_center": "頁面置中",
|
||||||
"pay.amount": "金額",
|
"pay.amount": "金額",
|
||||||
"pay.error_desc": "轉換支付途徑時出現了問題",
|
"pay.error_desc": "轉換支付途徑時出現了問題",
|
||||||
"pay.noclose": "支付完成後,請等待系統自動更新",
|
"pay.noclose": "支付完成後,請等待系統自動更新",
|
||||||
@ -1024,14 +984,34 @@
|
|||||||
"plugin.path": "路徑",
|
"plugin.path": "路徑",
|
||||||
"price_over_wx_limit": "超出支付提供商限額:微信支付僅支持 6000 元以下",
|
"price_over_wx_limit": "超出支付提供商限額:微信支付僅支持 6000 元以下",
|
||||||
"prompt_input_placeholder": "請輸入提示詞",
|
"prompt_input_placeholder": "請輸入提示詞",
|
||||||
|
"psw_inconsistency": "兩次密碼不一致",
|
||||||
"question_feedback": "工單諮詢",
|
"question_feedback": "工單諮詢",
|
||||||
|
"read_course": "閱讀教學",
|
||||||
|
"read_doc": "閱讀文件",
|
||||||
"read_quote": "檢視引用",
|
"read_quote": "檢視引用",
|
||||||
|
"redo_tip": "重做 ctrl shift z",
|
||||||
|
"redo_tip_mac": "重做 ⌘ shift z",
|
||||||
|
"request_end": "已載入全部",
|
||||||
|
"request_error": "請求錯誤",
|
||||||
|
"request_more": "點選載入更多",
|
||||||
"required": "必填",
|
"required": "必填",
|
||||||
"rerank_weight": "重排權重",
|
"rerank_weight": "重排權重",
|
||||||
"resume_failed": "恢復失敗",
|
"resume_failed": "恢復失敗",
|
||||||
|
"root_folder": "根目錄",
|
||||||
|
"save_failed": "儲存失敗",
|
||||||
|
"save_success": "儲存成功",
|
||||||
"scan_code": "掃碼支付",
|
"scan_code": "掃碼支付",
|
||||||
|
"select_file_failed": "選擇檔案失敗",
|
||||||
"select_reference_variable": "選擇引用變數",
|
"select_reference_variable": "選擇引用變數",
|
||||||
|
"select_template": "選擇範本",
|
||||||
|
"set_avatar": "點選設定頭像",
|
||||||
"share_link": "分享連結",
|
"share_link": "分享連結",
|
||||||
|
"speech_error_tip": "語音轉文字失敗",
|
||||||
|
"speech_not_support": "您的瀏覽器不支援語音輸入",
|
||||||
|
"submit_failed": "送出失敗",
|
||||||
|
"submit_success": "送出成功",
|
||||||
|
"submitted": "已送出",
|
||||||
|
"support": "支援",
|
||||||
"support.account.Individuation": "個人化",
|
"support.account.Individuation": "個人化",
|
||||||
"support.inform.Read": "已讀",
|
"support.inform.Read": "已讀",
|
||||||
"support.openapi.Api baseurl": "API 根網址",
|
"support.openapi.Api baseurl": "API 根網址",
|
||||||
@ -1209,18 +1189,34 @@
|
|||||||
"support.wallet.usage.Usage Detail": "使用詳細資訊",
|
"support.wallet.usage.Usage Detail": "使用詳細資訊",
|
||||||
"support.wallet.usage.Whisper": "語音輸入",
|
"support.wallet.usage.Whisper": "語音輸入",
|
||||||
"sync_link": "同步連結",
|
"sync_link": "同步連結",
|
||||||
|
"sync_success": "同步成功",
|
||||||
"system.Concat us": "聯絡我們",
|
"system.Concat us": "聯絡我們",
|
||||||
"system.Help Document": "說明文件",
|
"system.Help Document": "說明文件",
|
||||||
|
"system_help_chatbot": "機器人助手",
|
||||||
"tag_list": "標籤列表",
|
"tag_list": "標籤列表",
|
||||||
"team_tag": "團隊標籤",
|
"team_tag": "團隊標籤",
|
||||||
|
"templateTags.Image_generation": "圖片生成",
|
||||||
|
"templateTags.Office_services": "辦公服務",
|
||||||
|
"templateTags.Roleplay": "角色扮演",
|
||||||
|
"templateTags.Web_search": "聯網搜索",
|
||||||
|
"templateTags.Writing": "文字創作",
|
||||||
"template_market": "模板市場",
|
"template_market": "模板市場",
|
||||||
"textarea_variable_picker_tip": "輸入「/」以選擇變數",
|
"textarea_variable_picker_tip": "輸入「/」以選擇變數",
|
||||||
|
"ui.textarea.Magnifying": "放大",
|
||||||
|
"un_used": "未使用",
|
||||||
"unauth_token": "憑證已過期,請重新登入",
|
"unauth_token": "憑證已過期,請重新登入",
|
||||||
|
"undo_tip": "復原 ctrl z",
|
||||||
|
"undo_tip_mac": "復原 ⌘ z ",
|
||||||
"unit.character": "字元",
|
"unit.character": "字元",
|
||||||
"unit.minute": "分鐘",
|
"unit.minute": "分鐘",
|
||||||
"unit.seconds": "秒",
|
"unit.seconds": "秒",
|
||||||
|
"unknow_source": "未知來源",
|
||||||
"unusable_variable": "無可用變數",
|
"unusable_variable": "無可用變數",
|
||||||
|
"update_failed": "更新失敗",
|
||||||
|
"update_success": "更新成功",
|
||||||
|
"upload_file": "上傳檔案",
|
||||||
"upload_file_error": "上傳檔案失敗",
|
"upload_file_error": "上傳檔案失敗",
|
||||||
|
"use_helper": "使用說明",
|
||||||
"user.Account": "帳戶",
|
"user.Account": "帳戶",
|
||||||
"user.Amount of earnings": "收益(¥)",
|
"user.Amount of earnings": "收益(¥)",
|
||||||
"user.Amount of inviter": "累計邀請人數",
|
"user.Amount of inviter": "累計邀請人數",
|
||||||
@ -1234,11 +1230,13 @@
|
|||||||
"user.Laf Account Setting": "LAF 帳戶設定",
|
"user.Laf Account Setting": "LAF 帳戶設定",
|
||||||
"user.Language": "語言",
|
"user.Language": "語言",
|
||||||
"user.Member Name": "暱稱",
|
"user.Member Name": "暱稱",
|
||||||
|
"user.No_right_to_reset_password": "沒有重置密碼的權限",
|
||||||
"user.Notification Receive": "通知接收",
|
"user.Notification Receive": "通知接收",
|
||||||
"user.Notification Receive Bind": "請先綁定通知接收方式",
|
"user.Notification Receive Bind": "請先綁定通知接收方式",
|
||||||
"user.Old password is error": "舊密碼錯誤",
|
"user.Old password is error": "舊密碼錯誤",
|
||||||
"user.OpenAI Account Setting": "OpenAI 帳戶設定",
|
"user.OpenAI Account Setting": "OpenAI 帳戶設定",
|
||||||
"user.Password": "密碼",
|
"user.Password": "密碼",
|
||||||
|
"user.Password has no change": "新密碼和舊密碼重複",
|
||||||
"user.Pay": "儲值",
|
"user.Pay": "儲值",
|
||||||
"user.Promotion": "促銷",
|
"user.Promotion": "促銷",
|
||||||
"user.Promotion Rate": "回饋比例",
|
"user.Promotion Rate": "回饋比例",
|
||||||
@ -1253,12 +1251,16 @@
|
|||||||
"user.Update password successful": "更新密碼成功",
|
"user.Update password successful": "更新密碼成功",
|
||||||
"user.apikey.key": "API 金鑰",
|
"user.apikey.key": "API 金鑰",
|
||||||
"user.confirm_password": "確認密碼",
|
"user.confirm_password": "確認密碼",
|
||||||
|
"user.init_password": "請初始化密碼",
|
||||||
"user.new_password": "新密碼",
|
"user.new_password": "新密碼",
|
||||||
"user.no_invite_records": "無邀請紀錄",
|
"user.no_invite_records": "無邀請紀錄",
|
||||||
"user.no_notice": "無通知",
|
"user.no_notice": "無通知",
|
||||||
"user.no_usage_records": "無使用紀錄",
|
"user.no_usage_records": "無使用紀錄",
|
||||||
"user.old_password": "舊密碼",
|
"user.old_password": "舊密碼",
|
||||||
"user.password_message": "密碼最少 4 位最多 60 位",
|
"user.password_message": "密碼最少 4 位最多 60 位",
|
||||||
|
"user.password_tip": "密碼至少 6 位,且至少包含兩種組合:數字、字母或特殊字元",
|
||||||
|
"user.reset_password": "重置密碼",
|
||||||
|
"user.reset_password_tip": "未設置初始密碼/長時間未修改密碼,請重置密碼",
|
||||||
"user.team.Balance": "團隊餘額",
|
"user.team.Balance": "團隊餘額",
|
||||||
"user.team.Check Team": "切換",
|
"user.team.Check Team": "切換",
|
||||||
"user.team.Confirm Invite": "確認邀請",
|
"user.team.Confirm Invite": "確認邀請",
|
||||||
@ -1298,5 +1300,9 @@
|
|||||||
"xx_search_result": "{{key}} 的搜尋結果",
|
"xx_search_result": "{{key}} 的搜尋結果",
|
||||||
"yes": "是",
|
"yes": "是",
|
||||||
"yesterday": "昨天",
|
"yesterday": "昨天",
|
||||||
"yesterday_detail_time": "昨天 {{time}}"
|
"yesterday_detail_time": "昨天 {{time}}",
|
||||||
|
"zoomin_tip": "縮小 ctrl -",
|
||||||
|
"zoomin_tip_mac": "縮小 ⌘ -",
|
||||||
|
"zoomout_tip": "放大 ctrl +",
|
||||||
|
"zoomout_tip_mac": "放大 ⌘ +"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@
|
|||||||
"login.success": "登入成功",
|
"login.success": "登入成功",
|
||||||
"manage_team": "管理團隊",
|
"manage_team": "管理團隊",
|
||||||
"name": "名稱",
|
"name": "名稱",
|
||||||
|
"new_password": "新密碼",
|
||||||
"notification.remind_owner_bind": "請提醒建立者綁定通知帳號",
|
"notification.remind_owner_bind": "請提醒建立者綁定通知帳號",
|
||||||
"operations": "操作",
|
"operations": "操作",
|
||||||
"owner": "擁有者",
|
"owner": "擁有者",
|
||||||
|
|||||||
@ -63,6 +63,8 @@ WORKFLOW_MAX_LOOP_TIMES=50
|
|||||||
CHECK_INTERNAL_IP=false
|
CHECK_INTERNAL_IP=false
|
||||||
# 密码错误锁时长:s
|
# 密码错误锁时长:s
|
||||||
PASSWORD_LOGIN_LOCK_SECONDS=
|
PASSWORD_LOGIN_LOCK_SECONDS=
|
||||||
|
# 密码过期月份,不设置则不会过期
|
||||||
|
PASSWORD_EXPIRED_MONTH=
|
||||||
|
|
||||||
# 特殊配置
|
# 特殊配置
|
||||||
# 自定义跨域,不配置时,默认都允许跨域(逗号分割)
|
# 自定义跨域,不配置时,默认都允许跨域(逗号分割)
|
||||||
|
|||||||
@ -18,12 +18,26 @@ import WorkorderButton from './WorkorderButton';
|
|||||||
|
|
||||||
const Navbar = dynamic(() => import('./navbar'));
|
const Navbar = dynamic(() => import('./navbar'));
|
||||||
const NavbarPhone = dynamic(() => import('./navbarPhone'));
|
const NavbarPhone = dynamic(() => import('./navbarPhone'));
|
||||||
const NotSufficientModal = dynamic(() => import('@/components/support/wallet/NotSufficientModal'));
|
|
||||||
const SystemMsgModal = dynamic(() => import('@/components/support/user/inform/SystemMsgModal'));
|
const ResetExpiredPswModal = dynamic(
|
||||||
const ImportantInform = dynamic(() => import('@/components/support/user/inform/ImportantInform'));
|
() => import('@/components/support/user/safe/ResetExpiredPswModal'),
|
||||||
const UpdateContact = dynamic(() => import('@/components/support/user/inform/UpdateContactModal'));
|
{ ssr: false }
|
||||||
const ManualCopyModal = dynamic(() =>
|
);
|
||||||
import('@fastgpt/web/hooks/useCopyData').then((mod) => mod.ManualCopyModal)
|
const NotSufficientModal = dynamic(() => import('@/components/support/wallet/NotSufficientModal'), {
|
||||||
|
ssr: false
|
||||||
|
});
|
||||||
|
const SystemMsgModal = dynamic(() => import('@/components/support/user/inform/SystemMsgModal'), {
|
||||||
|
ssr: false
|
||||||
|
});
|
||||||
|
const ImportantInform = dynamic(() => import('@/components/support/user/inform/ImportantInform'), {
|
||||||
|
ssr: false
|
||||||
|
});
|
||||||
|
const UpdateContact = dynamic(() => import('@/components/support/user/inform/UpdateContactModal'), {
|
||||||
|
ssr: false
|
||||||
|
});
|
||||||
|
const ManualCopyModal = dynamic(
|
||||||
|
() => import('@fastgpt/web/hooks/useCopyData').then((mod) => mod.ManualCopyModal),
|
||||||
|
{ ssr: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
const pcUnShowLayoutRoute: Record<string, boolean> = {
|
const pcUnShowLayoutRoute: Record<string, boolean> = {
|
||||||
@ -56,8 +70,7 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
|||||||
const { toast } = useToast();
|
const { toast } = useToast();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { Loading } = useLoading();
|
const { Loading } = useLoading();
|
||||||
const { loading, feConfigs, notSufficientModalType, llmModelList, embeddingModelList } =
|
const { loading, feConfigs, llmModelList, embeddingModelList } = useSystemStore();
|
||||||
useSystemStore();
|
|
||||||
const { isPc } = useSystem();
|
const { isPc } = useSystem();
|
||||||
const { userInfo, isUpdateNotification, setIsUpdateNotification } = useUserStore();
|
const { userInfo, isUpdateNotification, setIsUpdateNotification } = useUserStore();
|
||||||
const { setUserDefaultLng } = useI18nLng();
|
const { setUserDefaultLng } = useI18nLng();
|
||||||
@ -66,6 +79,7 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
|||||||
() => router.pathname === '/chat' && Object.values(router.query).join('').length !== 0,
|
() => router.pathname === '/chat' && Object.values(router.query).join('').length !== 0,
|
||||||
[router.pathname, router.query]
|
[router.pathname, router.query]
|
||||||
);
|
);
|
||||||
|
const isHideNavbar = !!pcUnShowLayoutRoute[router.pathname];
|
||||||
|
|
||||||
// System hook
|
// System hook
|
||||||
const { data, refetch: refetchUnRead } = useQuery(['getUnreadCount'], getUnreadCount, {
|
const { data, refetch: refetchUnRead } = useQuery(['getUnreadCount'], getUnreadCount, {
|
||||||
@ -75,8 +89,6 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
|||||||
const unread = data?.unReadCount || 0;
|
const unread = data?.unReadCount || 0;
|
||||||
const importantInforms = data?.importantInforms || [];
|
const importantInforms = data?.importantInforms || [];
|
||||||
|
|
||||||
const isHideNavbar = !!pcUnShowLayoutRoute[router.pathname];
|
|
||||||
|
|
||||||
const showUpdateNotification =
|
const showUpdateNotification =
|
||||||
isUpdateNotification &&
|
isUpdateNotification &&
|
||||||
feConfigs?.bind_notification_method &&
|
feConfigs?.bind_notification_method &&
|
||||||
@ -153,14 +165,15 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
|||||||
</Box>
|
</Box>
|
||||||
{feConfigs?.isPlus && (
|
{feConfigs?.isPlus && (
|
||||||
<>
|
<>
|
||||||
{notSufficientModalType && <NotSufficientModal type={notSufficientModalType} />}
|
<NotSufficientModal />
|
||||||
{!!userInfo && <SystemMsgModal />}
|
<SystemMsgModal />
|
||||||
{showUpdateNotification && (
|
{showUpdateNotification && (
|
||||||
<UpdateContact onClose={() => setIsUpdateNotification(false)} mode="contact" />
|
<UpdateContact onClose={() => setIsUpdateNotification(false)} mode="contact" />
|
||||||
)}
|
)}
|
||||||
{!!userInfo && importantInforms.length > 0 && (
|
{!!userInfo && importantInforms.length > 0 && (
|
||||||
<ImportantInform informs={importantInforms} refetch={refetchUnRead} />
|
<ImportantInform informs={importantInforms} refetch={refetchUnRead} />
|
||||||
)}
|
)}
|
||||||
|
<ResetExpiredPswModal />
|
||||||
<WorkorderButton />
|
<WorkorderButton />
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -11,19 +11,27 @@ const Markdown = dynamic(() => import('@/components/Markdown'), { ssr: false });
|
|||||||
|
|
||||||
const SystemMsgModal = ({}: {}) => {
|
const SystemMsgModal = ({}: {}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { systemMsgReadId, setSysMsgReadId } = useUserStore();
|
const { userInfo, systemMsgReadId, setSysMsgReadId } = useUserStore();
|
||||||
|
|
||||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||||
|
|
||||||
const { data } = useRequest2(getSystemMsgModalData, {
|
const { data } = useRequest2(
|
||||||
refreshDeps: [systemMsgReadId],
|
async () => {
|
||||||
|
if (!userInfo?._id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return getSystemMsgModalData();
|
||||||
|
},
|
||||||
|
{
|
||||||
|
refreshDeps: [systemMsgReadId, userInfo?._id],
|
||||||
manual: false,
|
manual: false,
|
||||||
onSuccess(res) {
|
onSuccess(res) {
|
||||||
if (res?.content && (!systemMsgReadId || res.id !== systemMsgReadId)) {
|
if (res?.content && (!systemMsgReadId || res.id !== systemMsgReadId)) {
|
||||||
onOpen();
|
onOpen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
const onclickRead = useCallback(() => {
|
const onclickRead = useCallback(() => {
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
@ -31,12 +39,8 @@ const SystemMsgModal = ({}: {}) => {
|
|||||||
onClose();
|
onClose();
|
||||||
}, [data, onClose, setSysMsgReadId]);
|
}, [data, onClose, setSysMsgReadId]);
|
||||||
|
|
||||||
return (
|
return isOpen ? (
|
||||||
<MyModal
|
<MyModal isOpen iconSrc={LOGO_ICON} title={t('common:support.user.inform.System message')}>
|
||||||
isOpen={isOpen}
|
|
||||||
iconSrc={LOGO_ICON}
|
|
||||||
title={t('common:support.user.inform.System message')}
|
|
||||||
>
|
|
||||||
<ModalBody overflow={'auto'}>
|
<ModalBody overflow={'auto'}>
|
||||||
<Markdown source={data?.content} />
|
<Markdown source={data?.content} />
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
@ -44,7 +48,7 @@ const SystemMsgModal = ({}: {}) => {
|
|||||||
<Button onClick={onclickRead}>{t('common:support.inform.Read')}</Button>
|
<Button onClick={onclickRead}>{t('common:support.inform.Read')}</Button>
|
||||||
</ModalFooter>
|
</ModalFooter>
|
||||||
</MyModal>
|
</MyModal>
|
||||||
);
|
) : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default React.memo(SystemMsgModal);
|
export default React.memo(SystemMsgModal);
|
||||||
|
|||||||
@ -0,0 +1,121 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { ModalBody, Box, Flex, Input, ModalFooter, Button, HStack } from '@chakra-ui/react';
|
||||||
|
import MyModal from '@fastgpt/web/components/common/MyModal';
|
||||||
|
import { useTranslation } from 'next-i18next';
|
||||||
|
import { useForm } from 'react-hook-form';
|
||||||
|
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
|
||||||
|
import { resetPassword, getCheckPswExpired } from '@/web/support/user/api';
|
||||||
|
import { checkPasswordRule } from '@fastgpt/global/common/string/password';
|
||||||
|
import { useToast } from '@fastgpt/web/hooks/useToast';
|
||||||
|
import { useUserStore } from '@/web/support/user/useUserStore';
|
||||||
|
import Icon from '@fastgpt/web/components/common/Icon';
|
||||||
|
|
||||||
|
type FormType = {
|
||||||
|
newPsw: string;
|
||||||
|
confirmPsw: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const ResetPswModal = () => {
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const { toast } = useToast();
|
||||||
|
const { userInfo } = useUserStore();
|
||||||
|
|
||||||
|
const { register, handleSubmit, getValues } = useForm<FormType>({
|
||||||
|
defaultValues: {
|
||||||
|
newPsw: '',
|
||||||
|
confirmPsw: ''
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const {
|
||||||
|
data: passwordExpired = false,
|
||||||
|
runAsync,
|
||||||
|
loading: isFetching
|
||||||
|
} = useRequest2(
|
||||||
|
async () => {
|
||||||
|
if (!userInfo?._id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return getCheckPswExpired();
|
||||||
|
},
|
||||||
|
{
|
||||||
|
manual: false,
|
||||||
|
refreshDeps: [userInfo?._id]
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const { runAsync: onSubmit, loading: isSubmitting } = useRequest2(resetPassword, {
|
||||||
|
onSuccess() {
|
||||||
|
runAsync();
|
||||||
|
},
|
||||||
|
successToast: t('common:user.Update password successful'),
|
||||||
|
errorToast: t('common:user.Update password failed')
|
||||||
|
});
|
||||||
|
|
||||||
|
const onSubmitErr = (err: Record<string, any>) => {
|
||||||
|
const val = Object.values(err)[0];
|
||||||
|
if (!val) return;
|
||||||
|
if (val.message) {
|
||||||
|
toast({
|
||||||
|
status: 'warning',
|
||||||
|
title: val.message,
|
||||||
|
duration: 3000,
|
||||||
|
isClosable: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return passwordExpired ? (
|
||||||
|
<MyModal isOpen iconSrc="/imgs/modal/password.svg" title={t('common:user.reset_password')}>
|
||||||
|
<ModalBody>
|
||||||
|
<HStack p="3" color="primary.600" bgColor="primary.50" borderRadius="md">
|
||||||
|
<Icon name="common/info" w="1rem" />
|
||||||
|
<Box fontSize={'xs'}>{t('common:user.reset_password_tip')}</Box>
|
||||||
|
</HStack>
|
||||||
|
<Flex alignItems={'center'} mt={5}>
|
||||||
|
<Box flex={'0 0 70px'} fontSize={'sm'}>
|
||||||
|
{t('common:user.new_password') + ':'}
|
||||||
|
</Box>
|
||||||
|
<Input
|
||||||
|
flex={1}
|
||||||
|
type={'password'}
|
||||||
|
placeholder={t('common:user.password_tip')}
|
||||||
|
{...register('newPsw', {
|
||||||
|
required: true,
|
||||||
|
validate: (val) => {
|
||||||
|
if (!checkPasswordRule(val)) {
|
||||||
|
return t('common:user.password_tip');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
})}
|
||||||
|
></Input>
|
||||||
|
</Flex>
|
||||||
|
<Flex alignItems={'center'} mt={5}>
|
||||||
|
<Box flex={'0 0 70px'} fontSize={'sm'}>
|
||||||
|
{t('common:user.confirm_password') + ':'}
|
||||||
|
</Box>
|
||||||
|
<Input
|
||||||
|
flex={1}
|
||||||
|
type={'password'}
|
||||||
|
placeholder={t('common:user.confirm_password')}
|
||||||
|
{...register('confirmPsw', {
|
||||||
|
required: true,
|
||||||
|
validate: (val) => (getValues('newPsw') === val ? true : t('user:password.not_match'))
|
||||||
|
})}
|
||||||
|
></Input>
|
||||||
|
</Flex>
|
||||||
|
</ModalBody>
|
||||||
|
<ModalFooter>
|
||||||
|
<Button
|
||||||
|
isLoading={isSubmitting || isFetching}
|
||||||
|
onClick={handleSubmit((data) => onSubmit(data.newPsw), onSubmitErr)}
|
||||||
|
>
|
||||||
|
{t('common:Confirm')}
|
||||||
|
</Button>
|
||||||
|
</ModalFooter>
|
||||||
|
</MyModal>
|
||||||
|
) : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default React.memo(ResetPswModal);
|
||||||
@ -12,9 +12,9 @@ import { standardSubLevelMap } from '@fastgpt/global/support/wallet/sub/constant
|
|||||||
import { TeamErrEnum } from '@fastgpt/global/common/error/code/team';
|
import { TeamErrEnum } from '@fastgpt/global/common/error/code/team';
|
||||||
import { useMount } from 'ahooks';
|
import { useMount } from 'ahooks';
|
||||||
|
|
||||||
const NotSufficientModal = ({ type }: { type: NotSufficientModalType }) => {
|
const NotSufficientModal = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { setNotSufficientModalType } = useSystemStore();
|
const { notSufficientModalType: type, setNotSufficientModalType } = useSystemStore();
|
||||||
|
|
||||||
const onClose = () => setNotSufficientModalType(undefined);
|
const onClose = () => setNotSufficientModalType(undefined);
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ const NotSufficientModal = ({ type }: { type: NotSufficientModalType }) => {
|
|||||||
[TeamErrEnum.reRankNotEnough]: t('common:code_error.team_error.re_rank_not_enough')
|
[TeamErrEnum.reRankNotEnough]: t('common:code_error.team_error.re_rank_not_enough')
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return type ? (
|
||||||
<>
|
<>
|
||||||
<MyModal isOpen iconSrc="common/confirm/deleteTip" title={t('common:Warning')} w={'420px'}>
|
<MyModal isOpen iconSrc="common/confirm/deleteTip" title={t('common:Warning')} w={'420px'}>
|
||||||
<ModalBody>{textMap[type]}</ModalBody>
|
<ModalBody>{textMap[type]}</ModalBody>
|
||||||
@ -57,7 +57,7 @@ const NotSufficientModal = ({ type }: { type: NotSufficientModalType }) => {
|
|||||||
<RechargeModal onClose={onRechargeModalClose} onPaySuccess={onClose} />
|
<RechargeModal onClose={onRechargeModalClose} onPaySuccess={onClose} />
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
);
|
) : null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default NotSufficientModal;
|
export default NotSufficientModal;
|
||||||
|
|||||||
@ -0,0 +1,28 @@
|
|||||||
|
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
|
||||||
|
import { NextAPI } from '@/service/middleware/entry';
|
||||||
|
import { checkPswExpired } from '@/service/support/user/account/password';
|
||||||
|
import { authCert } from '@fastgpt/service/support/permission/auth/common';
|
||||||
|
import { MongoUser } from '@fastgpt/service/support/user/schema';
|
||||||
|
|
||||||
|
export type getTimeQuery = {};
|
||||||
|
|
||||||
|
export type getTimeBody = {};
|
||||||
|
|
||||||
|
export type getTimeResponse = boolean;
|
||||||
|
|
||||||
|
async function handler(
|
||||||
|
req: ApiRequestProps<getTimeBody, getTimeQuery>,
|
||||||
|
res: ApiResponseType<getTimeResponse>
|
||||||
|
): Promise<getTimeResponse> {
|
||||||
|
const { userId } = await authCert({ req, authToken: true });
|
||||||
|
|
||||||
|
const user = await MongoUser.findById(userId, 'passwordUpdateTime');
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkPswExpired({ updateTime: user.passwordUpdateTime });
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NextAPI(handler);
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
|
||||||
|
import { authCert } from '@fastgpt/service/support/permission/auth/common';
|
||||||
|
import { MongoUser } from '@fastgpt/service/support/user/schema';
|
||||||
|
import { NextAPI } from '@/service/middleware/entry';
|
||||||
|
import { i18nT } from '@fastgpt/web/i18n/utils';
|
||||||
|
import { checkPswExpired } from '@/service/support/user/account/password';
|
||||||
|
|
||||||
|
export type resetExpiredPswQuery = {};
|
||||||
|
|
||||||
|
export type resetExpiredPswBody = {
|
||||||
|
newPsw: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type resetExpiredPswResponse = {};
|
||||||
|
|
||||||
|
async function resetExpiredPswHandler(
|
||||||
|
req: ApiRequestProps<resetExpiredPswBody, resetExpiredPswQuery>,
|
||||||
|
res: ApiResponseType<resetExpiredPswResponse>
|
||||||
|
): Promise<resetExpiredPswResponse> {
|
||||||
|
const newPsw = req.body.newPsw;
|
||||||
|
const { userId } = await authCert({ req, authToken: true });
|
||||||
|
const user = await MongoUser.findById(userId, 'passwordUpdateTime').lean();
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
return Promise.reject('The password has not expired');
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if can reset password
|
||||||
|
const canReset = checkPswExpired({ updateTime: user.passwordUpdateTime });
|
||||||
|
|
||||||
|
if (!canReset) {
|
||||||
|
return Promise.reject(i18nT('common:user.No_right_to_reset_password'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新对应的记录
|
||||||
|
await MongoUser.updateOne(
|
||||||
|
{
|
||||||
|
_id: userId
|
||||||
|
},
|
||||||
|
{
|
||||||
|
password: newPsw,
|
||||||
|
passwordUpdateTime: new Date()
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default NextAPI(resetExpiredPswHandler);
|
||||||
@ -1,22 +1,22 @@
|
|||||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import { jsonRes } from '@fastgpt/service/common/response';
|
|
||||||
import { authCert } from '@fastgpt/service/support/permission/auth/common';
|
import { authCert } from '@fastgpt/service/support/permission/auth/common';
|
||||||
import { MongoUser } from '@fastgpt/service/support/user/schema';
|
import { MongoUser } from '@fastgpt/service/support/user/schema';
|
||||||
|
|
||||||
import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema';
|
import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema';
|
||||||
|
import { i18nT } from '@fastgpt/web/i18n/utils';
|
||||||
|
import { NextAPI } from '@/service/middleware/entry';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
|
async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
|
||||||
try {
|
|
||||||
const { oldPsw, newPsw } = req.body as { oldPsw: string; newPsw: string };
|
const { oldPsw, newPsw } = req.body as { oldPsw: string; newPsw: string };
|
||||||
|
|
||||||
if (!oldPsw || !newPsw) {
|
if (!oldPsw || !newPsw) {
|
||||||
throw new Error('Params is missing');
|
return Promise.reject('Params is missing');
|
||||||
}
|
}
|
||||||
|
|
||||||
const { tmbId } = await authCert({ req, authToken: true });
|
const { tmbId } = await authCert({ req, authToken: true });
|
||||||
const tmb = await MongoTeamMember.findById(tmbId);
|
const tmb = await MongoTeamMember.findById(tmbId);
|
||||||
if (!tmb) {
|
if (!tmb) {
|
||||||
throw new Error('can not find it');
|
return Promise.reject('can not find it');
|
||||||
}
|
}
|
||||||
const userId = tmb.userId;
|
const userId = tmb.userId;
|
||||||
// auth old password
|
// auth old password
|
||||||
@ -26,23 +26,20 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!user) {
|
if (!user) {
|
||||||
throw new Error('user.Old password is error');
|
return Promise.reject(i18nT('common:user.Old password is error'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oldPsw === newPsw) {
|
||||||
|
return Promise.reject(i18nT('common:user.Password has no change'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新对应的记录
|
// 更新对应的记录
|
||||||
await MongoUser.findByIdAndUpdate(userId, {
|
await MongoUser.findByIdAndUpdate(userId, {
|
||||||
password: newPsw
|
password: newPsw,
|
||||||
|
passwordUpdateTime: new Date()
|
||||||
});
|
});
|
||||||
|
|
||||||
jsonRes(res, {
|
return user;
|
||||||
data: {
|
|
||||||
user
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (err) {
|
|
||||||
jsonRes(res, {
|
|
||||||
code: 500,
|
|
||||||
error: err
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default NextAPI(handler);
|
||||||
|
|||||||
@ -60,14 +60,14 @@ const FastLogin = ({
|
|||||||
}, 1000);
|
}, 1000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[loginSuccess, router, toast]
|
[loginSuccess, router, t, toast]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
clearToken();
|
clearToken();
|
||||||
router.prefetch(callbackUrl);
|
router.prefetch(callbackUrl);
|
||||||
authCode(code, token);
|
authCode(code, token);
|
||||||
}, []);
|
}, [authCode, callbackUrl, code, router, token]);
|
||||||
|
|
||||||
return <Loading />;
|
return <Loading />;
|
||||||
};
|
};
|
||||||
|
|||||||
18
projects/app/src/service/support/user/account/password.ts
Normal file
18
projects/app/src/service/support/user/account/password.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
export const checkPswExpired = ({ updateTime }: { updateTime?: Date }) => {
|
||||||
|
if (!process.env.PASSWORD_EXPIRED_MONTH) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!updateTime) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const expiredMonth = Number(process.env.PASSWORD_EXPIRED_MONTH);
|
||||||
|
if (expiredMonth === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const time = new Date().getTime() - new Date(updateTime).getTime();
|
||||||
|
|
||||||
|
return time > 1000 * 60 * 60 * 24 * 30 * expiredMonth;
|
||||||
|
};
|
||||||
@ -68,6 +68,14 @@ export const updatePasswordByOld = ({ oldPsw, newPsw }: { oldPsw: string; newPsw
|
|||||||
newPsw: hashStr(newPsw)
|
newPsw: hashStr(newPsw)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const resetPassword = (newPsw: string) =>
|
||||||
|
POST('/support/user/account/resetExpiredPsw', {
|
||||||
|
newPsw: hashStr(newPsw)
|
||||||
|
});
|
||||||
|
|
||||||
|
/* Check the whether password has expired */
|
||||||
|
export const getCheckPswExpired = () => GET<boolean>('/support/user/account/checkPswExpired');
|
||||||
|
|
||||||
export const updateNotificationAccount = (data: { account: string; verifyCode: string }) =>
|
export const updateNotificationAccount = (data: { account: string; verifyCode: string }) =>
|
||||||
PUT('/proApi/support/user/team/updateNotificationAccount', data);
|
PUT('/proApi/support/user/team/updateNotificationAccount', data);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user