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 通过 Node 服务层分发渲染所有页面,并将多语数据注入到模板,同时使用负载均衡、缓存机制和健康检查等技术来保证 Node 服务的稳定性
背景: 运行时多语依赖 Node 服务,如果 Node 服务不稳定,所有文案都无法显示。
解决方案: 通过 Node 服务层分发渲染所有页面,并将多语数据注入到模版,确保文案动态化。使用 xxx 能力(如负载均衡、缓存机制、健康检查等)来保证 Node 服务的稳定性。
-
负载均衡: 使用负载均衡技术,将请求分发到多个 Node 实例,防止单点故障,提高系统的可用性和处理能力。
-
缓存机制: 实现多级缓存,包括内存缓存和分布式缓存,减少对数据库的直接访问,提升响应速度和系统性能。
-
健康检查: 定期对 Node 服务进行健康检查,监控服务状态,及时发现和处理异常,确保服务的稳定运行。
-
自动扩展: 根据流量动态调整 Node 实例的数量,确保在高并发情况下系统的稳定性和性能。
-
日志监控: 实时监控和分析日志,快速定位和解决问题,提升系统的可靠性和维护效率。
价值: 提高系统的稳定性和可靠性,确保多语文案的实时更新和正确显示。
2.3 开发多语抽取工具,并优化多语抽取流程,将 jscodeshift 升级为 oxc,将抽取速度缩短至 2 分钟
背景: 手动抽取多语文案费时费力,容易出错,影响开发效率和文案管理。
解决方案: 开发多语抽取工具,自动化抽取多语文案,并对抽取过程进行优化,确保文案的准确性和一致性。
价值: 提高多语文案抽取的效率和准确性,减少人工操作的错误,提升开发效率和文案管理水平。
2.4 通过 Elasticsearch 实现搜索词条,并对词条进行异常检测,提升多语文案管理的效率和准确性
一、搜索词条:
功能: 提供高效的搜索功能,允许用户快速查找特定的多语词条。 实现: 使用全文搜索引擎(如 Elasticsearch)对多语文案库进行索引,支持模糊搜索和精确匹配,提升搜索速度和准确性。 优化: 实现搜索结果的高亮显示和分页加载,提升用户体验。
二、异常词条检测:
功能: 自动检测多语文案中的异常词条,如缺失翻译、格式错误等。 实现: 开发异常检测算法,定期扫描多语文案库,识别并标记异常词条。 优化: 提供异常词条的详细报告和修复建议,支持一键修复和批量处理,提升文案管理效率。
2.5 实现多语报警功能,及时发现和处理多语文案中的异常情况,确保系统的稳定性和文案的准确性
功能: 自动监控多语文案库,检测异常情况并触发报警。
实现:
-
监控机制: 定期扫描多语文案库,检测缺失翻译、格式错误、重复词条等异常情况。
-
报警触发: 当检测到异常情况时,自动触发报警,通过邮件、短信、即时通讯工具等方式通知相关人员。
-
报警管理: 提供报警管理界面,展示报警详情和处理状态,支持报警的确认和关闭。
优化:
-
报警规则配置: 支持自定义报警规则和阈值,满足不同业务场景的需求。
-
报警历史记录: 保存报警历史记录,支持查询和分析,帮助优化文案管理流程。
2.6 监控并解决 MySQL 的慢查询问题,提升数据库性能和系统响应速度
监控机制:
-
慢查询日志: 启用
MySQL
慢查询日志功能,记录执行时间超过阈值的查询语句。 -
实时监控: 使用监控工具(如
Prometheus
、Grafana
)实时监控MySQL
性能指标,包括查询时间、锁等待时间等。 -
报警系统: 配置报警规则,当慢查询次数或执行时间超过设定阈值时,自动触发报警,通知相关人员。
问题分析:
-
日志分析: 定期分析慢查询日志,识别频繁出现的慢查询语句。
-
执行计划: 使用
EXPLAIN
命令查看慢查询语句的执行计划,分析索引使用情况和查询优化空间。 -
性能瓶颈: 结合监控数据,定位数据库性能瓶颈,如索引缺失、表锁争用、硬件资源不足等。
优化措施:
-
索引优化: 根据执行计划和查询模式,添加或优化索引 ,提升查询效率。
-
查询优化: 重写慢查询语句,避免全表扫描,减少数据处理量。
-
数据库配置: 调整
MySQL
配置参数,如innodb_buffer_pool_size
、query_cache_size
等,提升数据库性能。 -
分库分表: 对大表进行分库分表处理,减少单表数据量,提升查询性能。
-
缓存机制: 引入缓存机制(如
Redis
),减少对数据库的直接访问,提升系统响应速度。