From f6df0fecfa35df7717e8e6870f590368df50ceb8 Mon Sep 17 00:00:00 2001 From: Butter Rice Cake of Gemini Date: Thu, 14 May 2026 12:39:36 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E4=BD=93=E7=A7=AF?= =?UTF-8?q?=EF=BC=8Chighlight.js=E6=8C=89=E9=9C=80=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E4=B8=8Ei18n=E6=8C=89=E9=9C=80=E5=8A=A0=E8=BD=BD=20(#696)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf: 优化打包体积,highlight.js按需导入与i18n按需加载 1. highlight.js: 从全量导入改为 core + 注册27种常用语言,减少约500~800KB 2. i18n: 只同步加载en语言包,其他8种语言改为异步加载,首屏减少约350~400KB 3. 使用vue-i18n的setLocaleMessage API动态注册语言包 4. 新增switchLocale函数统一处理语言切换 5. 同步更新相关测试文件的mock路径和API适配 * 修复类型断言 --- .../src/components/hermes/chat/highlight.ts | 58 ++++++++++++++++++- .../src/components/layout/LanguageSwitch.vue | 4 +- packages/client/src/i18n/index.ts | 32 +++++++--- packages/client/src/i18n/messages.ts | 53 ++++++++--------- packages/client/src/main.ts | 6 +- tests/client/highlight-helper.test.ts | 3 +- tests/client/i18n-coverage.test.ts | 22 +++++-- tests/client/sidebar-search.test.ts | 3 + 8 files changed, 134 insertions(+), 47 deletions(-) diff --git a/packages/client/src/components/hermes/chat/highlight.ts b/packages/client/src/components/hermes/chat/highlight.ts index 30a2ae3f..0ffffd5a 100644 --- a/packages/client/src/components/hermes/chat/highlight.ts +++ b/packages/client/src/components/hermes/chat/highlight.ts @@ -1,6 +1,62 @@ -import hljs from 'highlight.js' +import hljs from 'highlight.js/lib/core' +import bash from 'highlight.js/lib/languages/bash' +import c from 'highlight.js/lib/languages/c' +import cpp from 'highlight.js/lib/languages/cpp' +import csharp from 'highlight.js/lib/languages/csharp' +import css from 'highlight.js/lib/languages/css' +import diff from 'highlight.js/lib/languages/diff' +import go from 'highlight.js/lib/languages/go' +import xml from 'highlight.js/lib/languages/xml' +import java from 'highlight.js/lib/languages/java' +import javascript from 'highlight.js/lib/languages/javascript' +import json from 'highlight.js/lib/languages/json' +import kotlin from 'highlight.js/lib/languages/kotlin' +import lua from 'highlight.js/lib/languages/lua' +import markdown from 'highlight.js/lib/languages/markdown' +import php from 'highlight.js/lib/languages/php' +import python from 'highlight.js/lib/languages/python' +import r from 'highlight.js/lib/languages/r' +import ruby from 'highlight.js/lib/languages/ruby' +import rust from 'highlight.js/lib/languages/rust' +import scss from 'highlight.js/lib/languages/scss' +import shell from 'highlight.js/lib/languages/shell' +import sql from 'highlight.js/lib/languages/sql' +import swift from 'highlight.js/lib/languages/swift' +import typescript from 'highlight.js/lib/languages/typescript' +import yaml from 'highlight.js/lib/languages/yaml' +import plaintext from 'highlight.js/lib/languages/plaintext' import { copyToClipboard } from '@/utils/clipboard' +hljs.registerLanguage('bash', bash) +hljs.registerLanguage('c', c) +hljs.registerLanguage('cpp', cpp) +hljs.registerLanguage('csharp', csharp) +hljs.registerLanguage('css', css) +hljs.registerLanguage('diff', diff) +hljs.registerLanguage('go', go) +hljs.registerLanguage('xml', xml) +hljs.registerLanguage('html', xml) +hljs.registerLanguage('java', java) +hljs.registerLanguage('javascript', javascript) +hljs.registerLanguage('js', javascript) +hljs.registerLanguage('json', json) +hljs.registerLanguage('kotlin', kotlin) +hljs.registerLanguage('lua', lua) +hljs.registerLanguage('markdown', markdown) +hljs.registerLanguage('php', php) +hljs.registerLanguage('python', python) +hljs.registerLanguage('r', r) +hljs.registerLanguage('ruby', ruby) +hljs.registerLanguage('rust', rust) +hljs.registerLanguage('scss', scss) +hljs.registerLanguage('shell', shell) +hljs.registerLanguage('sql', sql) +hljs.registerLanguage('swift', swift) +hljs.registerLanguage('typescript', typescript) +hljs.registerLanguage('ts', typescript) +hljs.registerLanguage('yaml', yaml) +hljs.registerLanguage('plaintext', plaintext) + const LANGUAGE_ALIASES: Record = { shellscript: 'bash', sh: 'bash', diff --git a/packages/client/src/components/layout/LanguageSwitch.vue b/packages/client/src/components/layout/LanguageSwitch.vue index 06cf5493..c856d3b0 100644 --- a/packages/client/src/components/layout/LanguageSwitch.vue +++ b/packages/client/src/components/layout/LanguageSwitch.vue @@ -1,6 +1,7 @@