多語種翻譯自動化測試

對於以內容為主的軟體來說,本土化和國際化必不可少。有的時候,一個詞語要翻譯成10幾個國家語言。

我負責的一個產品就要翻譯成16國文字。

對於我們這種土鱉來說,能看懂英文就不錯了。

通常的做法是,將詞語,或者句子,給第三方翻譯公司翻譯。然後存入到資料庫,生成介面來調用。每個詞語或者句子有個ID,請求某個語種,就會把對應的語言翻譯傳回來。

那麼問題來了:有些詞語,某個語種翻譯了一些,一些沒有翻譯,用戶體驗很不好。

怎麼把那些漏網之魚撈出來?測試起來很困難,調用介面,把翻譯全打出來,人工去看哪些沒有翻譯。姑且不論翻譯對錯與否。這樣效率很低。

python 有個langid庫,能檢測64種語言。

可以先用pandas將翻譯全弄出來,然後檢測哪些沒有翻譯的。

import sysnimport requestsnimport langidnimport numpy as npnimport pandas as pdnLANGUAGES = [『ar』, 『de』, 『en』, 『es』, 『fr』, 『it』, 『ja-JP』, 『ko-KR』, 『pt-BR』, 『ru』, 『th』, 『tr-TR』, 『zh-cn』, 『zh-HK』, 『zh-TW』]nID = [『699126』, 『699124』, 『669751』, 『647306』, 『697256』, 『647306』]nnurl = 「http://{}.query?q=blurb!{}&c=culturecode={}「nlist_obj = []nclass Translate():n def get_translated_string(self, blurb_id, language_code):n response = requests.post(url.format(host, blurb_id, language_code))n value = (response.json())[0][『translation』].strip()n return valuendef check_language(self, target, language):n lineTuple = langid.classify(target) # 調用langid來對該行進行語言檢測n if 「-「 in language:n language = language.split(「-「)[0]n if lineTuple[0] != language:n return Falsen else:n return Truen

結果如下:

檢測下來,效果還不錯。

谷歌翻譯也日漸智能,但目前還是收費狀態。

本文就嘗試用免費的百度API, 來看看翻譯效果。

首先要去申請一個translate api key.

然後敲代碼

import requestsnimport hashlibnimport randomnimport jsonnappid = 『your id』nsecretKey = 『your key』nmyurl = 『/api/trans/vip/translate』nhost = 『http://api.fanyi.baidu.com『nfromLang = 『auto』ntoLang = 『en』nsalt = random.randint(32768, 65536)ndef md5hex(word):n sign = appid + word + str(salt) + secretKeyn m1 = hashlib.md5()n return m1.hexdigest()ndef trans(word, sign, fr, to):n word_num = len(word)n if word_num > 1600:n print(「over 1600」)n else:n url = myurl + 『?appid=』 + appid + 『&q=』 + word + 『&from=』 + fr + 『&to=』 + to + 『&salt=』 + str(n salt) + 『&sign=』 + signntry:n result = requests.post(host + url)n if result.status_code == 200:n trans_data = json.loads(result.text)n trans_data = trans_data[trans_result][0][dst]n print(trans_data)n else:n print("please check you url")nexcept:n print("error")nif name == 『main『:n info = input(「please input you word!」)n md5_info = md5hex(info)n trans(info, md5_info,fromLang,toLang)n

支持多種語言。Snake嘗試了下自己能看懂的:簡體,繁體,粵語,文言文,英文的測試。

詩句也翻譯出來了,看起來似乎還可以。

最新的熱詞,跟搜索結果一樣,應該是用的同一套吧。

這樣一個一個敲太累,準備幾個詞,一次性翻譯出多種語言來

語種:zh 中文 en 英語 jp 日語 kor 韓語 fra 法語 spa 西班牙語 th 泰語 ara 阿拉伯語 ru 俄語 pt 葡萄牙語 de 德語 it 義大利語

語言:早上好,歡迎,謝謝,huge blessings, 和諧社會,且行且珍惜,foodie, clown, 白日依山盡

加幾行代碼

languages = [『zh』, 『en』, 『jp』, 『kor』, 『fra』, 『spa』, 『th』, 『ara』, 『ru』, 『pt』, 『de』, 『it』]n words = [『早上好』, 『歡迎』, 『謝謝』, 『huge blessings』, 『和諧社會』, 『且行且珍惜』, 『foodie』, 『clown』, 『白日依山盡』]n translated = (trans(x, md5hex(x), fromLang, y) for x in words for y in languages)n translated_list = np.array(list(translated)).reshape(len(words), len(languages))n translated_dataframe = pd.DataFrame(translated_list,columns=languages)n writer = pd.ExcelWriter(『translated.xlsx』)n translated_dataframe.to_excel(writer,』translate』)n writer.save()n

結果如下

看起來似乎效果還可以。

嘗試過翻譯故事,典故。字數越多,文化背景啥因素加入。翻譯出來效果大打折扣。短句子還湊合。

如國民老公的這句:「你的想法和評論改變不了我的現狀,所以,隨便你說什麼,我也無需證明給你看。」

翻譯出來的效果就是:「Your thoughts and comments don』t change my situation, so whatever you say, I don』t have to prove it to you.」

作者簡介:

Snake, 人稱安蜀黍,專職軟體測試10幾年,測試界的老司機。

更多精彩,請關注微信公眾號:python愛好部落


推薦閱讀:

「偷月餅」的阿里「黑客」員工
想自學MATLAB,應該用什麼方法?
樂趣十足地用playgrounds學編程B--第5課.開關寶石
樂趣十足地用playgrounds學編程A--33.富饒之地

TAG:Python | 自动化测试 | 自学编程 |