2020-03-21 04:11:51 +00:00
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
import random
|
|
|
|
|
import sys
|
|
|
|
|
import time
|
|
|
|
|
import urllib.parse
|
|
|
|
|
|
|
|
|
|
import googletrans
|
|
|
|
|
import requests
|
|
|
|
|
import yaml
|
|
|
|
|
|
|
|
|
|
import typograph_ru
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
translator = googletrans.Translator()
|
|
|
|
|
target_language = os.environ.get('TARGET_LANGUAGE', 'ru')
|
|
|
|
|
|
|
|
|
|
is_yandex = os.environ.get('YANDEX') is not None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def translate(text):
|
|
|
|
|
if target_language == 'en':
|
|
|
|
|
return text
|
|
|
|
|
elif target_language == 'typograph_ru':
|
|
|
|
|
return typograph_ru.typograph(text)
|
|
|
|
|
elif is_yandex:
|
2020-03-21 09:17:06 +00:00
|
|
|
|
text = text.replace('‘', '\'')
|
|
|
|
|
text = text.replace('’', '\'')
|
|
|
|
|
if text.isascii() and not text.isupper():
|
|
|
|
|
text = urllib.parse.quote(text)
|
|
|
|
|
url = f'http://translate.yandex.net/api/v1/tr.json/translate?srv=docs&lang=en-{target_language}&text={text}'
|
|
|
|
|
result = requests.get(url).json()
|
|
|
|
|
if result.get('code') == 200:
|
|
|
|
|
return result['text'][0]
|
|
|
|
|
else:
|
|
|
|
|
print('Failed to translate', str(result), file=sys.stderr)
|
|
|
|
|
sys.exit(1)
|
2020-03-21 04:11:51 +00:00
|
|
|
|
else:
|
2020-03-21 09:17:06 +00:00
|
|
|
|
return text
|
2020-03-21 04:11:51 +00:00
|
|
|
|
else:
|
|
|
|
|
time.sleep(random.random())
|
|
|
|
|
return translator.translate(text, target_language).text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def translate_toc(root):
|
|
|
|
|
if isinstance(root, dict):
|
|
|
|
|
result = []
|
|
|
|
|
for key, value in root.items():
|
|
|
|
|
key = translate(key) if key != 'hidden' and not key.isupper() else key
|
|
|
|
|
result.append((key, translate_toc(value),))
|
|
|
|
|
return dict(result)
|
|
|
|
|
elif isinstance(root, list):
|
|
|
|
|
return [translate_toc(item) for item in root]
|
|
|
|
|
elif isinstance(root, str):
|
|
|
|
|
return root
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
target_language = sys.argv[1]
|
|
|
|
|
is_yandex = True
|
|
|
|
|
result = translate_toc(yaml.full_load(sys.stdin.read())['nav'])
|
|
|
|
|
print(yaml.dump({'nav': result}))
|