陈旧项目的国际化坎坷之路🤖

前段时间项目涉及出海业务,有了国际化的需求,对于我算是一个比较新的领域,以前的业务没有此类需求。研究了一段时间。正好想起来就写作记录一下。

前期准备

底层组件库国际化

由于以前没有此类业务,所以一些自有到底层组件,工具没有实践过,多语言方面的问题,但是还好,设计之初都要考虑过,所有没有花太多时间。

相对来说组件库的多语言支持还是挺简单的,毕竟用到的文案不像业务组件一样。如果用的是开源的一些组件库,他们都有很好的多语言支持。

业务文案的国际化需求

对于业务上的需求,简单梳理了以下几个需要考虑的点。

  • 中文文案怎么提取
  • 长文案加变量的翻译问题、语序变化
  • 时间格式
  • 处理标点符号
  • 处理英文换行
  • 动态切换语言 (在切换语言的时候,局部刷新问题:1、局部刷新 2、全局刷新 )
  • 中文表意明确空间占用少,其他语言占用多 (如菜单,是否需要加大展示宽度)
  • 阅读顺序 (大部分拉丁语言是从左到右书写,阿拉伯语是从右到左书写,在中文等一些东亚语言中,还存在从上到下的书写方式。)
  • 货币单位
  • 货币汇率

局部刷新需要记录当前页面的刷新接口调用问题,节约时间就选择了最粗暴的全局刷新😄,以上问题可以对照关注一下。

文案多语言翻译

多语言翻译,最好有一个效果最好的目标语言,保证目标语言效果最优就可以了,真要挣钱,可能还是本地化比较合适。文化习惯不一致,单纯的国际化效果其实并不怎么好。

我们只关注了英文,和其他几个通用语言。

代码检查

一个老系统文案成千上万,国际化难度可想而知。难度很大。如果单纯靠人工提取文案。这个工作估计就得一个月起步。所以我弄了一个cli工具辅助提取文案,提升了几十倍的效率。不过人工review的阶段⬆️少不了的。

UI页面检查、调整

替换了文案后就是最后的UI检查了,这个阶段最无聊,也最浪费时间。有测试配合起来才感觉好一些。不然真的想吐了🤮。

技术方案

接下来才进入我们今天的主题《基于AST的前端国际化解决方案》,提取文案在国际化的过程中是一个⚙️无聊且繁琐的时间,眼花缭乱,如果让你一个一个文件找,你可能得疯了。

代码编译 +工具辅助+ 人工核验

基于AST或正则表达式的前端自动国际化方案、处理代码编译逻辑、辅助语言字典提取与代码修改

具体实现

完成项目文案提取工具,尽可能的减少手动改代码。

效果

目前这个小工具已经运用上了,基本上不需要改什么代码。就可以一字不落的提取的中文文案。项目上说用vue3 与 js 暂是优先实现的 vue3与js文件的转化

  • 支持include exclude 配置按需替换
  • 支持@i18n-ignore 忽略文案
  • vue 自动引入 vue-i18n
  • vue 自动声明t函数 const {t} = useI18n()
  • vue 自动转化vue语法
  • vue 支持setup 语法糖
  • js 自动引入国际化相关函数
  • js 自定义调用方式
  • js 自动转化js语法

考虑到二次开发使用的问题作了一些定制化的配置,现在新功能开发,也可以直接扫描即可。当然已经完全满足我的需求了。

实现

讲一些是怎么实现的吧。现在我们的目标是转化提取vue 与js 文件中的中文文案

Code TO AST

所以第一步就是将它们转为AST、这里有两个重要网站帮助我们分析AST:

1、AST explorer

2、Vue Template Explorer

Vue

关于vue 这里我们直接使用 @vue/compiler-sfc 来处理SFC 文件 将其转化为AST

Javascript

关于js文件 我们使用 @babel/parser 来处理JS 将其转化为AST

它们都导出了parse 方法

分析AST,改造AST

我们通过上面的两个站点分析,找出中文节点并改造替换即可。

既然要改造,遍历工作就少不了 '@babel/traverse 帮助我们遍历AST节点。

遍历的我们就需要替换,那我们就需要生成对应的AST节点 @babel/template 提供了很多生成AST节点的工具函数当然不同的语言需要不同的方法去处理节点。

AST TO Code

对于Javascript我们可以用 @babel/generator 生成指定code。

对于Vue 我们可以把script部分当作Javascript,template 当作html来处理。只需要注意一些特殊语法就可以了。我自己找了一些资料,参考了vue一些源码的实现实现了AST 转SFC的部分。

最后

国际化的整体结构就差不多这些,难点在提取文案的工作上,其余都是工程化的问题,翻译与兼用型就是靠资源与细心。

上面讲到的工具 i18n-ast-auto 感兴趣的可以自己看看,如果有用,感谢star🙏

参考

1、从国际化/本地化设计两方面,浅谈多语言场景设计策略

2、自动国际化方案探究

相关推荐
热爱编程的小曾4 分钟前
sqli-labs靶场 less 8
前端·数据库·less
gongzemin15 分钟前
React 和 Vue3 在事件传递的区别
前端·vue.js·react.js
Apifox28 分钟前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
-代号952732 分钟前
【JavaScript】十四、轮播图
javascript·css·css3
麦麦大数据1 小时前
neo4j+django+deepseek知识图谱学习系统对接前后端分离前端vue
vue.js·django·知识图谱·neo4j·deepseek·在线学习系统
树上有只程序猿1 小时前
后端思维之高并发处理方案
前端
庸俗今天不摸鱼2 小时前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
QTX187302 小时前
JavaScript 中的原型链与继承
开发语言·javascript·原型模式
黄毛火烧雪下2 小时前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox2 小时前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员