Files
lhl becd3e1f57 chore(assets): 参赛提交规范红线修复(ASCII 化 + 相对路径)
按《参赛成果物提交规范·赛道一》§6 红线:
- samples/ 目录改名 sample/(git mv,保留历史)
- 10 个中日文样本文件 + docs 参赛手册 PDF 重命名为 ASCII
  (requirements_*/template_*/rules_*/contestant-handbook.pdf)
- tests/test_zh_template.py 硬编码绝对路径 D:\00_project\Genesis 改为相对路径
- 全局更新 21 个活动文件引用;历史日志/审查文档不改(追加说明记录)
全量 pytest 431 passed / 99.15%
2026-08-26 14:15:52 +08:00

83 lines
3.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""生成中文镜像模板(步骤 0)。
镜像既有日文概要设计书模板的结构与锚点 id(section:xxx 原样保留),
仅将 H1/H2 标题与封面字段翻译为中文,产物 sample/template_design_zh.docx 入库。
锚点段落文本保持不变是硬约束:Writer 子系统(template_mapper / docx_injector
依赖这些占位符定位章节,任何改动都会破坏映射与注入。
"""
from __future__ import annotations
import shutil
from pathlib import Path
from docx import Document
# H1/H2 标题日文 → 中文(保持编号前缀一一对应)
HEADING_TRANSLATIONS: dict[str, str] = {
"1. はじめに": "1. 前言",
"2. 機能一覧": "2. 功能一览",
"2.1 機能一覧表": "2.1 功能一览表",
"2.2 機能詳細": "2.2 功能详细",
"3. 画面一覧": "3. 画面一览",
"3.1 画面遷移図": "3.1 画面迁移图",
"3.2 画面一覧表": "3.2 画面一览表",
"4. 帳票一覧": "4. 报表一览",
"5. DB設計": "5. DB设计",
"5.1 テーブル一覧": "5.1 表一览",
"5.2 ER図": "5.2 ER图",
"6. IF定義": "6. 接口定义",
"7. バッチ一覧": "7. 批处理一览",
}
# 封面字段(Normal 段落)日文 → 中文
COVER_TRANSLATIONS: dict[str, str] = {
"概要設計書": "概要设计书",
"ドキュメント名: {{doc_title}}": "文档名: {{doc_title}}",
"バージョン: {{version}}": "版本: {{version}}",
"作成日: {{created_at}}": "创建日期: {{created_at}}",
"テンプレート開始": "模板开始",
}
def _translate(text: str) -> str:
"""锚点段落({{section:...}})原样保留;其余按字典翻译,未命中则原样。"""
if text.startswith("{{section:"):
return text
return HEADING_TRANSLATIONS.get(text, COVER_TRANSLATIONS.get(text, text))
def build_zh_template(src: str, dst: str) -> str:
"""镜像 src(日文模板)为 dst(中文模板),返回 dst 路径。"""
src_path = Path(src)
dst_path = Path(dst)
if not src_path.exists():
raise FileNotFoundError(f"源模板不存在: {src_path}")
dst_path.parent.mkdir(parents=True, exist_ok=True)
# 先物理复制(保留样式/编号定义等所有非文本属性),再逐段改写文本
shutil.copyfile(str(src_path), str(dst_path))
doc = Document(str(dst_path))
for para in doc.paragraphs:
new_text = _translate(para.text)
if new_text != para.text:
para.text = new_text
doc.save(str(dst_path))
return str(dst_path)
def main() -> None:
import argparse
parser = argparse.ArgumentParser(description="生成中文镜像模板")
default_src = str(Path(__file__).resolve().parents[1] / "sample" / "template_design_ja.docx")
default_dst = str(Path(__file__).resolve().parents[1] / "sample" / "template_design_zh.docx")
parser.add_argument("--src", default=default_src, help="源日文模板")
parser.add_argument("--dst", default=default_dst, help="输出中文模板")
args = parser.parse_args()
out = build_zh_template(args.src, args.dst)
print(f"中文模板已生成: {out}")
if __name__ == "__main__":
main()