From 4d265b8f24b0c9cb9a34754717399ac52f4f7a7b Mon Sep 17 00:00:00 2001 From: Acbox Date: Tue, 10 Feb 2026 17:58:28 +0800 Subject: [PATCH] refactor(web): i18n --- packages/web/src/components/Sidebar/index.vue | 31 ++-- .../web/src/components/add-platform/index.vue | 20 +-- .../web/src/components/add-provider/index.vue | 36 ++--- .../src/components/confirm-popover/index.vue | 8 +- .../web/src/components/create-mcp/index.vue | 36 ++--- .../web/src/components/create-model/index.vue | 40 ++--- packages/web/src/i18n/locales/en.json | 148 ++++++++++++++---- packages/web/src/i18n/locales/zh.json | 134 +++++++++++++--- packages/web/src/pages/chat/index.vue | 5 +- packages/web/src/pages/home/index.vue | 4 +- packages/web/src/pages/login/index.vue | 44 +++--- packages/web/src/pages/mcp/index.vue | 6 +- .../pages/models/components/model-item.vue | 2 +- .../pages/models/components/model-list.vue | 6 +- .../pages/models/components/provider-form.vue | 18 +-- packages/web/src/pages/models/index.vue | 8 +- .../platform/components/platform-card.vue | 8 +- packages/web/src/pages/settings/index.vue | 28 ++-- packages/web/src/router.ts | 11 +- 19 files changed, 372 insertions(+), 221 deletions(-) diff --git a/packages/web/src/components/Sidebar/index.vue b/packages/web/src/components/Sidebar/index.vue index c956fb41..e39f09ea 100644 --- a/packages/web/src/components/Sidebar/index.vue +++ b/packages/web/src/components/Sidebar/index.vue @@ -76,33 +76,20 @@ const curSelectSlide = (cur: string) => computed(() => { }) const sidebarInfo = computed(() => [ { - title: t('slidebar.chat'), + title: t('sidebar.chat'), name: 'chat', - icon: ['far', 'comments'] + icon: ['far', 'comments'], }, - // { - // title: t('slidebar.home'), - // name: 'home', - // icon: mdiHome - // }, { - title: t('slidebar.model_setting'), + title: t('sidebar.models'), name: 'models', - icon: ['fas', 'robot'] - }, { - title: t('slidebar.setting'), - name: 'settings', - icon: ['fas', 'gear'] + icon: ['fas', 'robot'], + }, + { + title: t('sidebar.settings'), + name: 'settings', + icon: ['fas', 'gear'], }, - // { - // title: 'MCP', - // name: 'mcp', - // icon: mdiListBox - // }, { - // title: t('slidebar.platform'), - // name: 'platform', - // icon: mdiBookArrowDown - // } ]) \ No newline at end of file diff --git a/packages/web/src/components/add-platform/index.vue b/packages/web/src/components/add-platform/index.vue index 5aca8833..dfb38ac6 100644 --- a/packages/web/src/components/add-platform/index.vue +++ b/packages/web/src/components/add-platform/index.vue @@ -6,15 +6,15 @@ variant="default" class="ml-auto my-4" > - 添加平台 + {{ $t('platform.addTitle') }}
- 添加平台 + {{ $t('platform.addTitle') }} - 为模型添加使用平台 + {{ $t('platform.addDescription') }} @@ -26,12 +26,12 @@ > - Name + {{ $t('platform.name') }} @@ -49,7 +49,7 @@ > - Config + {{ $t('platform.config') }} @@ -85,7 +85,7 @@ > - 是否立即使用 + {{ $t('platform.active') }} diff --git a/packages/web/src/components/add-provider/index.vue b/packages/web/src/components/add-provider/index.vue index c557ab37..e198257c 100644 --- a/packages/web/src/components/add-provider/index.vue +++ b/packages/web/src/components/add-provider/index.vue @@ -9,19 +9,18 @@ 添加 + /> {{ $t('provider.addBtn') }}
- 添加提供商 + {{ $t('provider.add') }} - - +
@@ -46,12 +45,12 @@ > @@ -63,15 +62,15 @@ > - + @@ -49,12 +49,12 @@ > - Type + {{ $t('mcp.type') }} @@ -101,11 +101,11 @@ > - Command + {{ $t('mcp.command') }} @@ -122,7 +122,7 @@ > - Arguments + {{ $t('mcp.arguments') }} @@ -158,7 +158,7 @@ > - Env + {{ $t('mcp.env') }} @@ -195,7 +195,7 @@
- + diff --git a/packages/web/src/components/create-model/index.vue b/packages/web/src/components/create-model/index.vue index ad916ea3..4c014e1e 100644 --- a/packages/web/src/components/create-model/index.vue +++ b/packages/web/src/components/create-model/index.vue @@ -3,33 +3,33 @@
- {{ title === 'edit' ? '编辑Model' : '添加Model' }} + {{ title === 'edit' ? $t('models.editModel') : $t('models.addModel') }}
- + - + - + - + @@ -176,7 +176,7 @@ import { type ModelInfo } from '@memoh/shared' import { useCreateModel } from '@/composables/api/useModels' const formSchema = toTypedSchema(z.object({ - type: z.string().min(1, '请选择模型类型'), + type: z.string().min(1), model_id: z.string().min(1), name: z.string().optional(), dimensions: z.coerce.number().min(1).optional(), diff --git a/packages/web/src/i18n/locales/en.json b/packages/web/src/i18n/locales/en.json index 66243e47..4d02637a 100644 --- a/packages/web/src/i18n/locales/en.json +++ b/packages/web/src/i18n/locales/en.json @@ -1,39 +1,121 @@ { - "login": { - "username": "Username", - "password": "Password", - "login": "Login", - "register": "Register", - "forget": "Forgot your password?", - "exit": "Sign Out" - }, - "prompt": { - "enter": "Please enter {msg}", - "select": "Please select {msg}" - }, - "slidebar": { - "setting": "Settings", - "platform": "Platform", - "chat": "Create Chat", - "model_setting": "Model Settings", - "home": "Home" - }, - "desc": { - "question": "your question" - }, - "chat": { - "send": "Send", - "chat": "Chat" - }, - "breadcrumb": { - "main": "Main" - }, - "button": { + "common": { + "confirm": "Confirm", + "cancel": "Cancel", + "save": "Save", + "add": "Add", "edit": "Edit", "delete": "Delete", - "add": "Add {msg}" + "search": "Search", + "loading": "Loading...", + "operation": "Actions", + "enable": "Enable", + "optional": "optional" }, - "state":{ - "open":"Open" + "auth": { + "welcome": "Welcome Back", + "username": "Username", + "password": "Password", + "login": "Sign In", + "register": "Sign Up", + "forgotPassword": "Forgot password?", + "logout": "Sign Out", + "logoutConfirm": "Are you sure you want to sign out?", + "loginFailed": "Login failed", + "invalidCredentials": "Invalid username or password", + "retryHint": "Please check and try again" + }, + "sidebar": { + "chat": "Chat", + "models": "Models", + "settings": "Settings", + "home": "Home", + "platform": "Platform", + "mcp": "MCP" + }, + "breadcrumb": { + "main": "Home" + }, + "settings": { + "display": "Display Settings", + "language": "Language", + "languagePlaceholder": "Select language", + "theme": "Theme", + "themePlaceholder": "Select theme", + "themeLight": "Light", + "themeDark": "Dark", + "langZh": "中文", + "langEn": "English" + }, + "chat": { + "greeting": "Hi! How can I help you today?", + "inputPlaceholder": "Type your question…", + "send": "Send" + }, + "models": { + "title": "Models", + "searchPlaceholder": "Search providers…", + "addModel": "Add Model", + "editModel": "Edit Model", + "deleteModelConfirm": "Are you sure you want to delete this model?", + "emptyTitle": "No Models", + "emptyDescription": "Click the button above to add a model for this provider", + "type": "Type", + "typePlaceholder": "Select model type", + "model": "Model ID", + "modelPlaceholder": "e.g. gpt-4o", + "displayName": "Display Name", + "displayNamePlaceholder": "Custom display name", + "dimensions": "Dimensions", + "dimensionsPlaceholder": "e.g. 1536", + "multimodal": "Multimodal" + }, + "provider": { + "add": "Add Provider", + "addBtn": "Add", + "name": "Name", + "namePlaceholder": "Enter provider name", + "apiKey": "API Key", + "apiKeyPlaceholder": "Enter API key", + "url": "Base URL", + "urlPlaceholder": "Enter base URL", + "type": "Type", + "typePlaceholder": "Select type", + "deleteConfirm": "Are you sure you want to delete this provider?", + "saveChanges": "Save Changes", + "emptyTitle": "No Providers", + "emptyDescription": "Add a model provider first to configure models" + }, + "mcp": { + "addTitle": "Add MCP", + "addDescription": "Configure MCP server connection", + "name": "Name", + "namePlaceholder": "Enter name", + "type": "Type", + "typePlaceholder": "Select type", + "command": "Command", + "commandPlaceholder": "Enter start command", + "arguments": "Arguments", + "argumentsPlaceholder": "Enter arguments", + "cwd": "Working Directory", + "cwdPlaceholder": "Enter working directory path", + "env": "Environment", + "envPlaceholder": "Format: KEY:VALUE", + "active": "Enable Now" + }, + "platform": { + "addTitle": "Add Platform", + "addDescription": "Configure a platform for model access", + "name": "Name", + "namePlaceholder": "Enter platform name", + "config": "Config", + "configPlaceholder": "Format: key:value", + "active": "Enable Now", + "running": "Running", + "platformLabel": "Platform", + "deleteConfirm": "Are you sure you want to delete this platform?" + }, + "home": { + "title": "Home" } } diff --git a/packages/web/src/i18n/locales/zh.json b/packages/web/src/i18n/locales/zh.json index 2acf0ffc..c9908084 100644 --- a/packages/web/src/i18n/locales/zh.json +++ b/packages/web/src/i18n/locales/zh.json @@ -1,39 +1,121 @@ { - "login": { + "common": { + "confirm": "确认", + "cancel": "取消", + "save": "保存", + "add": "添加", + "edit": "编辑", + "delete": "删除", + "search": "搜索", + "loading": "加载中...", + "operation": "操作", + "enable": "启用", + "optional": "可选" + }, + "auth": { + "welcome": "欢迎回来", "username": "用户名", "password": "密码", "login": "登录", "register": "注册", - "forget": "忘记密码?", - "exit": "退出登录" + "forgotPassword": "忘记密码?", + "logout": "退出登录", + "logoutConfirm": "确定要退出当前账号吗?", + "loginFailed": "登录失败", + "invalidCredentials": "用户名或密码不正确", + "retryHint": "请检查后重新输入" }, - "desc": { - "question": "您的问题" - }, - "prompt": { - "enter": "请输入{msg}", - "select": "请选择{msg}" - }, - "slidebar": { - "setting": "设置", + "sidebar": { + "chat": "对话", + "models": "模型管理", + "settings": "设置", + "home": "首页", "platform": "平台", - "chat": "创建对话", - "model_setting": "模型配置", - "home": "主页" - }, - "chat": { - "send": "发送", - "chat": "对话" + "mcp": "MCP" }, "breadcrumb": { - "main": "主菜单" + "main": "主页" }, - "button": { - "edit": "编辑", - "delete": "删除", - "add": "添加{msg}" + "settings": { + "display": "显示设置", + "language": "语言", + "languagePlaceholder": "选择语言", + "theme": "主题", + "themePlaceholder": "选择主题", + "themeLight": "浅色", + "themeDark": "深色", + "langZh": "中文", + "langEn": "English" }, - "state": { - "open": "Open" + "chat": { + "greeting": "你好!有什么我可以帮你的吗?", + "inputPlaceholder": "输入你的问题…", + "send": "发送" + }, + "models": { + "title": "模型", + "searchPlaceholder": "搜索服务商…", + "addModel": "添加模型", + "editModel": "编辑模型", + "deleteModelConfirm": "确定要删除这个模型吗?", + "emptyTitle": "暂无模型", + "emptyDescription": "点击上方按钮为当前服务商添加模型", + "type": "类型", + "typePlaceholder": "选择模型类型", + "model": "模型 ID", + "modelPlaceholder": "例如 gpt-4o", + "displayName": "显示名称", + "displayNamePlaceholder": "自定义显示名称", + "dimensions": "向量维度", + "dimensionsPlaceholder": "例如 1536", + "multimodal": "支持多模态" + }, + "provider": { + "add": "添加服务商", + "addBtn": "添加", + "name": "名称", + "namePlaceholder": "输入服务商名称", + "apiKey": "API 密钥", + "apiKeyPlaceholder": "输入 API 密钥", + "url": "接口地址", + "urlPlaceholder": "输入接口地址", + "type": "类型", + "typePlaceholder": "选择类型", + "deleteConfirm": "确定要删除这个服务商吗?", + "saveChanges": "保存修改", + "emptyTitle": "暂无服务商", + "emptyDescription": "请先添加模型服务商,才能配置模型" + }, + "mcp": { + "addTitle": "添加 MCP", + "addDescription": "配置 MCP 服务器连接", + "name": "名称", + "namePlaceholder": "输入名称", + "type": "类型", + "typePlaceholder": "选择类型", + "command": "命令", + "commandPlaceholder": "输入启动命令", + "arguments": "参数", + "argumentsPlaceholder": "输入启动参数", + "cwd": "工作目录", + "cwdPlaceholder": "输入工作目录路径", + "env": "环境变量", + "envPlaceholder": "格式:KEY:VALUE", + "active": "立即启用" + }, + "platform": { + "addTitle": "添加平台", + "addDescription": "为模型配置调用平台", + "name": "名称", + "namePlaceholder": "输入平台名称", + "config": "配置", + "configPlaceholder": "格式:key:value", + "active": "立即启用", + "running": "运行中", + "platformLabel": "平台", + "deleteConfirm": "确定要删除这个平台吗?" + }, + "home": { + "title": "首页" } } diff --git a/packages/web/src/pages/chat/index.vue b/packages/web/src/pages/chat/index.vue index bba0cc47..b8cf1f77 100644 --- a/packages/web/src/pages/chat/index.vue +++ b/packages/web/src/pages/chat/index.vue @@ -14,14 +14,14 @@ class="scroll-m-20 text-3xl font-semibold tracking-tight text-center" style="font-family: 'Source Han Serif CN', 'Noto Serif SC', 'STSong', 'SimSun', serif;" > - +