未翻译内容的回退策略需明确
别名: 缺译回退 · locale fallback · 父语言回退 · untranslated content policy
概念解释
明确的未翻译消息回退策略(explicit untranslated-message fallback policy)规定当请求语言缺少可用译文时,系统能展示哪一个完整消息、语言包或体验,以及何时必须阻止发布或操作。策略应给每个受支持 locale 定义有序、有限且经过审阅的回退链,并按内容风险决定允许回退、降级还是阻断。它不是运行时为每个碎片随意挑一种“看起来接近”的语言,也不把 stale translation 当成 missing translation;两者的语义风险和处置可以不同。
机制
语言回退通常从更具体的 language–script–region 标签退到经产品确认的父级或默认 locale,但标签层级并不自动保证双方互通,脚本差异尤其不能靠删除子标签解决。消息还常包含复数选择、占位符、语序和可操作标签;仅回退半句、按钮或变量周围的片段会破坏语法和操作含义。因此解析的最小单位应是带全部分支的完整消息,高相关的一组消息或一个关键流程则应从同一兼容语言包快照解析。策略还需区分:键不存在、译文尚未产生、译文落后于源修订、占位符不兼容和资源加载失败,因为这些状态对应不同的可恢复性与发布责任。
怎么研究
建立 requested locale × 资源状态 × 风险等级 × 渠道的故障注入矩阵,移除消息、标记旧译文、破坏占位符签名并模拟语言包超时,观察最终语言、提示、任务完成率、误操作和求助。理解测试应覆盖真实回退语言能力不同的人,而不能假定所有目标用户都读得懂产品默认语言。日志分析可测 fallback rate、原始键泄漏、关键流程阻断、切换语言和退出,但高回退率也可能来自构建缺陷、缓存过旧或 locale 路由错误,需要按原因码拆分。法律与安全消息的测试目标是正确理解和安全停止,不能只用较高完成率评价。
边界
品牌名、用户生成内容、专名或刻意的双语材料不是缺译,不应被强制替换。界面消息回退也不同于内容翻译:文章没有目标语言版本时,保留并标明原文可能合理;一个只剩陌生语言的付款确认则可能使同意失去意义。低风险帮助提示可以使用已验证的父 locale 或完整默认语言体验,高风险的法律、安全、健康、身份、付款和不可逆操作不能静默采用未经审阅的机器翻译。若没有任何可理解且已批准的完整消息,安全结果可能是暂停该操作并提供其他语言、人工或稍后重试路径,而不是显示残缺界面。
怎么落地
- 为每个受支持 locale 配置显式回退链、适用渠道和批准者;按 language、script、region 精确匹配,不用地理位置猜语言,也不把任意共同前缀视为互通证明。
- 以完整 ICU 消息或等价消息单元保存所有复数/选择分支和占位符签名;对结账、授权、恢复等紧密流程绑定同一已验证语言包快照,禁止逐字符串跨多个任意语言拼装。
- 给消息分配风险等级和状态处置:分别定义 missing、stale、结构不兼容与加载失败能否使用旧译文、批准父 locale、完整默认体验或必须阻断,并给临时回退设置期限。
- 在构建期枚举每条回退路径,在运行时记录请求 locale、实际 locale、资源版本、状态和原因码;不得记录消息中的个人数据。用删除资源与缓存错配演练确认不会泄漏原始键、空白按钮或不可理解的关键操作。