Home >  > 如何使用google API翻译

如何使用google API翻译

google API翻译是收费的,正常google翻译的收费是100万个字符20美元。我们第一次使用,当然不想就开始付费,而是想先体验一下,好在google也提供了免费试用的功能,会给新账号300$的额度。

要使用google API翻译,整个流程还挺长的。由于google的文档对新手很不好友,所以在这个过程中我也走了不少弯路,现在总结一下并分享给大家,
其中关键的步骤是:

  • 申请google API
  • 建立项目
  • 启用记费功能
  • 开启API
  • 设立身份验证

希望让有需要的人少走点弯路。

一、申请google API
(一)进入申请页面
点击链接进行申请
(二)申请API
可能是因为google在中国被墙的原因,国家那里找了半天找不到中国的选项,后来干脆用默认选项“美国”。

由于选的是美国,所以信用卡地址那里也只能填美国的,我随便填了一下纽约大学的地址:70 Washington Square South ,New York, NY。

300$的额度,90天内用完。

二、新建项目
按google的说法,要使用Google Cloud提供的服务,您必须创建一个项目。

一个项目可以组织您所有的Google Cloud资源。 一个项目由一组协作者,已启用的API(和其他资源),监视工具,计费信息以及身份验证和访问控制组成。 您可以创建一个项目,也可以创建多个项目,然后使用它们在资源层次结构中组织Google Cloud资源。 创建项目时,请记下项目ID。 您将需要此ID来进行API调用。

建议您为实验,测试和生产创建单独的项目。 创建项目后,记录项目编号或ID。 调用Cloud Translation API时,必须提供项目编号(或ID)。

三、启用记费功能
您必须启用计费才能使用云翻译。
如何确认你的项目已经开启了计费功能呢?
打开你的项目,点击左边导航栏的“结算”链接,如果看到下面的页面,就表明你的项目已经开启了计费的功能。

四、开启API
(一)生成API密钥
进入你的项目里,点击执行“创建凭据->生成API密钥”功能,就可以得到你的API密钥.

(二)测试API密钥
填上key进行测试,测试代码如下:

import  requests
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf-8')#python处理字符流改成utf-8形式

def translate_text(target, content):
	language_type = ""
	url = "https://translation.googleapis.com/language/translate/v2"
	data = {
	    'key':"AI*******mpI",
	    'source': language_type,
	    'target': target,
	    'q': content,
	    'format': "text"
	}
	#headers = {'X-HTTP-Method-Override': 'GET'}
	#response = requests.post(url, data=data, headers=headers)
	response = requests.post(url, data)
	# print(response.json())
	print(response)
	res = response.json()
	print(res["data"]["translations"][0]["translatedText"])
	result = res["data"]["translations"][0]["translatedText"]
	print(result)
	return result


if __name__ == '__main__':
	content = "Teknoloji haberleri ve ürün incelemeleri"
	target = 'zh-cn'
	translate_text(target,content)

报以下错误:
{'error': {'code': 403, 'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'errors': [{'message': 'Cloud Translation API has not been used in project 288578xxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/translate.googleapis.com/overview?project=288578xxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.', 'domain': 'usageLimits', 'reason': 'accessNotConfigured', 'extendedHelp': 'https://console.developers.google.com'}], 'status': 'PERMISSION_DENIED'}}

(三)启用翻译API
按上面的出错提示,进入到这个页面,点击“启用”翻译API.

一些介绍:https://cloud.google.com/translate/docs/basic/quickstart?hl=zh_CN

(四)成果展示
再次运行上面的测试代码,可以发现翻译成功了。运行结果如下:


{'data': {'translations': [{'translatedText': '技术新闻和产品评论', 'detectedSourceLanguage': 'tr'}]}}
技术新闻和产品评论

参考:https://blog.csdn.net/javajiawei/article/details/90691108?spm=1001.2014.3001.5501

到了上面这一步就可以使用了,如果你只是进行简单的翻译,那么到上一步就已经大功告成了!

不过我还有一个需求,就是可以实现对html代码的翻译,即保留html代码,但是翻译代码中的内容。所以后来又折腾客户端库。

五、进行配额管理
这一步是可选步骤,可以不做。

Cloud Translation具有配额管理系统,可帮助您和Google管理该服务的使用情况。 默认情况下,每天可以发送的字符数没有限制。 如果您有固定的预算,建议您监控日常使用情况,并根据计划支出调整配额。

六、设立身份验证
如果您打算使用Cloud Translation API,则需要设置身份验证。 任何使用该API的客户端应用程序都必须经过身份验证,并被授予对所请求资源的访问权限。

其实官方也推荐使用客户端库来调用 Cloud Translation,因为它们可以更轻松地访问 API

(一)获得api json文件
1.点击进入这个页面

2.选择一个项目

3.选择“create service account”

4.建立账号
输入相关的信息,完成账号的建立。

5.点击左边导航栏的“service account”,你会发现刚刚自己建立的账号已经出现在里面了,点击这个账号。

6.建立key
在出现的窗口中,点击“key”,再点击“add key-creat new key”

7.在出现的窗口中选择"json"

点击“创建”之后,会自动将一个json文件下载到你的电脑上,请保存好这个json文件,里面有你的key.

(二)添加系统变量
将上一步下载的json文件保存到你的电脑中的某一个文件夹下面,比如我就将它存在C:\google\这个文件夹下面。
然后添加环境变量。
其中变量名为:GOOGLE_APPLICATION_CREDENTIALS
变量的值就是你的json文件路径,比如:"C:\Users\username\Downloads\你的key.json"

(三)使用google translate的客户端
1.先安装

pip install google-cloud-translate==2.0.1
pip install --upgrade google-cloud-storage

2.运行测试代码

def implicit():
    from google.cloud import storage

    # If you don't specify credentials when constructing the client, the
    # client library will look for credentials in the environment.
    storage_client = storage.Client()

    # Make an authenticated API request
    buckets = list(storage_client.list_buckets())
    print(buckets)

只要运行上面的代码不报错,那就表示你的google授权成功,以后可以通过from google.cloud import translate_v3beta1 来使用google翻译了。
示例代码:

def translate_text_with_model(target, text, model="nmt"):
    """Translates text into the target language.

    Make sure your project is allowlisted.

    Target must be an ISO 639-1 language code.
    See https://g.co/cloud/translate/v2/translate-reference#supported_languages
    """
    import six
    from google.cloud import translate_v2 as translate

    translate_client = translate.Client()

    if isinstance(text, six.binary_type):
        text = text.decode("utf-8")

    # Text can also be a sequence of strings, in which case this method
    # will return a sequence of results for each text.
    result = translate_client.translate(text, target_language=target, model=model)

    print(u"Text: {}".format(result["input"]))
    print(u"Translation: {}".format(result["translatedText"]))
    print(u"Detected source language: {}".format(result["detectedSourceLanguage"]))



translate_text_with_model('zh-cn',"i love you")

输出结果:

Text: i love you
Translation: 我爱你
Detected source language: en

参考:https://cloud.google.com/docs/authentication/getting-started
https://cloud.google.com/translate/docs/setup
参考:https://cloud.google.com/translate/markup

附录:
带词汇表(glossaries)的翻译
google还支持带glossaries的翻译,词汇表是一种定制词典,Cloud Translation API使用该词典来一致地翻译客户的特定于域的术语。 这通常涉及指定如何转换命名实体。

词汇表用例可能涉及:

  • 产品名称:例如,“ Google Home”必须翻译为“ Google Home”。
  • 模棱两可的词:例如,“蝙蝠”一词可以表示一件运动器材或动物。 如果您知道自己正在翻译有关体育的单词,则可能需要使用词汇表向Cloud Translation API提供“蝙蝠”的体育翻译,而不是动物的翻译。
  • 借来的单词:例如,法语中的“ bouillabaisse”翻译为英语中的“ bouillabaisse”。 19世纪,英语是从法语借来的“ bouillabaisse”一词。 缺乏法国文化背景的讲英语的人可能不知道法式海鲜汤是炖鱼。 词汇表可以覆盖翻译,以便法语的“法式海鲜汤”翻译为英语的“炖鱼”。

词汇表中的术语可以是单个标记(单词)或短短语(通常少于五个单词)。 当前,每个项目的词汇表数量上限为1000。

使用词汇表的主要步骤是:

1.创建词汇表文件(比如文本文件,每一行都是“account\账户”这样的形式。
2.使用Cloud Translation API创建词汇表资源
3.指定请求翻译时要使用的词汇表
一个项目可以有多个词汇表。 您可以获得可用词汇表的列表,并且可以删除不再需要的词汇表。

参考:https://cloud.google.com/translate/docs/advanced/glossary#format-glossary

参考:https://cloud.google.com/translate/docs/setup

小疑问:
Q:请问是否需要FQ才能使用google API 翻译?
A:不需要。

七、翻译效果
在对代码进行翻译的时候,对code、a标签内的代码可以保留不翻译。
但是对于blockquote标签内的代码,还是翻译了,所以还是不符合我的要求。
解决方案:将blockquote替换为code。

八、如何在linux上运行
加入以下代码,并将json放到相同目录就可以了。

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'credentials.json'

九、其他问题
(一)Updated on Sep-21
写这文章的时候是3月份,半年过去了,要使用google 翻译的时候,发错它又不能用了。
运行implicit函数的时候,并不报错,不过运行最终的代码报以下错误:

File "C:\Users\Kevin\Anaconda3\lib\site-packages\google\auth\transport\request
s.py", line 189, in __call__
six.raise_from(new_exc, caught_exc)
File "", line 3, in raise_from
google.auth.exceptions.TransportError: HTTPSConnectionPool(host='oauth2.googleap
is.com', port=443): Max retries exceeded with url: /token (Caused by NewConnecti
onError(': Failed to establish a new connection: [WinError 10060] A connection attempt
failed because the connected party did not properly respond after a period of ti
me, or established connection failed because connected host has failed to respon
d'))

有人在这里问:https://pythonrepo.com/repo/googleapis-google-auth-library-python-python-implementing-authentications-schemes,可是看了之后还是没有找到解决方案。

参考:https://www.youtube.com/watch?v=ocUZgSUO-4I,重新操作了一次,还是不行。

在西数服务器上运行,还是不行。

在国外服务器上运行,结果报以下的错误:

google.api_core.exceptions.Forbidden: 403 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: User Rate Limit Exceeded

打开上面的网址,得到:

{
"error": {
"code": 403,
"message": "The request is missing a valid API key.",
"errors": [
{
"message": "The request is missing a valid API key.",
"domain": "global",
"reason": "forbidden"
}
],
"status": "PERMISSION_DENIED"
}
}

然后我进入到gcp console,搜索"translate",然后点那个translate模块,提示我激活我的账户,点"active",然后google 翻译就可以在国外服务器上用了。

可是本地还是不行,报之前同样的错误,应该是富墙的原因。

(二)Sep-19-2022
运行的时候报错:

google.api_core.exceptions.BadRequest: 400 POST https://translation.googleapis.com/language/translate/v2?prettyPrint=false: Required Text

访问报错中出现的网站,同样是显示api key的问题:

然后登陆:https://console.cloud.google.com/apis/credentials?project=stately-furnace-307600
发现我的API key前面有一个感叹号,显示:
This API key is unrestricted. To prevent unauthorized use and quota theft, restrict your key to limit how it can be used.

暧昧帖

本文暂无标签