我们的游戏如何在一周内学会十四种语言 🌍
2026年8月10日
我们刚开始的时候,Blocks Beyond the Stars 正好只会说两种语言:德语,因为我们住在那里;英语,因为互联网说英语。今天它会说十四种。下面讲讲这是怎么发生的——还有一路上出的所有状况。🌍
一切从 Francesco 开始。几周前,从意大利寄来了一个 pull request:Francesco Quirino 开始把游戏翻译成意大利语。纯手工。一组一组地翻,从全部 290 个方块名称和说明开始。就是在那一刻,我们意识到必须认真对待语言了——因为在那之前,游戏里有一半文本根本无法翻译。300 多条服务器消息都硬编码成了英语。所以我们先做了清理,只为让 Francesco 的成果有地方落脚。
接着是那个让人不舒服的问题。手工翻译一种语言要花好几周。我们是一家人,不是本地化工作室。所以:用机器——但要做得规范。我们做了一个小工具,把语言文件切成小块,交给语言模型翻译,然后检查:有字符串漏掉了吗?像 {0} 这样的占位符消失了吗?它有没有编造出一个不存在的键?如果有,就直接丢弃。直到这个工具运行稳定,我们才开始添加语言:荷兰语、巴西葡萄牙语、波兰语、土耳其语——然后是俄语、乌克兰语、中文、日语和韩语。
语气比词语更难。语言模型默认翻译得礼貌而正式。但是一个儿童游戏像银行来信那样称呼你,只会让人毛骨悚然。所以每种语言都有自己的规则:荷兰语“je/jij”,波兰语“ty”,土耳其语“sen”,巴西葡萄牙语“você”,俄语“ты”,日语 です/ます,韩语 해요체。荷兰语让我们多花了一轮,因为词首的 IJ 要两个字母都大写——是“IJzererts”,不是“Ijzererts”。机器自己发现不了这种事,只有读结果才能发现。
然后是那些空方框。我们把俄语完整翻译好,启动游戏——菜单上除了长方形什么都没有。我们的主字体 Rajdhani 根本没有西里尔字母。到了中文、日语和韩语,事情就真的棘手了:一套完整的中日韩字体大约有 16 兆。乘以三,就是将近 50 MB——对一个还要在浏览器里运行的游戏来说,简直不可想象。解决办法:为每种语言制作一套量身定制的子集字体,只包含我们的文本里出现的那些字符。16 MB 变成了 800 KB。游戏只增大了两兆,而不是 50 兆。🔤
它教会了我们什么。翻译只有 20% 是翻译,另外 80% 都是别的事:首先要把字符串从代码里拿出来,要找字体,要检查句子还放不放得进按钮(德语很长,但俄语更长),还要确保连错误对话框也被翻译——就是在语言文件加载之前弹出的那一个。最后这条消息,我们不得不硬编码了十四遍。这感觉不对——但它恰恰是你们绝对必须能读懂的那一条。
坦诚相告:第一遍是机器翻译的。它很好,很完整,也经过了验证——但还没有母语者读过。我们特意说明这一点,而不是假装我们有十四位翻译。这正是 Francesco 的意大利语成果依然一字不差地保留的原因:我们的工具只填补空缺,从不覆盖人工翻译。凡是有人来过的地方,就以人为准。
如果你会说其中一种语言:我们非常欢迎你的修改,哪怕只有一处。仓库里有一份翻译指南,会一步一步带你参与——如果你不爱用 GitHub,直接告诉我们哪句话听起来怪就行。母语者五分钟发现的问题,比我们五小时发现的还多。🌍✨
留言