UMU I18n 国际化多语平台
一、认识
UMU I18n
国际化多语平台 提供全链路的多语解决方案, 包括多语抽取、多语自动回填、多语分派、多语同步、多语发布、多语报警
国际化多语流程如下:
-
标记多语: 通过
lang()
标记多语 -
抽取多语,创建平台多语任务: 一个页面的所有文案必须通过编译才能完全确定,因为有npm包的依赖,有的npm包是自治的,有的npm包文案是不自治的,需要使用方为其处理文案
-
自治的:umu_moduels 里都是自治的
-
不自治的:umu_support_modules,umu_design 都不是自治的
-
-
翻译人员翻译多语
-
回填多语
-
页面渲染: 所有页面都有Node渲染分发,Node会根据用户Cookie中的lang值,返回不同的i18n CDN资源,页面会加载不同的i18n资源,把多语数据注入到模板变量上,探后通过lang方法获取对应文案
国际化多语问题如下:
-
多语数据: 所有测试环境都共用一套i18n数据,所以每个需求的多语需要通过分支名来区别多语;生产环境都共用一套 i18n 数据,不同站点、预发、灰度都用的是一套多语数据;文案只有语言的区别,没有站点的区别
-
多语语法: 可以用于变量替换、单复数、不显示数字
-
lang("恭喜您,{$0} 获取学习证书", username)
-
lang("总共 {$0{0=个,1=个}} 学习项目", count)
-
lang("{$$0{0=分,1=分}}", count)
-
-
文案 复用: 每次新增的文案i18n平台会用已有文案优先进行回填,如果有多个已有的文案,会按照页面引用次数最多的优先回填
二、项目经历
2.1 将项目编译时多语重构为运行时多语, 实现多语动态化, 全平台复用, 降低了开发+翻译人力成本约90%
详细解释: 编译时的架构下不同语言需要编译成不同产物, 每个仓库都有自己的文案库, 且仓库之间的文案库相互隔离, 不能复用。而且新增语种链路长, 而且是地狱任务, 因为每个仓库都要增加。重要的是, 回填多语非常费时间。运行时的架构下产物只需要一份, 减少编译产物,加快编译时间; 文案动态化,更新文案流程快,不需要发版代码,只需要同步数据; 文案全平台复用,尽可能减少翻译成本; 新增语种快,前端工作量在1天左右;
2.2 开发多语反查工具, 可以直接在页面中修改多语文案, 并支持同步 到多语平台
2.3 通过Node服务层分发渲染所有页面,并将多语数据注入到模版, 同时使用xxx能力来保证Node稳定性
详细解释: 运行时多语依赖node server,如果node服务有稳定,所有文案都显示不出来