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

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

前期准备

底层组件库国际化

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

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

业务文案的国际化需求

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

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

相关推荐
懒大王爱吃狼38 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
待磨的钝刨2 小时前
【格式化查看JSON文件】coco的json文件内容都在一行如何按照json格式查看
开发语言·javascript·json
逐·風5 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦6 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子6 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山7 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
程序媛小果7 小时前
基于java+SpringBoot+Vue的旅游管理系统设计与实现
java·vue.js·spring boot
从兄8 小时前
vue 使用docx-preview 预览替换文档内的特定变量
javascript·vue.js·ecmascript