google API翻译是收费的,但翻译比较准确,正常google翻译的收费是100万个字符20美元。我们第一次使用,当然不想就开始付费,而是想先体验一下,好在google也提供了免费试用的功能,会给新账号300$的额度。
要使用google API翻译,整个流程还挺长的。由于google的文档对新手很不好友,所以在这个过程中我也走了不少弯路,现在总结一下并分享给大家,
其中关键的步骤是:
希望让有需要的人少走点弯路。
一、申请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)
(三)启用翻译API报以下错误:
{'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.
一些介绍: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使用该词典来一致地翻译客户的特定于域的术语。 这通常涉及指定如何转换命名实体。
词汇表用例可能涉及:
词汇表中的术语可以是单个标记(单词)或短短语(通常少于五个单词)。 当前,每个项目的词汇表数量上限为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放到相同目录就可以了。
1 | import os |
2 | 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.