I18n: Completed i18n&&proofread some translations (#2619)

* i18n-1

* i18n: Completed the remaining parts of i18n and proofread some translations

* i18n: add default lang&&add app template i18n
This commit is contained in:
papapatrick
2024-09-05 17:29:36 +08:00
committed by GitHub
parent b4238257b6
commit dfcffc7fc1
30 changed files with 1590 additions and 1546 deletions

View File

@@ -1,19 +1,19 @@
import { NullPermission, PermissionKeyEnum, PermissionList } from '../constant'; import { NullPermission, PermissionKeyEnum, PermissionList } from '../constant';
import { PermissionListType } from '../type'; import { PermissionListType } from '../type';
import { i18nT } from '../../../../web/i18n/utils';
export enum AppPermissionKeyEnum {} export enum AppPermissionKeyEnum {}
export const AppPermissionList: PermissionListType = { export const AppPermissionList: PermissionListType = {
[PermissionKeyEnum.read]: { [PermissionKeyEnum.read]: {
...PermissionList[PermissionKeyEnum.read], ...PermissionList[PermissionKeyEnum.read],
description: '可使用该应用进行对话' description: i18nT('app:permission.des.read')
}, },
[PermissionKeyEnum.write]: { [PermissionKeyEnum.write]: {
...PermissionList[PermissionKeyEnum.write], ...PermissionList[PermissionKeyEnum.write],
description: '可查看和编辑应用' description: i18nT('app:permission.des.write')
}, },
[PermissionKeyEnum.manage]: { [PermissionKeyEnum.manage]: {
...PermissionList[PermissionKeyEnum.manage], ...PermissionList[PermissionKeyEnum.manage],
description: '写权限基础上,可配置发布渠道、查看对话日志、分配该应用权限' description: i18nT('app:permission.des.manage')
} }
}; };

View File

@@ -1,6 +1,6 @@
import { Permission } from './controller'; import { Permission } from './controller';
import { PermissionListType } from './type'; import { PermissionListType } from './type';
import { i18nT } from '../../../web/i18n/utils';
export enum AuthUserTypeEnum { export enum AuthUserTypeEnum {
token = 'token', token = 'token',
root = 'root', root = 'root',
@@ -27,15 +27,15 @@ export const PermissionTypeMap = {
}, },
[PermissionTypeEnum.publicRead]: { [PermissionTypeEnum.publicRead]: {
iconLight: 'support/permission/publicLight', iconLight: 'support/permission/publicLight',
label: '团队可访问' label: i18nT('user:permission.team_read')
}, },
[PermissionTypeEnum.publicWrite]: { [PermissionTypeEnum.publicWrite]: {
iconLight: 'support/permission/publicLight', iconLight: 'support/permission/publicLight',
label: '团队可编辑' label: i18nT('user:permission.team_write')
}, },
[PermissionTypeEnum.clbPrivate]: { [PermissionTypeEnum.clbPrivate]: {
iconLight: 'support/permission/privateLight', iconLight: 'support/permission/privateLight',
label: '仅协作者' label: i18nT('user:permission.only_collaborators')
} }
}; };
@@ -53,19 +53,19 @@ export enum PermissionKeyEnum {
} }
export const PermissionList: PermissionListType = { export const PermissionList: PermissionListType = {
[PermissionKeyEnum.read]: { [PermissionKeyEnum.read]: {
name: '读权限', name: i18nT('common:permission.read'),
description: '', description: '',
value: 0b100, value: 0b100,
checkBoxType: 'single' checkBoxType: 'single'
}, },
[PermissionKeyEnum.write]: { [PermissionKeyEnum.write]: {
name: '写权限', name: i18nT('common:permission.write'),
description: '', description: '',
value: 0b110, // 如果某个资源有特殊要求,再重写这个值 value: 0b110, // 如果某个资源有特殊要求,再重写这个值
checkBoxType: 'single' checkBoxType: 'single'
}, },
[PermissionKeyEnum.manage]: { [PermissionKeyEnum.manage]: {
name: '管理员', name: i18nT('common:permission.manager'),
description: '', description: '',
value: 0b111, value: 0b111,
checkBoxType: 'single' checkBoxType: 'single'

View File

@@ -1,3 +1,4 @@
import { i18nT } from '../../../../web/i18n/utils';
import { NullPermission, PermissionKeyEnum, PermissionList } from '../constant'; import { NullPermission, PermissionKeyEnum, PermissionList } from '../constant';
export enum DatasetPermissionKeyEnum {} export enum DatasetPermissionKeyEnum {}
@@ -5,15 +6,15 @@ export enum DatasetPermissionKeyEnum {}
export const DatasetPermissionList = { export const DatasetPermissionList = {
[PermissionKeyEnum.read]: { [PermissionKeyEnum.read]: {
...PermissionList[PermissionKeyEnum.read], ...PermissionList[PermissionKeyEnum.read],
description: '可查看知识库内容' description: i18nT('dataset:permission.des.read')
}, },
[PermissionKeyEnum.write]: { [PermissionKeyEnum.write]: {
...PermissionList[PermissionKeyEnum.write], ...PermissionList[PermissionKeyEnum.write],
description: '可增加和变更知识库内容' description: i18nT('dataset:permission.des.write')
}, },
[PermissionKeyEnum.manage]: { [PermissionKeyEnum.manage]: {
...PermissionList[PermissionKeyEnum.manage], ...PermissionList[PermissionKeyEnum.manage],
description: '可管理整个知识库数据和信息' description: i18nT('dataset:permission.des.manage')
} }
}; };

View File

@@ -1,18 +1,18 @@
import { PermissionKeyEnum, PermissionList, ReadPermissionVal } from '../constant'; import { PermissionKeyEnum, PermissionList, ReadPermissionVal } from '../constant';
import { PermissionListType } from '../type'; import { PermissionListType } from '../type';
import { i18nT } from '../../../../web/i18n/utils';
export const TeamPermissionList: PermissionListType = { export const TeamPermissionList: PermissionListType = {
[PermissionKeyEnum.read]: { [PermissionKeyEnum.read]: {
...PermissionList[PermissionKeyEnum.read], ...PermissionList[PermissionKeyEnum.read],
description: '成员仅可阅读相关资源,无法新建资源' description: i18nT('user:permission_des.read')
}, },
[PermissionKeyEnum.write]: { [PermissionKeyEnum.write]: {
...PermissionList[PermissionKeyEnum.write], ...PermissionList[PermissionKeyEnum.write],
description: '除了可读资源外,还可以新建新的资源' description: i18nT('user:permission_des.write')
}, },
[PermissionKeyEnum.manage]: { [PermissionKeyEnum.manage]: {
...PermissionList[PermissionKeyEnum.manage], ...PermissionList[PermissionKeyEnum.manage],
description: '可创建资源、邀请、删除成员' description: i18nT('user:permission_des.manage')
} }
}; };

View File

@@ -14,13 +14,13 @@ export enum UsageSourceEnum {
export const UsageSourceMap = { export const UsageSourceMap = {
[UsageSourceEnum.fastgpt]: { [UsageSourceEnum.fastgpt]: {
label: '在线使用' label: i18nT('common:core.chat.logs.online')
}, },
[UsageSourceEnum.api]: { [UsageSourceEnum.api]: {
label: 'Api' label: 'Api'
}, },
[UsageSourceEnum.shareLink]: { [UsageSourceEnum.shareLink]: {
label: '免登录链接' label: i18nT('common:core.chat.logs.free_login')
}, },
[UsageSourceEnum.training]: { [UsageSourceEnum.training]: {
label: 'dataset.Training Name' label: 'dataset.Training Name'

View File

@@ -1,177 +1,162 @@
{ {
"Run": "Run", "Run": "Execute",
"ai_settings": "AI Settings", "ai_settings": "AI Configuration",
"all_apps": "All Apps", "all_apps": "All Applications",
"app": { "app": {
"Version name": "Version name", "Version name": "Version Name",
"modules": { "modules": {
"click to update": "click to update", "click to update": "Click to Refresh",
"has new version": "has new version" "has new version": "New Version Available"
}, },
"version_back": "Back to initial", "version_back": "Revert to Original State",
"version_copy": "Copy", "version_copy": "Duplicate",
"version_current": "current version", "version_current": "Current Version",
"version_initial": "Initial version", "version_initial": "Initial Version",
"version_initial_copy": "Copy-Initial state", "version_initial_copy": "Duplicate - Original State",
"version_name_tips": "Version name can't be empty.", "version_name_tips": "Version name cannot be empty",
"version_past": "published", "version_past": "Previously Published",
"version_publish_tips": "This version will be saved to the team's cloud, synchronized with the entire team, and update the application versions across all publishing channels.", "version_publish_tips": "This version will be saved to the team cloud, synchronized with the entire team, and update the app version on all release channels.",
"version_save_tips": "This version will be saved to the team's cloud and synchronized with the entire team." "version_save_tips": "This version will be saved to the team cloud, synchronized with the entire team."
}, },
"app_detail": "App Details", "app_detail": "Application Details",
"chat_debug": "Chat Debug", "chat_debug": "Chat Preview",
"chat_logs": "Chat Logs", "chat_logs": "Conversation Logs",
"chat_logs_tips": "Logs will record online, shared and API (chatId required) conversation records for this app", "chat_logs_tips": "Logs will record the online, shared, and API (requires chatId) conversation records of this app.",
"config_file_upload": "Click to configure file upload rules", "config_file_upload": "Click to Configure File Upload Rules",
"confirm_copy_app_tip": "The system will create an application with the same configuration for you, but the permission will not be copied, please confirm!", "confirm_copy_app_tip": "The system will create an app with the same configuration for you, but permissions will not be copied. Please confirm!",
"confirm_del_app_tip": "Confirm to delete this app and all its chat records?", "confirm_del_app_tip": "Confirm to delete this app and all its conversation records?",
"confirm_delete_folder_tip": "Are you sure to delete this folder? All the following applications and corresponding chat records will be deleted, please confirm!", "confirm_delete_folder_tip": "Confirm to delete this folder? All apps and corresponding conversation records under it will be deleted. Please confirm!",
"copy_one_app": "Copy", "copy_one_app": "Create Duplicate",
"create_copy_success": "Create copy success", "create_copy_success": "Duplicate Created Successfully",
"create_empty_app": "Create default app", "create_empty_app": "Create Blank App",
"create_empty_plugin": "Create default plugin", "create_empty_plugin": "Create Blank Plugin",
"create_empty_workflow": "Create default workflow", "create_empty_workflow": "Create Blank Workflow",
"cron": { "cron": {
"every_day": "Executed every day", "every_day": "Run Daily",
"every_month": "Executed monthly", "every_month": "Run Monthly",
"every_week": "Executed every week", "every_week": "Run Weekly",
"interval": "interval execution" "interval": "Run at Intervals"
}, },
"current_settings": "Current settings", "current_settings": "Current Configuration",
"day": "day", "day": "Day",
"document_quote": "Document quote", "document_quote": "Document Reference",
"document_quote_tip": "It is usually used to accept document content uploaded by users (which requires document parsing), and can also be used to reference other string data.", "document_quote_tip": "Usually used to accept user-uploaded document content (requires document parsing), and can also be used to reference other string data.",
"document_upload": "Document upload", "document_upload": "Document Upload",
"edit_app": "Edit app", "edit_app": "Edit Application",
"edit_info": "Edit info", "edit_info": "Edit Information",
"execute_time": "execution time", "execute_time": "Execution Time",
"export_config_successful": "Config copied, please check for important data", "export_config_successful": "Configuration copied, some sensitive information automatically filtered. Please check for any remaining sensitive data.",
"export_configs": "Export Configs", "export_configs": "Export Configurations",
"feedback_count": "User Feedback", "feedback_count": "User Feedback",
"file_recover": "The file will overwrite the current content", "file_recover": "File will overwrite current content",
"file_upload": "file_upload", "file_upload": "File Upload",
"file_upload_tip": "After it is enabled, you can upload documents/pictures. Documents are kept for 7 days and pictures for 15 days. Use of this feature may incur additional charges. To ensure the user experience, select an AI model with a large context length when using this function.", "file_upload_tip": "Once enabled, documents/images can be uploaded. Documents are retained for 7 days, images for 15 days. Using this feature may incur additional costs. To ensure a good experience, please choose an AI model with a larger context length when using this feature.",
"go_to_chat": "To chat", "go_to_chat": "Go to Conversation",
"go_to_run": "Run", "go_to_run": "Go to Execution",
"image_upload": "Image upload", "image_upload": "Image Upload",
"image_upload_tip": "Be sure to select a visual model that can handle the picture", "image_upload_tip": "Please ensure to select a vision model that can process images.",
"import_configs": "Import Configs", "import_configs": "Import Configurations",
"import_configs_failed": "Failed to import configs, please ensure configs are valid!", "import_configs_failed": "Import configuration failed, please ensure the configuration is correct!",
"import_configs_success": "Import successful", "import_configs_success": "Import Successful",
"interval": { "interval": {
"12_hours": "every 12 hours", "12_hours": "Every 12 Hours",
"2_hours": "every 2 hours", "2_hours": "Every 2 Hours",
"3_hours": "every 3 hours", "3_hours": "Every 3 Hours",
"4_hours": "every 4 hours", "4_hours": "Every 4 Hours",
"6_hours": "every 6 hours", "6_hours": "Every 6 Hours",
"per_hour": "per hour" "per_hour": "Every Hour"
}, },
"intro": "It is a large model application orchestration system that provides out-of-the-box data processing, model calling and other capabilities. It can quickly build a knowledge base and perform workflow orchestration through Flow visualization to realize complex knowledge base scenarios!", "intro": "A comprehensive model application orchestration system that offers out-of-the-box data processing and model invocation capabilities. It allows for rapid Dataset construction and workflow orchestration through Flow visualization, enabling complex Dataset scenarios!",
"llm_not_support_vision": "This model does not support image recognition", "llm_not_support_vision": "This model does not support image recognition",
"llm_use_vision": "Enable vision", "llm_use_vision": "Enable Image Recognition",
"llm_use_vision_tip": "When image recognition is enabled, the model automatically receives images from Dialog Uploads, as well as image links from User Questions.", "llm_use_vision_tip": "Once image recognition is enabled, this model will automatically receive images uploaded from the 'dialog box' and image links in 'user questions'.",
"logs_empty": "No logs yet~", "logs_empty": "No logs yet~",
"logs_message_total": "Total Messages", "logs_message_total": "Total Messages",
"logs_title": "Title", "logs_title": "Title",
"mark_count": "Marked Answer Count", "mark_count": "Number of Marked Answers",
"module": { "module": {
"Confirm Sync": "The template will be updated to the latest template configuration. Fields that do not exist in the template will be deleted (including all custom fields). You are advised to make a copy of the node and then update the original node version.", "Confirm Sync": "Will update to the latest template configuration. Fields not in the template will be deleted (including all custom fields). It is recommended to copy a node first, then update the original node version.",
"Custom Title Tip": "This title will be displayed during the conversation", "Custom Title Tip": "This title will be displayed during the conversation.",
"No Modules": "No plugins yet~", "No Modules": "No Plugins Found",
"type": "\"{{type}}\" type\n{{description}}" "type": "\"{{type}}\" type\n{{description}}"
}, },
"modules": { "modules": {
"Title is required": "Module name cannot be empty" "Title is required": "Module name cannot be empty"
}, },
"month": { "month": {
"unit": "Number" "unit": "Day"
}, },
"move_app": "Move app", "move_app": "Move Application",
"no": "no",
"not_json_file": "Please select a JSON file", "not_json_file": "Please select a JSON file",
"or_drag_JSON": "Or drag in a JSON file", "or_drag_JSON": "or drag in JSON file",
"paste_config": "Paste Config", "paste_config": "Paste Configuration",
"plugin_cost_per_times": "{{cost}}/per time", "permission": {
"plugin_dispatch": "Plugins", "des": {
"plugin_dispatch_tip": "It is up to the model to decide which plug-ins to add additional capabilities to. If the plug-in is selected, the knowledge base call is also treated as a special plug-in.", "manage": "Based on write permissions, you can configure publishing channels, view conversation logs, and assign permissions to the application.",
"publish_channel": "Publish channel", "read": "Use the app to have conversations",
"publish_success": "Publish success", "write": "Can view and edit apps"
"saved_success": "Saved success",
"search_app": "Search app",
"setting_app": "Settings",
"setting_plugin": "Setting plugin",
"support": {
"wallet": {
"bill_tag": {
"bill": "billing records",
"default_header": "Default header",
"invoice": "Invoicing records"
},
"invoice_data": {
"bank": "Bank of deposit",
"bank_account": "Account opening account",
"company_address": "company address",
"company_phone": "company phone",
"email": "email address",
"in_valid": "There are empty fields or incorrect email formats",
"need_special_invoice": "Do you need a special ticket?",
"organization_name": "name of association",
"unit_code": "same credit code"
},
"invoicing": "Invoicing"
} }
}, },
"plugin_cost_per_times": "{{cost}}/time",
"plugin_dispatch": "Plugin Invocation",
"plugin_dispatch_tip": "Adds extra capabilities to the model. The specific plugins to be invoked will be autonomously decided by the model.\nIf a plugin is selected, the Dataset invocation will automatically be treated as a special plugin.",
"publish_channel": "Publish Channel",
"publish_success": "Publish Successful",
"saved_success": "Save Successful",
"search_app": "Search Application",
"setting_app": "Application Settings",
"setting_plugin": "Plugin Settings",
"template": { "template": {
"simple_robot": "Simple Robot" "simple_robot": "Simple Robot"
}, },
"templateMarket": { "templateMarket": {
"Search_template": "Search template", "Search_template": "Search Template",
"Template_market": "Template market", "Template_market": "Template Market",
"Use": "Use", "Use": "Use",
"no_intro": "No intro~", "no_intro": "No introduction yet~",
"templateTags": { "templateTags": {
"Image_generation": "Image generation", "Image_generation": "Image Generation",
"Office_services": "Office searvices", "Office_services": "Office Services",
"Recommendation": "recommend", "Recommendation": "Recommendation",
"Roleplay": "Roleplay", "Roleplay": "Roleplay",
"Web_search": "Web search", "Web_search": "Web Search",
"Writing": "Writing" "Writing": "Writing"
} }
}, },
"template_market": "Templates", "template_market": "Template Market",
"template_market_description": "Explore more ways to play in the template market, configuration tutorials and usage guides will help you understand and get started with various applications.", "template_market_description": "Explore more features in the template market, with configuration tutorials and usage guides to help you understand and get started with various applications.",
"template_market_empty_data": "No suitable template found", "template_market_empty_data": "No suitable templates found",
"time_zone": "Time zone", "time_zone": "Time Zone",
"tool_input_param_tip": "Configure related information before the plugin runs properly", "tool_input_param_tip": "This plugin requires configuration of related information to run properly.",
"transition_to_workflow": "Transition to workflow", "transition_to_workflow": "Convert to Workflow",
"transition_to_workflow_create_new_placeholder": "Create a new application instead of modifying the current one", "transition_to_workflow_create_new_placeholder": "Create a new app instead of modifying the current app",
"transition_to_workflow_create_new_tip": "After converting to workflow, it will not be able to convert back to simple mode, please confirm!", "transition_to_workflow_create_new_tip": "Once converted to a workflow, it cannot be reverted to simple mode. Please confirm!",
"type": { "type": {
"All": "All", "All": "All",
"Create http plugin tip": "Create plug-ins in batches using OpenAPI schema, compatible with GPTs format", "Create http plugin tip": "Batch create plugins through OpenAPI Schema, compatible with GPTs format.",
"Create one plugin tip": "The input and output workflows can be customized", "Create one plugin tip": "Customizable input and output workflows, usually used to encapsulate reusable workflows.",
"Create plugin bot": "Create plugin bot", "Create plugin bot": "Create Plugin",
"Create simple bot": "Create simple bot", "Create simple bot": "Create Simple App",
"Create simple bot tip": "Create simple AI applications in form form", "Create simple bot tip": "Create a simple AI app by filling out a form, suitable for beginners.",
"Create template tip": "Explore more ways to play in the template market to help you understand and use various applications", "Create template tip": "Explore more features in the template market to help you understand and get started with various applications.",
"Create workflow bot": "Create workflow bot", "Create workflow bot": "Create Workflow",
"Create workflow tip": "Through the way of low code, build a logically complex multi-round dialogue AI application, recommended for advanced players", "Create workflow tip": "Build complex multi-turn dialogue AI applications through low-code methods, recommended for advanced users.",
"Http plugin": "Http plugin", "Http plugin": "HTTP Plugin",
"Plugin": "Plugin", "Plugin": "Plugin",
"Simple bot": "Simple bot", "Simple bot": "Simple App",
"Template": "Create by template", "Template": "Create via Template",
"Workflow bot": "Workflow" "Workflow bot": "Workflow"
}, },
"upload_file_max_amount": "Max files", "upload_file_max_amount": "Maximum File Quantity",
"upload_file_max_amount_tip": "1. The maximum number of files to be uploaded at a time.\n2. The maximum number of files that can be remembered in the dialog window: Files in the history are automatically retrieved for each round of conversation, and files that are out of range are forgotten.", "upload_file_max_amount_tip": "1. The maximum number of files that can be uploaded at one time.\n2. The maximum number of files remembered by the chat window: each round of dialogue will automatically retrieve files from history, files beyond the range will be forgotten.",
"variable": { "variable": {
"select type_desc": "You can define a global variable that does not need to be filled in by the user.\n\nThe value of this variable can come from the API interface, the Query of the shared link, or be assigned through the [Variable Update] module.", "select type_desc": "A global variable that does not require user input can be defined.\nThe value of this variable can come from an API interface, a query in a shared link, or be assigned through the [Variable Update] module.",
"textarea_type_desc": "A dialog box that allows the user to enter up to 4000 words." "textarea_type_desc": "Allows users to input up to 4000 characters in the dialogue box."
}, },
"version": { "version": {
"Revert success": "Revert success" "Revert success": "Revert Successful"
}, },
"vision_model_title": "Enable image recognition", "vision_model_title": "Enable Image Recognition",
"week": { "week": {
"Friday": "Friday", "Friday": "Friday",
"Monday": "Monday", "Monday": "Monday",
@@ -182,25 +167,24 @@
"Wednesday": "Wednesday" "Wednesday": "Wednesday"
}, },
"workflow": { "workflow": {
"Input guide": "Input guide", "Input guide": "Input Guide",
"file_url": "Url", "file_url": "Document Link",
"option1": "Option 1", "option1": "Option 1",
"option2": "Option 2", "option2": "Option 2",
"read_files": "Documents parse", "read_files": "Document Parsing",
"read_files_result": "Document parsing results", "read_files_result": "Document Parsing Result",
"read_files_result_desc": "The original text of the document consists of the file name and the document content. Multiple files are separated by horizontal lines.", "read_files_result_desc": "Original document text, consisting of file names and document content, separated by hyphens between multiple files.",
"read_files_tip": "Parse all uploaded documents in the conversation and return the corresponding document content", "read_files_tip": "Parse all uploaded documents in the dialogue and return the corresponding document content.",
"select_description": "Select description", "select_description": "Description Text",
"select_description_placeholder": "For example: \n\nAre there any tomatoes in the refrigerator?", "select_description_placeholder": "For example: \nAre there tomatoes in the fridge?",
"select_description_tip": "You can add a descriptive text to explain to users what each option represents.", "select_description_tip": "You can add a description text to explain the meaning of each option to the user.",
"select_result": "Select result", "select_result": "Selected Result",
"template": { "template": {
"communication": "Communication" "communication": "Communication"
}, },
"user_file_input": "Files url", "user_file_input": "File Link",
"user_file_input_desc": "Links to documents and images uploaded by users", "user_file_input_desc": "Links to documents and images uploaded by users.",
"user_select": "User select", "user_select": "User Selection",
"user_select_tip": "The module can have multiple options that lead to different workflow branches" "user_select_tip": "This module can configure multiple options for selection during the dialogue. Different options can lead to different workflow branches."
}, }
"yes": "yes"
} }

View File

@@ -1,41 +1,41 @@
{ {
"Delete_all": "Delete all", "Delete_all": "Clear All Lexicon",
"chat_history": "chat record", "chat_history": "Conversation History",
"chat_input_guide_lexicon_is_empty": "No vocabulary has been configured yet", "chat_input_guide_lexicon_is_empty": "Lexicon not configured yet",
"citations": "{{num}} citations", "citations": "{{num}} References",
"click_contextual_preview": "Click to see contextual preview", "click_contextual_preview": "Click to see contextual preview",
"config_input_guide": "Configure input boot", "config_input_guide": "Set Up Input Guide",
"config_input_guide_lexicon": "Configure thesaurus", "config_input_guide_lexicon": "Set Up Lexicon",
"config_input_guide_lexicon_title": "Configure thesaurus", "config_input_guide_lexicon_title": "Set Up Lexicon",
"content_empty": "Content is empty", "content_empty": "No Content",
"contextual": "context", "contextual": "{{num}} Contexts",
"contextual_preview": "Contextual preview", "contextual_preview": "Contextual Preview {{num}} Items",
"csv_input_lexicon_tip": "Only supports CSV batch import, click to download the template", "csv_input_lexicon_tip": "Only CSV batch import is supported, click to download the template",
"custom_input_guide_url": "Custom thesaurus address", "custom_input_guide_url": "Custom Lexicon URL",
"delete_all_input_guide_confirm": "Confirm to delete all input guide lexicons", "delete_all_input_guide_confirm": "Are you sure you want to clear the input guide lexicon?",
"empty_directory": "There is nothing left to choose from in this directory~", "empty_directory": "This directory is empty~",
"file_amount_over": "Exceed maximum number of files {{max}}", "file_amount_over": "Exceeded maximum file quantity {{max}}",
"in_progress": "in progress", "in_progress": "In Progress",
"input_guide": "Input guide", "input_guide": "Input Guide",
"input_guide_lexicon": "Lexicon", "input_guide_lexicon": "Lexicon",
"input_guide_tip": "You can configure some preset questions. When the user enters a question, the relevant question is retrieved from these preset questions for prompt.", "input_guide_tip": "You can set up some preset questions. When the user inputs a question, related questions from these presets will be suggested.",
"insert_input_guide,_some_data_already_exists": "Duplicate data, automatically filtered, insert: {{len}} data", "insert_input_guide,_some_data_already_exists": "Duplicate data detected, automatically filtered, {{len}} items inserted",
"is_chatting": "Chatting...please wait for the end", "is_chatting": "Chatting in progress... please wait until it finishes",
"items": "strip", "items": "Items",
"module_runtime_and": "module run time and", "module_runtime_and": "Total Module Runtime",
"multiple_AI_conversations": "Multiple AI conversations", "multiple_AI_conversations": "Multiple AI Conversations",
"new_chat": "new conversation", "new_chat": "New Conversation",
"new_input_guide_lexicon": "New lexicon", "new_input_guide_lexicon": "New Lexicon",
"no_workflow_response": "No running data", "no_workflow_response": "No workflow data",
"plugins_output": "Plugin output", "plugins_output": "Plugin Output",
"question_tip": "From left to right, the response order of each module", "question_tip": "From top to bottom, the response order of each module",
"rearrangement": "Search results rearranged", "rearrangement": "Rearrangement of Retrieval Results",
"response": { "response": {
"node_inputs": "Node input" "node_inputs": "Node Inputs"
}, },
"select_file": "Select file", "select_file": "Select File",
"select_img": "Select images", "select_img": "Select Image",
"stream_output": "stream output", "stream_output": "Stream Output",
"view_citations": "View citations", "view_citations": "View References",
"web_site_sync": "Web site synchronization" "web_site_sync": "Web Site Sync"
} }

File diff suppressed because it is too large Load Diff

View File

@@ -3,40 +3,48 @@
"Enable": "Enable", "Enable": "Enable",
"Enabled": "Enabled", "Enabled": "Enabled",
"collection": { "collection": {
"Create update time": "Create/Update time", "Create update time": "Creation/Update Time",
"Training type": "Training type" "Training type": "Training Mode"
}, },
"collection_tags": "Tags", "collection_tags": "Collection Tags",
"common_dataset": "Common dataset", "common_dataset": "General Dataset",
"common_dataset_desc": "Can be built by importing files, web links, or manual entry", "common_dataset_desc": "Build a Dataset by importing files, web links, or manual input.",
"confirm_to_rebuild_embedding_tip": "Are you sure to switch the knowledge base index?\nSwitching index is a very heavy operation that requires re-indexing all the data in your knowledge base, which may take a long time. Please ensure that the remaining points in your account are sufficient.\n\nIn addition, you need to be careful to modify the applications that select this knowledge base to avoid mixing them with other index model knowledge bases.", "confirm_to_rebuild_embedding_tip": "Are you sure you want to switch the index for the Dataset?\nSwitching the index is a significant operation that requires re-indexing all data in your Dataset, which may take a long time. Please ensure your account has sufficient remaining points.\n\nAdditionally, you need to update the applications that use this Dataset to avoid conflicts with other indexed model Datasets.",
"dataset": { "dataset": {
"no_collections": "no collections", "no_collections": "No datasets available",
"no_tags": "no tags" "no_tags": "No tags available"
}, },
"external_file": "External file", "external_file": "External File Library",
"external_file_dataset_desc": "You can import files from an external file library to build a knowledge base. Files are not stored twice", "external_file_dataset_desc": "Import files from an external file library to build a Dataset. The files will not be stored again.",
"external_id": "File id", "external_id": "File Reading ID",
"external_read_url": "External read url", "external_read_url": "External Preview URL",
"external_read_url_tip": "You can configure the reading address of your file library. This allows users to read and authenticate. You can currently use the {{fileId}} variable to refer to the external file ID.", "external_read_url_tip": "Configure the reading URL of your file library for user authentication. Use the {{fileId}} variable to refer to the external file ID.",
"external_url": "File read url", "external_url": "File Access URL",
"file_model_function_tip": "For enhanced indexing and QA generation", "file_model_function_tip": "Enhances indexing and QA generation",
"filename": "filename", "filename": "Filename",
"folder_dataset": "Folder", "folder_dataset": "Folder",
"rebuild_embedding_start_tip": "The task of switching index models has begun", "permission": {
"rebuilding_index_count": "Rebuilding count: {{count}}", "des": {
"tag": { "manage": "Can manage the entire knowledge base data and information",
"Add New": "Add new", "read": "View knowledge base content",
"Add_new_tag": "Add new tag", "write": "Ability to add and change knowledge base content"
"Edit_tag": "Edit tag", }
"add": "Add",
"cancel": "Cancel",
"delete_tag_confirm": "Confirm to delete tag",
"manage": "Manage",
"searchOrAddTag": "Search or add tags",
"tags": "Tags"
}, },
"the_knowledge_base_has_indexes_that_are_being_trained_or_being_rebuilt": "The knowledge base has indexes that are being trained or being rebuilt", "rebuild_embedding_start_tip": "Index model switching task has started",
"website_dataset": "Web site", "rebuilding_index_count": "Number of indexes being rebuilt: {{count}}",
"website_dataset_desc": "Web site synchronization allows you to use a web page link to build a dataset" "tag": {
"Add New": "Add New",
"Add_new_tag": "Add New Tag",
"Edit_tag": "Edit Tag",
"add": "Create",
"cancel": "Cancel",
"delete_tag_confirm": "Confirm to delete the tag?",
"manage": "Tagging",
"searchOrAddTag": "Search or Add Tag",
"tags": "Tags",
"total_tags": "Total {{total}} tags"
},
"the_knowledge_base_has_indexes_that_are_being_trained_or_being_rebuilt": "The Dataset has indexes that are being trained or rebuilt",
"website_dataset": "Website Sync",
"website_dataset_desc": "Website sync allows you to build a Dataset directly using a web link."
} }

View File

@@ -1,18 +1,18 @@
{ {
"bucket_chat": "Chat file", "bucket_chat": "Conversation Files",
"bucket_file": "Dataset file", "bucket_file": "Dataset Documents",
"click_to_view_raw_source": "View source", "click_to_view_raw_source": "Click to View Original Source",
"file_name": "File Name", "file_name": "Filename",
"file_size": "File Size", "file_size": "Filesize",
"reached_max_file_count": "Maximum number of files reached", "release_the_mouse_to_upload_the_file": "Release Mouse to Upload File",
"release_the_mouse_to_upload_the_file": "Release the mouse to upload the file", "select_and_drag_file_tip": "Click or Drag Files Here to Upload",
"select_and_drag_file_tip": "Click or drag files here to upload",
"select_file_amount_limit": "You can select up to {{max}} files", "select_file_amount_limit": "You can select up to {{max}} files",
"some_file_count_exceeds_limit": "Exceeds {{maxCount}} files, automatically truncated", "some_file_count_exceeds_limit": "Exceeded {{maxCount}} files, automatically truncated",
"some_file_size_exceeds_limit": "Some files exceed: {{maxSize}}, have been filtered", "some_file_size_exceeds_limit": "Some files exceed {{maxSize}}, filtered out",
"support_file_type": "Supports {{fileType}} type files", "support_file_type": "Supports {{fileType}} file types",
"support_max_count": "Supports up to {{maxCount}} files.", "support_max_count": "Supports up to {{maxCount}} files",
"support_max_size": "Maximum size per file: {{maxSize}}.", "support_max_size": "Maximum file size is {{maxSize}}",
"upload_error_description": "Only supports uploading multiple files or one folder at a time", "upload_failed": "Upload Failed",
"upload_failed": "Upload failed" "reached_max_file_count": "Maximum file count reached",
"upload_error_description": "Only multiple files or a single folder can be uploaded at a time"
} }

View File

@@ -1,43 +1,43 @@
{ {
"app_key_tips": "These keys have the current application identification, refer to the document for specific use ", "app_key_tips": "These keys are already linked to the current application. Check the documentation for detailed usage.",
"basic_info": "Basic information", "basic_info": "Basic Info",
"copy_link_hint": "Copy the link below to the specified location", "copy_link_hint": "Copy the link below to the specified location",
"create_api_key": "Create new Key", "create_api_key": "Create New Key",
"create_link": "Create link", "create_link": "Create Link",
"default_response": "Default Response", "default_response": "Default Response",
"edit_api_key": "Edit Key information", "edit_api_key": "Edit Key Details",
"edit_feishu_bot": "Edit Feishu Robot", "edit_feishu_bot": "Edit Feishu Bot",
"edit_link": "Edit", "edit_link": "Edit",
"feishu_api": "Feishu interface", "feishu_api": "Feishu API",
"feishu_bot": "Feishu Robot", "feishu_bot": "Feishu Bot",
"feishu_bot_desc": "Directly access Feishu Robot through API", "feishu_bot_desc": "Connect to Feishu Bot directly via API",
"feishu_name": "Lark", "feishu_name": "Feishu",
"key_alias": "key alias, for display only ", "key_alias": "Key alias, for display only",
"key_tips": "You can use the API Key to access certain interfaces (you can't access the app, you need to use the API key within the app to access the app)", "key_tips": "You can use the API key to access specific interfaces (cannot access the application, use the in-app API key for that)",
"link_name": "Name of the share link", "link_name": "Share Link Name",
"new_feishu_bot": "Added Feishu robot", "new_feishu_bot": "Add New Feishu Bot",
"official_account": { "official_account": {
"api": "WeChat public account API", "api": "WeChat Official Account API",
"create_modal_title": "Create a WeChat public account to access", "create_modal_title": "Create WeChat Official Account Integration",
"desc": "Directly access WeChat official account through API", "desc": "Connect to WeChat Official Account directly via API",
"edit_modal_title": "Edit WeChat public account access", "edit_modal_title": "Edit WeChat Official Account Integration",
"name": "WeChat public account access", "name": "WeChat Official Account Integration",
"params": "Wechat params" "params": "WeChat Official Account Parameters"
}, },
"publish_name": "name", "publish_name": "Name",
"qpm_is_empty": "QPM cannot be empty", "qpm_is_empty": "QPM cannot be empty",
"qpm_tips": "How many times per minute can each IP ask at most", "qpm_tips": "Maximum number of queries per minute per IP",
"request_address": "Request address", "request_address": "Request URL",
"show_share_link_modal_title": "Get started", "show_share_link_modal_title": "Get Started",
"token_auth": "Token authentication", "token_auth": "Token Authentication",
"token_auth_tips": "Identity verification server address, if this value is filled, a request will be sent to the specified server before each conversation to perform identity verification", "token_auth_tips": "Token authentication server URL. If provided, a request will be sent to the specified server for authentication before each conversation.",
"token_auth_use_cases": "View usage instructions for identity verification", "token_auth_use_cases": "View Token Authentication Guide",
"wecom": { "wecom": {
"api": "Qiwei API", "api": "WeCom API",
"bot": "Enterprise WeChat robot", "bot": "WeCom Bot",
"bot_desc": "Directly access enterprise WeChat robots through API", "bot_desc": "Connect to WeCom Bot directly via API",
"create_modal_title": "Create a Qiwei robot", "create_modal_title": "Create WeCom Bot",
"edit_modal_title": "Edit Qiwei Robot", "edit_modal_title": "Edit WeCom Bot",
"title": "Publish to enterprise WeChat robot" "title": "Publish to WeCom Bot"
} }
} }

View File

@@ -1,120 +1,113 @@
{ {
"bill": { "bill": {
"balance": "Balance", "balance": "Balance",
"buy_plan": "Buy a package", "buy_plan": "Purchase Plan",
"buy_standard_plan_success": "Package purchased successfully", "buy_standard_plan_success": "Plan Purchase Successful",
"contact_customer_service": "Contact customer service", "contact_customer_service": "Contact Support",
"conversion": "exchange", "conversion": "Conversion",
"convert_error": "Redemption failed", "convert_error": "Conversion Failed",
"convert_success": "Redemption successful", "convert_success": "Conversion Successful",
"current_token_price": "Current points price", "current_token_price": "Current Token Price",
"not_need_invoice": "Balance payment, unable to issue invoice", "not_need_invoice": "Balance payment, invoice not available",
"price": "price", "price": "Price",
"renew_plan": "Renewal package", "renew_plan": "Renew Plan",
"standard_valid_tip": "Package usage rules: The system gives priority to using more advanced packages, and the original unused packages will take effect later.", "standard_valid_tip": "Plan Usage Rules: Higher-level plans will be used first. Unused plans will be activated later.",
"token_expire_1year": "Points are valid for one year", "token_expire_1year": "Tokens are valid for one year",
"tokens": "integral", "tokens": "Tokens",
"use_balance": "Use balance", "use_balance": "Use Balance",
"use_balance_hint": "Due to the system upgrade, the original \"automatic renewal and deduction from balance\" mode has been cancelled, and the balance recharge entrance has been closed. \nYour balance can be used to purchase points", "use_balance_hint": "Due to system upgrade, the 'Auto-renewal from balance' mode is canceled, and the balance recharge option is closed. Your balance can be used to purchase tokens.",
"valid_time": "Effective time", "valid_time": "Effective Time",
"you_can_convert": "You can redeem", "you_can_convert": "You can convert",
"yuan": "Yuan" "yuan": "Yuan"
}, },
"promotion": { "bind_inform_account_error": "Failed to Bind Notification Account",
"register": "Register", "bind_inform_account_success": "Notification Account Bound Successfully",
"pay": "Pay"
},
"bind_inform_account_error": "Abnormal binding notification account",
"bind_inform_account_success": "Binding notification account successful",
"code_error": {
"app_error": {
"invalid_app_type": "Wrong application type",
"invalid_owner": "Illegal app owner"
}
},
"delete": { "delete": {
"admin_failed": "Failed to delete administrator", "admin_failed": "Failed to Delete Admin",
"admin_success": "Administrator deleted successfully" "admin_success": "Admin Deleted Successfully"
}, },
"has_chosen": "chosen", "has_chosen": "Selected",
"login": { "login": {
"error": "Login exception", "error": "Login Error",
"failed": "Login failed", "failed": "Login Failed",
"login_account": "Login to {{account}} account", "login_account": "Login to {{account}} Account",
"login_error": "wrong user name or password", "login_error": "Incorrect Username or Password",
"password_condition": "Password maximum 60 characters", "password_condition": "Password can be up to 60 characters",
"success": "login successful", "success": "Login Successful",
"to_register": "If you dont have an account, please register." "to_register": "No account? Register"
}, },
"name": "name", "name": "Name",
"notification": { "notification": {
"Bind Notification Pipe Hint": "Bind the email address or mobile phone number for receiving notifications to ensure that you receive important system notifications in a timely manner.", "Bind Notification Pipe Hint": "Please bind a notification receiving account to ensure you receive notifications such as plan expiration reminders, ensuring your service runs smoothly.",
"remind_owner_bind": "Please remind the creator to bind the notification account" "remind_owner_bind": "Please remind the creator to bind a notification account"
}, },
"operations": "operate", "operations": "Actions",
"password": { "password": {
"change_error": "Exception when changing password", "change_error": "Password Change Error",
"code_required": "verification code must be filled", "code_required": "Verification Code Required",
"code_send_error": "Verification code sending exception", "code_send_error": "Failed to Send Verification Code",
"code_sended": "Verification code sent", "code_sended": "Verification Code Sent",
"confirm": "Confirm Password", "confirm": "Confirm Password",
"email_phone": "Email/Mobile phone number", "email_phone": "Email/Phone Number",
"email_phone_error": "Email/mobile phone number format error", "email_phone_error": "Invalid Email/Phone Number Format",
"email_phone_void": "Email/mobile phone number cannot be empty", "email_phone_void": "Email/Phone Number Cannot Be Empty",
"get_code": "get verification code", "get_code": "Get Verification Code",
"get_code_again": "Reacquire after s", "get_code_again": "Get Again in s",
"new_password": "New password (4~20 digits)", "new_password": "New Password (4-20 characters)",
"not_match": "Two passwords are inconsistent", "not_match": "Passwords Do Not Match",
"password_condition": "Password must be at least 4 characters and at most 20 characters", "password_condition": "Password must be between 4 and 20 characters",
"password_required": "password can not be blank", "password_required": "Password Cannot Be Empty",
"retrieve": "Retrieve password", "retrieve": "Retrieve Password",
"retrieved": "Password has been retrieved", "retrieved": "Password Retrieved",
"retrieved_account": "Retrieve {{account}} account", "retrieved_account": "Retrieve {{account}} Account",
"to_login": "Go to login", "to_login": "Go to Login",
"verification_code": "Verification code" "verification_code": "Verification Code"
}, },
"permission": { "permission": {
"Manage": "administrator", "Manage": "Admin",
"Manage tip": "Team administrator, with full permissions", "Manage tip": "Team admin with full permissions",
"Read": "Read only", "Read": "Read Only",
"Read desc": "Members can only read related resources and cannot create new resources.", "Read desc": "Members can only read related resources, cannot create new resources",
"Write": "Write", "Write": "Write",
"Write tip": "In addition to readable resources, you can also create new resources", "Write tip": "In addition to read access, can create new resources",
"change_owner": "transfer ownership", "only_collaborators": "Collaborators Only",
"change_owner_failed": "Transfer ownership failed", "team_read": "Team Read Access",
"change_owner_placeholder": "Enter username to find account", "team_write": "Team Write Access"
"change_owner_success": "Successfully transferred ownership", },
"change_owner_tip": "Your administrator rights will be retained after the transfer", "permission_des": {
"change_owner_to": "transferred to", "manage": "Can create resources, invite, and delete members",
"only_collaborators": "Collaborator access only", "read": "Members can only read related resources and cannot create new resources.",
"team_read": "Team accessible", "write": "In addition to readable resources, you can also create new resources"
"team_write": "Team editable"
}, },
"permissions": "Permissions", "permissions": "Permissions",
"register": { "promotion": {
"confirm": "Confirm registration", "pay": "Friend Payment",
"error": "Registration exception", "register": "Friend Registration"
"failed": "registration failed",
"register_account": "Register {{account}} account",
"success": "registration success",
"to_login": "Already have an account? Log in"
}, },
"search_user": "Search username", "register": {
"confirm": "Confirm Registration",
"error": "Registration Error",
"failed": "Registration Failed",
"register_account": "Register {{account}} Account",
"success": "Registration Successful",
"to_login": "Already have an account? Login"
},
"search_user": "Search Username",
"synchronization": { "synchronization": {
"button": "Sync now", "button": "Sync Now",
"placeholder": "Please enter sync label", "placeholder": "Enter Sync Tag",
"title": "Fill in the tag synchronization link and click the sync button to synchronize" "title": "Enter the sync tag link and click the sync button to synchronize"
}, },
"team": { "team": {
"Add manager": "Add manager", "Add manager": "Add Admin",
"add_collaborator": "Add collaborators", "add_collaborator": "Add Collaborator",
"manage_collaborators": "Manage collaborators", "manage_collaborators": "Manage Collaborators",
"no_collaborators": "No collaborators yet" "no_collaborators": "No Collaborators"
}, },
"usage": { "usage": {
"feishu": "Lark", "feishu": "Feishu",
"official_account": "Official account", "official_account": "Official Account",
"share": "share link", "share": "Share Link",
"wecom": "Enterprise WeChat" "wecom": "WeCom"
} }
} }

View File

@@ -7,160 +7,160 @@
} }
}, },
"Code": "Code", "Code": "Code",
"about_xxx_question": "Questions about xxx", "about_xxx_question": "Question regarding xxx",
"add_new_input": "Add input", "add_new_input": "Add New Input",
"append_application_reply_to_history_as_new_context": "Splice the app's reply content into the history and return it as new context", "append_application_reply_to_history_as_new_context": "Append the application's reply to the history as new context",
"application_call": "application call", "application_call": "Application Call",
"assigned_reply": "Specify reply", "assigned_reply": "Assigned Reply",
"choose_another_application_to_call": "Select a different app to call", "choose_another_application_to_call": "Select another application to call",
"classification_result": "Classification results", "classification_result": "Classification Result",
"code": { "code": {
"Reset template": "Reset template", "Reset template": "Reset Template",
"Reset template confirm": "Are you sure to restore the code template? All input and output to template values will be reset, please be careful to save the current code." "Reset template confirm": "Confirm reset code template? This will reset all inputs and outputs to template values. Please save your current code."
}, },
"code_execution": "code run", "code_execution": "Code Execution",
"collection_metadata_filter": "Collection metadata filtering", "collection_metadata_filter": "Collection Metadata Filter",
"complete_extraction_result": "Complete extraction results", "complete_extraction_result": "Complete Extraction Result",
"complete_extraction_result_description": "A JSON string, for example: {\"name:\":\"YY\",\"Time\":\"2023/7/2 18:00\"}", "complete_extraction_result_description": "A JSON string, e.g., {\"name\":\"YY\",\"Time\":\"2023/7/2 18:00\"}",
"concatenation_result": "Splicing result", "concatenation_result": "Concatenation Result",
"concatenation_text": "Splice text", "concatenation_text": "Concatenation Text",
"condition_checker": "Judger", "condition_checker": "Condition Checker",
"confirm_delete_field_tip": "Confirm to delete the field?", "confirm_delete_field_tip": "Confirm delete this field?",
"contains": "Include", "contains": "Contains",
"content_to_retrieve": "Content to be retrieved", "content_to_retrieve": "Content to Retrieve",
"content_to_search": "Content to be retrieved", "content_to_search": "Content to Search",
"create_link_error": "Create link exception", "create_link_error": "Error creating link",
"custom_feedback": "Custom feedback", "custom_feedback": "Custom Feedback",
"custom_input": "Custom input", "custom_input": "Custom Input",
"custom_plugin_output": "Custom plug-in output", "custom_plugin_output": "Custom Plugin Output",
"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": "Confirm delete this API key? The key will be invalid immediately after deletion, but the corresponding conversation logs will not be deleted. Please confirm!",
"dynamic_input_description": "Receives the output value of the previous node as variables, which can be used by Laf request parameters.", "dynamic_input_description": "Receive the output value of the previous node as a variable, which can be used by Laf request parameters.",
"dynamic_input_description_concat": "Can reference the output of other nodes, as variables for text splicing, input/evoke variable lists", "dynamic_input_description_concat": "You can reference the output of other nodes as variables for text concatenation. Type / to invoke the variable list.",
"edit_input": "Edit input", "edit_input": "Edit Input",
"end_with": "ends with", "end_with": "Ends With",
"error_info_returns_empty_on_success": "Code running error message, returns empty when successful", "error_info_returns_empty_on_success": "Error information of code execution, returns empty on success",
"execute_a_simple_script_code_usually_for_complex_data_processing": "Execute a simple script code, usually used for complex data processing.", "execute_a_simple_script_code_usually_for_complex_data_processing": "Execute a simple script code, usually for complex data processing.",
"execute_different_branches_based_on_conditions": "Depending on certain conditions, different branches are executed.", "execute_different_branches_based_on_conditions": "Execute different branches based on conditions.",
"execution_error": "Run error", "execution_error": "Execution Error",
"extraction_requirements_description": "Extract requirement description", "extraction_requirements_description": "Extraction Requirements Description",
"extraction_requirements_description_detail": "Give the AI some corresponding background knowledge or description of requirements to guide the AI to complete the task better. \n\\nThis input box can use global variables.", "extraction_requirements_description_detail": "Provide AI with some background knowledge or requirements to guide it in completing the task better.\\nThis input box can use global variables.",
"extraction_requirements_placeholder": "For example: \\n1. The current time is: {{cTime}}. \nYou are a laboratory reservation assistant. Your task is to help users make laboratory reservations and obtain the corresponding reservation information from the text. \n\\n2. You are the Google search assistant and need to extract appropriate search terms from the text.", "extraction_requirements_placeholder": "For example: \\n1. The current time is: {{cTime}}. You are a lab reservation assistant, and your task is to help users reserve a lab by extracting the corresponding reservation information from the text.\\n2. You are a Google search assistant, and you need to extract suitable search terms from the text.",
"feedback_text": "Text of feedback", "feedback_text": "Feedback Text",
"field_description": "Field description", "field_description": "Field Description",
"field_description_placeholder": "Describes the functionality of this input field, which affects the quality of model generation if the parameter is called for a tool", "field_description_placeholder": "Describe the function of this input field. If it is a tool call parameter, this description will affect the quality of the model generation.",
"field_name_already_exists": "Field name already exists", "field_name_already_exists": "Field name already exists",
"field_required": "Required", "field_required": "Required",
"field_used_as_tool_input": "As tool input", "field_used_as_tool_input": "Used as Tool Call Parameter",
"filter_description": "Currently, label and creation time filtering is supported, which needs to be filled in according to the following format:\n\n{\n \n\"tags\": {\n \n\"$and\": [\"tag 1\",\"tag 2\"],\n \n\"$or\": [\"When there is $and tag, and takes effect, or does not take effect\"]\n \n},\n \n\"createTime\": {\n \n\"$gte\": \"YYYY-MM-DD HH:mm format is sufficient. The creation time of the collection is greater than this time\",\n \n\"$lte\": \"YYYY-MM-DD HH:mm format is sufficient. The creation time of the collection is less than this time. It can be used together with $gte\"\n \n}\n\n}", "filter_description": "Currently supports filtering by tags and creation time. Fill in the format as follows:\n{\n \"tags\": {\n \"$and\": [\"Tag 1\",\"Tag 2\"],\n \"$or\": [\"When there are $and tags, and is effective, or is not effective\"]\n },\n \"createTime\": {\n \"$gte\": \"YYYY-MM-DD HH:mm format, collection creation time greater than this time\",\n \"$lte\": \"YYYY-MM-DD HH:mm format, collection creation time less than this time, can be used with $gte\"\n }\n}",
"full_field_extraction": "Complete extraction of fields", "full_field_extraction": "Full Field Extraction",
"full_field_extraction_description": "Returns true when the extracted fields are all filled in (model extraction or using default values is considered successful)", "full_field_extraction_description": "Returns true when all fields are fully extracted (success includes model extraction or using default values)",
"full_response_data": "Complete response data", "full_response_data": "Full Response Data",
"greater_than": "greater than", "greater_than": "Greater Than",
"greater_than_or_equal_to": "Greater than or equal to", "greater_than_or_equal_to": "Greater Than or Equal To",
"greeting": "greet", "greeting": "Greeting",
"http_raw_response_description": "The raw response of the HTTP request. \nOnly string or JSON type response data can be accepted.", "http_raw_response_description": "Raw HTTP response. Only accepts string or JSON type response data.",
"http_request": "HTTP request", "http_request": "HTTP Request",
"http_request_error_info": "HTTP request error information, returns empty when successful", "http_request_error_info": "HTTP request error information, returns empty on success",
"ifelse": { "ifelse": {
"Input value": "Input", "Input value": "Input Value",
"Select value": "Select" "Select value": "Select Value"
}, },
"input_description": "Input descriotion", "input_description": "Field Description",
"input_variable_list": "Enterable/evoked variable list", "input_variable_list": "Type / to invoke variable list",
"intro_assigned_reply": "This module can directly reply to a specified piece of content. \nOften used for guidance and prompts. \nWhen non-string content is passed in, it will be converted into a string for output.", "intro_assigned_reply": "This module can directly reply with a specified content. Commonly used for guidance or prompts. Non-string content will be converted to string for output.",
"intro_custom_feedback": "When this module is triggered, a piece of feedback will be added to the current conversation record. \nCan be used to automatically record dialogue effects, etc.", "intro_custom_feedback": "When this module is triggered, a feedback will be added to the current conversation record. It can be used to automatically record conversation effects, etc.",
"intro_custom_plugin_output": "Customize the external output of the configuration. When using the plug-in, only the output of the custom configuration is exposed.", "intro_custom_plugin_output": "Custom configuration of external output. When using plugins, only the custom configured output is exposed.",
"intro_http_request": "You can issue an HTTP request to implement more complex operations (network search, database query, etc.)", "intro_http_request": "Can send an HTTP request to perform more complex operations (network search, database query, etc.)",
"intro_knowledge_base_search_merge": "Multiple knowledge base search results can be combined and output. \nUse RRF's merge method for final sorting output.", "intro_knowledge_base_search_merge": "Can merge multiple Dataset search results for output. Uses RRF merging method for final sorting output.",
"intro_laf_function_call": "You can call cloud functions under the Laf account.", "intro_laf_function_call": "Can call cloud functions under the Laf account.",
"intro_plugin_input": "You can configure what inputs the plug-in requires and use these inputs to run the plug-in", "intro_plugin_input": "Can configure what inputs the plugin needs and use these inputs to run the plugin.",
"intro_question_classification": "Determine the type of question based on the user's history and current questions. \nMultiple sets of question types can be added. Here is an example template:\n\nType 1: Say hello\n\nType 2: Questions about the “use” of the product\n\nType 3: Questions about product purchase”\n\nType 4: Other questions", "intro_question_classification": "Determine the type of question based on the user's history and current question. Multiple question types can be added. Below is a template example:\nType 1: Greeting\nType 2: Questions about product 'usage'\nType 3: Questions about product 'purchase'\nType 4: Other questions",
"intro_question_optimization": "Using the question optimization function, you can improve the search accuracy during continuous dialogue in the knowledge base. \nAfter using this function, AI will first be used to construct one or more new search terms based on the context. These search terms are more conducive to knowledge base searches. \nThis module has been built into the knowledge base search module. If you only perform a knowledge base search, you can directly use the completion function built into the knowledge base.", "intro_question_optimization": "Using question optimization can improve the accuracy of Dataset searches during continuous conversations. After using this function, AI will first construct one or more new search terms based on the context, which are more conducive to Dataset searches. This module is already built into the Dataset search module. If you only perform a single Dataset search, you can directly use the built-in completion function of the Dataset.",
"intro_text_concatenation": "Fixed or incoming text can be processed and output, and non-string type data will eventually be converted into string type.", "intro_text_concatenation": "Can process and output fixed or incoming text. Non-string type data will be converted to string type.",
"intro_text_content_extraction": "Specified data can be extracted from text, such as SQL statements, search keywords, codes, etc.", "intro_text_content_extraction": "Can extract specified data from text, such as SQL statements, search keywords, code, etc.",
"intro_tool_call_termination": "This module needs to be called by the configuration tool. \nWhen this module is executed, this tool call will be forcibly ended, and AI will no longer be called to answer questions based on the tool call results.", "intro_tool_call_termination": "This module needs to be configured for tool calls. When this module is executed, the current tool call will be forcibly terminated, and AI will no longer answer questions based on the tool call results.",
"is_empty": "is empty", "is_empty": "Is Empty",
"is_equal_to": "equal", "is_equal_to": "Is Equal To",
"is_not_empty": "Not empty", "is_not_empty": "Is Not Empty",
"is_not_equal": "not equal to", "is_not_equal": "Is Not Equal",
"judgment_result": "Judgment result", "judgment_result": "Judgment Result",
"knowledge_base_reference": "Knowledge base reference", "knowledge_base_reference": "Dataset Reference",
"knowledge_base_search_merge": "Knowledge base search citation merge", "knowledge_base_search_merge": "Dataset Search Merge",
"laf_function_call_test": "Laf function call (test)", "laf_function_call_test": "Laf Function Call (Test)",
"length_equal_to": "The length is equal to", "length_equal_to": "Length Equal To",
"length_greater_than": "length greater than", "length_greater_than": "Length Greater Than",
"length_greater_than_or_equal_to": "length greater than", "length_greater_than_or_equal_to": "Length Greater Than or Equal To",
"length_less_than": "length less than", "length_less_than": "Length Less Than",
"length_less_than_or_equal_to": "length less than or equal to", "length_less_than_or_equal_to": "Length Less Than or Equal To",
"length_not_equal_to": "length is not equal to", "length_not_equal_to": "Length Not Equal To",
"less_than": "less than", "less_than": "Less Than",
"less_than_or_equal_to": "less than or equal to", "less_than_or_equal_to": "Less Than or Equal To",
"max_dialog_rounds": "How many rounds of conversation records can be carried at most?", "max_dialog_rounds": "Maximum Number of Dialog Rounds",
"max_tokens": "Maximum Tokens", "max_tokens": "Maximum Tokens",
"new_context": "new context", "new_context": "New Context",
"not_contains": "Not included", "not_contains": "Does Not Contain",
"only_the_reference_type_is_supported": "Only the Reference type is supported", "only_the_reference_type_is_supported": "Only reference type is supported",
"optional_value_type": "Optional value type", "optional_value_type": "Optional Value Type",
"optional_value_type_tip": "One or more data types can be specified, and users can only select the configured type when adding fields in winter", "optional_value_type_tip": "You can specify one or more data types. When dynamically adding fields, users can only select the configured types.",
"other_questions": "Other questions", "other_questions": "Other Questions",
"pass_returned_object_as_output_to_next_nodes": "Use the object returned in the code as output and pass it to subsequent nodes. \nThe variable name needs to correspond to the key of return", "pass_returned_object_as_output_to_next_nodes": "Pass the object returned in the code as output to the next nodes. The variable name needs to correspond to the return key.",
"plugin": { "plugin": {
"Instruction_Tip": "You can configure a description to explain the purpose of this plugin. This description will be displayed each time before using the plugin. Standard Markdown syntax is supported.", "Instruction_Tip": "You can configure an instruction to explain the purpose of the plugin. This instruction will be displayed each time the plugin is used. Supports standard Markdown syntax.",
"Instructions": "Instructions" "Instructions": "Instructions"
}, },
"plugin_input": "Plug-in input", "plugin_input": "Plugin Input",
"question_classification": "Problem classification", "question_classification": "Question Classification",
"question_optimization": "Problem optimization", "question_optimization": "Question Optimization",
"quote_num": "Reference {{num}}", "quote_num": "Quote {{num}}",
"raw_response": "original response", "raw_response": "Raw Response",
"regex": "regular", "regex": "Regex",
"reply_text": "Reply text", "reply_text": "Reply Text",
"request_error": "Request error", "request_error": "Request Error",
"response": { "response": {
"Code log": "Log", "Code log": "Code Log",
"Custom inputs": "Custom inputs", "Custom inputs": "Custom Inputs",
"Custom outputs": "Custom outputs", "Custom outputs": "Custom Outputs",
"Error": "Error", "Error": "Error",
"Read file result": "Document parsing result preview", "Read file result": "Read File Result",
"User_select_description": "User select description", "User_select_description": "Description",
"User_select_result": "User select result", "User_select_result": "Selected Result",
"read files": "parsed document" "read files": "Read Files"
}, },
"select_an_application": "Choose an app", "select_an_application": "Select an Application",
"select_another_application_to_call": "You can choose another application to call", "select_another_application_to_call": "You can choose another application to call",
"special_array_format": "Special array format, when the search result is empty, an empty array is returned.", "special_array_format": "Special array format, returns an empty array when the search result is empty.",
"start_with": "Start with", "start_with": "Starts With",
"system_variables": "System variables", "system_variables": "system variables",
"target_fields_description": "A target field is composed of 'description' and 'key', and multiple target fields can be extracted.", "target_fields_description": "A target field consists of 'description' and 'key'. Multiple target fields can be extracted.",
"template": { "template": {
"ai_chat": "LLM chat", "ai_chat": "AI Chat",
"ai_chat_intro": "Call the AI model for a conversation", "ai_chat_intro": "AI Large Model Chat",
"dataset_search": "Dataset search", "dataset_search": "Dataset Search",
"dataset_search_intro": "Call the \"Semantic Search\" and \"Full-text Search\" capabilities to find reference content that may be related to the problem from the \"Knowledge Base\"", "dataset_search_intro": "Use 'semantic search' and 'full-text search' capabilities to find potentially relevant reference content from the 'Dataset'.",
"system_config": "System Configuration", "system_config": "System Configuration",
"tool_call": "Tool call", "tool_call": "Tool Call",
"tool_call_intro": "One or more function blocks are automatically selected for calling through the AI model, and plug-ins can also be called.", "tool_call_intro": "Automatically select one or more functional blocks for calling through the AI model, or call plugins.",
"workflow_start": "Process starts" "workflow_start": "Workflow Start"
}, },
"text_concatenation": "Text splicing", "text_concatenation": "Text Concatenation",
"text_content_extraction": "Text content extraction", "text_content_extraction": "Text Content Extraction",
"text_to_extract": "Text to be extracted", "text_to_extract": "Text to Extract",
"these_variables_will_be_input_parameters_for_code_execution": "These variables will be used as input parameters when the code is run.", "these_variables_will_be_input_parameters_for_code_execution": "These variables will be input parameters for code execution",
"tool_call_termination": "Tool call terminated", "tool_call_termination": "Tool Call Termination",
"tool_input": "Tool", "tool_input": "Tool Input",
"trigger_after_application_completion": "will be triggered after the application has completely ended", "trigger_after_application_completion": "Will be triggered after the application is fully completed",
"update_link_error": "Update link exception", "update_link_error": "Error updating link",
"update_specified_node_output_or_global_variable": "You can update the output value of the specified node or update global variables", "update_specified_node_output_or_global_variable": "Can update the output value of a specified node or update global variables",
"use_user_id": "User ID", "use_user_id": "User ID",
"user_question": "User issues", "user_question": "User Question",
"variable_picker_tips": "enter node name or variable name to search", "variable_picker_tips": "Type node name or variable name to search",
"variable_update": "variable update", "variable_update": "Variable Update",
"workflow": { "workflow": {
"Back_to_current_version": "Back to current version", "Back_to_current_version": "Back to Current Version",
"My edit": "My edit", "My edit": "My Edit",
"Switch_failed": "Switch failed", "Switch_failed": "Switch Failed",
"Switch_success": "switch successfully", "Switch_success": "Switch Successful",
"Team cloud": "Team cloud", "Team cloud": "Team Cloud",
"exit_tips": "Your changes have not been saved. Exiting directly will not save your edits." "exit_tips": "Your changes have not been saved. 'Exit directly' will not save your edits."
} }
} }

View File

@@ -179,5 +179,12 @@
"user_file_input_desc": "用户上传的文档和图片链接", "user_file_input_desc": "用户上传的文档和图片链接",
"user_select": "用户选择", "user_select": "用户选择",
"user_select_tip": "该模块可配置多个选项,以供对话时选择。不同选项可导向不同工作流支线" "user_select_tip": "该模块可配置多个选项,以供对话时选择。不同选项可导向不同工作流支线"
},
"permission": {
"des": {
"read": "可使用该应用进行对话",
"write": "可查看和编辑应用",
"manage": "写权限基础上,可配置发布渠道、查看对话日志、分配该应用权限"
}
} }
} }

View File

@@ -531,6 +531,7 @@
"feishu": "飞书", "feishu": "飞书",
"official_account": "公众号", "official_account": "公众号",
"online": "在线使用", "online": "在线使用",
"free_login": "免登录链接",
"share": "外部链接调用", "share": "外部链接调用",
"team": "团队空间对话", "team": "团队空间对话",
"test": "测试", "test": "测试",
@@ -647,8 +648,7 @@
"success": "开始同步" "success": "开始同步"
} }
}, },
"training": { "training": {}
}
}, },
"data": { "data": {
"Auxiliary Data": "辅助数据", "Auxiliary Data": "辅助数据",
@@ -926,7 +926,18 @@
"Team app": "团队应用", "Team app": "团队应用",
"Tool module": "工具", "Tool module": "工具",
"UnKnow Module": "未知模块", "UnKnow Module": "未知模块",
"http body placeholder": "与 Apifox 相同的语法" "http body placeholder": "与 Apifox 相同的语法",
"empty_workflow": "空白工作流",
"empty_app": "空白应用",
"empty_plugin": "空白插件",
"system_config": "系统配置",
"system_config_info": "可以配置应用的系统参数",
"work_start": "流程开始",
"self_input": "自定义插件输入",
"self_output": "自定义插件输出",
"config_params": "可以配置应用的系统参数",
"ai_chat": "AI 对话",
"ai_chat_intro": "AI 大模型对话"
}, },
"templates": { "templates": {
"Load plugin error": "加载插件失败" "Load plugin error": "加载插件失败"
@@ -1159,6 +1170,9 @@
"Collaborator": "协作者", "Collaborator": "协作者",
"Default permission": "默认权限", "Default permission": "默认权限",
"Manage": "管理", "Manage": "管理",
"manager": "管理员",
"read": "读权限",
"write": "写权限",
"No InheritPermission": "已限制权限,不再继承父级文件夹的权限,", "No InheritPermission": "已限制权限,不再继承父级文件夹的权限,",
"Not collaborator": "暂无协作者", "Not collaborator": "暂无协作者",
"Owner": "创建者", "Owner": "创建者",

View File

@@ -34,9 +34,17 @@
"delete_tag_confirm": "确定删除标签?", "delete_tag_confirm": "确定删除标签?",
"manage": "标签管理", "manage": "标签管理",
"searchOrAddTag": "搜索或添加标签", "searchOrAddTag": "搜索或添加标签",
"tags": "标签" "tags": "标签",
"total_tags": "共{{total}}个标签"
}, },
"the_knowledge_base_has_indexes_that_are_being_trained_or_being_rebuilt": "知识库有训练中或正在重建的索引", "the_knowledge_base_has_indexes_that_are_being_trained_or_being_rebuilt": "知识库有训练中或正在重建的索引",
"website_dataset": "Web 站点同步", "website_dataset": "Web 站点同步",
"website_dataset_desc": "Web 站点同步允许你直接使用一个网页链接构建知识库" "website_dataset_desc": "Web 站点同步允许你直接使用一个网页链接构建知识库",
"permission": {
"des": {
"read": "可查看知识库内容",
"write": "可增加和变更知识库内容",
"manage": "可管理整个知识库数据和信息"
}
}
} }

View File

@@ -104,5 +104,10 @@
"official_account": "公众号", "official_account": "公众号",
"share": "分享链接", "share": "分享链接",
"wecom": "企业微信" "wecom": "企业微信"
},
"permission_des": {
"read": "成员仅可阅读相关资源,无法新建资源",
"write": "除了可读资源外,还可以新建新的资源",
"manage": "可创建资源、邀请、删除成员"
} }
} }

View File

@@ -216,7 +216,7 @@ function AddMemberModal({ onClose }: AddModalPropsType) {
borderRadius={'md'} borderRadius={'md'}
h={'32px'} h={'32px'}
> >
{perLabel} {t(perLabel as any)}
<ChevronDownIcon fontSize={'md'} /> <ChevronDownIcon fontSize={'md'} />
</Flex> </Flex>
} }

View File

@@ -187,7 +187,7 @@ function PermissionSelect({
> >
<Radio isChecked={selectedSingleValue === item.value} /> <Radio isChecked={selectedSingleValue === item.value} />
<Box ml={4}> <Box ml={4}>
<Box>{item.name}</Box> <Box>{t(item.name as any)}</Box>
<Box color={'myGray.500'} fontSize={'mini'}> <Box color={'myGray.500'} fontSize={'mini'}>
{t(item.description as any)} {t(item.description as any)}
</Box> </Box>

View File

@@ -4,6 +4,7 @@ import Tag from '@fastgpt/web/components/common/Tag';
import React from 'react'; import React from 'react';
import { useContextSelector } from 'use-context-selector'; import { useContextSelector } from 'use-context-selector';
import { CollaboratorContext } from './context'; import { CollaboratorContext } from './context';
import { useTranslation } from 'next-i18next';
export type PermissionTagsProp = { export type PermissionTagsProp = {
permission: PermissionValueType; permission: PermissionValueType;
@@ -11,7 +12,7 @@ export type PermissionTagsProp = {
function PermissionTags({ permission }: PermissionTagsProp) { function PermissionTags({ permission }: PermissionTagsProp) {
const { getPerLabelList } = useContextSelector(CollaboratorContext, (v) => v); const { getPerLabelList } = useContextSelector(CollaboratorContext, (v) => v);
const { t } = useTranslation();
const perTagList = getPerLabelList(permission); const perTagList = getPerLabelList(permission);
return ( return (
@@ -26,7 +27,7 @@ function PermissionTags({ permission }: PermissionTagsProp) {
px={3} px={3}
fontSize={'xs'} fontSize={'xs'}
> >
{item} {t(item as any)}
</Tag> </Tag>
))} ))}
</Flex> </Flex>

View File

@@ -20,9 +20,9 @@ const PermissionTag = ({
const commonLabel = (() => { const commonLabel = (() => {
if (permission.isOwner) return t('common:permission.Owner'); if (permission.isOwner) return t('common:permission.Owner');
if (permission.hasManagePer) return PermissionList['manage'].name; if (permission.hasManagePer) return t(PermissionList['manage'].name as any);
if (permission.hasWritePer) return PermissionList['write'].name; if (permission.hasWritePer) return t(PermissionList['write'].name as any);
if (permission.hasReadPer) return PermissionList['read'].name; if (permission.hasReadPer) return t(PermissionList['read'].name as any);
return; return;
})(); })();
@@ -44,8 +44,10 @@ const PermissionTag = ({
permission.hasManagePer, permission.hasManagePer,
permission.hasReadPer, permission.hasReadPer,
permission.hasWritePer, permission.hasWritePer,
permission.isOwner,
permission.value, permission.value,
permissionList permissionList,
t
]); ]);
return ( return (
<HStack> <HStack>

View File

@@ -61,7 +61,7 @@ function PermissionManage() {
ml={3} ml={3}
borderRadius={'sm'} borderRadius={'sm'}
> >
{TeamPermissionList['manage'].description} {t(TeamPermissionList['manage'].description as any)}
</Box> </Box>
</Flex> </Flex>
{userInfo?.team.role === 'owner' && ( {userInfo?.team.role === 'owner' && (

View File

@@ -306,7 +306,7 @@ const MyInfo = ({ onOpenContact }: { onOpenContact: () => void }) => {
<strong>{formatStorePrice2Read(userInfo?.team?.balance).toFixed(3)}</strong>{' '} <strong>{formatStorePrice2Read(userInfo?.team?.balance).toFixed(3)}</strong>{' '}
{t('user:bill.yuan')} {t('user:bill.yuan')}
</Box> </Box>
{/* TODO:暂时隐藏 */}
{userInfo?.permission.hasManagePer && !!standardPlan && ( {userInfo?.permission.hasManagePer && !!standardPlan && (
<Button variant={'primary'} size={'sm'} ml={5} onClick={onOpenConversionModal}> <Button variant={'primary'} size={'sm'} ml={5} onClick={onOpenConversionModal}>
{t('user:bill.conversion')} {t('user:bill.conversion')}

View File

@@ -83,7 +83,7 @@ const FeiShuEditModal = ({
fontSize={'sm'} fontSize={'sm'}
> >
<Flex alignItems={'center'}> <Flex alignItems={'center'}>
<MyIcon name="book" mr="1" /> <MyIcon w={'17px'} h={'17px'} name="book" mr="1" />
{t('common:common.Read document')} {t('common:common.Read document')}
</Flex> </Flex>
</Link> </Link>

View File

@@ -85,7 +85,7 @@ const OffiAccountEditModal = ({
fontSize={'sm'} fontSize={'sm'}
> >
<Flex alignItems={'center'}> <Flex alignItems={'center'}>
<MyIcon name="book" mr="1" /> <MyIcon name="book" w={'17px'} h={'17px'} mr="1" />
{t('common:common.Read document')} {t('common:common.Read document')}
</Flex> </Flex>
</Link> </Link>

View File

@@ -82,7 +82,7 @@ const WecomEditModal = ({
fontSize={'sm'} fontSize={'sm'}
> >
<Flex alignItems={'center'}> <Flex alignItems={'center'}>
<MyIcon name="book" mr="1" /> <MyIcon name="book" w={'17px'} h={'17px'} mr="1" />
{t('common:common.Read document')} {t('common:common.Read document')}
</Flex> </Flex>
</Link> </Link>

View File

@@ -194,7 +194,11 @@ const TagManageModal = ({ onClose }: { onClose: () => void }) => {
pt={6} pt={6}
> >
<MyIcon name="menu" w={5} /> <MyIcon name="menu" w={5} />
<Box ml={2} fontWeight={'semibold'} flex={'1 0 0'}>{`${tagsTotal}个标签`}</Box> <Box ml={2} fontWeight={'semibold'} flex={'1 0 0'}>
{t('dataset:tag.total_tags', {
total: tagsTotal
})}
</Box>
<Button <Button
size={'sm'} size={'sm'}
leftIcon={<MyIcon name="common/addLight" w={4} />} leftIcon={<MyIcon name="common/addLight" w={4} />}

View File

@@ -4,7 +4,7 @@ import { useTranslation } from 'next-i18next';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useSystemStore } from '@/web/common/system/useSystemStore';
import type { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types/index.d'; import type { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types/index.d';
import { change2DefaultLng, setLngStore } from '@/web/common/utils/i18n'; import { change2DefaultLng, LangEnum, setLngStore } from '@/web/common/utils/i18n';
import { useMemoizedFn, useMount } from 'ahooks'; import { useMemoizedFn, useMount } from 'ahooks';
import { TrackEventName } from '../common/system/constants'; import { TrackEventName } from '../common/system/constants';
@@ -40,11 +40,13 @@ export const useInitApp = () => {
const initUserLanguage = useMemoizedFn(() => { const initUserLanguage = useMemoizedFn(() => {
// get default language // get default language
const targetLng = change2DefaultLng(i18n.language);
if (targetLng) { const targetLng =
setLngStore(targetLng); change2DefaultLng(i18n.language) ||
router.replace(router.asPath, undefined, { locale: targetLng }); (['zh', 'zh-CN'].includes(navigator.language) ? 'zh' : 'en');
}
setLngStore(targetLng);
router.replace(router.asPath, undefined, { locale: targetLng });
}); });
useMount(() => { useMount(() => {

View File

@@ -32,8 +32,8 @@ export const emptyTemplates: Record<
nodes: [ nodes: [
{ {
nodeId: 'userGuide', nodeId: 'userGuide',
name: '系统配置', name: i18nT('common:core.module.template.system_config'),
intro: '可以配置应用的系统参数', intro: i18nT('common:core.module.template.config_params'),
avatar: 'core/workflow/template/systemConfig', avatar: 'core/workflow/template/systemConfig',
flowNodeType: FlowNodeTypeEnum.systemConfig, flowNodeType: FlowNodeTypeEnum.systemConfig,
position: { position: {
@@ -95,7 +95,7 @@ export const emptyTemplates: Record<
}, },
{ {
nodeId: '448745', nodeId: '448745',
name: '流程开始', name: i18nT('common:core.module.template.work_start'),
intro: '', intro: '',
avatar: 'core/workflow/template/workflowStart', avatar: 'core/workflow/template/workflowStart',
flowNodeType: FlowNodeTypeEnum.workflowStart, flowNodeType: FlowNodeTypeEnum.workflowStart,
@@ -109,9 +109,9 @@ export const emptyTemplates: Record<
key: 'userChatInput', key: 'userChatInput',
renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea], renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea],
valueType: WorkflowIOValueTypeEnum.string, valueType: WorkflowIOValueTypeEnum.string,
label: '用户问题', label: i18nT('common:core.module.input.label.user question'),
required: true, required: true,
toolDescription: '用户问题' toolDescription: i18nT('common:core.module.input.label.user question')
} }
], ],
outputs: [ outputs: [
@@ -126,8 +126,8 @@ export const emptyTemplates: Record<
}, },
{ {
nodeId: 'loOvhld2ZTKa', nodeId: 'loOvhld2ZTKa',
name: 'AI 对话', name: i18nT('common:core.module.template.ai_chat'),
intro: 'AI 大模型对话', intro: i18nT('common:core.module.template.ai_chat_intro'),
avatar: 'core/workflow/template/aiChat', avatar: 'core/workflow/template/aiChat',
flowNodeType: FlowNodeTypeEnum.chatNode, flowNodeType: FlowNodeTypeEnum.chatNode,
showStatus: true, showStatus: true,
@@ -210,16 +210,16 @@ export const emptyTemplates: Record<
key: 'userChatInput', key: 'userChatInput',
renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea], renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea],
valueType: WorkflowIOValueTypeEnum.string, valueType: WorkflowIOValueTypeEnum.string,
label: '用户问题', label: i18nT('common:core.module.input.label.user question'),
required: true, required: true,
toolDescription: '用户问题', toolDescription: i18nT('common:core.module.input.label.user question'),
value: ['448745', 'userChatInput'] value: ['448745', 'userChatInput']
}, },
{ {
key: 'quoteQA', key: 'quoteQA',
renderTypeList: [FlowNodeInputTypeEnum.settingDatasetQuotePrompt], renderTypeList: [FlowNodeInputTypeEnum.settingDatasetQuotePrompt],
label: '', label: '',
debugLabel: '知识库引用', debugLabel: i18nT('common:core.module.Dataset quote.label'),
description: '', description: '',
valueType: WorkflowIOValueTypeEnum.datasetQuote valueType: WorkflowIOValueTypeEnum.datasetQuote
} }
@@ -255,12 +255,12 @@ export const emptyTemplates: Record<
}, },
[AppTypeEnum.workflow]: { [AppTypeEnum.workflow]: {
avatar: 'core/app/type/workflowFill', avatar: 'core/app/type/workflowFill',
name: '空白工作流', name: i18nT('common:core.module.template.empty_workflow'),
nodes: [ nodes: [
{ {
nodeId: 'userGuide', nodeId: 'userGuide',
name: '系统配置', name: i18nT('common:core.module.template.system_config'),
intro: '可以配置应用的系统参数', intro: i18nT('common:core.module.template.system_config_info'),
avatar: 'core/workflow/template/systemConfig', avatar: 'core/workflow/template/systemConfig',
flowNodeType: 'userGuide', flowNodeType: 'userGuide',
position: { position: {
@@ -322,7 +322,7 @@ export const emptyTemplates: Record<
}, },
{ {
nodeId: '448745', nodeId: '448745',
name: '流程开始', name: i18nT('common:core.module.template.work_start'),
intro: '', intro: '',
avatar: 'core/workflow/template/workflowStart', avatar: 'core/workflow/template/workflowStart',
flowNodeType: 'workflowStart', flowNodeType: 'workflowStart',
@@ -336,9 +336,9 @@ export const emptyTemplates: Record<
key: 'userChatInput', key: 'userChatInput',
renderTypeList: ['reference', 'textarea'], renderTypeList: ['reference', 'textarea'],
valueType: 'string', valueType: 'string',
label: '用户问题', label: i18nT('common:core.module.input.label.user question'),
required: true, required: true,
toolDescription: '用户问题' toolDescription: i18nT('common:core.module.input.label.user question')
} }
], ],
outputs: [ outputs: [
@@ -356,11 +356,11 @@ export const emptyTemplates: Record<
}, },
[AppTypeEnum.plugin]: { [AppTypeEnum.plugin]: {
avatar: 'core/app/type/pluginFill', avatar: 'core/app/type/pluginFill',
name: '空白插件', name: i18nT('common:core.module.template.empty_plugin'),
nodes: [ nodes: [
{ {
nodeId: 'pluginInput', nodeId: 'pluginInput',
name: '自定义插件输入', name: i18nT('common:core.module.template.self_input'),
avatar: 'core/workflow/template/workflowStart', avatar: 'core/workflow/template/workflowStart',
flowNodeType: FlowNodeTypeEnum.pluginInput, flowNodeType: FlowNodeTypeEnum.pluginInput,
showStatus: false, showStatus: false,
@@ -374,7 +374,7 @@ export const emptyTemplates: Record<
}, },
{ {
nodeId: 'pluginOutput', nodeId: 'pluginOutput',
name: '自定义插件输出', name: i18nT('common:core.module.template.self_output'),
avatar: '/imgs/workflow/output.png', avatar: '/imgs/workflow/output.png',
flowNodeType: FlowNodeTypeEnum.pluginOutput, flowNodeType: FlowNodeTypeEnum.pluginOutput,
showStatus: false, showStatus: false,

View File

@@ -162,16 +162,16 @@ export function form2AppWorkflow(
key: 'userChatInput', key: 'userChatInput',
renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea], renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea],
valueType: WorkflowIOValueTypeEnum.string, valueType: WorkflowIOValueTypeEnum.string,
label: '用户问题', label: i18nT('common:core.module.input.label.user question'),
required: true, required: true,
toolDescription: '用户问题', toolDescription: i18nT('common:core.module.input.label.user question'),
value: [workflowStartNodeId, 'userChatInput'] value: [workflowStartNodeId, 'userChatInput']
}, },
{ {
key: 'quoteQA', key: 'quoteQA',
renderTypeList: [FlowNodeInputTypeEnum.settingDatasetQuotePrompt], renderTypeList: [FlowNodeInputTypeEnum.settingDatasetQuotePrompt],
label: '', label: '',
debugLabel: '知识库引用', debugLabel: i18nT('common:core.module.Dataset quote.label'),
description: '', description: '',
valueType: WorkflowIOValueTypeEnum.datasetQuote, valueType: WorkflowIOValueTypeEnum.datasetQuote,
value: selectedDatasets ? [datasetNodeId, 'quoteQA'] : undefined value: selectedDatasets ? [datasetNodeId, 'quoteQA'] : undefined
@@ -467,7 +467,7 @@ export function form2AppWorkflow(
key: 'userChatInput', key: 'userChatInput',
renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea], renderTypeList: [FlowNodeInputTypeEnum.reference, FlowNodeInputTypeEnum.textarea],
valueType: WorkflowIOValueTypeEnum.string, valueType: WorkflowIOValueTypeEnum.string,
label: '用户问题', label: i18nT('common:core.module.input.label.user question'),
required: true, required: true,
value: [workflowStartNodeId, 'userChatInput'] value: [workflowStartNodeId, 'userChatInput']
}, },