# 2026-08-12 会话记录：车型板块品牌/车型中文标注规则 + 翻译后处理

## 1. 新规则（用户2026-08-12明确）：中文品牌/车型 → 韩文版标注 英文(中文)

**规则升级：** 中文文件中品牌/车型为中文时，韩文版必须标注为 `英文(中文)` 形式。
- 之前 2026-08-10 规则「英文品牌名直接显示英文即可」**有边界**：仅当中文文件本身用英文品牌时保留英文
- 中文文件里品牌/车型是中文（如「大众」「福特」「捷途」「凯迪拉克」「锐际」「旅行者7」）→ 韩文版需加注 `Volkswagen(大众)`、`Ford(福特)`、`Escape(锐际)`、`JETOUR(捷途)`、`Traveler 7(旅行者7)`、`Cadillac(凯迪拉克)`

**判断方法：** 对照中文文件（`json/{MMDD+1}data.json`）与韩文文件（`ko-{MMDD+1}data.json`）vehicle_hotspots 同索引条目，中文里是中文名的品牌/车型必须在韩文里标注。

## 2. translate_replace.py 新增规则（2026-08-12 区块，位于 return text 前）

```python
# ==================== 2026-08-12 新增：车型板块品牌/车型中文标注 ====================
# 规则：中文文件中品牌/车型为中文时，韩文版标注为 英文(中文) 形式
# ⚠️ 负向前视必须用单反斜杠 \s*（2026-08-11 人名重复bug教训：\\s* 会匹配字面反斜杠导致防重复失效）
# Volkswagen(大众) — 排除已标注
text = re.sub(r'(?<!\\(大众\\))Volkswagen(?!\s*\(大众\))', 'VW_MARKER', text)
text = text.replace('VW_MARKER', 'Volkswagen(大众)')
# Ford(福特) — 排除已标注
text = re.sub(r'(?<!\\(福特\\))Ford(?!\s*\(福特\))', 'FORD_MARKER', text)
text = text.replace('FORD_MARKER', 'Ford(福特)')
# Escape(锐际) — 排除已标注
text = re.sub(r'(?<!\\(锐际\\))Escape(?!\s*\(锐际\))', 'ESC_MARKER', text)
text = text.replace('ESC_MARKER', 'Escape(锐际)')
# JETOUR(捷途) — 排除已标注
text = re.sub(r'(?<!\\(捷途\\))JETOUR(?!\s*\(捷途\))', 'JET_MARKER', text)
text = text.replace('JET_MARKER', 'JETOUR(捷途)')
# Traveler 7(旅行者7) — 排除已标注（须在 JETOUR 之后，避免 JETOUR Traveler 被拆）
text = re.sub(r'(?<!\\(旅行者7\\))Traveler 7(?!\s*\(旅行者7\))', 'TRAV7_MARKER', text)
text = text.replace('TRAV7_MARKER', 'Traveler 7(旅行者7)')
# Cadillac(凯迪拉克) — 排除已标注
text = re.sub(r'(?<!\\(凯迪拉克\\))Cadillac(?!\s*\(凯迪拉克\))', 'CAD_MARKER', text)
text = text.replace('CAD_MARKER', 'Cadillac(凯迪拉克)')
```

## 3. ⚠️ 双反斜杠 bug 再次踩坑（2026-08-12 复现 + 修复验证流程）

**现象：** 新增规则初稿用 `\\s*`（双反斜杠）写负向前视，导致防重复失效 → 已标注的 `Volkswagen(大众)` 被再次匹配变成 `Volkswagen(大众)(大众)`。

**根因：** Python 源码里 `\\s` 是「字面反斜杠+s」，正则引擎收到 `\\s` 匹配「反斜杠字符+s」而非空白；负向前视 `(?!\\s*\(中文\))` 永远不匹配，防重复失效。

**修复验证流程（必须执行）：**
1. patch 后先看 diff：若新规则行显示 `\\\\s*\\\\(中文\\\\)`（源码 4 反斜杠）即双反斜杠 bug
2. 用 execute_code 构造与文件一致的正则测试：
   - `re.sub(pat, 'M', 'Volkswagen X')` → 应含 M（无标注时匹配）
   - `re.sub(pat, 'M', 'Volkswagen(大众)')` → 应不含 M（已标注时防重复）
3. 修复后重跑 translate_replace.py：第一次 >0 处，第二次必须 0 处（幂等）
4. 全文件双重标注扫描：`re.findall(r'\([^()]*[\u4e00-\u9fff][^()]*\)\([^()]*[\u4e00-\u9fff][^()]*\)', text)` 应为空

**⚠️ patch 工具的转义陷阱（2026-08-12 新发现）：** patch 工具可能把已有规则行的转义改写（本次 patch 把原有 Dodge 行 `\s*` 变成 `\\s*`，导致已修复的旧规则重新引入 bug）。**patch 后必须重新 grep 检查所有受影响行的转义，发现 `\\\\` 双反斜杠立即恢复为 `\\`。**

## 4. 韩译后检查流程（0812 有效）

1. 中韩条目数一致性（5/5/5/3/3）
2. 双重标注扫描（全文件全字段 title/summary/focus_point + hero_summary）
3. 人名标注：Lee Hyuk-joon(李赫埈)、Yan Hanping(严汉平)、Wu Wei(吴炜) 等拼音(中文)
4. 术语残留：인도→지급、신고이미지→오피셜이미지、차령→연식、한시적혜택→한정할인
5. 社会标题末尾清理（热度值/媒体来源）
6. translate_replace 幂等（第二次 0 处）
7. 车型板块品牌/车型中文标注核验（对照中文文件）
