返回介绍

使用第三方翻译服务

发布于 2025-01-02 21:53:55 字数 4285 浏览 0 评论 0 收藏 0

两种主要的翻译服务是 Google Cloud Translation APIMicrosoft Translator Text API 。 两者都是付费服务,但微软为低频少量的翻译提供了免费的入门级选项。 谷歌过去提供免费翻译服务,但现在,即使是最低层次的服务也需要付费。 因为我希望能够在不产生费用的情况下尝试翻译,我将实施 Microsoft 的解决方案。

在使用 Microsoft Translator API 之前,你需要先获得微软云服务 Azure 的帐户。 你可以选择免费套餐,但在注册过程中系统会要求你提供信用卡号,但在你保持该级别的服务时,你的卡不会被收取费用。

获得 Azure 帐户后,转到 Azure 门户并单击左上角的“New”按钮,然后键入或选择“Translator Text API”。 当你点击“Create”按钮时,将看到一个表单,并可以在其中定义一个新的翻译器资源,然后将其添加到你的帐户中。 你可以在下面看到我是如何完成表单的:

当你再次点击“Create”按钮时,翻译器 API 资源将被添加到你的帐户中。几秒钟之后,你将在顶栏中收到通知,说明部署了翻译器资源。 点击通知中的“Go to resource”按钮,然后点击左侧栏上的“Keys”选项。 你现在将看到两个 Key,分别标记为“Key 1”和“Key 2”。 将其中一个 Key 复制到剪贴板,然后将其设置到终端的环境变量中(如果使用的是 Microsoft Windows,请用 set 替换 export ):

(venv) $ export MS_TRANSLATOR_KEY=<paste-your-key-here>

该 Key 用于验证翻译服务,因此需要将其添加到应用配置中:

config.py : 添加 Microsoft Translator API key 到配置中。

class Config(object):
    # ...
    MS_TRANSLATOR_KEY = os.environ.get('MS_TRANSLATOR_KEY')

与很多配置值一样,我更喜欢将它们安装在环境变量中,并从那里将它们导入到 Flask 配置中。 对于允许访问第三方服务的密钥或密码等敏感信息,这一点尤为重要。 你绝对不想在代码中明确写出它们。

Microsoft Translator API 是一个接受 HTTP 请求的 Web 服务。 Python 中有若干 HTTP 客户端,但最常用和最简单的就是 requests 包。 所以让我们将其安装到虚拟环境中:

(venv) $ pip install requests

在下面,你可以看到我使用 Microsoft Translator API 编写翻译文本的功能。 我来新增一个 app/translate.py 模块:

app/translate.py :文本翻译函数。

import json
import requests
from flask_babel import _
from app import app

def translate(text, source_language, dest_language):
    if 'MS_TRANSLATOR_KEY' not in app.config or \
            not app.config['MS_TRANSLATOR_KEY']:
        return _('Error: the translation service is not configured.')
    auth = {'Ocp-Apim-Subscription-Key': app.config['MS_TRANSLATOR_KEY']}
    r = requests.get('https://api.microsofttranslator.com/v2/Ajax.svc'
                     '/Translate?text={}&from={}&to={}'.format(
                         text, source_language, dest_language),
                     headers=auth)
    if r.status_code != 200:
        return _('Error: the translation service failed.')
    return json.loads(r.content.decode('utf-8-sig'))

该函数定义需要翻译的文本、源语言和目标语言为参数,并返回翻译后文本的字符串。 它首先检查配置中是否存在翻译服务的 Key,如果不存在,则会返回错误。 错误也是一个字符串,所以从外部看,这将看起来像翻译文本。 这可确保在出现错误时用户将看到有意义的错误消息。

requests 包中的 get() 方法向作为第一个参数给定的 URL 发送一个带有 GET 方法的 HTTP 请求。 我使用 /v2/Ajax.svc/Translate URL,它是翻译服务中的一个端点,它将翻译内容荷载为 JSON 返回。文本、源语言和目标语言都需要在 URL 中分别命名为 textfromto 作为查询字符串参数。 要使用该服务进行身份验证,我需要将我添加到配置中的 Key 传递给该服务。 该 Key 需要在名为 Ocp-Apim-Subscription-Key 的自定义 HTTP 头中给出。 我创建了 auth 字典,然后将它通过 headers 参数传递给 requests

requests.get() 方法返回一个响应对象,它包含了服务提供的所有细节。 我首先需要检查和确认状态码是 200,这是成功请求的代码。 如果我得到任何其他代码,我就知道发生了错误,所以在这种情况下,我返回一个错误字符串。 如果状态码是 200,那么响应的主体就有一个带有翻译的 JSON 编码字符串,所以我需要做的就是使用 Python 标准库中的 json.loads() 函数将 JSON 解码为我可以使用的 Python 字符串。 响应对象的 content 属性包含作为字节对象的响应的原始主体,该属性是 UTF-8 编码的字符序列,需要先进行解码,然后发送给 json.loads()

下面你可以看到一个 Python 控制台会话,我演示了如何使用新的 translate() 函数:

>>> from app.translate import translate
>>> translate('Hi, how are you today?', 'en', 'es')  # English to Spanish
'Hola, ¿cómo estás hoy?'
>>> translate('Hi, how are you today?', 'en', 'de')  # English to German
'Are Hallo, how you heute?'
>>> translate('Hi, how are you today?', 'en', 'it')  # English to Italian
'Ciao, come stai oggi?'
>>> translate('Hi, how are you today?', 'en', 'fr')  # English to French
"Salut, comment allez-vous aujourd'hui ?"

很酷,对吧? 现在是时候将此功能与应用集成在一起了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文