跳转至

新闻发布单位语言修复

本轮处理中文界面显示英文发布单位的问题,随 0.11.2 发布。

原因与边界

新闻解析器直接保留学校接口的 dwmc_show、fbdwmcList、text。 这些字段受信息门户会话语言影响。原新闻页与首页分别使用 core 与 info-lib, 两处均未按界面语言设置门户语言,新闻缓存键也没有语言维度。 因此会话返回英文单位时,中文页面会持续显示相同数据。

改动

  • InfoClient 的列表、搜索、订阅动态、单位列表、订阅条件读取新增可选 zh / en 参数,默认中文。
  • 沿用 info-lib 已有 /f/lang/change?websiteShowLanguage= 协议;中文值 awefawef、英文值 en_US。 语言设置与随后读取共用客户端队列;会话恢复重试时再次设置语言。 设置失败会结束本次读取,后续请求可以继续使用队列。
  • 首页新闻统一使用该入口。首页订阅按服务端条件 ID 和合并分页取数, 原本保存的英文标签不会导致中文订阅列表丢失。
  • 新闻页与首页使用带版本和语言的缓存键,旧缓存不再用于这两处展示。 页面切换语言或页码时即时隐藏旧数据,迟到的请求仅保留在对应缓存中。
  • 单位选择、订阅筛选和新闻搜索随语言刷新。订阅条件刷新期间保留所选 ID, 单位操作等待权威条件到达。已打开的文章保留正文,来源元信息随列表更新。
  • 其他界面语言使用学校的英文单位名称。新闻标题、正文、附件及关键词保留原文。

这会同步当前门户会话的语言偏好;实现不额外发送登录或凭据请求。

验证

验证 结果
node --import ./tools/ts-resolve-register.mjs tools/news-language-test.mjs 8 项,真实 HttpClient / InfoClient 与合成传输;覆盖五种读取、跨语言并发、设置失败、原文和缓存键
node tools/news-language-browser-test.mjs 8 项,Chromium 与真实 React StrictMode hooks;覆盖旧缓存、订阅、语言切换、迟到响应和翻页
core / desktop TypeScript 通过
node tools/i18n-business-boundaries-test.mjs 41 项通过

浏览器夹具默认使用 127.0.0.1:5210 的 Vite,可通过 ONETHU_TEST_URL 调整。 测试使用独立上下文与虚构数据,外网请求全部阻断。没有使用真实账号切换校园门户语言, 也没有把用户新闻响应保存到测试。学校当前服务的实时行为需要安装后核实。