AJax技术

(十五)Flask 学习(2)

字号+ 作者:H5之家 来源:H5之家 2017-03-23 16:00 我要评论( )

接下来一步就是在 blog 旁边显示 “翻译” 链接(文件app/templates/posts.html): {%ifpost.language!=Noneandpost.language!=''andpost.language!=g.locale%}divahref="#"{{_('Translate')}}/a/div{%endif%} 这个链

接下来一步就是在 blog 旁边显示 “翻译” 链接(文件 app/templates/posts.html):

{% if post.language != None and post.language != '' and post.language != g.locale %} <div><a href="#">{{ _('Translate') }}</a></div> {% endif %}

这个链接需要我们添加一个新的翻译文本, “翻译”(‘Translate’) 是需要被包含在翻译文件里面,这里需要执行前面一章介绍的更新翻译文本的流程。

我们现在还不清楚如何触发这个翻译,因此现在链接不会做任何事情。

翻译服务

在我们的应用能够使用实时翻译之前,我们需要找到一个可用的服务。

现在有很多可用的翻译服务,但是很多是需要收费的。

两个主流的翻译服务是 Google Translate 和 Microsoft Translator。两者都是有偿服务,但微软提供的是免费的入门级的 API。在过去,谷歌提供了一个免费的翻译服务,但已不存在。这使我们很容易选择翻译服务。

使用 Microsoft Translator 服务

为了使用 Microsoft Translator,这里有一些流程需要完成:

  • 应用的开发者需要在 Azure Marketplace 上注册 Microsoft Translator app。这里可以选择服务级别(免费的选项在最下面)。

  • 接着开发者需要 注册应用。注册应用将会获得客户端 ID 以及客户端密钥代码,这些用于发送请求的一部分。

  • 一旦注册部分完成,接下来处理请求翻译的步骤如下:

  • 获取一个访问令牌,需要传入客户端 ID 和客户端密钥。

  • 调用需要的翻译服务,Ajax,HTTP 或者 SOAP,提供访问令牌和要翻译的文本。

  • 这听起来很复杂,因此如果不需要关注细节的话,这里有一个做了很多“脏”工作并且把文本翻译成别的语言的函数(文件 app/translate.py):

    try:     import httplib  # Python 2 except ImportError:     import http.client as httplib  # Python 3 try:     from urllib import urlencode  # Python 2 except ImportError:     from urllib.parse import urlencode       # Python 3 import json from flask.ext.babel import gettext from config import MS_TRANSLATOR_CLIENT_ID, MS_TRANSLATOR_CLIENT_SECRET def microsoft_translate(text, sourceLang, destLang):     if MS_TRANSLATOR_CLIENT_ID == "" or MS_TRANSLATOR_CLIENT_SECRET == "":         return gettext('Error: translation service not configured.')     try:         # get access token         params = urlencode({             'client_id': MS_TRANSLATOR_CLIENT_ID,             'client_secret': MS_TRANSLATOR_CLIENT_SECRET,             'scope': 'http://api.microsofttranslator.com',             'grant_type': 'client_credentials'})         conn = httplib.HTTPSConnection("datamarket.accesscontrol.windows.net")         conn.request("POST", "/v2/OAuth2-13", params)         response = json.loads (conn.getresponse().read())         token = response[u'access_token']         # translate         conn = httplib.HTTPConnection('api.microsofttranslator.com')         params = {'appId': 'Bearer ' + token,                   'from': sourceLang,                   'to': destLang,                   'text': text.encode("utf-8")}         conn.request("GET", '/V2/Ajax.svc/Translate?' + urlencode(params))         response = json.loads("{\"response\":" + conn.getresponse().read().decode('utf-8') + "}")         return response["response"]     except:         return gettext('Error: Unexpected error.')

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    网友点评