爲了簡化vue-i18n
國際化實現的小工具。html
fs
,產生文本字符串,[\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)
})
}
複製代碼
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])
})
})
}
複製代碼