Files
2026Technology-Competition/docs/superpowers/specs/2026-07-28-adapter-i18n-design.md
T
范智鹏 effcf30802 feat: 适配器 i18n + Provider 动态注册 + SetupView 重构 + jars 资源
- 适配器 i18n 接入(eslint/pmd/sql-lint/stylelint)
- Provider 动态注册机制(registry.ts + providers.json + factory 重构)
- SetupView 全面重构(setupView.ts 新增 600+ 行)
- i18n 消息扩展(messages.ts +210 行)
- 规则导入流程优化(import-service / prompt-builder)
- 新增 PMD jars 依赖及测试用例
2026-07-28 22:57:15 +08:00

8.6 KiB

适配器面板 UI + 配置文件模板 i18n 设计书

  • 项目: vscode-code-reviewer
  • 日期: 2026-07-28
  • 设计范围: 适配器面板 UI 文本 + 配置文件模板注释的国际化接入

01 问题

适配器优化引入的新 UI 文本和配置文件模板注释为硬编码中文,未走 t() 通路,英文/日语用户看到的是中文文本。

涉及范围:

  1. setupView.ts HTML 模板中 3 处硬编码(tooltip、图例、子标题)
  2. setupView.js 前端渲染中 ~8 处硬编码(徽章、按钮、标签、tooltip)
  3. setupView.ts 配置文件模板常量中 ~9 处中文注释

02 方案

2.1 数据流

用户切换语言 → pushConfig() 发送 initConfig 消息
  ├─ 已有字段:config, providers, ruleFiles, adapterStatus
  └─ 新增字段:i18n(包含前端需要的全部翻译文本)

setupView.js 从 msg.i18n.* 读取文本,不再硬编码

2.2 setupView.ts HTML 模板变更

直接在 getHtml() 模板字符串中将硬编码文本替换为 ${t('key')},与现有 pattern 一致。

涉及键:

位置 当前文本 i18n 键
data-tooltip 点击展开/收起静态分析适配器 setup.adapter.tooltipTab
.engine-subtitle 静态分析适配器 setup.adapter.subtitle
.mode-legend-item 图例 x3 内置规则 / 项目配置 / 全局配置 setup.adapter.modeBuiltin / modeProject / modeGlobal
.mode-legend-desc 插件按 内置<全局<项目的优先级... setup.adapter.modeLegend

2.3 setupView.js 前端变更

pushConfig()initConfig 消息中新增 i18n 对象:

// pushConfig() 中
this._view.webview.postMessage({
  type: 'initConfig',
  // ... 现有字段 ...
  i18n: {
    configured: t('setup.configured'),
    notConfigured: t('setup.notConfigured'),
    connected: t('setup.connected'),
    retry: t('setup.retry'),
    saveTest: t('setup.saveAndTest'),
    ruleCount: t('setup.ruleCountFormat'),
    noRuleFiles: t('setup.noRuleFiles'),
    // 适配器相关
    modeBuiltin: t('setup.adapter.modeBuiltin'),
    modeProject: t('setup.adapter.modeProject'),
    modeGlobal: t('setup.adapter.modeGlobal'),
    configYes: t('setup.adapter.configYes'),
    configNo: t('setup.adapter.configNo'),
    langLabel: t('setup.adapter.langLabel'),
    btnCreateConfig: t('setup.adapter.btnCreateConfig'),
    btnEditGlobal: t('setup.adapter.btnEditGlobal'),
    tooltipCreatePrefix: t('setup.adapter.tooltipCreate'),
    tooltipEdit: t('setup.adapter.tooltipEdit'),
    tooltipToggleEnable: t('setup.adapter.toggleEnable'),
    tooltipToggleDisable: t('setup.adapter.toggleDisable'),
  },
});

setupView.js 中所有 '硬编码文本' 替换为 msg.i18n.xxx

2.4 配置文件模板变更

四个模板常量从静态字符串改为运行时函数,使用 t() 生成注释:

function getPmdRulesetTemplate(): string {
  return `<?xml version="1.0" encoding="UTF-8"?>
<ruleset ...>
  <description>Custom PMD Ruleset</description>
  <!-- ${t('setup.template.pmdBestPractices')} -->
  <rule ref="category/java/bestpractices.xml" />
  <!-- ${t('setup.template.pmdCodeStyle')} -->
  <rule ref="category/java/codestyle.xml" />
</ruleset>`;
}

ADAPTER_METADATA 中的 configFileTemplate 改为 getter 函数(() => string),handleAdapterConfig() 在写入时调用。

2.5 修复已有硬编码

顺便修复 setupView.js 中已有的硬编码字符串:

当前文本 i18n 键
131, 136 '已配置' / '未配置' setup.configured / setup.notConfigured (已存在)
142 '✓ 已连接' setup.connected
144 '✗ 重试' setup.retry
146 '保存并测试连接' setup.saveAndTest (已存在)
153 '{n} 个文件' setup.ruleCountFormat
161 '0 个文件' 同上
163 '暂无规则文件' setup.noRuleFiles

03 新增 i18n 键清单

面板 UI(约12条)

zh-CN en ja
setup.configured 已配置 Configured 設定済み
setup.connected ✓ 已连接 ✓ Connected ✓ 接続済み
setup.retry ✗ 重试 ✗ Retry ✗ 再試行
setup.ruleCountFormat {0} 个文件 {0} file(s) {0} ファイル
setup.noRuleFiles 暂无规则文件 No rule files ルールファイルなし
setup.adapter.subtitle 静态分析适配器 Static Analysis Adapters 静的解析アダプター
setup.adapter.modeBuiltin 内置规则 Built-in Rules 組み込みルール
setup.adapter.modeProject 项目配置 Project Config プロジェクト設定
setup.adapter.modeGlobal 全局配置 Global Config グローバル設定
setup.adapter.modeLegend 插件按 内置<全局<项目的优先级自动选择配置来源 Auto-selects config by priority: Built-in < Global < Project 優先順位に従って自動選択: 組み込み < グローバル < プロジェクト
setup.adapter.configYes 已配置 Configured 設定済み
setup.adapter.configNo 未配置 Not configured 未設定
setup.adapter.langLabel 可审查的语言: Languages: 対応言語:
setup.adapter.tooltipTab 点击展开/收起静态分析适配器 Click to expand/collapse static analysis adapters クリックで静的解析アダプターを展開/折りたたむ
setup.adapter.btnCreateConfig 创建项目配置 Create Project Config プロジェクト設定を作成
setup.adapter.btnEditGlobal 修改全局设置 Modify Global Settings グローバル設定を変更
setup.adapter.tooltipCreate 在项目根目录创建 {0} Create {0} in project root プロジェクトルートに {0} を作成
setup.adapter.tooltipEdit 修改 VS Code 设置中的全局参数 Modify global parameters in VS Code settings VS Code設定のグローバルパラメータを変更
setup.adapter.toggleEnable 启用 {0} 适配器 Enable {0} adapter {0} アダプターを有効化
setup.adapter.toggleDisable 禁用 {0} 适配器 Disable {0} adapter {0} アダプターを無効化

模板注释(约6条)

zh-CN en ja
setup.template.pmdBestPractices Java 最佳实践(如:避免空 catch、关闭流等) Java best practices (avoid empty catch, close streams, etc.) Javaベストプラクティス(空のcatch回避、ストリームクローズ等)
setup.template.pmdCodeStyle Java 代码风格(如:命名规范、花括号位置等) Java code style (naming conventions, brace placement, etc.) Javaコードスタイル(命名規則、ブレース位置等)
setup.template.sqlfluffDialect 数据库方言:postgres / mysql / bigquery / snowflake 等 Database dialect: postgres / mysql / bigquery / snowflake etc. データベース方言:postgres / mysql / bigquery / snowflake など
setup.template.sqlfluffRules all = 启用全部规则,也可指定规则名逗号分隔 all = enable all rules, or specify rule names separated by commas all = すべてのルールを有効、ルール名をカンマ区切りで指定可
setup.template.eslintComment1 未使用的变量 → 警告 Unused variables → warning 未使用変数 → 警告
setup.template.eslintComment2 允许使用 console Allow console consoleを許可
setup.template.eslintComment3 强制分号 Enforce semicolons セミコロンを強制
setup.template.stylelintComment1 缩进 2 空格 Indentation: 2 spaces インデント: 2スペース
setup.template.stylelintComment2 禁止空规则 No empty rules 空ルールを禁止

04 文件变更清单

文件 变更类型 说明
src/i18n/messages.ts 修改 新增 ~28 条 i18n 键(面板 UI + 模板注释)
src/views/setupView.ts 修改 HTML 模板硬编码替换为 t();模板常量改为函数
src/views/setupView.js 修改 msg.i18n 读取文本替换全篇硬编码字符串

零破坏性原则:不修改任何现有 i18n 键,不修改现有逻辑分支,不修改 HTML 结构/JS 事件绑定逻辑。


05 风险与注意事项

  • ADAPTER_METADATAconfigFileTemplate 的类型从 string 改为 () => string,调用方 handleAdapterConfig() 需相应调整
  • 部分键与已有键重复(如 setup.configured / setup.notConfigured),需确认是否复用现有 setup.notConfigured
  • 模板中 XML/JS 注释 <!-- --> / // / # 本身不翻译,仅注释内容翻译