@samanhappy/mcphub 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/package.json +7 -4
  2. package/.env.example +0 -2
  3. package/.eslintrc.json +0 -25
  4. package/.github/workflows/build.yml +0 -51
  5. package/.github/workflows/release.yml +0 -19
  6. package/.prettierrc +0 -7
  7. package/Dockerfile +0 -51
  8. package/assets/amap-edit.png +0 -0
  9. package/assets/amap-result.png +0 -0
  10. package/assets/cherry-mcp.png +0 -0
  11. package/assets/cursor-mcp.png +0 -0
  12. package/assets/cursor-query.png +0 -0
  13. package/assets/cursor-tools.png +0 -0
  14. package/assets/dashboard.png +0 -0
  15. package/assets/dashboard.zh.png +0 -0
  16. package/assets/group.png +0 -0
  17. package/assets/group.zh.png +0 -0
  18. package/assets/market.zh.png +0 -0
  19. package/assets/wegroup.jpg +0 -0
  20. package/assets/wegroup.png +0 -0
  21. package/assets/wexin.png +0 -0
  22. package/bin/mcphub.js +0 -3
  23. package/doc/intro.md +0 -73
  24. package/doc/intro2.md +0 -232
  25. package/entrypoint.sh +0 -10
  26. package/frontend/favicon.ico +0 -0
  27. package/frontend/index.html +0 -13
  28. package/frontend/postcss.config.js +0 -6
  29. package/frontend/src/App.tsx +0 -44
  30. package/frontend/src/components/AddGroupForm.tsx +0 -132
  31. package/frontend/src/components/AddServerForm.tsx +0 -90
  32. package/frontend/src/components/ChangePasswordForm.tsx +0 -158
  33. package/frontend/src/components/EditGroupForm.tsx +0 -149
  34. package/frontend/src/components/EditServerForm.tsx +0 -76
  35. package/frontend/src/components/GroupCard.tsx +0 -143
  36. package/frontend/src/components/MarketServerCard.tsx +0 -153
  37. package/frontend/src/components/MarketServerDetail.tsx +0 -297
  38. package/frontend/src/components/ProtectedRoute.tsx +0 -27
  39. package/frontend/src/components/ServerCard.tsx +0 -230
  40. package/frontend/src/components/ServerForm.tsx +0 -276
  41. package/frontend/src/components/icons/LucideIcons.tsx +0 -14
  42. package/frontend/src/components/layout/Content.tsx +0 -17
  43. package/frontend/src/components/layout/Header.tsx +0 -61
  44. package/frontend/src/components/layout/Sidebar.tsx +0 -98
  45. package/frontend/src/components/ui/Badge.tsx +0 -33
  46. package/frontend/src/components/ui/Button.tsx +0 -0
  47. package/frontend/src/components/ui/DeleteDialog.tsx +0 -48
  48. package/frontend/src/components/ui/Pagination.tsx +0 -128
  49. package/frontend/src/components/ui/Toast.tsx +0 -96
  50. package/frontend/src/components/ui/ToggleGroup.tsx +0 -134
  51. package/frontend/src/components/ui/ToolCard.tsx +0 -38
  52. package/frontend/src/contexts/AuthContext.tsx +0 -159
  53. package/frontend/src/contexts/ToastContext.tsx +0 -60
  54. package/frontend/src/hooks/useGroupData.ts +0 -232
  55. package/frontend/src/hooks/useMarketData.ts +0 -410
  56. package/frontend/src/hooks/useServerData.ts +0 -306
  57. package/frontend/src/hooks/useSettingsData.ts +0 -131
  58. package/frontend/src/i18n.ts +0 -42
  59. package/frontend/src/index.css +0 -20
  60. package/frontend/src/layouts/MainLayout.tsx +0 -33
  61. package/frontend/src/locales/en.json +0 -214
  62. package/frontend/src/locales/zh.json +0 -214
  63. package/frontend/src/main.tsx +0 -12
  64. package/frontend/src/pages/Dashboard.tsx +0 -206
  65. package/frontend/src/pages/GroupsPage.tsx +0 -116
  66. package/frontend/src/pages/LoginPage.tsx +0 -104
  67. package/frontend/src/pages/MarketPage.tsx +0 -356
  68. package/frontend/src/pages/ServersPage.tsx +0 -144
  69. package/frontend/src/pages/SettingsPage.tsx +0 -149
  70. package/frontend/src/services/authService.ts +0 -141
  71. package/frontend/src/types/index.ts +0 -160
  72. package/frontend/src/utils/cn.ts +0 -10
  73. package/frontend/tsconfig.json +0 -31
  74. package/frontend/tsconfig.node.json +0 -10
  75. package/frontend/vite.config.ts +0 -26
  76. package/googled76ca578b6543fbc.html +0 -1
  77. package/jest.config.js +0 -10
  78. package/mcp_settings.json +0 -45
  79. package/servers.json +0 -74722
  80. package/src/config/index.ts +0 -46
  81. package/src/controllers/authController.ts +0 -179
  82. package/src/controllers/groupController.ts +0 -341
  83. package/src/controllers/marketController.ts +0 -154
  84. package/src/controllers/serverController.ts +0 -303
  85. package/src/index.ts +0 -17
  86. package/src/middlewares/auth.ts +0 -28
  87. package/src/middlewares/index.ts +0 -43
  88. package/src/models/User.ts +0 -103
  89. package/src/routes/index.ts +0 -96
  90. package/src/server.ts +0 -72
  91. package/src/services/groupService.ts +0 -232
  92. package/src/services/marketService.ts +0 -116
  93. package/src/services/mcpService.ts +0 -385
  94. package/src/services/sseService.ts +0 -119
  95. package/src/types/index.ts +0 -129
  96. package/src/utils/migration.ts +0 -52
  97. package/tsconfig.json +0 -17
@@ -1,131 +0,0 @@
1
- import { useState, useCallback, useEffect } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import { ApiResponse } from '@/types';
4
- import { useToast } from '@/contexts/ToastContext';
5
-
6
- // Define types for the settings data
7
- interface RoutingConfig {
8
- enableGlobalRoute: boolean;
9
- enableGroupNameRoute: boolean;
10
- }
11
-
12
- interface SystemSettings {
13
- systemConfig?: {
14
- routing?: RoutingConfig;
15
- };
16
- }
17
-
18
- export const useSettingsData = () => {
19
- const { t } = useTranslation();
20
- const { showToast } = useToast();
21
-
22
- const [routingConfig, setRoutingConfig] = useState<RoutingConfig>({
23
- enableGlobalRoute: true,
24
- enableGroupNameRoute: true,
25
- });
26
-
27
- const [loading, setLoading] = useState(false);
28
- const [error, setError] = useState<string | null>(null);
29
- const [refreshKey, setRefreshKey] = useState(0);
30
-
31
- // Trigger a refresh of the settings data
32
- const triggerRefresh = useCallback(() => {
33
- setRefreshKey((prev) => prev + 1);
34
- }, []);
35
-
36
- // Fetch current settings
37
- const fetchSettings = useCallback(async () => {
38
- setLoading(true);
39
- setError(null);
40
-
41
- try {
42
- const token = localStorage.getItem('mcphub_token');
43
- const response = await fetch('/api/settings', {
44
- headers: {
45
- 'x-auth-token': token || '',
46
- },
47
- });
48
-
49
- if (!response.ok) {
50
- throw new Error(`HTTP error! Status: ${response.status}`);
51
- }
52
-
53
- const data: ApiResponse<SystemSettings> = await response.json();
54
-
55
- if (data.success && data.data?.systemConfig?.routing) {
56
- setRoutingConfig({
57
- enableGlobalRoute: data.data.systemConfig.routing.enableGlobalRoute ?? true,
58
- enableGroupNameRoute: data.data.systemConfig.routing.enableGroupNameRoute ?? true,
59
- });
60
- }
61
- } catch (error) {
62
- console.error('Failed to fetch settings:', error);
63
- setError(error instanceof Error ? error.message : 'Failed to fetch settings');
64
- showToast(t('errors.failedToFetchSettings'));
65
- } finally {
66
- setLoading(false);
67
- }
68
- }, [t, showToast]);
69
-
70
- // Update routing configuration
71
- const updateRoutingConfig = async (key: keyof RoutingConfig, value: boolean) => {
72
- setLoading(true);
73
- setError(null);
74
-
75
- try {
76
- const token = localStorage.getItem('mcphub_token');
77
- const response = await fetch('/api/system-config', {
78
- method: 'PUT',
79
- headers: {
80
- 'Content-Type': 'application/json',
81
- 'x-auth-token': token || '',
82
- },
83
- body: JSON.stringify({
84
- routing: {
85
- [key]: value,
86
- },
87
- }),
88
- });
89
-
90
- if (!response.ok) {
91
- throw new Error(`HTTP error! Status: ${response.status}`);
92
- }
93
-
94
- const data = await response.json();
95
-
96
- if (data.success) {
97
- setRoutingConfig({
98
- ...routingConfig,
99
- [key]: value,
100
- });
101
- showToast(t('settings.systemConfigUpdated'));
102
- return true;
103
- } else {
104
- showToast(t('errors.failedToUpdateSystemConfig'));
105
- return false;
106
- }
107
- } catch (error) {
108
- console.error('Failed to update system config:', error);
109
- setError(error instanceof Error ? error.message : 'Failed to update system config');
110
- showToast(t('errors.failedToUpdateSystemConfig'));
111
- return false;
112
- } finally {
113
- setLoading(false);
114
- }
115
- };
116
-
117
- // Fetch settings when the component mounts or refreshKey changes
118
- useEffect(() => {
119
- fetchSettings();
120
- }, [fetchSettings, refreshKey]);
121
-
122
- return {
123
- routingConfig,
124
- loading,
125
- error,
126
- setError,
127
- triggerRefresh,
128
- fetchSettings,
129
- updateRoutingConfig,
130
- };
131
- };
@@ -1,42 +0,0 @@
1
- import i18n from 'i18next';
2
- import { initReactI18next } from 'react-i18next';
3
- import LanguageDetector from 'i18next-browser-languagedetector';
4
-
5
- // Import translations
6
- import enTranslation from './locales/en.json';
7
- import zhTranslation from './locales/zh.json';
8
-
9
- i18n
10
- // Detect user language
11
- .use(LanguageDetector)
12
- // Pass the i18n instance to react-i18next
13
- .use(initReactI18next)
14
- // Initialize i18next
15
- .init({
16
- resources: {
17
- en: {
18
- translation: enTranslation
19
- },
20
- zh: {
21
- translation: zhTranslation
22
- }
23
- },
24
- fallbackLng: 'en',
25
- debug: process.env.NODE_ENV === 'development',
26
-
27
- // Common namespace used for all translations
28
- defaultNS: 'translation',
29
-
30
- interpolation: {
31
- escapeValue: false, // React already safe from XSS
32
- },
33
-
34
- detection: {
35
- // Order of detection; prioritize localStorage to respect user language choice
36
- order: ['localStorage', 'cookie', 'htmlTag', 'navigator'],
37
- // Cache the language in localStorage
38
- caches: ['localStorage', 'cookie'],
39
- }
40
- });
41
-
42
- export default i18n;
@@ -1,20 +0,0 @@
1
- /* Use standard Tailwind directives */
2
- @import "tailwindcss";
3
-
4
- /* Add some custom styles to verify CSS is working correctly */
5
- body {
6
- margin: 0;
7
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
8
- 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
9
- sans-serif;
10
- -webkit-font-smoothing: antialiased;
11
- -moz-osx-font-smoothing: grayscale;
12
- }
13
-
14
- .bg-custom-blue {
15
- background-color: #4a90e2;
16
- }
17
-
18
- .text-custom-white {
19
- color: #ffffff;
20
- }
@@ -1,33 +0,0 @@
1
- import React from 'react';
2
- import { Outlet } from 'react-router-dom';
3
- import Header from '@/components/layout/Header';
4
- import Sidebar from '@/components/layout/Sidebar';
5
- import Content from '@/components/layout/Content';
6
-
7
- const MainLayout: React.FC = () => {
8
- // 控制侧边栏展开/折叠状态
9
- const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false);
10
-
11
- const toggleSidebar = () => {
12
- setSidebarCollapsed(!sidebarCollapsed);
13
- };
14
-
15
- return (
16
- <div className="flex flex-col min-h-screen bg-gray-100">
17
- {/* 顶部导航 */}
18
- <Header onToggleSidebar={toggleSidebar} />
19
-
20
- <div className="flex flex-1 overflow-hidden">
21
- {/* 侧边导航 */}
22
- <Sidebar collapsed={sidebarCollapsed} />
23
-
24
- {/* 主内容区域 */}
25
- <Content>
26
- <Outlet />
27
- </Content>
28
- </div>
29
- </div>
30
- );
31
- };
32
-
33
- export default MainLayout;
@@ -1,214 +0,0 @@
1
- {
2
- "app": {
3
- "title": "MCP Hub Dashboard",
4
- "error": "Error",
5
- "closeButton": "Close",
6
- "noServers": "No MCP servers available",
7
- "loading": "Loading...",
8
- "logout": "Logout",
9
- "profile": "Profile",
10
- "changePassword": "Change Password",
11
- "toggleSidebar": "Toggle Sidebar",
12
- "welcomeUser": "Welcome, {{username}}",
13
- "name": "MCP Hub"
14
- },
15
- "auth": {
16
- "login": "Login",
17
- "loginTitle": "Login to MCP Hub",
18
- "username": "Username",
19
- "password": "Password",
20
- "loggingIn": "Logging in...",
21
- "emptyFields": "Username and password cannot be empty",
22
- "loginFailed": "Login failed, please check your username and password",
23
- "loginError": "An error occurred during login",
24
- "currentPassword": "Current Password",
25
- "newPassword": "New Password",
26
- "confirmPassword": "Confirm Password",
27
- "passwordsNotMatch": "New password and confirmation do not match",
28
- "changePasswordSuccess": "Password changed successfully",
29
- "changePasswordError": "Failed to change password",
30
- "changePassword": "Change Password",
31
- "passwordChanged": "Password changed successfully",
32
- "passwordChangeError": "Failed to change password"
33
- },
34
- "server": {
35
- "addServer": "Add Server",
36
- "add": "Add",
37
- "edit": "Edit",
38
- "delete": "Delete",
39
- "confirmDelete": "Are you sure you want to delete this server?",
40
- "deleteWarning": "Deleting server '{{name}}' will remove it and all its data. This action cannot be undone.",
41
- "status": "Status",
42
- "tools": "Tools",
43
- "name": "Server Name",
44
- "url": "Server URL",
45
- "apiKey": "API Key",
46
- "save": "Save",
47
- "cancel": "Cancel",
48
- "invalidConfig": "Could not find configuration data for {{serverName}}",
49
- "addError": "Failed to add server",
50
- "editError": "Failed to edit server {{serverName}}",
51
- "deleteError": "Failed to delete server {{serverName}}",
52
- "updateError": "Failed to update server",
53
- "editTitle": "Edit Server: {{serverName}}",
54
- "type": "Server Type",
55
- "command": "Command",
56
- "arguments": "Arguments",
57
- "envVars": "Environment Variables",
58
- "key": "key",
59
- "value": "value",
60
- "enabled": "Enabled",
61
- "enable": "Enable",
62
- "disable": "Disable",
63
- "remove": "Remove",
64
- "toggleError": "Failed to toggle server {{serverName}}",
65
- "alreadyExists": "Server {{serverName}} already exists",
66
- "invalidData": "Invalid server data provided",
67
- "notFound": "Server {{serverName}} not found",
68
- "namePlaceholder": "Enter server name",
69
- "urlPlaceholder": "Enter server URL",
70
- "commandPlaceholder": "Enter command",
71
- "argumentsPlaceholder": "Enter arguments",
72
- "errorDetails": "Error Details",
73
- "viewErrorDetails": "View error details"
74
- },
75
- "status": {
76
- "online": "Online",
77
- "offline": "Offline",
78
- "connecting": "Connecting"
79
- },
80
- "errors": {
81
- "general": "Something went wrong",
82
- "network": "Network connection error. Please check your internet connection",
83
- "serverConnection": "Unable to connect to the server. Please check if the server is running",
84
- "serverAdd": "Failed to add server. Please check the server status",
85
- "serverUpdate": "Failed to edit server {{serverName}}. Please check the server status",
86
- "serverFetch": "Failed to retrieve server data. Please try again later",
87
- "initialStartup": "The server might be starting up. Please wait a moment as this process can take some time on first launch...",
88
- "serverInstall": "Failed to install server",
89
- "failedToFetchSettings": "Failed to fetch settings",
90
- "failedToUpdateRouteConfig": "Failed to update route configuration"
91
- },
92
- "common": {
93
- "processing": "Processing...",
94
- "save": "Save",
95
- "cancel": "Cancel",
96
- "refresh": "Refresh",
97
- "create": "Create",
98
- "submitting": "Submitting...",
99
- "delete": "Delete",
100
- "copy": "Copy",
101
- "copySuccess": "Copied to clipboard",
102
- "copyFailed": "Copy failed"
103
- },
104
- "nav": {
105
- "dashboard": "Dashboard",
106
- "servers": "Servers",
107
- "groups": "Groups",
108
- "settings": "Settings",
109
- "changePassword": "Change Password",
110
- "market": "Market"
111
- },
112
- "pages": {
113
- "dashboard": {
114
- "title": "Dashboard",
115
- "totalServers": "Total Servers",
116
- "onlineServers": "Online Servers",
117
- "offlineServers": "Offline Servers",
118
- "connectingServers": "Connecting Servers",
119
- "recentServers": "Recent Servers"
120
- },
121
- "servers": {
122
- "title": "Servers Management"
123
- },
124
- "groups": {
125
- "title": "Group Management"
126
- },
127
- "settings": {
128
- "title": "Settings",
129
- "language": "Language",
130
- "account": "Account Settings",
131
- "password": "Change Password",
132
- "appearance": "Appearance",
133
- "routeConfig": "Route Configuration"
134
- },
135
- "market": {
136
- "title": "Server Market - (Data from mcpm.sh)"
137
- }
138
- },
139
- "groups": {
140
- "add": "Add",
141
- "addNew": "Add New Group",
142
- "edit": "Edit Group",
143
- "delete": "Delete",
144
- "confirmDelete": "Are you sure you want to delete this group?",
145
- "deleteWarning": "Deleting group '{{name}}' will remove it and all its server associations. This action cannot be undone.",
146
- "name": "Group Name",
147
- "namePlaceholder": "Enter group name",
148
- "nameRequired": "Group name is required",
149
- "description": "Description",
150
- "descriptionPlaceholder": "Enter group description (optional)",
151
- "createError": "Failed to create group",
152
- "updateError": "Failed to update group",
153
- "deleteError": "Failed to delete group",
154
- "serverAddError": "Failed to add server to group",
155
- "serverRemoveError": "Failed to remove server from group",
156
- "addServer": "Add Server to Group",
157
- "selectServer": "Select a server to add",
158
- "servers": "Servers in Group",
159
- "remove": "Remove",
160
- "noGroups": "No groups available. Create a new group to get started.",
161
- "noServers": "No servers in this group.",
162
- "noServerOptions": "No servers available",
163
- "serverCount": "{{count}} Servers"
164
- },
165
- "market": {
166
- "title": "Server Market",
167
- "official": "Official",
168
- "by": "By",
169
- "unknown": "Unknown",
170
- "tools": "tools",
171
- "search": "Search",
172
- "searchPlaceholder": "Search for servers by name, category, or tags",
173
- "clearFilters": "Clear",
174
- "clearCategoryFilter": "",
175
- "clearTagFilter": "",
176
- "categories": "Categories",
177
- "tags": "Tags",
178
- "showTags": "Show tags",
179
- "hideTags": "Hide tags",
180
- "moreTags": "",
181
- "noServers": "No servers found matching your search",
182
- "backToList": "Back to list",
183
- "install": "Install",
184
- "installing": "Installing...",
185
- "installed": "Installed",
186
- "installServer": "Install Server: {{name}}",
187
- "installSuccess": "Server {{serverName}} installed successfully",
188
- "author": "Author",
189
- "license": "License",
190
- "repository": "Repository",
191
- "examples": "Examples",
192
- "arguments": "Arguments",
193
- "argumentName": "Name",
194
- "description": "Description",
195
- "required": "Required",
196
- "example": "Example",
197
- "viewSchema": "View schema",
198
- "fetchError": "Error fetching market servers",
199
- "serverNotFound": "Server not found",
200
- "searchError": "Error searching servers",
201
- "filterError": "Error filtering servers by category",
202
- "tagFilterError": "Error filtering servers by tag",
203
- "noInstallationMethod": "No installation method available for this server",
204
- "showing": "Showing {{from}}-{{to}} of {{total}} servers",
205
- "perPage": "Per page"
206
- },
207
- "settings": {
208
- "enableGlobalRoute": "Enable Global Route",
209
- "enableGlobalRouteDescription": "Allow connections to /sse endpoint without specifying a group ID",
210
- "enableGroupNameRoute": "Enable Group Name Route",
211
- "enableGroupNameRouteDescription": "Allow connections to /sse endpoint using group names instead of just group IDs",
212
- "systemConfigUpdated": "System configuration updated successfully"
213
- }
214
- }
@@ -1,214 +0,0 @@
1
- {
2
- "app": {
3
- "title": "MCP Hub 控制面板",
4
- "error": "错误",
5
- "closeButton": "关闭",
6
- "noServers": "没有可用的 MCP 服务器",
7
- "loading": "加载中...",
8
- "logout": "退出登录",
9
- "profile": "个人资料",
10
- "changePassword": "修改密码",
11
- "toggleSidebar": "切换侧边栏",
12
- "welcomeUser": "欢迎, {{username}}",
13
- "name": "MCP Hub"
14
- },
15
- "auth": {
16
- "login": "登录",
17
- "loginTitle": "登录 MCP Hub",
18
- "username": "用户名",
19
- "password": "密码",
20
- "loggingIn": "登录中...",
21
- "emptyFields": "用户名和密码不能为空",
22
- "loginFailed": "登录失败,请检查用户名和密码",
23
- "loginError": "登录过程中出现错误",
24
- "currentPassword": "当前密码",
25
- "newPassword": "新密码",
26
- "confirmPassword": "确认密码",
27
- "passwordsNotMatch": "新密码与确认密码不一致",
28
- "changePasswordSuccess": "密码修改成功",
29
- "changePasswordError": "修改密码失败",
30
- "changePassword": "修改密码",
31
- "passwordChanged": "密码修改成功",
32
- "passwordChangeError": "修改密码失败"
33
- },
34
- "server": {
35
- "addServer": "添加服务器",
36
- "add": "添加",
37
- "edit": "编辑",
38
- "delete": "删除",
39
- "confirmDelete": "您确定要删除此服务器吗?",
40
- "deleteWarning": "删除服务器 '{{name}}' 将会移除该服务器及其所有数据。此操作无法撤销。",
41
- "status": "状态",
42
- "tools": "工具",
43
- "name": "服务器名称",
44
- "url": "服务器 URL",
45
- "apiKey": "API 密钥",
46
- "save": "保存",
47
- "cancel": "取消",
48
- "addError": "添加服务器失败",
49
- "editError": "编辑服务器 {{serverName}} 失败",
50
- "invalidConfig": "无法找到 {{serverName}} 的配置数据",
51
- "deleteError": "删除服务器 {{serverName}} 失败",
52
- "updateError": "更新服务器失败",
53
- "editTitle": "编辑服务器: {{serverName}}",
54
- "type": "服务器类型",
55
- "command": "命令",
56
- "arguments": "参数",
57
- "envVars": "环境变量",
58
- "key": "键",
59
- "value": "值",
60
- "enabled": "已启用",
61
- "enable": "启用",
62
- "disable": "禁用",
63
- "remove": "移除",
64
- "toggleError": "切换服务器 {{serverName}} 状态失败",
65
- "alreadyExists": "服务器 {{serverName}} 已经存在",
66
- "invalidData": "提供的服务器数据无效",
67
- "notFound": "找不到服务器 {{serverName}}",
68
- "namePlaceholder": "请输入服务器名称",
69
- "urlPlaceholder": "请输入服务器URL",
70
- "commandPlaceholder": "请输入命令",
71
- "argumentsPlaceholder": "请输入参数",
72
- "errorDetails": "错误详情",
73
- "viewErrorDetails": "查看错误详情"
74
- },
75
- "status": {
76
- "online": "在线",
77
- "offline": "离线",
78
- "connecting": "连接中"
79
- },
80
- "errors": {
81
- "general": "发生错误",
82
- "network": "网络连接错误,请检查您的互联网连接",
83
- "serverConnection": "无法连接到服务器,请检查服务器是否正在运行",
84
- "serverAdd": "添加服务器失败,请检查服务器状态",
85
- "serverUpdate": "编辑服务器 {{serverName}} 失败,请检查服务器状态",
86
- "serverFetch": "获取服务器数据失败,请稍后重试",
87
- "initialStartup": "服务器可能正在启动中。首次启动可能需要一些时间,请耐心等候...",
88
- "serverInstall": "安装服务器失败",
89
- "failedToFetchSettings": "获取设置失败",
90
- "failedToUpdateSystemConfig": "更新系统配置失败"
91
- },
92
- "common": {
93
- "processing": "处理中...",
94
- "save": "保存",
95
- "cancel": "取消",
96
- "refresh": "刷新",
97
- "create": "创建",
98
- "submitting": "提交中...",
99
- "delete": "删除",
100
- "copy": "复制",
101
- "copySuccess": "已复制到剪贴板",
102
- "copyFailed": "复制失败"
103
- },
104
- "nav": {
105
- "dashboard": "仪表盘",
106
- "servers": "服务器",
107
- "settings": "设置",
108
- "changePassword": "修改密码",
109
- "groups": "分组",
110
- "market": "市场"
111
- },
112
- "pages": {
113
- "dashboard": {
114
- "title": "仪表盘",
115
- "totalServers": "服务器总数",
116
- "onlineServers": "在线服务器",
117
- "offlineServers": "离线服务器",
118
- "connectingServers": "连接中服务",
119
- "recentServers": "最近的服务器"
120
- },
121
- "servers": {
122
- "title": "服务器管理"
123
- },
124
- "settings": {
125
- "title": "设置",
126
- "language": "语言",
127
- "account": "账户设置",
128
- "password": "修改密码",
129
- "appearance": "外观",
130
- "routeConfig": "路由配置"
131
- },
132
- "groups": {
133
- "title": "分组管理"
134
- },
135
- "market": {
136
- "title": "服务器市场 - (数据来源于 mcpm.sh)"
137
- }
138
- },
139
- "groups": {
140
- "add": "添加",
141
- "addNew": "添加新分组",
142
- "edit": "编辑分组",
143
- "delete": "删除",
144
- "confirmDelete": "您确定要删除此分组吗?",
145
- "deleteWarning": "删除分组 '{{name}}' 将会移除该分组及其所有服务器关联。此操作无法撤销。",
146
- "name": "分组名称",
147
- "namePlaceholder": "请输入分组名称",
148
- "nameRequired": "分组名称不能为空",
149
- "description": "描述",
150
- "descriptionPlaceholder": "请输入分组描述(可选)",
151
- "createError": "创建分组失败",
152
- "updateError": "更新分组失败",
153
- "deleteError": "删除分组失败",
154
- "serverAddError": "向分组添加服务器失败",
155
- "serverRemoveError": "从分组移除服务器失败",
156
- "addServer": "添加服务器到分组",
157
- "selectServer": "选择要添加的服务器",
158
- "servers": "分组中的服务器",
159
- "remove": "移除",
160
- "noGroups": "暂无可用分组。创建一个新分组以开始使用。",
161
- "noServers": "此分组中没有服务器。",
162
- "noServerOptions": "没有可用的服务器",
163
- "serverCount": "{{count}} 台服务器"
164
- },
165
- "market": {
166
- "title": "服务器市场",
167
- "official": "官方",
168
- "by": "作者",
169
- "unknown": "未知",
170
- "tools": "工具",
171
- "search": "搜索",
172
- "searchPlaceholder": "搜索服务器名称、分类或标签",
173
- "clearFilters": "清除",
174
- "clearCategoryFilter": "",
175
- "clearTagFilter": "",
176
- "categories": "分类",
177
- "tags": "标签",
178
- "showTags": "显示标签",
179
- "hideTags": "隐藏标签",
180
- "moreTags": "",
181
- "noServers": "未找到匹配的服务器",
182
- "backToList": "返回列表",
183
- "install": "安装",
184
- "installing": "安装中...",
185
- "installed": "已安装",
186
- "installServer": "安装服务器: {{name}}",
187
- "installSuccess": "服务器 {{serverName}} 安装成功",
188
- "author": "作者",
189
- "license": "许可证",
190
- "repository": "代码仓库",
191
- "examples": "示例",
192
- "arguments": "参数",
193
- "argumentName": "名称",
194
- "description": "描述",
195
- "required": "必填",
196
- "example": "示例",
197
- "viewSchema": "查看结构",
198
- "fetchError": "获取服务器市场数据失败",
199
- "serverNotFound": "未找到服务器",
200
- "searchError": "搜索服务器失败",
201
- "filterError": "按分类筛选服务器失败",
202
- "tagFilterError": "按标签筛选服务器失败",
203
- "noInstallationMethod": "该服务器没有可用的安装方法",
204
- "showing": "显示 {{from}}-{{to}}/{{total}} 个服务器",
205
- "perPage": "每页显示"
206
- },
207
- "settings": {
208
- "enableGlobalRoute": "启用全局路由",
209
- "enableGlobalRouteDescription": "允许不指定分组 ID 就连接到 /sse 端点",
210
- "enableGroupNameRoute": "启用分组名称路由",
211
- "enableGroupNameRouteDescription": "允许使用分组名称而非分组 ID 连接到 /sse 端点",
212
- "systemConfigUpdated": "系统配置更新成功"
213
- }
214
- }
@@ -1,12 +0,0 @@
1
- import React from 'react'
2
- import ReactDOM from 'react-dom/client'
3
- import App from './App'
4
- import './index.css'
5
- // Import the i18n configuration
6
- import './i18n'
7
-
8
- ReactDOM.createRoot(document.getElementById('root')!).render(
9
- <React.StrictMode>
10
- <App />
11
- </React.StrictMode>,
12
- )