背景

Template部分

JavaScript部分

data结构
node.key.name == ‘data’
node.value是对其data节点的描述

继续递归node.value
发现他是一个FunctionExpression
有一个body属性,里面的blockStatement存放了对函数的描述
里面继续body属性,存放了VariableDeclaration、ReturnStatement
需要对这里面出现的所有中文字符国际化,并保留其路径

for 循环body.body

data的properties可能是
遇到‘ObjectExpression’说明是对象,那么先将它的key.name存到路径上,继续遍历它的properties属性
遇到‘ArrayExpression’说明是列表,遍历它的value.elements元素,加上索引存到路径上。
遇到‘Property’说明是属性,遍历它的value,
遇到‘Literal’说明是字面量,停止迭代,判断value是否包含中文,包含则修改为$t(‘path’)

遇到‘FunctionExpression’,遍历它的body

遇到‘VariableDeclaration’,访问它的declarations
‘遇到VariablDeclarator’,访问id和init,id存放了变量名,init.value存放了

traverse(node,path)

抽象语法树工具网站
AST explorer