DBView 开发日志 ⑤ — v2 阶段 I18n 修复与 SqlEditor 国际化改造
日期: 2026-06-15
项目: DBView — Database Visual Explorer(数据库可视化工具)
状态: v2 阶段 P1 推进中
一、本期概要
v2 阶段进入第二周 P1 任务推进中,本期主要完成两件事:
- I18n 尾逗号故障排查 — 定位并修复了翻译文件尾逗号导致应用界面全白的运行时错误
- SqlEditor 国际化改造 — 配合 i18n 修复同步对 SqlEditor、QueryHistory、DatabaseTree 等组件进行全面的国际化适配
涉及 8 个文件,+170/-75 行改动。
二、I18n 尾逗号故障排查
2.1 问题现象
应用启动后,界面大部分文字显示为空白或 key 本身(如 common.save、sidebar.connections),而非预期的中文翻译。Ant Design 组件本身显示正常,说明 React 渲染层没有问题。
2.2 排查过程
- 检查 i18next 初始化配置:
resources加载正常,lng设置为zh - 浏览器控制台无 404 错误,翻译 JSON 文件路径正确
- 逐层检查
t()调用链 → 最终定位到JSON.parse()解析翻译文件时抛出SyntaxError - i18next 默认使用
JSON.parse()加载 JSON 格式的翻译资源,单次失败即导致全部翻译失效
2.3 根因
en/translation.json 和 zh/translation.json 中 connection 对象的最后一个字段 searchPlaceholder 末尾多了一个尾逗号:
1 | { |
标准 JSON 规范(RFC 7159)不允许尾逗号(trailing comma),而 JavaScript 对象字面量允许——这是开发者在手动编辑 JSON 时最容易踩的坑。
2.4 修复方法
在两个翻译文件中去掉尾逗号,并用 JSON.parse() 验证:
1 | node -e "JSON.parse(require('fs').readFileSync('src/renderer/locales/en/translation.json','utf8')); console.log('OK')" |
2.5 预防措施
建议在 CI 或 pre-commit hook 中加入 JSON 格式校验,避免同类问题再次出现:
1 | find src -name '*.json' -not -path '*/node_modules/*' -exec node -e \ |
三、SqlEditor 国际化改造
配合 i18n 修复,对 SQL 编辑相关组件进行了全面的国际化适配,改造范围:
| 文件 | 改动内容 |
|---|---|
SqlEditor.tsx |
查询按钮文字、占位符、工具栏提示改为 t() 调用 |
QueryHistory.tsx |
历史记录列表标题、空状态文案、操作按钮文字国际化 |
DatabaseTree.tsx |
搜索框占位符、右键菜单文字国际化 |
en/translation.json |
新增 sqlEditor、queryHistory、databaseTree 等翻译键 |
zh/translation.json |
新增对应的中文翻译 |
package.json / pnpm-lock.yaml |
依赖更新 |
四、v2 阶段 Commit 记录
本期 commit:
1 | bc07344 fix: remove trailing commas in translation.json causing i18n JSON parse error |
v2 阶段全部 commits 一览:
1 | bc07344 fix: remove trailing commas in translation.json causing i18n JSON parse error |
五、下一步计划
- P2 任务推进:SSH 隧道、列类型筛选、查询结果分页
- i18n 覆盖度提升:当前已覆盖主要 UI 组件,后续新建组件时同步添加翻译键
- v2 阶段任务完成后:归档 v2 proposal,进入下一阶段规划
六、附录:涉及文件清单
| 文件 | 操作 |
|---|---|
src/renderer/locales/en/translation.json |
修改 |
src/renderer/locales/zh/translation.json |
修改 |
src/renderer/components/sql-editor/SqlEditor.tsx |
修改 |
src/renderer/components/sql-editor/QueryHistory.tsx |
修改 |
src/renderer/components/database-tree/DatabaseTree.tsx |
修改 |
package.json |
修改 |
pnpm-lock.yaml |
修改 |
openspec/changes/dbview-v2/tasks.md |
修改 |