python3 實現對代碼文件中注釋的翻譯


心血來潮,昨天看見群里討論一段圖片轉pdf的代碼,直接拿過來發現不能用,原來是因為代碼中傳的文件對象不對,源碼中說傳遞的是一個文件路徑或一個文件對象。他傳的是一個文件名,很是尷尬。

想了想,主要原因還是因為很多人不看源碼,看了源碼經常因為大段的注釋英文看不懂,很是尷尬。

然后想了想,是否可以寫一個翻譯功能對源碼進行翻譯。功能實現,代碼如下:

翻譯中文的代碼(使用有道翻譯= =):

 1     def fanyi_youdao(self,content):
 2             url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
 3             data = {}
 4             data['i'] = content
 5             data['to'] = 'AUTO'
 6             data['smartresult'] = 'dict'
 7             data['client'] = 'fanyideskweb'
 8             data['salt'] = '1517200217152'
 9             data['sign'] = 'fc8a26607798294e102f7b4e60cc2686'
10             data['doctype'] = 'json'
11             data['version'] = '2.1'
12             data['keyfrom'] = 'fanyi.web'
13             data['action'] = 'FY_BY_CLICKBUTTION'
14             data['typoResult'] = 'true'
15             data = urllib.parse.urlencode(data).encode('utf-8')
16             req = urllib.request.Request(url, data)
17             req.add_header('User-Agent',
18                            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36')
19             response = urllib.request.urlopen(req)
20             html = response.read().decode('utf-8')
21 
22             target = json.loads(html)
23             sumString = ''
24             for i in target['translateResult']:
25                     for j in i:
26                         if(j['tgt']!=None):
27                                 sumString+=j['tgt']+'\n'
28             return sumString

最后有個小坑,經過json.loads轉換后需要查看一下返回過來的值,因為target中翻譯內容返回過來的list或dict不同,需要根據實際情況改變,其他的都是request的簡單應用。

下面是替換翻譯並復制出一個文件:

 1     def del_zs(self):
 2         with open(r"G:\re.py", "r") as file:
 3             file_read = file.read()
 4             en_content = re.findall('""".*?"""', file_read, re.S)
 5             new_file_read = file_read
 6             for i in en_content:
 7                 with open(r"G:\re_cn1.py","w+",encoding='UTF-8') as new_file:
 8                     new_file_read = new_file_read.replace(i, '"""\n' + self.fanyi_youdao(i.replace('\n', '')).strip().strip("“”") + '\n"""')
 9                     new_file.write(new_file_read)
10             return en_content

這里是用到了python3中的re模塊,思路就是使用正則匹配被"""夾着的內容(也就是注釋),然后翻譯內容(因為re匹配過來的內容是一個list所以就直接用for循環這個list)然后利用strip對中文翻譯過來的引號進行刪除,再加上英文的三引號。然后將翻譯過來的內容利用list進行逐個replace,就可以實現了。

優化:

  使用后發現有道翻譯是真的不好用啊,經過百度發現竟然還有google翻譯的第三方庫,直接translate就可以了,補上代碼:

注意要----------pip install googletrans

1     def fanyi_google(self,content):
2         # 使用方法
3         translator = Translator(service_urls=['translate.google.cn'])
4         source = content
5         text = translator.translate(source, src='en', dest='zh-cn').text
6         return text

翻譯后的結果圖片如下:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM