135 lines
3.9 KiB
Python
Executable File
135 lines
3.9 KiB
Python
Executable File
#!/usr/bin/env python2.7
|
|
|
|
"""
|
|
We want python 2.7 again...
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
|
|
"""
|
|
from googletrans import Translator # Use the free webhook
|
|
def run_translate(messages, source_language, target_language):
|
|
translator = Translator()
|
|
_translations = translator.translate(messages, src=source_language, dest=target_language)
|
|
result = []
|
|
for translation in _translations:
|
|
result.append({
|
|
"source": translation.origin,
|
|
"translated": translation.text
|
|
})
|
|
return result
|
|
"""
|
|
|
|
|
|
from google.cloud import translate # Use googles could solution
|
|
def run_translate(messages, source_language, target_language):
|
|
translate_client = translate.Client()
|
|
|
|
# The text to translate
|
|
text = u'Hello, world!'
|
|
# The target language
|
|
|
|
result = []
|
|
limit = 16
|
|
for chunk in [messages[i:i + limit] for i in xrange(0, len(messages), limit)]:
|
|
# Translates some text into Russian
|
|
print("Requesting {} translations".format(len(chunk)))
|
|
translations = translate_client.translate(chunk, target_language=target_language)
|
|
|
|
for translation in translations:
|
|
result.append({
|
|
"source": translation["input"],
|
|
"translated": translation["translatedText"]
|
|
})
|
|
return result
|
|
|
|
|
|
def translate_messages(source, destination, target_language):
|
|
with open(source) as f:
|
|
data = json.load(f)
|
|
|
|
result = {
|
|
"translations": [],
|
|
"info": None
|
|
}
|
|
try:
|
|
with open(destination) as f:
|
|
result = json.load(f)
|
|
print("loaded old result")
|
|
except:
|
|
pass
|
|
|
|
translations = result["translations"]
|
|
if translations is None:
|
|
print("Using new translation map")
|
|
translations = []
|
|
else:
|
|
print("Loaded {} old translations".format(len(translations)))
|
|
|
|
messages = []
|
|
for message in data:
|
|
try:
|
|
messages.index(message["message"])
|
|
except:
|
|
try:
|
|
found = False
|
|
for entry in translations:
|
|
if entry["key"]["message"] == message["message"]:
|
|
found = True
|
|
break
|
|
if not found:
|
|
raise Exception('add message for translate')
|
|
except:
|
|
messages.append(message["message"])
|
|
|
|
print("Translating {} messages".format(len(messages)))
|
|
if len(messages) != 0:
|
|
_translations = run_translate(messages, 'en', target_language)
|
|
print("Messages translated, generating target file")
|
|
|
|
for translation in _translations:
|
|
translations.append({
|
|
"key": {
|
|
"message": translation["source"]
|
|
},
|
|
"translated": translation["translated"],
|
|
"flags": [
|
|
"google-translate"
|
|
]
|
|
})
|
|
|
|
print("Writing target file")
|
|
result["translations"] = translations
|
|
if result["info"] is None:
|
|
result["info"] = {
|
|
"contributors": [
|
|
{
|
|
"name": "Google Translate, via script by Markus Hadenfeldt",
|
|
"email": "gtr.i18n.client@teaspeak.de"
|
|
}
|
|
],
|
|
"name": "Auto translated messages for language " + target_language
|
|
}
|
|
|
|
with open(destination, 'w') as f:
|
|
f.write(json.dumps(result, indent=2))
|
|
print("Done")
|
|
|
|
|
|
def main(target_language):
|
|
target_file = "i18n/{}_google_translate.translation".format(target_language)
|
|
|
|
translate_messages("generated/messages_script.json", target_file, target_language)
|
|
translate_messages("generated/messages_template.json", target_file, target_language)
|
|
pass
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 2:
|
|
print("Invalid argument count!")
|
|
print("Usage: ./generate_i18n_gtranslate.py <language>")
|
|
exit(1)
|
|
|
|
main(sys.argv[1])
|