diff --git a/web/src/components/Table/index.tsx b/web/src/components/Table/index.tsx index 62c68dc3..08a7e627 100644 --- a/web/src/components/Table/index.tsx +++ b/web/src/components/Table/index.tsx @@ -16,6 +16,7 @@ interface TableComponentProps extends Omit { rowSelection?: TableProps['rowSelection']; initialData?: Record[]; emptySize?: number; + emptyText?: string; isScroll?: boolean; scrollX?: number | string | true; // 支持自定义横向滚动宽度 scrollY?: number | string; // 支持自定义纵向滚动高度 @@ -46,6 +47,7 @@ const TableComponent = forwardRef(({ rowSelection, initialData, emptySize = 160, + emptyText, isScroll = false, scrollX, scrollY, @@ -169,7 +171,7 @@ const TableComponent = forwardRef(({ rowSelection={rowSelection} rowClassName={styles.row} className={styles.table} - locale={{ emptyText: }} + locale={{ emptyText: }} scroll={getScrollConfig()} tableLayout="auto" /> diff --git a/web/src/i18n/en.ts b/web/src/i18n/en.ts index 9f57eb9e..cad52e1e 100644 --- a/web/src/i18n/en.ts +++ b/web/src/i18n/en.ts @@ -7,7 +7,7 @@ export const en = { viewGuide: 'View Guide', watchVideo: 'Watch Video', viewDetails: 'View Details', - changeLog: 'Change Log', + changeLog: 'Changelog', latestUpdate: 'Latest Update', appCount: 'Number of Spaces', userCount: 'Number of Users', @@ -81,7 +81,7 @@ export const en = { userManagement: 'User Management', roleManagement: 'Role Management', systemManage: 'System Manage', - applicationManagement: 'Application Manage', + applicationManagement: 'Application', productManagement: 'Product Management', knowledgeManagement: 'KnowledgeBase ', knowledgeBase: 'Datasets Management', @@ -104,7 +104,7 @@ export const en = { knowledgeCreateDataset: 'Create Dataset', knowledgeDocumentDetails: 'Document Details', userMemoryDetail: 'UserMemory Detail', - apiKeyManagement: 'API KEY Management', + apiKeyManagement: 'API Key Management', toolManagement: 'Tool Management', emotionEngine: 'Emotion Engine', statementDetail: 'Emotion Memory', @@ -115,27 +115,27 @@ export const en = { spaceConfig: 'Space Configuration' }, dashboard: { - total_models: 'Total number of available models', - total_spaces: 'Number of active spaces', - total_users: 'Total number of users', - total_running_apps: 'Number of application runs', - desc_models: 'Contains {{ account }} LLMs and {{ nums }} Embeddings', - desc_spaces: 'more than last week', + total_models: 'Available Models', + total_spaces: 'Active Spaces', + total_users: 'Users', + total_running_apps: 'Application Runs', + desc_models: 'Includes {{ account }} LLM and {{ nums }} embedding', + desc_spaces: 'compared to last week', desc_users: 'New additions this week', desc_running_apps: "Today's success rate", - totalMemoryCapacity: 'Total Memory Capacity', + totalMemoryCapacity: 'Total Stored Memories', userMemory: 'User Memory', - knowledgeBaseCount: 'Knowledge Base Count', - apiCallCount: 'API Call Count', + knowledgeBaseCount: 'Knowledge Bases', + apiCallCount: 'API Calls', comparedToYesterday: 'compared to yesterday', thisWeek: 'this week', thisDay: 'day on day', failureRate: 'Failure Rate', - application: 'Application Count', + application: 'Applications', total_num: 'Total Memory Capacity', lastDays: 'last {{days}} days', - lastHalfYear: 'last half year', + lastHalfYear: 'last 6 months', lastYear: 'last year', enterpriseMemory: 'Enterprise Memory', @@ -201,13 +201,13 @@ export const en = { tagEmpty: 'There are no tag records at the moment~', chunk_count: 'Data Chunk', - chunk_count_desc: 'Current Processing {{count}} Data Chunks', + chunk_count_desc: '{{count}} data chunks currently being processed', statements_count: 'Statements', - statements_count_desc: 'Manage {{count}} knowledge statements', + statements_count_desc: '{{count}} knowledge statements', triplet_count: 'Entity Relation Extraction', - triplet_count_desc: 'Build {{entities_count}} entity nodes and {{relations_count}} relation connections', + triplet_count_desc: '{{entities_count}} entity nodes and {{relations_count}} relationships built', temporal_count: 'Time Extraction', - temporal_count_desc: 'Record {{count}} time series information', + temporal_count_desc: '{{count}} time series records', dialogue: 'Dialogue', chunk: 'Chunk', @@ -947,20 +947,20 @@ export const en = { apiEndpoint: 'API Endpoint', apiKey: 'API-Key', returnToApplicationList: 'Return to application list', - arrangement: 'Arrangement', + arrangement: 'Configuration', api: 'API', release: 'Release', promptConfiguration: 'Prompt Configuration', configurationDesc: 'Define the role, capabilities, and behavioral guidelines of the Agent', aiPrompt: 'AI Prompt', promptPlaceholder: 'You are a professional AI assistant, and your responsibility is to help users solve problems.', - knowledgeBaseAssociation: 'Knowledge base association', - associatedKnowledgeBase: 'Associated Knowledge Base', + knowledgeBaseAssociation: 'Knowledge Base Association', + associatedKnowledgeBase: 'Associated Knowledge Bases', addKnowledgeBase: 'Add Knowledge Base', - knowledgeEmpty: 'There is currently no knowledge base association', + knowledgeEmpty: 'No knowledge base associated.', memoryConfiguration: 'Memory Configuration', - dialogueHistoricalMemory: 'Dialogue Historical Memory', - dialogueHistoricalMemoryDesc: 'After activation, the memory content in the memory management can be selected', + dialogueHistoricalMemory: 'Conversation History Memory', + dialogueHistoricalMemoryDesc: 'Enable this to select memory content from memory management.', toolConfiguration: 'Tool Configuration', webSearch: 'Web Search', webSearchDesc: 'Allow the Agent to access the Internet for real-time search', @@ -975,14 +975,14 @@ export const en = { VariableManagementDesc: 'Configure the available variables for the Agent', addVariables: 'Add Variables', variablesEmpty: 'There are currently no variables available', - debuggingEmpty: 'Currently, there are no debugging models available', - debuggingEmptyDesc: 'Click the "+" button on the page, select and add the model you need', - debuggingAndPreview: 'Debugging and Preview', + debuggingEmpty: 'No models available for debugging.', + debuggingEmptyDesc: 'Click the “+” button to select and add a model.', + debuggingAndPreview: 'Preview and Debugging', addModel: 'Add Model', fieldName: 'Field Name', Optional: 'Optional', - chatEmpty: 'Send message to start testing', - chatPlaceholder: 'Start chatting with the robot…', + chatEmpty: 'Send a message to start testing', + chatPlaceholder: 'Start a conversation...', endpointConfiguration: 'Endpoint Configuration', authenticationMethod: 'Authentication Method', @@ -1009,22 +1009,22 @@ export const en = { whitelistIPDesc: 'supports CIDR', publicAPIDocumentation: 'Public API Documentation', - versionList: 'Version List', - versionListDesc: 'All release records and status', + versionList: 'Versions', + versionListDesc: 'Release history and status', current: 'Current', rolledBack: 'rolled back', history: 'history', VersionInformation: 'Version Information', - publishedOn: 'Published On', - publisher: 'Publisher', - DetailsOfVersion: 'Details of {{version}} version', + publishedOn: 'Published on', + publisher: 'Published by', + DetailsOfVersion: 'Version Details: {{version}}', exportDSLFile: 'Export DSL file', willRollToThisVersion: 'Will roll to this version', share: 'Share', lastUpdateTime: 'Last Update Time', editor: 'Editor', releaseTime: 'Release Time', - changeLog: 'Change Log', + changeLog: 'Changelog', fix: 'Fix', optimization: 'Optimization', new: 'New', @@ -1129,7 +1129,7 @@ export const en = { ReplyException: 'Reply exception', endpointConfigurationSubTitle: 'Configure API access address and supported HTTP methods', - apiKeys: 'API Keys Management', + apiKeys: 'API Key Management', apiKeySubTitle: 'Manage API keys, view usage and traffic statistics for each key', addApiKey: 'Add New API Key', apiKeyName: 'Key Name', @@ -1198,7 +1198,7 @@ export const en = { drag: 'Drag and drop to move nodes', zoom: 'Scroll zoom view', memoryDetailEmpty: 'Please select a memory node', - memoryDetailEmptyDesc: 'Click on the node in the left graph to view the details of entity memory', + memoryDetailEmptyDesc: 'Click a node in the graph to view memory details.', totalNumOfMemories: 'Total Number of Memories', footprintCity: 'Footprint City', @@ -1216,20 +1216,20 @@ export const en = { editConfig: 'Edit Config', chooseModel: 'Choose Model', - nodeStatistics: 'Memory Classification', + nodeStatistics: 'Memory Categories', total: 'Total', PERCEPTUAL_MEMORY: 'Perceptual Memory', WORKING_MEMORY: 'Working Memory', - SHORT_TERM_MEMORY: 'Shot Term Memory', - LONG_TERM_MEMORY: 'Long Term Memory', + SHORT_TERM_MEMORY: 'Short-Term Memory', + LONG_TERM_MEMORY: 'Long-Term Memory', EXPLICIT_MEMORY: 'Explicit Memory', IMPLICIT_MEMORY: 'Implicit Memory', EMOTIONAL_MEMORY: 'Emotional Memory', EPISODIC_MEMORY: 'Episodic Memory', FORGET_MEMORY: 'Forget Memory', - endUserProfile: 'Core Profile', + endUserProfile: 'Profile', editEndUserProfile: 'Edit', other_name: 'Name', position: 'Position', @@ -1239,10 +1239,10 @@ export const en = { hire_date: 'Hire Date', memoryContent: 'Memory Content', created_at: 'Created At', - updated_at: 'Updated At', + updated_at: 'Last Updated', fullScreen: 'Full Screen', - memoryWindow: "{{name}}'s Window of Memory", + memoryWindow: "{{name}}'s Memory Overview", memory_insight: 'Overall Overview', key_findings: 'Key Findings', behavior_pattern: 'Behavior Pattern', @@ -1315,7 +1315,7 @@ export const en = { tTypeStrict: 'Type Matching Threshold', tOverall: 'Comprehensive Matching Threshold', - arrangementLayerModule: 'Arrangement Layer Module', + arrangementLayerModule: 'Configuration Layer Module', queryMode: 'Query Mode', queryModeSubTitle: 'Control whether to activate deeper search functions', deepRetrieval: 'Deep Retrieval', @@ -1452,12 +1452,12 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re deduplication_desc: 'Deduplication and disambiguation completed, {{count}} unique entities in total' }, memoryConversation: { + searchPlaceholder: 'Enter user ID...', chatEmpty:'Is there anything I can help you with?', - searchPlaceholder: 'Input user ID...', userID: 'User ID', testMemoryConversation: 'Test Memory Conversation', conversationContent: 'Conversation Content', - conversationContentEmpty: 'There is currently no conversation content available', + conversationContentEmpty: 'No conversation content available.', memoryConversationAnalysis: 'Memory Conversation Analysis', memoryFunction: 'Memory Function', onlineSearch: 'Online Search', @@ -1477,8 +1477,8 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re quickReply: 'Quick Reply', web_search: 'Online search', memory: 'Memory', - memoryConversationAnalysisEmpty: 'There is currently no dialogue analysis content available', - memoryConversationAnalysisEmptySubTitle: 'After entering your user ID, click on "Test Memory" to view the conversation memory', + memoryConversationAnalysisEmpty: 'No conversation analysis available.', + memoryConversationAnalysisEmptySubTitle: 'Conversation analysis will appear here.', }, login: { title: 'Red Bear Memory Science', @@ -1531,7 +1531,7 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re notFoundDesc: 'Try returning to the previous page', noPermission: 'Oh, this is an exclusive domain for permissions', noPermissionDesc: ' Please contact the administrator to grant permission', - tableEmpty: 'There are currently no data', + tableEmpty: 'No data available.', loadingEmpty: 'The content is loading…', loadingEmptyDesc: 'Your content is on its way by rocket! It will soon land on your screen' }, @@ -1561,12 +1561,12 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re inactive: 'Expired' }, tool: { - mcp: 'MCP Service', + mcp: 'MCP Services', inner: 'Built-in Tools', custom: 'Custom Tools', - mcpSearchPlaceholder: 'Search MCP services...', - innerSearchPlaceholder: 'Search tools...', - customSearchPlaceholder: 'Search custom tools...', + mcpSearchPlaceholder: 'Search MCP Services...', + innerSearchPlaceholder: 'Search Tools...', + customSearchPlaceholder: 'Search Custom Tools...', addService: 'Add MCP Service', editService: 'Edit MCP Service', addServiceSuccess: 'Service added successfully', @@ -1599,7 +1599,7 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re requestHeader: 'Request Headers', config: 'Configuration', auth_type: 'Authentication Type', - none: 'No Authentication', + none: 'None', api_key: 'API Key', basic_auth: 'Basic Auth', bearer_token: 'Bearer Token', @@ -1727,9 +1727,11 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re created_at: 'Created At', headerName: 'Header Name', null: 'None', - tagDesc: 'Multiple tags separated by commas', + tagDesc: 'Enter tags (comma-separated)', availableTools: 'Available Tools', name: 'Name', + enterNamePlaceholder: 'Please enter a name', + toolEmpty: 'No tools detected.', desc: 'Description', method: 'Method', path: 'Path', @@ -2150,34 +2152,34 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re personal: { type: 'Personal', label: 'Current Package', - typeDesc: 'For individuals', + typeDesc: 'For Individuals', solution: "A person's second brain, capable of storing up to 2000 memories.", targetAudience: 'individual users, students, and first-time users', - priceDesc: '/Forever free', + priceDesc: '/Free forever', supportServices: 'Community Forum + Email Support', }, team: { type: 'Team', label: 'Small Team', - typeDesc: 'Small Team Version', + typeDesc: 'For Small Teams', solution: "Enable every team to build a shared second brain in seconds.", targetAudience: 'Small teams, early-stage startups, and small projects.', - priceDesc: '/Month', + priceDesc: '/month', supportServices: 'Standard customer service support', }, biz: { type: 'Biz+', label: 'Most Popular', - typeDesc: 'Enterprise Growth Edition', + typeDesc: 'Enterprise Growth Plan', solution: "Scale your organization with a powerful, enterprise-ready second-brain system.", targetAudience: 'Growing teams, startups, and SMBs requiring advanced memory capabilities.', - priceDesc: '/Month/workspace', + priceDesc: 'per workspace / month', supportServices: 'Priority customer service support', }, commerce: { type: 'Commerce', label: 'Commercial OEM', - typeDesc: 'Commercial OEM version', + typeDesc: 'Commercial OEM plan', solution: "Seamlessly integrate advanced memory capabilities into your SaaS or enterprise product.", targetAudience: 'Large enterprises, SaaS vendors, and system integrators requiring fully customizable and secure deployment.', priceDesc: 'On-premises deployment', @@ -2196,8 +2198,8 @@ Memory Bear: After the rebellion, regional warlordism intensified for several re supportServices: 'Support Services:', flexibleDeployment: 'Flexible deployment:', reliableGuarantee: 'Reliable guarantee:', - alertTitle: 'Intellectual Property Authorization Reminder', - alertContent: 'Please note: Using certain AI models (such as GPT-4, Claude, etc.) may involve third-party API call fees, which are not included in the Memory Bear platform subscription fee. You need to pay the relevant fees separately to the model provider. Memory Bear only charges platform management and service fees and does not bear the usage fees of third-party APIs.', + alertTitle: 'Third-Party API Usage Notice', + alertContent: "Please note: Some AI models(such as GPT- 4, Claude, etc.) may incur third- party API usage fees.These fees are not included in your Memory Bear subscription and must be paid directly to the model provider. Memory Bear charges only for platform management and related services and does not cover or assume responsibility for any third- party API usage fees.", currentAccountType: 'Current Account Type', validUntil: 'Valid Until', orderHistory: 'Order History', diff --git a/web/src/i18n/zh.ts b/web/src/i18n/zh.ts index b2be6eaa..028202d1 100644 --- a/web/src/i18n/zh.ts +++ b/web/src/i18n/zh.ts @@ -509,7 +509,7 @@ export const zh = { VersionInformation: '版本信息', publishedOn: '发布于', publisher: '发布者', - DetailsOfVersion: 'v{{version}}版本详情', + DetailsOfVersion: '{{version}}版本详情', exportDSLFile: '导出DSL文件', willRollToThisVersion: '将回滚到此版本', share: '分享', @@ -1823,6 +1823,8 @@ export const zh = { tagDesc: '多个标签用逗号分隔', availableTools: '可用工具', name: '名称', + enterNamePlaceholder: '请输入名称', + toolEmpty: '未检测到工具', desc: '描述', method: '方法', path: '路径', diff --git a/web/src/utils/auth.ts b/web/src/utils/auth.ts index b7c72527..5ec30028 100644 --- a/web/src/utils/auth.ts +++ b/web/src/utils/auth.ts @@ -1,7 +1,7 @@ import { cookieUtils } from './request' export const clearAuthData = () => { console.log("Clearing auth data and redirecting to login"); - sessionStorage.clear(); - localStorage.clear() + localStorage.removeItem('user') + localStorage.removeItem('breadcrumbs') cookieUtils.clear(); } \ No newline at end of file diff --git a/web/src/views/ApplicationConfig/Agent.tsx b/web/src/views/ApplicationConfig/Agent.tsx index 8907e0f1..92170d55 100644 --- a/web/src/views/ApplicationConfig/Agent.tsx +++ b/web/src/views/ApplicationConfig/Agent.tsx @@ -445,7 +445,7 @@ const Agent = forwardRef((_props, ref) => {
diff --git a/web/src/views/ApplicationConfig/ReleasePage.tsx b/web/src/views/ApplicationConfig/ReleasePage.tsx index 1ba44ace..ae550d36 100644 --- a/web/src/views/ApplicationConfig/ReleasePage.tsx +++ b/web/src/views/ApplicationConfig/ReleasePage.tsx @@ -47,11 +47,11 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres } return (
-
+
-
+
{t('application.versionList')} -
{t('application.versionListDesc')}
+
{t('application.versionListDesc')}
{releaseList.length === 0 ? @@ -64,8 +64,8 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres - {version.version_name || `v${version.version}`} - {tagKey && + {version.version_name && version.version_name[0].toLocaleLowerCase() === 'v' ? version.version_name : version.version_name ? `v${version.version_name}` : `v${version.version}`} + {tagKey && {tagKey} } } @@ -76,13 +76,13 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres headerType="borderless" onClick={() => setSelectedVersion(version)} > -
+
-
+
{t('application.publishedOn')} {formatDateTime(version.published_at, 'YYYY-MM-DD HH:mm:ss')}
-
+
{t('application.publisher')}: {version.publisher_name}
@@ -91,13 +91,13 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres }
-
+
-
- {selectedVersion && t('application.DetailsOfVersion', { version: selectedVersion.version_name || `v${selectedVersion.version}` || '-' })} + {selectedVersion && t('application.DetailsOfVersion', { version: selectedVersion.version_name && selectedVersion.version_name[0].toLocaleLowerCase() === 'v' ? selectedVersion.version_name : selectedVersion.version_name ? `v${selectedVersion.version_name}` : `v${selectedVersion.version}` || '-' })} {selectedVersion && <> @@ -111,14 +111,14 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres {selectedVersion && -
- +
+ - + - +
@@ -131,9 +131,9 @@ const ReleasePage: FC<{data: Application; refresh: () => void}> = ({data, refres {formatDateTime(selectedVersion.published_at, 'YYYY-MM-DD HH:mm:ss')}
} - extra={{selectedVersion.publisher_name}} + extra={{selectedVersion.publisher_name}} > -
+
diff --git a/web/src/views/MemoryConversation/index.tsx b/web/src/views/MemoryConversation/index.tsx index bb8df5e4..424b9878 100644 --- a/web/src/views/MemoryConversation/index.tsx +++ b/web/src/views/MemoryConversation/index.tsx @@ -151,7 +151,7 @@ const MemoryConversation: FC = () => { > + } contentClassName='rb:h-[calc(100vh-362px)]' data={chatData} diff --git a/web/src/views/ToolManagement/components/CustomToolModal.tsx b/web/src/views/ToolManagement/components/CustomToolModal.tsx index bcda8d51..e3203a74 100644 --- a/web/src/views/ToolManagement/components/CustomToolModal.tsx +++ b/web/src/views/ToolManagement/components/CustomToolModal.tsx @@ -1,5 +1,5 @@ import { forwardRef, useImperativeHandle, useState } from 'react'; -import { Form, Input, Select, Row, Col, App, Button } from 'antd'; +import { Form, Input, Select, App } from 'antd'; import { useTranslation } from 'react-i18next'; import type { CustomToolItem, CustomToolModalRef, ToolItem } from '../types' @@ -134,9 +134,9 @@ const CustomToolModal = forwardRef(({ - + {/* 名称和图标 */} {/* @@ -195,6 +195,7 @@ const CustomToolModal = forwardRef(({ ]} initialData={parseSchemaData.operations || []} emptySize={88} + emptyText={t('tool.toolEmpty')} /> @@ -269,7 +270,7 @@ const CustomToolModal = forwardRef(({