google API翻譯是收費(fei)(fei)的,但翻譯比較準確,正常google翻譯的收費(fei)(fei)是100萬個字符20美元。我們第一次使(shi)用,當然不想(xiang)就開始(shi)付費(fei)(fei),而是想(xiang)先體驗(yan)一下,好在google也提供了免費(fei)(fei)試(shi)用的功能,會給(gei)新賬號300$的額度。
要使用google API翻譯,整個流程還挺長的。由于google的文檔對新手很不好友,所以在這個過程中我也走了不少彎路,現在總結一下并分享給大家,
其中關鍵的步驟是:
希望讓有(you)需要的人少走點(dian)彎路(lu)。
一、申請google API
(一)進入申請頁面
點擊鏈接進行申請。
(二)申請API
可能是因為google在中國被墻的原因,國家那里找了半天找不到中國的選項,后來干脆用默認選項“美國”。
由(you)于選(xuan)的(de)是美國(guo),所以(yi)信用卡地址那里也(ye)只能填美國(guo)的(de),我隨便填了一(yi)下(xia)紐約(yue)大學的(de)地址:70 Washington Square South ,New York, NY。
300$的額度,90天內用完。
二、新建項目
按google的說法,要使用(yong)Google Cloud提供的服務,您必須創建(jian)一個項目。
一(yi)個項(xiang)(xiang)目(mu)可(ke)以組(zu)織(zhi)您所有(you)的(de)Google Cloud資源。 一(yi)個項(xiang)(xiang)目(mu)由一(yi)組(zu)協作者(zhe),已啟用(yong)的(de)API(和其他資源),監視工具(ju),計費信息以及身份(fen)驗證和訪(fang)問控制(zhi)組(zu)成。 您可(ke)以創建(jian)一(yi)個項(xiang)(xiang)目(mu),也可(ke)以創建(jian)多(duo)個項(xiang)(xiang)目(mu),然后使用(yong)它(ta)們在資源層次結(jie)構中(zhong)組(zu)織(zhi)Google Cloud資源。 創建(jian)項(xiang)(xiang)目(mu)時(shi),請(qing)記下項(xiang)(xiang)目(mu)ID。 您將需(xu)要(yao)此ID來進行API調用(yong)。
建議您為實(shi)驗,測試和生(sheng)產創建單獨(du)的項(xiang)目(mu)。 創建項(xiang)目(mu)后,記錄項(xiang)目(mu)編(bian)號或(huo)ID。 調用Cloud Translation API時,必須提供(gong)項(xiang)目(mu)編(bian)號(或(huo)ID)。
三、啟用記費功能
您必須啟用計費才能使用云翻譯。
如何確認你的項目已經開啟了計費功能呢?
打開你的項目,點擊左邊導航欄的“結算”鏈接,如果看到下面的頁面,就表明你的項目已經開啟了計費的功能。
四、開啟API
(一)生成API密鑰
進(jin)入你的(de)項目里,點擊執行“創建憑據(ju)->生成API密(mi)鑰(yao)”功能,就可以得到你的(de)API密(mi)鑰(yao).
(二)測試API密鑰
填上key進(jin)行測試(shi),測試(shi)代碼如(ru)下:
import requests
import csv
import sys
reload(sys)
sys.setdefaultencoding('utf-8')#python處理字符流改成utf-8形式
def translate_text(target, content):
language_type = ""
url = "//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 //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 //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': '//console.developers.google.com'}], 'status': 'PERMISSION_DENIED'}}
按上面的出錯提示,進入到這個頁面,點擊“啟用”翻譯API.
一些(xie)介紹://cloud.google.com/translate/docs/basic/quickstart?hl=zh_CN
(四)成果展示
再次運行上面的(de)測試(shi)代碼,可以發現翻譯成功了。運行結果如(ru)下:
{'data': {'translations': [{'translatedText': '技術新聞和產品評論', 'detectedSourceLanguage': 'tr'}]}}
技術新聞和產品評論
參考://blog.csdn.net/javajiawei/article/details/90691108?spm=1001.2014.3001.5501
到了上(shang)面(mian)這(zhe)一(yi)步就(jiu)可以(yi)使用了,如果你只是進(jin)行簡單的翻譯,那么(me)到上(shang)一(yi)步就(jiu)已(yi)經大功告成了!
不過(guo)我(wo)還有一個需求,就是(shi)可以實現對html代(dai)(dai)碼的翻(fan)譯,即保(bao)留html代(dai)(dai)碼,但(dan)是(shi)翻(fan)譯代(dai)(dai)碼中的內容。所(suo)以后來又折騰客戶端庫。
五、進行配額管理
這(zhe)一步是可選步驟,可以(yi)不做。
Cloud Translation具有(you)配(pei)額管理系(xi)統(tong),可幫助您和Google管理該(gai)服務的(de)使用(yong)情(qing)況。 默認情(qing)況下,每天可以發送(song)的(de)字符數(shu)沒有(you)限制(zhi)。 如果您有(you)固定(ding)的(de)預(yu)算,建(jian)議您監控日(ri)常使用(yong)情(qing)況,并根(gen)據計(ji)劃支出調整配(pei)額。
六、設立身份驗證
如果您打算使用Cloud Translation API,則(ze)需要(yao)設(she)置身(shen)份(fen)(fen)驗證(zheng)。 任何使用該API的(de)客戶端應(ying)用程(cheng)序都必須經過身(shen)份(fen)(fen)驗證(zheng),并被(bei)授予對所請求資(zi)源的(de)訪問權限。
其(qi)實官方也推薦使用客戶端庫來調用 Cloud Translation,因(yin)為它們可以更輕松地訪(fang)問(wen) API
(一)獲得api json文件
1.點(dian)擊(ji)進入這個頁(ye)面
2.選擇一個項目
3.選擇“create service account”
4.建立賬號
輸入相關的信息,完成賬號的建立。
5.點擊左邊導航欄的“service account”,你會發現剛剛自己建立的賬號已經出現在里面了,點擊這個賬號。
6.建立key
在出現的窗口中,點擊“key”,再點擊“add key-creat new key”
7.在出現的窗口中選擇"json"
點擊“創建(jian)”之后,會(hui)自動將(jiang)一個(ge)json文(wen)件(jian)下載到(dao)你的電(dian)腦上,請保存好這個(ge)json文(wen)件(jian),里面有你的key.
(二)添加系統變量
將上一步下載的json文件保存到你的電腦中的某一個文件夾下面,比如我就將它存在C:\google\這個文件夾下面。
然后添加環境變量。
其中變量名為:GOOGLE_APPLICATION_CREDENTIALS
變量(liang)的值(zhi)就是你(ni)的json文件路徑,比如:"C:\Users\username\Downloads\你(ni)的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)
只(zhi)要運行上面的代碼不報錯,那就(jiu)表示你的google授權成功(gong),以(yi)后可以(yi)通過(guo)from google.cloud import translate_v3beta1 來使用google翻譯了(le)。
示例代碼:
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 //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
參考://cloud.google.com/docs/authentication/getting-started
//cloud.google.com/translate/docs/setup
參考://cloud.google.com/translate/markup
附錄:
帶詞匯表(glossaries)的翻譯
google還支持帶glossaries的翻譯,詞(ci)匯(hui)表是一種定制詞(ci)典,Cloud Translation API使用(yong)該詞(ci)典來一致地翻譯客戶的特定于域的術語。 這(zhe)通常涉及指定如(ru)何轉換命名實體。
詞匯表用例可能(neng)涉及:
詞(ci)匯(hui)表中的(de)術語可以是單(dan)(dan)個標記(單(dan)(dan)詞(ci))或短(duan)短(duan)語(通常少于五個單(dan)(dan)詞(ci))。 當(dang)前,每個項目的(de)詞(ci)匯(hui)表數量上(shang)限為1000。
使(shi)用詞匯表的主要步(bu)驟(zou)是:
1.創建詞匯表文件(比如文本文件,每一行都是“account\賬戶”這樣的形式。
2.使用Cloud Translation API創建詞匯表資源
3.指定請求翻譯時要使用的詞匯表
一個(ge)項(xiang)目(mu)可以(yi)有多個(ge)詞匯表。 您可以(yi)獲得可用詞匯表的列表,并且可以(yi)刪除不再(zai)需(xu)要(yao)的詞匯表。
參考(kao)://cloud.google.com/translate/docs/advanced/glossary#format-glossary
參考(kao)://cloud.google.com/translate/docs/setup
小疑問:
Q:請問是否需要FQ才能使用google API 翻譯?
A:不需要。
七、翻譯效果
在對代碼進行翻譯的時候,對code、a標簽內的代碼可以保留不翻譯。
但是對于blockquote標簽內的代碼,還是翻譯了,所以還是不符合我的要求。
解決方案(an):將blockquote替換為code。
八、如何在linux上運行
加入(ru)以(yi)下代碼,并將json放到(dao)相同目(mu)錄(lu)就可以(yi)了(le)。
| 1 | import os |
| 2 | os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'credentials.json' |
九、其他問題
(一)Updated on Sep-21
寫這文章的時候是3月份,半年過去了,要使用google 翻譯的時候,發錯它又不能用了。
運行implicit函數(shu)的(de)時候,并不(bu)報錯(cuo),不(bu)過運行最終的(de)代碼報以下(xia)錯(cuo)誤:
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'))
有人在這里(li)問://pythonrepo.com/repo/googleapis-google-auth-library-python-python-implementing-authentications-schemes,可是看了之后(hou)還(huan)是沒有找到解決方(fang)案。
參考://www.youtube.com/watch?v=ocUZgSUO-4I,重(zhong)新操作了一次,還是不行(xing)。
在(zai)西數服務(wu)器(qi)上運行,還是(shi)不(bu)行。
在(zai)國(guo)外服務(wu)器(qi)上(shang)運行,結果報(bao)以下(xia)的錯誤:
google.api_core.exceptions.Forbidden: 403 POST //translation.googleapis.com/language/translate/v2?prettyPrint=false: User Rate Limit Exceeded
打開上面的網址,得(de)到(dao):
{
"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,搜(sou)索"translate",然后點那(nei)個(ge)translate模(mo)塊(kuai),提示我激活(huo)我的賬戶(hu),點"active",然后google 翻譯就可以(yi)在國外服務器上用了。
可(ke)是本地還是不行(xing),報(bao)之前同樣的(de)錯誤,應(ying)該是富(fu)墻的(de)原因(yin)。
(二)Sep-19-2022
運行的時候報錯:
google.api_core.exceptions.BadRequest: 400 POST //translation.googleapis.com/language/translate/v2?prettyPrint=false: Required Text
訪問報錯中出現的網站,同樣是顯示api key的問題:
然后登陸://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.