前些日子需要阅读某个使用日文注释的项目的代码,就想给vim装个翻译插件。网上简单找了下都是基于Google Translator API的,而Google的该服务已经可耻地不免费了。

本着“不断重新发明轮子”和练练Python的想法,就用Python写了这么个小插件。一共也就几十行代码,功能很少,但够我用的了。由于我初学Python,代码大概是不堪入目的,希望你给予指点或直接改进这个插件。

全部代码如下:

if !has('python')echo "Sorry, Microsoft Translator requires python support"finish
endifpython << EOFimport json
import string
import time
import urllib
import urllib2
import xml.dom.minidom
import vimclass MicrosoftTranslator:def __init__(self, client_id, client_secret):self.client_id = client_idself.client_secret = client_secretself.from_lang = Noneself.access_token = Noneself.token_expires_at = 0.0self.to_lang = 'zh-CHS'self.__renew_access_token()def __generate_auth_params(self):auth_params = {'grant_type': 'client_credentials','scope': 'http://api.microsofttranslator.com','client_id' : self.client_id,'client_secret' : self.client_secret}return urllib.urlencode(auth_params)def __renew_access_token(self):auth_url = 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13'try:resp = urllib2.urlopen(auth_url, self.__generate_auth_params())resp_json = json.loads(resp.read())self.access_token = resp_json['access_token']self.token_expires_at = time.time() + string.atof(resp_json['expires_in'])except urllib2.URLError, e:print "Error: %s" % (e.reason)def __current_access_token(self):if time.time() > self.token_expires_at:self.__renew_access_token()return self.access_tokendef set_lang(self, to_lang, from_lang=None):self.from_lang = from_langself.to_lang = to_langdef translate(self, text):url = 'http://api.microsofttranslator.com/v2/Http.svc/Translate?'data = {'text': text,'to': self.to_lang,}if self.from_lang != None:data['from'] = self.from_langtry:request = urllib2.Request(url + urllib.urlencode(data))request.add_header('Authorization', 'Bearer ' + self.__current_access_token())response = urllib2.urlopen(request)dom = xml.dom.minidom.parseString(response.read())result = dom.documentElement.childNodes[0].nodeValuereturn resultexcept urllib2.URLError, e:errinfo = "Error: %s" % (e.reason)return errinfo
EOFif exists('g:MSTranslator_ID') && exists('g:MSTranslator_SECRET')python << EOF
tr = MicrosoftTranslator(vim.eval('g:MSTranslator_ID'), vim.eval('g:MSTranslator_SECRET'))
EOFfunction! s:Translate(text)
python << EOF
print tr.translate(vim.eval("a:text"))
EOF
endfunctionfunction! TranslateCWORD()call s:Translate(expand("<cword>"))
endfunctionfunction! TranslateVISUAL()call s:Translate(getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]-1])
endfunctionfunction! TranslateEOL()call s:Translate(strpart(getline("."), col(".")-1))
endfunctionendif

当然你也可以在github上查看源码和使用说明。

Microsoft Translator API的文档在这里。

转载于:https://www.cnblogs.com/chenf/archive/2012/10/11/vim-translator-plugin.html

基于Microsoft Translator API的vim翻译插件相关推荐

  1. Microsoft Translator发布粤语文本翻译

    今天,Microsoft Translator发布了粤语的文本翻译,新的语言增加将继续丰富微软翻译产品的生态系统,让更多组织和个人能够快速且高效地实现翻译应用.在中国,大有约5500万人使用粤语(语言 ...

  2. Bing翻译实例(microsoft translator API)

    一直喜欢用Google Translate API进行在线翻译,但是,后来,大家都知道的,Google的服务越来越慢,无法忍受,只好寻找更快的在线翻译接口,后来找到Microsoft Translat ...

  3. Microsoft Translator:打破语言障碍 拓展全球沟通新机遇

    作者:Olivier Fontana, 微软研究院Microsoft Translator产品战略总监 世界越来越小,全球协作.共同创新已经成为常态.在微软研究院,我们对此尤为感同身受--从北京到雷德 ...

  4. 使用Microsoft Translator进行翻译

    众所周知,Google Translate API在几年前就停止服务了,并提供了收费的版本GOOGLE TRANSLATE API. 之前尝试用http请求来翻译(如此链接),再解析返回的字符串([[ ...

  5. 【Microsoft Azure 的1024种玩法】七十二.使用NodeJS手动编写调用Azure Cognitive Services Translator API代码获取其支持翻译的语言集

    [简介] Azure Cognitive Services Translato 是一种基于云的神经网络机器翻译服务,同时也是 REST API 的 Azure 认知服务系列的一部分. 本篇文章将会主要 ...

  6. 体验了基于ChatGPT的谷歌翻译插件后,我把其他翻译插件移除了

    最近,一个基于 ChatGPT 的谷歌浏览器翻译插件挺火的,我体验了下,总结下来就一个字"666". github 上已经有 14.9k 的 star 了 传送门:GitHub - ...

  7. 【工具】Vscode翻译插件推荐(不用谷歌翻译api、支持短句英汉互译、支持查词、支持自动补全、不需要浏览器)

    需求: 1)偶尔需要查英文生词: 2)有时候想不起来中文对应的英文: 3)不想回到浏览器打开一堆网页: 4)谷歌翻译挂了. 偶尔需要的需求: 1)短句翻译. 因为谷歌翻译挂了,首先,排除最热门的翻译插 ...

  8. 【新手】基于C++Qt5通过调用百度翻译API制作简易翻译工具

    基于C++Qt5通过调用百度翻译API制作简易翻译工具 目录 基于C++Qt5通过调用百度翻译API制作简易翻译工具 写在前面 步骤: 1.注册百度翻译开放平台账号并开通翻译服务 2.下载安装Qt5和 ...

  9. 【我的ASM学习进阶之旅】 介绍一个基于gradle transform api和ASM的字节码插件平台ByteX

    原文链接: https://github.com/bytedance/ByteX/blob/master/README_zh.md 文章目录 ByteX(Infinite Possibilities) ...

最新文章

  1. 2019 年,容器技术生态会发生些什么?
  2. JavaScript如何获取/计算页面元素的offset?
  3. PHP设计模式——享元模式
  4. MyEclipse6.5与Perforce的集成
  5. MySQL5.7 安装(Redhat)
  6. hibernate 乐观锁与悲观锁使用
  7. 数据集转josion
  8. 《为何爱会伤人》-读书笔记
  9. Linux 下的这些高效指令,是你快速入门运维的神器
  10. Atitit.python web环境的配置 attilax 总结
  11. 火山PC加载DLL窗口案例教程
  12. Windows网络编程笔记5 -- 其他套接字
  13. iperf3的交叉编译
  14. 数据库实体间一对多(多对一)、多对多关系处理
  15. KMP算法—终于全部弄懂了
  16. 学计算机的怎样分析TCGA数据库,开启数据挖掘之门:TCGA数据库入门必看!
  17. 深度学习自然语言处理模型实现大集合(精简版<100行)
  18. cocos creator开发pc端的浏览器适配问题
  19. 62 stm32 usb自定义hid复合设备修改实验
  20. 机器学习中样本不平衡,怎么办?

热门文章

  1. ALTER TABLE----MySQL语法
  2. careercup-递归和动态规划 9.10
  3. Iphone 视图跳转方法总结
  4. jquery's json url
  5. Plugin 框架 开发实录
  6. 【解决问题】右键添加UltraEdit打开文件
  7. 配置 IPsec *** and Internet Using Split Tunneling
  8. while循环(包含死循环、while嵌套)
  9. Linux检查点是做什么的,基于日志却采用三种方法来区别增量检查点和完全检查点...
  10. Jmeter系列之常用组件(二)