WebGoat多语言支持实战教程:3种方式切换界面语言的完整指南
【免费下载链接】WebGoatWebGoat is a deliberately insecure application项目地址: https://gitcode.com/GitHub_Trending/we/WebGoat
打开 WebGoat 的课程页,满屏都是英文?这篇教程讲清楚 WebGoat 多语言支持的边界:官方支持哪几种界面语言、如何切换界面语言,以及想要中文界面时的可行做法。
WebGoat 多语言支持一分钟速览
先给结论,再往下看细节:
| 你的问题 | 直接答案 |
|---|---|
| 支持哪些语言? | en(英语,默认)、de(德语)、fr(法语)、nl(荷兰语)、es(西班牙语) |
| 最快的切换方式? | 主页面 URL 后加?lang=fr这类参数,或点主页面右上角的语言下拉菜单 |
| 想要中文怎么办? | 官方资源里目前没有中文语言文件,临时可用浏览器翻译插件,长期可参与官方翻译 |
⚠️ 国际化贡献规范 里列出的支持语言是 en、fr、de、nl 四种,但当前代码中语言下拉菜单和 语言资源目录 里已经包含了西班牙语(es),实际可切换的是 5 种。
WebGoat 切换界面语言:三种方式由浅入深
方式一:跟随浏览器语言自动识别
WebGoat 启动时会自动读取浏览器发来的语言偏好(Accept-Language 请求头)来决定初始界面:
- 打开浏览器设置,把首选语言改为德语或法语等支持的语言;
- 重新打开 WebGoat,界面即按该语言显示,无需任何手动操作;
- 如果浏览器首选语言不在支持列表内(比如中文),系统自动回退为英文。
💡 常见坑:识别时只取语言代码的前两个字母,所以fr-CA(加拿大法语)也会被识别为法语。
方式二:URL 参数强制指定语言
不改动浏览器设置,直接通过 URL 参数锁定语言。参数名固定为lang,取值用两位小写语言代码:
/WebGoat/start.mvc?lang=fr- 把上面的参数拼到主页面地址后(把
fr换成 en / de / nl / es); - 打开后本次会话就固定使用该语言,后续跳转课程页都保持;
- 不想手敲 URL 的话,主页面右上角的语言下拉菜单(带国旗图标)走的是同一套机制,点选即可。
⚠️ 常见坑:参数名区分大小写且拼写固定,写成Lang或language都不会生效。
方式三:验证语言切换是否生效
切换动作本身很简单,关键是确认它真的生效了:
- 切换成功后页面会回到 Introduction(介绍)课页,这是正常跳转而非故障;
- 看右上角的国旗图标,应变成对应语言的国旗;
- 观察菜单标签:如 "Logout"、"Go!" 等按钮是否已变成目标语言;
- 若页面看起来没变化,先强制刷新(Ctrl+Shift+R)排除浏览器缓存再下结论。
为什么 WebGoat 界面没有中文
原因不复杂:语言资源目录 下只有 en、de、fr、nl、es 五个语言文件,没有messages_zh.properties;各课程的.adoc文档同样没有中文版。所以无论下拉菜单还是课程正文,都选不出中文;浏览器语言设为中文时,系统也只是回退到英文默认界面。
拿到 WebGoat 中文界面的两条路径
临时方案:浏览器翻译插件
不想动代码的话,三步见效:
- 安装通用的网页翻译扩展,目标语言选简体中文;
- 在 WebGoat 页面选择"翻译整个页面",翻译结果仅用于阅读,不要修改页面结构;
- 练习作答时注意:系统判定的 flag 答案通常仍是英文原文,输入框里的内容请按课程要求填写。
长期方案:参与官方翻译
按 国际化贡献规范,新增中文主要涉及这几处文件:
- src/main/resources/i18n/messages_zh.properties:以
messages.properties为底本翻译核心标签,形如:
assignment.solved=恭喜,你已完成这个任务 logout=退出登录- src/main/resources/webgoat/templates/main_new.html:在语言下拉菜单中增加中文条目;
- src/main/resources/webgoat/static/css/img/:放入中文对应的国旗图标;
- src/main/resources/lessons/webgoatintroduction/documentation/:参照
Introduction_de.adoc等文件补充中文介绍文档(可选翻译各课程文档)。
完成后运行mvn clean确认相关测试通过,本地启动验证中英文都能正常工作,再向官方仓库提交 PR 即可。
故障排查:WebGoat 语言切换常见问题
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
?lang=fr加了没反应 | 参数名写成Lang/language,或等号两边多了空格 | 参数名必须是小写的lang,格式紧凑无空格 |
| 切换后页面仍是旧语言 | 浏览器缓存了旧页面 | Ctrl+Shift+R 强制刷新 |
| 过段时间界面自动变回浏览器语言 | 语言记录在会话中,会话过期即丢失 | 重新选择一次,或把浏览器首选语言设为目标语言 |
| 浏览器已是中文,界面却仍是英文 | 中文不在支持列表,系统按规则回退英文 | 属正常行为,用翻译插件过渡 |
| 切换后仍有少量词是英文 | 翻译资源只覆盖核心标签,课程正文未翻译 | 属正常现象,不是配置错误 |
写在最后
WebGoat 的多语言机制遵循 Spring 的标准做法:浏览器语言定默认,URL 参数随时改,语言随会话保持。中文目前缺位,但补齐它的门槛并不高。
- 新手:先用
?lang=de或?lang=fr体验一次语言切换,再配合翻译插件阅读课程; - 开发者:动手从复制
messages.properties建立messages_zh.properties开始,小步提交 PR; - 企业用户:如需内部中文环境,可自建分支维护翻译资源,或跟进官方社区的中文支持进度。
【免费下载链接】WebGoatWebGoat is a deliberately insecure application项目地址: https://gitcode.com/GitHub_Trending/we/WebGoat
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考