新增: i18n 消息特殊字符提交门禁

- 字面 @ / | / 裸 {} 未转义只在 prod runtime 抛 Invalid linked format(dev 宽松回退、vue-tsc 捕获不到),已两次致生产回归(白屏/输入框消失)
- scripts/check-i18n.cjs:用 @intlify/message-compiler 编译全部含特殊字符的 i18n 值,npm run check:i18n 可手动跑
- commit-msg 规则 i18n-special-chars.sh:暂存区含 src/i18n/ 即跑预检,失败拒提交;双向测试过(干净放行/坏值 exit1)
This commit is contained in:
lxy
2026-10-10 00:28:40 +08:00
parent a95e205eb6
commit 58834c9443
3 changed files with 80 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
# i18n 消息特殊字符门禁(机制优先):暂存区含 src/i18n/ 改动时,跑 vue-i18n 消息编译预检。
# 背景:字面 @ / | / 裸 {} 未转义只在 prod runtime 抛 "Invalid linked format",dev 宽松、
# vue-tsc 捕获不到,已两次导致生产回归(2026-06-15 白屏 / 2026-10-10 输入框消失)。
# 修法:字面量转义为 {'@'} 等;详见 scripts/check-i18n.cjs
git diff --cached --name-only | grep -q '^src/i18n/' || exit 0
command -v node >/dev/null 2>&1 || exit 0
node scripts/check-i18n.cjs || {
echo "✗ [i18n] 消息含未转义特殊字符(prod 运行时会报 Invalid linked format)"
echo " 字面 @ 改写为 {'@'}(同理 | 与裸 {});本机可先跑 node scripts/check-i18n.cjs"
exit 1
}
exit 0