[类][0.51b 1223 2105] AHK 多引擎翻译 API

在网上难免遇到不同语言的信息需要翻译, 各个引擎翻译结果也有所不同, 写了这个 api, 可以调用不同引擎进行翻译.

在网上难免遇到不同语言的信息需要翻译, 各个引擎翻译结果也有所不同, 写了这个 api, 可以调用不同引擎进行翻译.

使用方法:

  1. 将代码保存为 translateApi.ahk, 放入 ahk 的lib 目录;
  2. 在脚本中直接使用即可.

 

ver 0.51 beta – 171223.2220

* 修正一个使 bing 不能正确翻译的错误
* 一些小改动

ver 0.5 beta – 171223.2105

+ 添加 bing 翻译引擎

translateApi(keyword[, api, language])

参数:

  • keyword=[需翻译字符串]
    • 字符串
      不同引擎对翻译字串的要求不同,  可以参考各个翻译引擎的限制.
      提供的函数 Uri_Enc 进行简单的将换行和字符[“]转换, 也可以自建 Uri_Encode
      函数将要翻译的字串转换成 utf 格式的 url 字符串,  可以避免很多非url字符引起的
      错误, 使用 Uri_Enc 时会自动调用存在的 Uri_Encode.
  • api=[引擎名称]
    • b, bing, microsoft
      使用微软 bing 引擎
    • g[cn], goo[cn], google[cn]
      使用 google 引擎, 如其后紧跟 cn, 则使用 google.cn 的引擎
      ———————————————————————————-
      google.cn 引擎结果与 Google 一致, 较快, 适合国内, 但有时得不到结果
      ———————————————————————————-
    • y, you, youdao
      使用有道引擎
      ———————————————————————————-
      使用有道引擎时, 后面参数无效, 全部翻译成中文
      因有道服务器限制, 每次强制延迟 3 秒
      其中的 api 使用 key 为网上收集, 随时可能失效
      可使用 y[|keyfrom|key] 格式自行添加申请的 key
      ———————————————————————————-
  • langrage=”[目标语言[|源语言]]”
    **************************************************************
    由于不同引擎对应翻译模块不同, 不能保证都有正确结果
    **************************************************************

    • 目标语言指翻译后的语言, 默认为 zh-cn, 可以为任何语言标签, 最好为 xx-XX 格式
    • 源语言指想要翻译的语言, 在源语言为多语种时(例如日英混合), 这可能有用, 默认 auto
      如果是 google 免费 api 不支持的语言, 无法准确翻译
  • 例子:

MsgBox % translateApi(“女子高生涼宮ハルヒが theme like you”)

默认全部翻译成中文

结果:  学校女孩一代凉宫春日主题喜欢你

MsgBox % translateApi(Uri_Enc(“女子高生(涼宮ハルヒが) theme like you 涼宮ハルヒが”), “google”, “ru”)

使用 google 引擎翻译成俄语

结果: Школьные девушки (тема Харухи Сюзумия, как и вы, Харухи Сузумия

MsgBox % translateApi(“女子高生(涼宮ハルヒが) theme like you 涼宮ハルヒが”, “g”, “ru|en”)

将其中英语转换为俄语

结果: 女子 高 生 (涼 宮 ハ ル ヒ が) тема, как вы 涼 宮 ハ ル ヒ が

translateApi(KeyWord:="", api:="google", lang:="zh-cn|auto", paras*)
{
    static apis:="|google|bing|microsoft|youdao|yd_key|go_key|"
        , lans :="auto|af|af-ZA|sq|sq-AL|ar|ar-DZ|ar-BH|ar-EG|ar-IQ|ar-JO|ar-KW|ar-LB|ar-LY|ar-MA|ar-OM|ar-QA|ar-SA|ar-SY|ar-TN|ar-AE|ar-YE|hy|hy-AM|"
            . "az|az-AZ-Cyrl|az-AZ-Latn|eu|eu-ES|be|be-BY|bg|bg-BG|ca|ca-ES|zh-HK|zh-MO|zh-CN|zh-CHS|zh-SG|zh-TW|zh-CHT|hr|hr-HR|cs|cs-CZ|da|da-DK|div|"
            . "div-MV|nl|nl-BE|nl-NL|en|en-AU|en-BZ|en-CA|en-CB|en-IE|en-JM|en-NZ|en-PH|en-ZA|en-TT|en-GB|en-US|en-ZW|et|et-EE|fo|fo-FO|fa|fa-IR|fi|"
            . "fi-FI|fr|fr-BE|fr-CA|fr-FR|fr-LU|fr-MC|fr-CH|gl|gl-ES|ka|ka-GE|de|de-AT|de-DE|de-LI|de-LU|de-CH|el|el-GR|gu|gu-IN|he|he-IL|hi|hi-IN|hu|"
            . "hu-HU|is|is-IS|id|id-ID|it|it-IT|it-CH|ja|ja-JP|kn|kn-IN|kk|kk-KZ|kok|kok-IN|ko|ko-KR|ky|ky-KZ|lv|lv-LV|lt|lt-LT|mk|mk-MK|ms|ms-BN|ms-MY|mr|"
            . "mr-IN|mn|mn-MN|no|nb-NO|nn-NO|pl|pl-PL|pt|pt-BR|pt-PT|pa|pa-IN|ro|ro-RO|ru|ru-RU|sa|sa-IN|sr-SP-Cyrl|sr-SP-Latn|sk|sk-SK|sl|sl-SI|es|es-AR|"
            . "es-BO|es-CL|es-CO|es-CR|es-DO|es-EC|es-SV|es-GT|es-HN|es-MX|es-NI|es-PA|es-PY|es-PE|es-PR|es-ES|es-UY|es-VE|sw|sw-KE|sv|sv-FI|sv-SE|syr|"
            . "syr-SY|ta|ta-IN|tt|tt-RU|te|te-IN|th|th-TH|tr|tr-TR|uk|uk-UA|ur|ur-PK|uz|uz-UZ-Cyrl|uz-UZ-Latn|vi|vi-VN|"
        , reggoogle := "^\[+""(.*?)"","""
        , regyoudao := "^.*?translation"":\[""(.*?)""\],"""
        , regbing   := "^<[^>]+>(.*?)<\/string>$"
        , ls1:="zh-cn", ls:="auto"
    uapi:={}, ulang:={}
    loop, Parse, api, `|
    {
        uapi[A_Index] := A_LoopField
    }
    loop, Parse, lang, `|
    {
        ulang[A_Index] := A_LoopField
    }
    loop, % (ua:=StrLen(uapi[1]))
    {
        api:=(tag:=RegExMatch(apis,"\b(?<!-)" SubStr(uapi[1], 1, ua+1-(i:=a_index))))
            ? SubStr(apis, tag, InStr(apis, "|",, tag)-tag)
            : (i=ua
                ? "google"
                : "")
        if api
            break
    }
    api := api = "microsoft" ? "bing" : api
    if (api="google" && InStr(uapi[1],"cn"))
        uapi[4]:=1
    loop, 2 ;ulang.MaxIndex()
    {
        j:=A_Index
            , ulang[j]:=InStr(lans, "|" ulang[j] "|") ? ulang[j] : (ls%j%? ls%j%: ls)
    }
    start := A_TickCount
        , url := u%api% KeyWord
    if IsFunc("translateApi_" api)
        url := translateApi_%api%(KeyWord, uapi, ulang)
    else
        return
    ;~ sbox(api, url, uapi, ulang)
    WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    WebRequest.Open("GET", url)
    WebRequest.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
    WebRequest.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0")
    WebRequest.Send()
    result := WebRequest.ResponseText
    ObjRelease(WebRequest)
    ;~ WebRequest.Close()
    RegExMatch(result, "S)" reg%api%, txt)
    return txt1
}
translateApi_bing(paras*)
{
/*
http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=74FE953EB48E1487E94F4BF9C425B6290FF2DA48&from=" . langfrom . "&to=" . langto . "&text=" . var
*/
    static host1:= "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=74FE953EB48E1487E94F4BF9C425B6290FF2DA48"
        , KeyWord:=1, apis:=2, lans:=3
        , a_api:=1, a_id:=2, a_key:=3, a_gcn:=4
        , tl:=1, sl:=2
    url := host1
        . "&from=" (paras[lans][sl] = "auto" ? "" : RegExReplace(paras[lans][sl], "S)-.*$"))
        . "&to=" (RegExReplace(paras[lans][tl], "S)-.*$"))
        . "&text=" paras[KeyWord]
    return url
}
translateApi_google(paras*)
{
/*
http://translate.google.cn/translate_a/single?client=at&sl=auto&tl=zh-CN&dt=t&q=
https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en-gb&dt=t&q=
*/
    static host1:= "https://translate.google.cn/translate_a/single?client=at"
        , host2 := "https://translate.googleapis.com/translate_a/single?client=gtx"
        , KeyWord:=1, apis:=2, lans:=3
        , a_api:=1, a_id:=2, a_key:=3, a_gcn:=4
        , tl:=1, sl:=2
    url := (paras[apis][a_gcn] ? host1 : host2)
        . "&sl=" paras[lans][sl]
        . "&tl=" paras[lans][tl]
        . "&dt=t"
        . "&q=" paras[KeyWord]
    return url
}
translateApi_youdao(paras*)
{
/*
http://fanyi.youdao.com/fanyiapi.do?keyfrom=qqqqqqqq123&key=86514254&type=data&doctype=json&version=1.1&q=
*/
    static host1:= "http://fanyi.youdao.com/fanyiapi.do"
        , KeyWord:=1, apis:=2, lans:=3
        , a_api:=1, a_id:=2, a_key:=3, a_gcn:=4
        , tl:=1, sl:=2
    Sleep, 3000
    return host1
        . "?keyfrom=" (paras[apis][a_id]?paras[apis][a_id]:"qqqqqqqq123")
        . "&key=" (paras[apis][a_key]?paras[apis][a_key]:"86514254")
        . "&type=data"
        . "&doctype=json"
        . "&version=1.1"
        . "&q=" paras[KeyWord]
}
Uri_Enc(l:="")
{
    static enc:="Encode"
    if IsFunc("Uri_Encode")
        l := Uri_%enc%(l)
    l := RegExReplace(l,"S)""|`n|`r|\,", ". ")
    return l
}

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他教程

[正则]Expressive正则表达式工具粗汉化并添加函数生成功能——枫丹白露

2017-12-22 19:31:15

其他

[工具]根据程序自动设置输入法

2017-12-24 18:53:30

2 条回复 A文章作者 M管理员
  1. sanmaodo

    刚测试,三个引擎都能正常翻译。有道引擎的翻译与有道电脑客户端的翻译不一样,客户端的翻译更准确。
    非常感谢!!!

  2. AHK中文社区

    我也没有测试,希望有用到的朋友给与反馈,这是一个很不错的分享!

个人中心
购物车
优惠劵
有新私信 私信列表
搜索