跳到主要内容

UMU I18n 国际化多语平台

2024年08月06日
柏拉文
越努力,越幸运

一、认识


UMU I18n 国际化多语平台 提供全链路的多语解决方案, 包括多语抽取、多语自动回填、多语分派、多语同步、多语发布、多语报警

国际化多语流程如下:

  1. 标记多语: 通过 lang() 标记多语

  2. 抽取多语,创建平台多语任务: 一个页面的所有文案必须通过编译才能完全确定,因为有npm包的依赖,有的npm包是自治的,有的npm包文案是不自治的,需要使用方为其处理文案

    • 自治的:umu_moduels 里都是自治的

    • 不自治的:umu_support_modules,umu_design 都不是自治的

  3. 翻译人员翻译多语

  4. 回填多语

  5. 页面渲染: 所有页面都有Node渲染分发,Node会根据用户Cookie中的lang值,返回不同的i18n CDN资源,页面会加载不同的i18n资源,把多语数据注入到模板变量上,探后通过lang方法获取对应文案

国际化多语问题如下:

  1. 多语数据: 所有测试环境都共用一套i18n数据,所以每个需求的多语需要通过分支名来区别多语;生产环境都共用一套 i18n 数据,不同站点、预发、灰度都用的是一套多语数据;文案只有语言的区别,没有站点的区别

  2. 多语语法: 可以用于变量替换、单复数、不显示数字

    • lang("恭喜您,{$0} 获取学习证书", username)

    • lang("总共 {$0{0=个,1=个}} 学习项目", count)

    • lang("{$$0{0=分,1=分}}", count)

  3. 文案复用: 每次新增的文案i18n平台会用已有文案优先进行回填,如果有多个已有的文案,会按照页面引用次数最多的优先回填

二、项目经历


2.1 将项目编译时多语重构为运行时多语, 实现多语动态化, 全平台复用, 降低了开发+翻译人力成本约90%

详细解释: 编译时的架构下不同语言需要编译成不同产物, 每个仓库都有自己的文案库, 且仓库之间的文案库相互隔离, 不能复用。而且新增语种链路长, 而且是地狱任务, 因为每个仓库都要增加。重要的是, 回填多语非常费时间。运行时的架构下产物只需要一份, 减少编译产物,加快编译时间; 文案动态化,更新文案流程快,不需要发版代码,只需要同步数据; 文案全平台复用,尽可能减少翻译成本; 新增语种快,前端工作量在1天左右;

2.2 开发多语反查工具, 可以直接在页面中修改多语文案, 并支持同步到多语平台

2.3 通过Node服务层分发渲染所有页面,并将多语数据注入到模版, 同时使用xxx能力来保证Node稳定性

详细解释: 运行时多语依赖node server,如果node服务有稳定,所有文案都显示不出来

2.4 搜索词条、异常词条检测

2.5 实现i18n-cli多语抽取工具

2.6 实现多语版本Diff

2.7 实现多语报警

2.8 监控并解决MySQL的慢查询问题