SWE · System / Mobile Design

Meta 静态应用国际化:翻译Key、语言回退与版本

为静态应用设计多语言内容交付,兼顾消息键、复数格式、语言回退和缓存版本。

题目重点:为静态应用设计多语言内容交付,兼顾消息键、复数格式、语言回退和缓存版本。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练对象是静态网页应用的UI文案,不是实时用户内容机器翻译。语言数量、首屏与离线要求按题面给定。
  • locale采用明确language/region约定;缺译时沿定义的fallback链,不能混用多个随便找到的语言。

解题路线

  1. 源代码用稳定messageKey与结构化参数,翻译catalog按locale分文件,内容团队在版本管理流程校验占位符/格式。原文改动要能标记翻译过期,key不直接等于完整源句。
  2. 复数、性别、日期数值/币种与文本方向由格式化层处理,不能把单词碎片拼成完整句。使用受控消息格式并校验参数,禁止翻译文本包含任意可执行HTML。
  3. 构建给locale bundle内容hash,appVersion manifest列keySchema与bundle版本;按页面namespace拆包,首屏只加载needed locale,不下载全部语言。CDNimmutable缓存hash路径,manifest短TTL并可回滚。
  4. locale解析顺序为用户显式设置→已存偏好→浏览器/设备→默认;例如fr-CA先fr再default,回退链无环。切语言使组件重新格式化但不改变业务数据。
  5. 上线自动检查missing keys/placeholders/超长文案与RTL,再做真实界面审核。离线缓存保留匹配appVersion的必要bundle,不能拿旧schema翻译填新参数。

手动走一遍

key cart.items包含count参数,英语和其他语言复数形式不一定同规则。app v2改为itemCount但缓存还v1,manifest/schema校验可检测不匹配并回退受控默认,而非渲染未替换占位符。

规模与取舍

catalog存储约语言数×key数×平均译文长度;按页面懒加载将首屏成本从所有语言降至选中locale必要namespace。翻译流程与缓存命中分别量测,不仅计算文件大小。

易错点与追问

容易失分的边界

  • 直接把英文文本当key,一处标点改动会打断所有译文映射。
  • 只拼“数量+单词”会在多语言语序/复数上失败。
  • 用户文本翻译缓存不能与静态UI bundle完全共用合同。

继续深挖

  • 动态新增文案需客户端知道messageKey和schema,旧app应安全忽略/回退。
  • A/B不同文案如何避免缓存混版?variant进入catalog版本或key,不覆盖共享文件。
✓已复制微信号!