跳到主要内容

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 通过 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 慢查询日志功能,记录执行时间超过阈值的查询语句。

  • 实时监控: 使用监控工具(如 PrometheusGrafana)实时监控 MySQL 性能指标,包括查询时间、锁等待时间等。

  • 报警系统: 配置报警规则,当慢查询次数或执行时间超过设定阈值时,自动触发报警,通知相关人员。

问题分析:

  • 日志分析: 定期分析慢查询日志,识别频繁出现的慢查询语句。

  • 执行计划: 使用 EXPLAIN 命令查看慢查询语句的执行计划,分析索引使用情况和查询优化空间。

  • 性能瓶颈: 结合监控数据,定位数据库性能瓶颈,如索引缺失、表锁争用、硬件资源不足等。

优化措施:

  • 索引优化: 根据执行计划和查询模式,添加或优化索引,提升查询效率。

  • 查询优化: 重写慢查询语句,避免全表扫描,减少数据处理量。

  • 数据库配置: 调整 MySQL 配置参数,如 innodb_buffer_pool_sizequery_cache_size 等,提升数据库性能。

  • 分库分表: 对大表进行分库分表处理,减少单表数据量,提升查询性能。

  • 缓存机制: 引入缓存机制(如 Redis),减少对数据库的直接访问,提升系统响应速度。