☰
英中 / 中英对照制作程序:操作指南
2026/11/2 1:56:56 网站建设 项目流程

英中 / 中英对照制作程序:操作指南

摘要:本文介绍一款基于 Spring Boot + Thymeleaf + Bootstrap 的英中 / 中英对照制作程序,用于规范英语学习软件中词库与句库的导入文件。程序还原了 VB 版《英中/中英对照制作程序》的核心功能:文本规范化、中英对照制作、英中对照制作、对照文本保存,并补足了原程序声明了变量却未真正实现的段落数一致性检查功能。程序界面为三个文本框加一组命令按钮,支持文件上传(自动识别 UTF-8 / GBK 编码),完全离线可用。

本文目录

  • 英中 / 中英对照制作程序:操作指南
    • 一、程序能解决什么问题
      • 与原 VB 版的对应关系
    • 二、运行前的准备
      • 2.1 环境要求
      • 2.2 打包与启动
      • 2.3 目录结构
    • 三、界面说明
      • 3.1 顶部使用提示条
      • 3.2 三个文本框
      • 3.3 段落数一致性检查区
      • 3.4 底部操作条
    • 四、操作步骤详解
      • 步骤一:载入文本
      • 步骤二:规范化(可选)
      • 步骤三:检查段落数 ★
      • 步骤四:制作对照
      • 步骤五:保存
    • 五、核心算法说明
      • 5.1 段落切分
      • 5.2 交替拼接
      • 5.3 空缺占位
    • 六、常见问题
      • Q1:上传的中文文件显示乱码怎么办?
      • Q2:提示「段落数不一致」,但我明明数出来一样?
      • Q3:对照文本里的 `######空缺#######` 需要手工替换吗?
      • Q4:能处理多大的文本?
      • Q5:为什么段首缩进是 4 个空格?
      • Q6:页面样式加载不出来?
      • Q7:点击【保存对照文本】没有弹出「另存为」对话框?
    • 七、测试与验证
      • 7.1 单元测试
      • 7.2 接口级端到端测试
      • 7.3 真实浏览器交互测试
      • 7.4 「另存为」对话框测试
    • 八、小结

项目下载地址:英中 / 中英对照制作程序

一、程序能解决什么问题

在制作英语学习软件的词库、句库时,原始的英文语料与中文译文往往格式杂乱:段落疏密不一、缩进不统一、中英行数对不上。人工整理既费时又容易出错。

本程序把这项工作标准化:载入中英文文本 → 规范化 → 校验段落数 → 一键生成对照文本 → 保存。生成的对照文本中,中英文段落交替排列、格式统一,既可直接导入词库句库,也便于学习者逐句对照阅读。

与原 VB 版的对应关系

原 VB 程序本程序说明
【打开中文文件】/【打开英文文件】按钮 + 文件上传Web 版改用上传,自动识别 UTF-8 / GBK 编码
【规范中文文本】/【规范英文文本】同名按钮段与段之间空一行,段首空出 4 个字符
【制作中英对照】同名按钮中文段落在前、英文段落在后,交替排列
【制作英中对照】同名按钮英文段落在前,规则对称
(原程序未实现)【检查英文段落数与中文段落数是否一致】本版新增:逐项报出两侧段数、差值与缺段提示
【保存对照文本】同名按钮弹出「另存为」对话框,可自选位置与文件名
【清空文本框】同名按钮清空三个文本域

原程序在 VB 中声明了NumEnglish与NumChinese两个变量,用于记录中英文段数,但实际代码并未使用它们做比较。本版把这项功能补齐为独立按钮。


二、运行前的准备

2.1 环境要求

项目版本
JDK21
Maven3.8 及以上
浏览器Chrome / Edge / Firefox 均可

2.2 打包与启动

在项目根目录执行:

# 打包mvn clean package# 启动java-jartarget/contrastmaker.jar--server.port=8090

启动后浏览器访问 http://localhost:8090/ 即可。

提示:如果启动时提示端口被占用,换一个端口即可,例如--server.port=9090。

2.3 目录结构

contrastmaker/ ├── pom.xml ├── e2e_test.py ├── browser_test.py ├── test_save_dialog.py ├── check_csdn.py └── src/ ├── main/ │ ├── java/com/huawei/contrast/ │ │ ├── ContrastMakerApplication.java │ │ ├── controller/ContrastController.java │ │ ├── model/TextForm.java │ │ └── service/ContrastService.java │ └── resources/ │ ├── application.yml │ ├── templates/index.html │ └── static/ │ ├── css/app.css │ ├── js/app.js │ ├── favicon.svg │ └── vendor/bootstrap/ └── test/java/com/huawei/contrast/ └── ContrastServiceTest.java

各文件的作用:

文件说明
pom.xmlSpring Boot 3.2.5 + Thymeleaf 依赖配置
e2e_test.py接口级端到端测试(15 项)
browser_test.py真实浏览器交互测试(8 项)
test_save_dialog.py「另存为」对话框测试(3 项)
check_csdn.pyCSDN Markdown 规范自检脚本
ContrastMakerApplication.java启动类
ContrastController.java六个按钮的接口实现
TextForm.java表单绑定对象
ContrastService.java核心算法(切分、规范化、交替拼接、占位)
application.yml端口、编码、静态资源配置
index.htmlThymeleaf 页面模板
static/vendor/bootstrap/本地化的 Bootstrap 5.3.3
ContrastServiceTest.java核心算法单元测试(18 项)

三、界面说明

程序界面由三个文本框和一组命令按钮组成,自上而下分为四块。

本文的标记约定:【】内是程序里的按钮名,「」内是界面上的文案或文件名。

3.1 顶部使用提示条

页面顶部的浅蓝色提示条给出了推荐的操作顺序:

载入中文与英文文本 → 必要时规范化 → 检查段落数是否一致 → 制作中英/英中对照 → 保存对照文本。

并提示了段落数不一致时的占位标记######空缺#######。

3.2 三个文本框

三栏并排布局,从左到右分别是:

文本框用途占位提示
中文文本存放中文原文在此粘贴中文文本,每行一段……
英文文本存放英文原文在此粘贴英文文本,每行一段……
对照文本输出对照结果(只读)点击【制作中英对照】或【制作英中对照】后,结果显示在此……

每个文本框右上角有一个徽标,实时显示该侧当前的段落数,无需点击任何按钮即可查看。

3.3 段落数一致性检查区

中英文本框下方是独立的检查卡片,包含:

  • 左侧显示「中文 N 段 vs 英文 M 段」,两侧一致时显示绿色对勾,不一致时显示红色叉号;
  • 右侧是一个醒目的黄色按钮:【检查英文段落数与中文段落数是否一致】。

3.4 底部操作条

最下方是两个按钮:【清空文本框】与【保存对照文本】,以及一行排版规则说明。


四、操作步骤详解

步骤一:载入文本

有两种方式,二选一即可。

方式 A:直接粘贴

把中文内容粘贴进【中文文本】框,英文内容粘贴进【英文文本】框。

★关键约定:以「非空行」为一段。空行会被自动忽略,所以粘贴时不必刻意清理空行。

方式 B:上传文件

点击中文卡片下方的【打开中文文件】或英文卡片下方的【打开英文文件】,选择本地文本文件即可。

上传有两个便利之处:

  1. 自动识别编码—— 程序先按 UTF-8 严格解码,失败则回退 GBK。国内教材、词库文件常见 GBK 编码,直接按 UTF-8 读会满屏乱码,这个处理省去了手工转码的麻烦。
  2. 不影响另一侧—— 上传英文文件不会覆盖已填好的中文内容,反之亦然。

载入后,提示条会显示文件名与该文件的段数


步骤二:规范化(可选)

若原文格式不统一,可点击【规范中文文本】或【规范英文文本】。程序会:

  • 丢弃空行,把每个非空行作为一段;
  • 段与段之间空一行;
  • 段首缩进 4 个字符。

规范化后文本框内容会被替换,可以放心反复操作。


步骤三:检查段落数 ★

这是整个流程中最关键的一步。

中英文段落数不一致,是对照制作中最常见的错误来源。若两侧段数不等,交替排列时就会出现错位——本该配对的句子串到了别的位置,导进词库后才发现,为时已晚。

点击【检查英文段落数与中文段落数是否一致】,程序会给出三种判定:

情形提示颜色
两侧段数相同中英文段落数一致(各 N 段),可以制作对照。绿色
两侧段数不同中英文段落数不一致:中文 4 段,英文 3 段,相差 1 段。制作对照时缺失位置将以「######空缺#######」占位,请先补齐。黄色
尚未输入内容—灰色

★ 注意第三种情形:两侧都是 0 段时程序显示「尚未输入内容」,不会误判为一致。这能避免刚打开页面就看到一个绿色对勾的假象。

提示语会明确指出哪一侧多、哪一侧少、相差几段。若提示不一致,建议先回到原文补齐缺失段落,再制作对照。

步骤四:制作对照

  • 点击【制作中英对照】→ 对照框输出中文段落在前、英文段落在后的版本;
  • 点击【制作英中对照】→ 对照框输出英文段落在前、中文段落在后的版本。

生成的文本形如:

海潮之旅:鸟语花香的自然探索 A Journey to Haichao: A Natural Exploration amid Birdsong and Fragrance 12月2日,星期六,天空阴沉着,好像随时都会下起雨来。 December 2, a Saturday. The sky was overcast, as if rain might break at any moment.

规律是:每一段之间空一行,段首缩进 4 个字符。中英文交替出现,标题因为写在正文首行,所以与其他段落完全同等对待。

若两侧段数不等,缺失位置会出现占位标记:

今天天气不错 ######空缺#######

这个标记是给人看的提醒——它标出了原文与译文数量未对齐的位置,请回到原文补齐后再导入。

单击【制作中英对照】按钮


单击【制作英中对照】按钮

步骤五:保存

点击【保存对照文本】,浏览器会弹出系统的**「另存为」对话框**,可以自选保存位置与文件名。

对话框里已经预填了默认文件名「对照文本.txt」,文件类型限定为纯文本(.txt)。选好位置、确认后文件即写入,页面顶部会提示「已保存为「xxx.txt」」—— 显示的是你在对话框里最终确定的文件名,改名后提示会同步更新。

★「另存为」对话框需要 Chrome 或 Edge。程序基于浏览器的 File System Access API 实现,Firefox 与 Safari 暂不支持 —— 这类浏览器点击后会降级为普通下载(落到默认下载目录),并弹窗提示你改用 Chrome / Edge。

用户在对话框里点【取消】时,程序不写文件也不报错,静默退出。

文件编码为 UTF-8(带 BOM),换行为 CRLF。带 BOM 是为了让 Windows 记事本在各类系统版本上都能正确显示中文 —— 这个文件主要用于人工阅读校对,显示乱码的代价远大于多出的一个 BOM 字符。

假如我们单击了【制作中英对照】按钮

单击【保存对照文本】

弹出【另存为】对话框

可以修改保存位置,默认文件名对照文本.txt也可以修改,比如改成中英对照文本.txt

单击【保存】按钮,即可生成对照文本

  • 双击中英对照文本.txt,查看内容

五、核心算法说明

5.1 段落切分

publicList<String>splitParagraphs(Stringtext){List<String>paras=newArrayList<>();if(text==null||text.isBlank()){returnparas;}// 统一换行符:Windows 的 \r\n、单独的 \r 与 \n 都视为段落分隔Stringnormalized=text.replace("\r\n","\n").replace('\r','\n');for(Stringline:normalized.split("\n")){Stringtrimmed=line.trim();if(!trimmed.isEmpty()){paras.add(trimmed);}}returnparas;}

要点:

  • 以非空行为段落单位,与原版 VB 的Line Input+Trim(NextLine) <> ""判定完全一致;
  • 兼容三种换行符,Windows 环境下直接粘贴的文本不会因\r\n而多出空段。

5.2 交替拼接

for(inti=0;i<total;i++){if(i>0){sb.append("\n\n");}Stringfirst=chineseFirst?at(zh,i):at(en,i);Stringsecond=chineseFirst?at(en,i):at(zh,i);sb.append(pad).append(first);sb.append("\n\n");sb.append(pad).append(second);}

中文段落落在第 1、3、5… 位,英文段落落在第 2、4、6… 位——对应原版用 MSFLEXGRID 控件的奇偶行交替存放。

5.3 空缺占位

privateStringat(List<String>paras,intindex){if(index<0||index>=paras.size()){returnGAP_MARK;}Stringv=paras.get(index);return(v==null||v.isEmpty())?GAP_MARK:v;}

一段不足时填入######空缺#######。

★ 这里有个容易忽略的细节:越界取值必须提前拦截。段落数不等恰恰是「制作对照」最常见的正常情形,如果直接list.get(i)会抛IndexOutOfBoundsException——最该能用的功能反而崩溃了。


六、常见问题

Q1:上传的中文文件显示乱码怎么办?

程序已内置 UTF-8 / GBK 自动探测。若仍有问题,请确认文件本身不是 UTF-16 或其他编码,可先用记事本「另存为 → UTF-8」转换后再上传。

Q2:提示「段落数不一致」,但我明明数出来一样?

程序统计的是非空行。若原文有空行,程序不计入,您手工数时若把空行也算进去就会对不上。建议直接以程序的判定为准。

Q3:对照文本里的######空缺#######需要手工替换吗?

需要。这是给人看的提醒标记,标出未对齐的位置。请回到原文补齐缺失段落,重新制作对照,而不是直接导入。

Q4:能处理多大的文本?

原 VB 版用 TextBox 控件,处理文本不能超过 64KB,超过需换成 RichTextBox。本程序用 textarea 配合服务端处理,没有这个限制,几百 KB 的文本照样能对照。

Q5:为什么段首缩进是 4 个空格?

与原 VB 版的Space(4)保持一致。若词库导入有其他缩进要求,改ContrastService.INDENT常量即可。

Q6:页面样式加载不出来?

本程序已将 Bootstrap 5.3.3 本地化到static/vendor/bootstrap/,页面不请求任何外部资源,离线环境也能正常显示。若样式异常,请确认target/classes/static/vendor/下的文件完整。

Q7:点击【保存对照文本】没有弹出「另存为」对话框?

「另存为」对话框基于浏览器的 File System Access API,目前只有 Chrome 与 Edge 支持。Firefox / Safari 会自动降级为普通下载(落到默认下载目录),并弹窗提示。

另外,该 API 要求页面运行在 HTTPS 或 localhost 环境下;若部署到普通 HTTP 域名,也会降级为普通下载。


七、测试与验证

程序提供三层测试,均可通过独立命令运行。

7.1 单元测试

mvntest

覆盖切分、规范化、交替拼接、空缺占位、段落数判定等核心逻辑,共 18 项。

7.2 接口级端到端测试

python e2e_test.py

需服务已启动。覆盖段落数一致与不一致两种情形、两种对照方向的输出格式、空缺占位、规范化结果、清空功能、静态资源可达性、文件上传(中英双侧、互不覆盖、GBK 编码)等,共 19 项。

7.3 真实浏览器交互测试

python browser_test.py

需服务已启动,且本机装有 Chrome。用 Playwright 驱动真实浏览器模拟点击【打开文件】【检查段落数】【制作对照】等按钮,并截图留存,共 8 项。

7.4 「另存为」对话框测试

python test_save_dialog.py

需服务已启动。用 Playwright 注入桩函数模拟用户在原生对话框中的三种选择:正常保存、点【取消】、浏览器不支持该 API 时的降级路径,共 3 项。


八、小结

这款程序在原 VB 版的基础上做了三处实质性改进:

  1. 补齐段落数一致性检查—— 原程序声明了变量却未实现,本版做成独立按钮,三档判定,并能明确指出哪一侧多、相差几段;
  2. 编码自动探测—— 免去手工转换 GBK 的麻烦;
  3. 取消 64KB 限制—— Web 版无此约束。

程序刻意保留了原版的排版规则:段间空一行、段首缩进 4 字符、中英段落交替、缺失处以######空缺#######占位。这样生成的对照文件与过去 VB 版产出的格式一致,导入词库时无需调整。

本文所述程序基于 Spring Boot 3.2.5 + Thymeleaf + Bootstrap 5.3.3 实现,完全离线可用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询