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

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

前期准备

底层组件库国际化

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

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

业务文案的国际化需求

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

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

相关推荐
JUNAI_Strive_ving7 分钟前
番茄小说逆向爬取
javascript·python
看到请催我学习16 分钟前
如何实现两个标签页之间的通信
javascript·css·typescript·node.js·html5
twins352035 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
哪 吒1 小时前
华为OD机试 - 几何平均值最大子数(Python/JS/C/C++ 2024 E卷 200分)
javascript·python·华为od
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
杨荧1 小时前
【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
java·开发语言·vue.js·spring boot·spring cloud·开源
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
Q_w77422 小时前
一个真实可用的登录界面!
javascript·mysql·php·html5·网站登录