feedback7 stats: the local statistics page, ported from PR #323 by @2321Robin as submitted (record store ui/stats.js, viewer screens/stats.js, stats.css, entries on the title / lobby / room screens, 20 tests); golden: unchanged

- public/js/ui/stats.js: one record per finished match in localStorage (sp.pref.stats, envelope {v, records}, at most
  1000, quota shrink of the oldest), content-id dedupe of the lobby's result replay, a MIGRATIONS chain and
  normalizeRecord (defaults for missing fields, unknown fields kept, a newer envelope refused), merge-by-id export /
  import, aggregateStats.
- public/js/screens/stats.js: the viewer (总览 / 策略 / 称号 / 战斗累计 / 最近对局, a row re-views that match's
  settlement), 导出 / 导入 / 清空.
- Applied from the PR's own diff after reading it in full (no network, no new dependency, server untouched); only the
  UI strings of the page are added to the four packs (en from the PR; ja / ko / zh-TW translated for this commit).
- The follow-up commits rework the page (the counting rule for matches left early, storage bounds, the layout).
- Tests: test/ui/stats.test.js 20 / 20; i18n extract 0, check --all --strict clean.
This commit is contained in:
2321Robin authored and sganggs committed 2026-10-08 20:05:09 +08:00
1 parent ae22335cfe
commit 438a6b521a
13 files changed
+1407 -5

No files matched your search

+42 -1
View File
@@ -1057,5 +1057,46 @@
"{files} 没有下载成功,这一页无法显示;已保存的设置不受影响。请刷新页面;仍不行时,请检查广告拦截插件和网络。": "{files} 다운로드에 실패하여 이 페이지를 표시할 수 없습니다. 저장된 설정에는 영향이 없습니다. 페이지를 새로고침해 주세요. 그래도 안 되면 광고 차단 확장 프로그램과 네트워크를 확인해 주세요.",
"全员无伤!": "전원 무사!",
"生命值减少 −{n}": "목표 HP 감소 −{n}",
"当前语言的界面文字为机器翻译,可能不够准确,欢迎在 GitHub 上指正。": "현재 언어의 인터페이스 텍스트는 기계 번역이므로 정확하지 않을 수 있습니다. GitHub에서 수정 제안을 환영합니다."
"当前语言的界面文字为机器翻译,可能不够准确,欢迎在 GitHub 上指正。": "현재 언어의 인터페이스 텍스트는 기계 번역이므로 정확하지 않을 수 있습니다. GitHub에서 수정 제안을 환영합니다.",
"统计数据": "통계",
"统计": "통계",
"对局进行中,暂不能回看历史结算": "시뮬레이션이 진행 중이라 지난 정산을 다시 볼 수 없습니다",
"总览": "개요",
"总局数": "총 판수",
"胜场": "승리",
"胜率": "승률",
"到达隐秘核心": "숨겨진 핵심 도달",
"通关隐秘核心": "숨겨진 핵심 클리어",
"最远回合": "최고 라운드",
"累计时长": "누적 플레이 시간",
"{n} 分": "{n}분",
"难度": "난이도",
"局数": "판수",
"隐秘核心通关": "숨겨진 핵심 클리어",
"使用局数": "사용 판수",
"通过局数": "클리어 판수",
"通过率": "클리어율",
"称号": "평가",
"战斗累计": "전투 누적",
"最近对局": "최근 판",
"时间": "시간",
"模式": "모드",
"结果": "결과",
"点击查看该局结算": "이 판의 정산 보기",
"单人": "독립",
"同盟": "동맹",
"胜": "승",
"负": "패",
"点击任意一行,回看该局结算。": "행을 누르면 해당 판의 정산을 다시 볼 수 있습니다.",
"已导出 {n} 条对局记录": "기록 {n}건을 내보냈습니다",
"已导入 {added} 条记录{tail}": "기록 {added}건을 가져왔습니다{tail}",
"(跳过重复 {skipped} 条)": " (중복 {skipped}건 건너뜀)",
"没有新记录(全部与现有数据重复)": "새 기록이 없습니다(모두 기존 데이터와 중복)",
"导入失败:不是有效的统计导出文件": "가져오기 실패: 올바른 통계 내보내기 파일이 아닙니다",
"已清空本机统计数据": "이 기기의 통계 데이터를 삭제했습니다",
"确认清空?": "정말 비우시겠습니까?",
"本机数据 · 仅记录本浏览器中你参与的对局": "이 기기의 데이터 · 이 브라우저에서 참여한 판만 기록됩니다",
"检测到更新版本的统计数据,请先升级客户端再查看,以免覆盖数据。": "더 최신 버전의 통계 데이터가 감지되었습니다. 데이터를 덮어쓰지 않도록 클라이언트를 업데이트한 뒤 확인하세요.",
"还没有记录 —— 完成一局对局后,这里会开始积累。": "아직 기록이 없습니다 — 한 판을 마치면 여기에 쌓이기 시작합니다.",
"未知": "알 수 없음"
}