Skip to content

Commit

Permalink
Optimize and Fix Translate.
Browse files Browse the repository at this point in the history
  • Loading branch information
HsOjo committed Aug 4, 2019
1 parent 466c60a commit fecc92a
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 30 deletions.
9 changes: 9 additions & 0 deletions build.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from res.const import Const
from res.language import load_language, LANGUAGES
from res.language.translate_language import TranslateLanguage
from tools.translate import *

datas = {}

Expand All @@ -30,6 +31,14 @@ def site_package_path():
for lang_type in LANGUAGES.values():
if issubclass(lang_type, TranslateLanguage):
lang = lang_type()
if not lang._translated:
if '--translate-baidu' in sys.argv:
ot = baidu_translate()
else:
ot = google_translate()
common.log('Build', 'Translate', 'Using %s' % ot.__class__.__name__)
lang.online_translate(ot)
lang.save_current_translate()
add_data(lang._data_path, './res/language/translate')

# reset dist directory.
Expand Down
2 changes: 1 addition & 1 deletion res/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ class Const:
github_page = 'https://github.com/HsOjo/SleeperX'
releases_url = 'https://github.com/HsOjo/SleeperX/releases'
app_name = 'SleeperX'
version = '1.5.0'
version = '1.5.1'
pwd_hider = '[password]'
1 change: 1 addition & 0 deletions res/language/chinese_t.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def translate(text):
if isinstance(v, str):
setattr(self, k, translate(v))
elif isinstance(v, dict):
v = v.copy()
for kk, vv in v.items():
v[kk] = translate(vv)
setattr(self, k, v)
4 changes: 3 additions & 1 deletion res/language/japanese.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ class Japanese(TranslateLanguage):
_translate_from = 'cn'
_translate_to = 'jp'
_replace_words = {
'%': '%'
'%': '%',
':%': ': %',
'%1 s': '%s',
}

l_this = '日本語'
4 changes: 3 additions & 1 deletion res/language/korean.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ class Korean(TranslateLanguage):
_translate_from = 'cn'
_translate_to = 'ko'
_replace_words = {
'%': '%'
'% ': '%',
':%': ': %',
'%1 s': '%s',
}

l_this = '한국어'
24 changes: 12 additions & 12 deletions res/language/translate_language.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,35 @@ class TranslateLanguage(English):
def __init__(self):
self._data_path = '%s/res/language/translate/%s.json' % (
common.get_runtime_dir(), self._resource_name[self._resource_name.rfind('.') + 1:])
self._translated = self.load_local_translate()

translate = True
def load_local_translate(self):
if os.path.exists(self._data_path):
try:
with open(self._data_path, 'r') as io:
language = json.load(io)
common.dict_to_object(language, self, False)
translate = False
return True
except:
pass

if translate:
self.online_translate()
language = common.object_to_dict(self)
with open(self._data_path, 'w') as io:
json.dump(language, io, ensure_ascii=False, indent=4)
return False

def online_translate(self):
def save_current_translate(self):
language = common.object_to_dict(self)
with open(self._data_path, 'w') as io:
json.dump(language, io, ensure_ascii=False, indent=4)

def online_translate(self, ot):
def replace(text):
for i, c in self._replace_words.items():
text = text.replace(i, c)
return text

from tools.translate import google_translate
gt = google_translate()

def translate(text):
_text = text
text = replace(text)
text = gt.translate(text, self._translate_from, self._translate_to)
text = ot.translate(text, self._translate_from, self._translate_to)
text = replace(text)
common.log(self.online_translate, 'Translate', '\n%s\n%s' % (_text, text))
return text
Expand All @@ -55,6 +54,7 @@ def translate(text):
if isinstance(v, str):
setattr(self, k, translate(v))
elif isinstance(v, dict):
v = v.copy()
for kk, vv in v.items():
v[kk] = translate(vv)
setattr(self, k, v)
28 changes: 17 additions & 11 deletions tools/translate/api/baidu_translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class BaiduTranslate:
lang = {
'cn': 'zh',
'jp': 'jp',
'kor': 'ko',
'ko': 'kor',
}

def __init__(self, appid, key):
Expand All @@ -18,6 +18,9 @@ def __init__(self, appid, key):
self.buffer = {}

def _translate(self, content, lang_from, lang_to):
if content.strip() == '':
return content

url = 'http://fanyi-api.baidu.com/api/trans/vip/translate'
salt = 0
sign = md5((self.appid + content + str(salt) + self.key).encode('utf-8')).hexdigest()
Expand Down Expand Up @@ -53,17 +56,20 @@ def translate(self, content, lang_from='auto', lang_to='zh', buffer=True):
if res is not None:
return res

lines = content.split('\n')
ret = ''
line = content.replace('\n', ' ')
while True:
try:
if ret != '':
ret += '\n'
ret += self._translate(line, lang_from, lang_to)
break
except:
print_exc()
sleep(3)

for line in lines:
while True:
try:
t = self._translate(line, lang_from, lang_to)
if ret != '':
ret += '\n'
ret += t
break
except:
print_exc()
time.sleep(1)

if buffer:
if self.buffer.get(lang_from) is None:
Expand Down
16 changes: 12 additions & 4 deletions tools/translate/api/google_translate.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ def __init__(self):
self.buffer = {}

def _translate(self, content, lang_from, lang_to):
if content.strip() == '':
return content

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
}
Expand Down Expand Up @@ -49,20 +52,25 @@ def _translate(self, content, lang_from, lang_to):
}
''' + '("%s","%s")' % (content.replace('\n', '\\n').replace('"', '\\"'), tkk))

param = {
params = {
'client': 'webapp',
'sl': lang_from,
'tl': lang_to,
'hl': lang_to,
'q': content,
'tk': tk,
'otf': 2,
'ssel': 0,
'tsel': 0,
'kc': 1,
}

result = None
for i in range(10):
for i in range(5):
try:
resp = session.get(
'https://translate.google.cn/translate_a/single?client=t&dt=bd&dt=rm&dt=ss&dt=t&dt=at&ie=UTF-8&oe=UTF-8',
params=param, headers=headers, timeout=10)
'https://translate.google.cn/translate_a/single?dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8',
params=params, headers=headers, timeout=10)
result = resp.json()[0][0][0]
break
except:
Expand Down

0 comments on commit fecc92a

Please sign in to comment.