refactor: better source code framework
This commit is contained in:
65
lua/Trans/backend/baidu.lua
Normal file
65
lua/Trans/backend/baidu.lua
Normal file
@@ -0,0 +1,65 @@
|
||||
local baidu = require('Trans').conf.engine.baidu
|
||||
local appid = baidu.appid
|
||||
local appPasswd = baidu.appPasswd
|
||||
local salt = tostring(math.random(bit.lshift(1, 15)))
|
||||
local uri = 'https://fanyi-api.baidu.com/api/trans/vip/translate'
|
||||
|
||||
if appid == '' or appPasswd == '' then
|
||||
error('请查看README, 实现在线翻译或者设置将在线翻译设置为false')
|
||||
end
|
||||
|
||||
local post = require('Trans.util.curl').POST
|
||||
|
||||
local function get_field(word, isEn)
|
||||
local to = isEn and 'zh' or 'en'
|
||||
local tmp = appid .. word .. salt .. appPasswd
|
||||
local sign = require('Trans.util.md5').sumhexa(tmp)
|
||||
|
||||
return {
|
||||
q = word,
|
||||
from = 'auto',
|
||||
to = to,
|
||||
appid = appid,
|
||||
salt = salt,
|
||||
sign = sign,
|
||||
}
|
||||
end
|
||||
|
||||
---返回一个channel
|
||||
---@param word string
|
||||
---@return table
|
||||
return function(word)
|
||||
local isEn = word:isEn()
|
||||
local query = get_field(word, isEn)
|
||||
local result = {}
|
||||
|
||||
post(uri, {
|
||||
data = query,
|
||||
headers = {
|
||||
content_type = "application/x-www-form-urlencoded",
|
||||
},
|
||||
callback = function(str)
|
||||
local ok, res = pcall(vim.json.decode, str)
|
||||
if ok and res and res.trans_result then
|
||||
result[1] = {
|
||||
title = { word = word },
|
||||
[isEn and 'translation' or 'definition'] = res.trans_result[1].dst,
|
||||
}
|
||||
|
||||
if result.callback then
|
||||
result.callback(result[1])
|
||||
end
|
||||
else
|
||||
result[1] = false
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- NOTE :free tts:
|
||||
-- https://zj.v.api.aa1.cn/api/baidu-01/?msg=我爱你&choose=0&su=100&yd=5
|
||||
-- 选择转音频的人物,女生1 输入0 | 女生2输入:5|男生1 输入:1|男生2 输入:2|男生3 输入:3
|
47
lua/Trans/backend/offline.lua
Normal file
47
lua/Trans/backend/offline.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
local _, db = pcall(require, 'sqlite.db')
|
||||
if not _ then
|
||||
error('Please check out sqlite.lua')
|
||||
end
|
||||
|
||||
-- INFO : init database
|
||||
local path = require('Trans').conf.db_path
|
||||
local dict = db:open(path)
|
||||
|
||||
vim.api.nvim_create_autocmd('VimLeavePre', {
|
||||
once = true,
|
||||
callback = function()
|
||||
if db:isopen() then
|
||||
db:close()
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
|
||||
return function(word)
|
||||
local res = (dict:select('stardict', {
|
||||
where = { word = word, },
|
||||
keys = {
|
||||
'word',
|
||||
'phonetic',
|
||||
'definition',
|
||||
'translation',
|
||||
'pos',
|
||||
'collins',
|
||||
'oxford',
|
||||
'tag',
|
||||
'exchange',
|
||||
},
|
||||
limit = 1,
|
||||
}))[1]
|
||||
|
||||
if res then
|
||||
res.title = {
|
||||
word = res.word,
|
||||
oxford = res.oxford,
|
||||
collins = res.collins,
|
||||
phonetic = res.phonetic,
|
||||
}
|
||||
end
|
||||
|
||||
return res
|
||||
end
|
74
lua/Trans/backend/youdao.lua
Normal file
74
lua/Trans/backend/youdao.lua
Normal file
@@ -0,0 +1,74 @@
|
||||
local GET = require("Trans.util.curl").GET
|
||||
|
||||
return function(word)
|
||||
local isEn = word:isEn()
|
||||
local result = {}
|
||||
|
||||
local uri = ('https://v.api.aa1.cn/api/api-fanyi-yd/index.php?msg=%s&type=%d'):format(word, isEn and 2 or 1)
|
||||
GET(uri, {
|
||||
callback = function(str)
|
||||
local ok, res = pcall(vim.json.decode, str)
|
||||
if not ok or not res or not res.text or isEn and res.text:isEn() then
|
||||
result[1] = false
|
||||
return
|
||||
end
|
||||
|
||||
result[1] = {
|
||||
title = { word = word },
|
||||
[isEn and 'translation' or 'definition'] = res.text,
|
||||
}
|
||||
|
||||
if result.callback then
|
||||
result.callback(result[1])
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
-- local youdao = require("Trans").conf.engine.youdao
|
||||
-- local uri = 'https://openapi.youdao.com/api'
|
||||
-- local salt = tostring(math.random(bit.lshift(1, 15)))
|
||||
-- local appid = youdao.appid
|
||||
-- local appPasswd = youdao.appPasswd
|
||||
|
||||
-- local post = require('Trans.util.curl').POST
|
||||
|
||||
-- local function get_field(word)
|
||||
-- -- local to = isEn and 'zh-'
|
||||
-- local len = #word
|
||||
-- local curtime = tostring(os.time())
|
||||
-- local input = len > 20 and
|
||||
-- word:sub(1, 10) .. len .. word:sub(-10) or word
|
||||
|
||||
-- -- sign=sha256(应用ID+input+salt+curtime+应用密钥);
|
||||
-- local hash = appid .. input .. salt .. curtime .. appPasswd
|
||||
-- local sign = vim.fn.sha256(hash)
|
||||
|
||||
-- return {
|
||||
-- q = word,
|
||||
-- from = 'auto',
|
||||
-- to = 'zh-CHS',
|
||||
-- signType = 'v3',
|
||||
-- appKey = appid,
|
||||
-- salt = salt,
|
||||
-- curtime = curtime,
|
||||
-- sign = sign,
|
||||
-- }
|
||||
-- end
|
||||
|
||||
-- return function(word)
|
||||
-- -- return result
|
||||
-- -- local field = get_field(word)
|
||||
-- -- local output = post(uri, {
|
||||
-- -- body = field,
|
||||
-- -- })
|
||||
|
||||
-- -- if output.exit == 0 and output.status == 200 then
|
||||
-- -- local result = vim.fn.json_decode(output.body)
|
||||
-- -- if result and result.errorCode == 0 then
|
||||
-- -- --- TODO :
|
||||
-- -- end
|
||||
-- -- end
|
||||
-- end
|
Reference in New Issue
Block a user