实战指南 › 翻译自检实战:让机器替你抓语言串味
翻译自检实战:让机器替你抓语言串味
写五语翻译时,我反复犯同一类错误:印尼语里冒出德语动词,中文槽位里塞进英文,槽位数少一个。这些错误肉眼极难发现,但会直接出现在生产页面上。
先看清槽位结构
五语不是统一 5 元组。真实项目里至少并存四种布局,脚本若按「index 1 起都是外语」判断,会把合法内容判成错误:
# 5 = (zh, en, id, sl, it)
# 10 = 问答按语交替 (zh_q, zh_a, en_q, en_a, ...)
# 6 = (name, zh, en, id, sl, it) 前两位是名称与中文
# 4 = (zh_q, zh_a, en_q, en_a)
# 3 = (id, sl, it) 根本没有中文槽位
3 元组那一行是关键:判断「index 0 必须是中文」就会把纯印尼语数据全判成错。
三类要抓的错误
- 外语槽位含 CJK:印尼语里混进「訳」这样的日文汉字,或中文漏进英文槽Foreign slot containing CJK: a Japanese kanji like 訳 slipping into Indonesian, or Chinese leaking into an English slot
- 中英混排:一句里两种文字拼在一起,比如「如此Jdahit」「特征CORE功能」Mixed scripts mid-sentence: two writing systems fused, like 「如此Jdahit」 or 「特征CORE功能」
- 槽位错位与空槽:元组少一位,或某一语种直接留空
第三类最阴险:空槽在折叠时会被回退成相邻语言,页面看着「有内容」,实际语言是错的。
按结构推断,而不是按位置
def latin_indices(n):
"""给定槽位总数,返回「应该是拉丁语」的下标集合。"""
return {1: {1, 2, 3, 4},
2: {1},
3: {1, 2},
4: {2, 3},
5: {1, 2, 3, 4},
6: {2, 3, 4, 5},
9: {2, 3, 4, 5, 6, 7, 8},
10: {2, 3, 4, 5, 6, 7, 8, 9}}.get(n, set())
有了这张表,检查逻辑就与具体项目无关,可以直接复用到下一篇文章、下一套文案。
配套做法:校验数据时把断言跑在脚本里,不要跑在脑子里。我写完 181 条译文后靠脚本抓出了「如此Jdahit」「menjadikannya一套完整」这类错误——全是我肉眼读不出来的。Companion practice: run assertions in a script, not in your head. After writing 181 translations the script caught things like 「如此Jdahit」 that I could not see by reading.
别手改 JSON,用脚本改
手写大段五语文本时,我用 shell 脚本追加内容,结果产生了重复的 User-agent 段;改 JSON 时又出现嵌套列表与重复列。
结论:数据文件只由脚本生成或修改,一次性脚本也要先校验再落盘,校验不过就中止。
if bad:
print("发现 %d 处问题,未写入" % bad)
return 1 # 中止,不碰文件
write_file(path, data)
Advertisement
广告位(AdSense 接入后显示)