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

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

前期准备

底层组件库国际化

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

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

业务文案的国际化需求

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

  • 中文文案怎么提取
  • 长文案加变量的翻译问题、语序变化
  • 时间格式
  • 处理标点符号
  • 处理英文换行
  • 动态切换语言 (在切换语言的时候,局部刷新问题: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、自动国际化方案探究

相关推荐
类人_猿33 分钟前
ASP.NET Web(.Net Framework) Http服务器搭建以及IIS站点发布
前端·iis·asp.net·.net·http站点服务器
组态软件4 小时前
web组态软件
前端·后端·物联网·编辑器·html
前端Hardy4 小时前
HTML&CSS:MacBook Air 3D 动画跃然屏上
前端·javascript·css·3d·html
汪小白JIY5 小时前
【VUE3】VUE组合式(响应式)API常见语法
vue.js·vue3·语法
loey_ln5 小时前
观察者模式和发布订阅模式
javascript·观察者模式·react.js
cnsxjean7 小时前
SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传
java·前端·spring boot·分布式·后端·中间件·架构
ZL_5677 小时前
uniapp中使用uni-forms实现表单管理,验证表单
前端·javascript·uni-app
沉浮yu大海7 小时前
Vue.js 组件开发:构建可重用且高效的 UI 块
前端·vue.js·ui
代码欢乐豆7 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
sunly_7 小时前
Flutter:启动屏逻辑处理02:启动页
android·javascript·flutter