class TranslatePO(object): def __init__(self, dest: str = 'en', src: str = 'auto', proxy_size=20, th_size=0): self.dest = dest self.src = src self.proxies = Proxies(proxy_len=proxy_size) self.proxies.verify_proxies() self.loading_index = 0 self.loading_len = 0 self.th_size = th_size def __progress(self): self.loading_index += 1 progress = self.loading_index * 100 // self.loading_len print('Loading: %s%%%s' % (progress, " " * 10), end='\r') def __translate(self, line): self.__progress() curr_proxy = self.proxies.done_proxies.get() tr = Translator(proxies=curr_proxy, timeout=10) res = None try: res = tr.translate(line.msgid, dest=self.dest, src=self.src) except Exception: curr_proxy = self.proxies.done_proxies.get() tr = Translator(proxies=curr_proxy, timeout=10) res = tr.translate(line.msgid, dest=self.dest, src=self.src) finally: self.proxies.done_proxies.put(curr_proxy) line.msgstr = res.text if res else '' def po_translate(self, file: str, out='res.po'): po_file = pofile(file) self.loading_len = len(po_file) if self.th_size: th = ThreadPool(self.th_size, self.__translate, data=po_file) th.start() th.join() else: for el in po_file: self.__translate(el) print('\nFINISH') with open(out, 'w') as out_file: for po_line in po_file: out_file.write('%s\n' % str(po_line))