0.0.4 • Published 4 years ago

yh-b28-cli v0.0.4

Weekly downloads
9
License
ISC
Repository
github
Last release
4 years ago

翻译工具,Excel/Json处理工具

更新说明:

  • 添加.Vue文件词条的提取和翻译替换,同时对template需要添加翻译函数的地方会自动的添加翻译函数
  • 添加JS文件中包含的中文词条提取和翻译替换,没有添加翻译函数的词条自动添加翻译函数
  • 修改参数配置错误信息,提供具体的参数错误说明
  • 添加JSON部分合并功能,满足删除多余词条的业务场景
  • 添加原厂代码添加翻译函数功能,支撑原厂代码多国语言的快速开发
  • 添加提取全部词条和语言包整合,输出完整的excel文件,并对未翻译词条进行标注
  • 添加语言包检查,检查资料返回的语言包与需要翻译词条是否一致

该工具同时包含以下几个功能:

JS提取替换方法:

通过babylonjs代码转成AST(抽象语法树),通过遍历AST得到需要提取的内容,并对AST进行修改,最后通过babel-generatorAST转成代码文件输出。 一开始选择Esprima进行代码转AST,但Esprima对注释的处理有点问题,通过EscodegenAST转代码时,注释丢失或者位置不对,没找到解决方案,故换成babylon.

HTML提取替换方法:

通过jsdomhtml代码转成DOM树,然后对DOM进行遍历。

Vue文件提取替换方法:

templatescript模块分开进行处理。script代码还是按照JS的逻辑进行处理。template的解析处理参考vuecompiler模块进行解析。首先遍历html节点提取翻译相关的属性和文本信息,包括词条的startend位置索引,然后解析提取的信息,提取需要翻译的词条,同时将翻译后的词条对原template进行原地替换,最后输出替换后的vue文件。

对于含有翻译函数_()的表达式会直接提取,不包含翻译函数的表达式只有包含中文的情况下才会进行提取和翻译替换。纯英文词条默认不提取,以为无法区分是表达式还是词条。

默认的处理如下:

  • 对于指令只对v-bind的指令做处理,其它指令不会涉及多语言相关内容。如果指令中包含_('')翻译函数,则只处理翻译函数内的词条,其它内容不做处理。如果不包含翻译函数,且含有中文,则进行提取和替换
  • 对于非v-bind属性titlealtplaceholder如果内容是中文,则会进行提取,翻译的时候会将该内容替换为对应v-bind格式
  • 对于文本内容会将{{}}模板语法内的表达式提取为参数,然后将整个词条重新组装为{{_('xxxx %s xxx', [ars])}}格式,并且将原文本进行替换

示例如下:

<template>
	<div>
        <div title="我是标题">{{'这是测试1' + test}}</div>
        <div :title="anna">{{_('这是测试2') + check}}</div>
        <div :key="_('我也是标题')">我就是一段纯文本而已!</div>
        <v-pop :option="dialog" v-model="dialog.show">这是内容:{{coneten + mess}}</v-pop>
    </div>
</template>

进行工具翻译替换后:

<template>
	<div>
        <div :title="_('this is title')">{{_('this is test one %s', [test])}}</div>
        <div :title="anna">{{_('this is test two') + check}}</div>
        <div :key="_('This is title too')">{{_('Just a pure text message.')}}</div>
        <v-pop :option="dialog" v-model="dialog.show">{{_('this is content: %s%s', [content, mess])}}</v-pop>
    </div>
</template>

处理结果

安装

npm install b28-cli -g

指令

# 运行工具
cd xxx
b28-cli

# 初始化配置文件b28.config.js
b28-cli init

# 查看版本号
b28-cli -v

# 查看帮助
b28-cli -h

使用方式: 1. 通过WinForm界面程序直接操作(只支持windows环境)

b28

  1. 通过b28.config.js进行配置,在目标路径下面添加b28.config.js配置文件,见参数配置说明

    如果有读取到配置参数,则直接按配置参数运行工具。若读取的配置错误则会通过下面的使用方式重新输入配置项修正数据。 直接通过命令行交互的形式,如下图

    # 切换到目标路径
    cd xxx

    # 运行指令
    b28-cli

交互

参数配置见见参数配置说明

配置参数说明

示例b28.config.js

// 翻译文件配置
module.exports = {
    commandType: 1,
    /**
     * 待翻译文件根目录
     */
    baseTranslatePath: './test/TestFile/test/allTest',
    /**
     * 翻译后文件输出根目录
     */
    baseTransOutPath: './test/TestFile/output/allTest',
    /**
     * 语言包文件地址
     */
    languagePath: './test/TestFile/testData/allTest/translate.xlsx',
    /**
     * 宏文件地址
     */
    hongPath: './test/TestFile/config/index.js',
    /**
     * key对应列
     */
    keyName: 'EN',
    /**
     * value对应列
     */
    valueName: 'CN',
    /**
     * Excel对应的sheet名称
     */
    sheetName: '',
}

公共参数

commandType: 操作类型,枚举值

  • 0: 提取词条
  • 1: 翻译文件
  • 2: 翻译检查
  • 3: Excel转JSON
  • 4: JSON转Excel
  • 5: JSON合并
  • 6: 原厂代码添加翻译函数
  • 7: 提取全部词条
  • 8: 语言包检查

下面的所有地址参数既可以是绝对路径也可以是相对路径。相对路径为当前执行命令地址的相对路径。 所有输出的目录可以为当前还不存在的文件夹,但其最初始目录必须存在

词条提取

提取htmlJS中所有的文本词条,以供其它地方使用或替换。

属性值类型默认值说明
onlyZHBooleanfalse只提取中文词条
baseReadPathString必填待提取文件根目录
baseOutPathStringbaseReadPath提取的Excel文件输出目录
hongPathString功能宏文件地址

baseReadPath: 既可以是文件夹也可以是具体的文件 baseOutPath: 当baseReadPath为具体的文件时,该默认值为文件所在的文件夹地址

翻译文件

对代码文件进行翻译,对应需要翻译的文件,进行翻译输出,不需要翻译的文件进行拷贝输出,替换代码中所有需要替换的词条。当提供的语言包为Excel时,会同时生成对应的语言JSON文件,已保证翻译后的文件与语言文件是能够一一对应的。

属性值类型默认值说明
baseTranslatePathString必填待翻译文件根目录
baseTransOutPathStringbaseTranslatePath翻译后文件输出根目录
languagePathString必填语言包文件地址,JSONExcel
hongPathString功能宏文件地址
sheetNameString第一个SheetExcel中对应的Sheet名称
keyNameStringENExcel中需要替换到代码中的列值
valueNameStringCNExcel中对应现有代码中的字段值列

languagePath: 值为Excel时才需要提供字段sheetNamekeyNamevalueName

将Excel中的第一行作为标题行,keyNamevalueName对应标题行每列的值

翻译检查

检查当前的代码中是否有漏翻译的对象,与现有的语言包匹配,找出漏掉或错改的词条。

属性值类型默认值说明
baseCheckPathString必填待检查文件根目录
langJsonPathString必填语言包json文件地址
hongPathString功能宏文件地址
logPathStringbaseCheckPath检查信息输出路径

langJsonPath: 为保证检查结果的准确性,必须为JSON文件

Excel转JSON数组或者对象

将Excel转成JSON文件,并返回对应的对象。提供一列数据,转成对应的数组,提供多列,则分别与key列形成多个对象,输出到制定JSON文件.

属性值类型默认值说明
excelPathString必填Excel文件地址
keyNameStringEN作为对象key值的列
valueNameString作为对象value值的列,多个列用英文逗号隔开
sheetNameString第一个SheetExcel中对应的sheet名称
outJsonPathStringexcelPath输出json文件地址

JSON转EXCEL文件

将数值或者对象,转成一列或者两列的Excel文件

属性值类型默认值说明
jsonPathString必填json文件地址,多个json文件合并时输入文件夹地址
outExcelPathStringjsonPath输出Excel文件地址

outExcelPath: 可以是具体的文件名,也可以是输出文件所在的目录。为具体文件,则按给定的名称输出到给定的位置。给定的为目录,则在该目录下输出json2Excel.xlsx文件。

合并JSON文件

深度合并两个或多个JSON文件,可以是数组也可以是对象,但所有待合并的文件必须同为数组或者同为对象。

属性值类型默认值说明
mainJsonPathString必填主json文件地址
mergeJsonPathString必填次json文件地址,多个文件用英文逗号隔开
outMergeJsonPathStringmainJsonPath所在文件夹合并后输出的地址

主json文件地址文件的优先级最高,如果存在值相同的,保留主json文件的内容,多个次JSON文件时,排在后面的文件优先级高于前面的文件。

原厂代码添加翻译函数

在原厂代码中添加翻译函数_(),实现多语言产品需求

属性值类型默认值说明
baseProPathString必填原厂代码地址
baseProOutPathStringbaseProPath添加翻译函数后文件输出地址
ignoreCodeString/Regexp/<!--\s*hide|-->/g需要注释的代码正则
templateExpString/Regexp/<%([^\n]*?)%>/gJS文件中后台用于插入替换的模板表达式对应的正则
customRulesArray/Function/Regexp[]自定义不提词条规则列表,可以是正则也可以是function

ignoreCode: 原厂代码中需要注释的代码对应的正则,不注释对应的js代码会有语法错误,例如部分原厂代码中在代码开头会包含<!--\s*hide代码段等

templateExp: 原厂中没有实现前后端分离,通过特定的模板语法注入参数的代码段对应的正则,如<%ejGetOther(sessionKey)%>

customRules: 用于设置默认规则外,不进行提取的词条

预设不进行翻译配置如下

  • 全数字
  • 单个字母
  • <% xxxx %>格式的字符串
  • (xxx)格式
  • html标签
  • 全大写字母
  • url
  • 数字,字母,特殊符号(不包含空格)组成的字符串,必须包含数字,=,?中的一个

提取全部词条

通过词条提取获取代码中全部词条,以提取到的词条为key值,导入多国语言翻译,生成完整的多国语言excel,类似于最终的语言包。

  • 避免出现新功能开发&新增语种时漏提取词条
  • 减少整理语言包、导入语言包时间
属性值类型默认值说明
baseReadPathString必填待提取文件根目录
languagePathString必填语言包文件夹地址,默认语言包名称为translate.json
baseOutPathString必填Excel文件输出目录
hongPathString功能宏文件地址

语言包检查

检查需要翻译的词条是否进行了修改/优化。

属性值类型默认值说明
outExcelString必填包含所有需要翻译词条的excel文件地址(提供给资料的文件)
sheetName1StringoutExcel的sheetName
keyName1StringENoutExcel需要对比的列
inExcelString必填翻译后的excel文件地址(资料返回的文件)
sheetName2StringinExcel的sheetName
keyName2StringENinExcel需要对比的列

主json文件地址文件的优先级最高,如果存在值相同的,保留主json文件的内容,多个次JSON文件时,排在后面的文件优先级高于前面的文件。

备注:

流程图