template漢字提取 & 有道Api翻譯

目的

爲了簡化vue-i18n國際化實現的小工具。html

提取vue單文件組件中的漢字

  • Nodejs 文件讀取模塊fs,產生文本字符串,
  • 匹配template中的代碼,並根據換行劃分紅數組
  • 根據正則匹配template中出現的漢字,中文的正則**[\u4e00-\u9fa5]**

Nodejs 異步讀取文件vue

var fs = require('fs')

var filePath = '../xxx/xxxx/xxx'
var fileName = '/xxx.vue'


let fileString = ''

fs.readFile(filePath + fileName, function (err, data) {
    if (err) {
        return console.error(err)
    }
    fileString = data.toString()
    templateHandler(fileString)
})
複製代碼

處理文本字符串npm

function templateHandler(template) {
    // 按換行分紅數組
    let arr = template.split('\n')
    if (arr.indexOf('</template>') < 0) {
        console.log('not find the template')
        return
    }
    // 獲取html中的template
    let newArr = arr.slice(1, arr.indexOf('</template>'))

    // 獲取包含中文字符的片斷
    let paragraph = []
    newArr.forEach(e => {
        // 去掉html中的註釋
        if (/<!-- .* -->/.test(e)) {
            return
        }
        // 按空格區分
        let lineArr = e.split(' ').filter(item => {
            return item != '' && /[\u4e00-\u9fa5]+/.test(item)
        })
        if (lineArr.length == 0) {
            return
        }
        paragraph.push(lineArr.toString())
    })

    // 去除非中文外的字符,獲取中文 和 :
    let chinese = []
    let result = []
    paragraph.forEach((e,index) => {
        chinese.push(e.replace(/[^\u4e00-\u9fa5:\/]/g, ''))
        replaceArr.push(e)
    })

    // 按:劃分,分紅單獨的詞語
    let newCH = []
    chinese.forEach(ele => {
        let tmp = ele.split(/[:\/]/)
        tmp.forEach(e => {
            if (e) {
                newCH.push(e)
            }
        })
    })

    // 中文字符去重
    newCH = [...new Set(newCH)]
    length = newCH.length
    console.log(newCH)
    newCH.forEach(e => {
        translateCNToUS(e, handlerResult)
    })
}
複製代碼

使用有道Api

  • 申請key
  • 拼接請求地址url
  • 根據返回結果取所需內容
var http = require('http')
// md5 須要安裝md5的npm包 npm install md5 --save
var md5 = require('md5')

function translateCNToUS(word, callback) {
    // 申請的key和secret
    let Key = '5721fbb81d578037'
    let Secret = 'Kzz4NP0B9rxjncsvyyLXZWz70AvxpGZB'

    // 隨機數
    let salt = Math.random()
    // 生成簽名
    let sign = md5(Key + word + salt + Secret)

    let baseUrl = 'http://openapi.youdao.com/api'

    // 拼接請求url
    let url = baseUrl + '?from=zh-CHS&to=EN&appKey=' + Key + '&salt=' + salt + '&sign=' + sign + '&q=' + encodeURI(word)
    
    // 發送http GET請求
    http.get(url, function (req, res) {
        var returns = ''
        req.on('data', function(data) {
            returns += data
        })

        // 監聽end 獲取返回的參數
        req.on('end', function(){
            let result = []
            returns = JSON.parse(returns)
            if (returns.errorCode == 0) {
                result = returns.translation
            }

            // 根據返回結果,去所需進行處理
            callback(word, result[0])
        })
    })
}
複製代碼
相關文章
相關標籤/搜索