summaryrefslogtreecommitdiff
path: root/web/updatelang.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/updatelang.py')
-rwxr-xr-xweb/updatelang.py190
1 files changed, 190 insertions, 0 deletions
diff --git a/web/updatelang.py b/web/updatelang.py
new file mode 100755
index 0000000..2eba12c
--- /dev/null
+++ b/web/updatelang.py
@@ -0,0 +1,190 @@
+#! /usr/bin/env python3
+# -*- coding: utf8 -*-
+#
+# Copyright (C) 2018~2020 TMW-2
+# Author: Jesusalva
+# Note: This will "force" completion to 100%. Use review system!
+
+import copy, datetime
+import polib, yaml
+
+defaultLang = "en"
+rootPath = "../../site/i18n/"
+
+langs=[]
+files={}
+originals={}
+tm={defaultLang: ["","\n"]}
+
+# Search for array[?]==search in an array of dicts
+# Returns the dictionary, or returns "ERROR"
+def dl_search(array, search):
+ for key in array.keys():
+ if array[key] == search:
+ return key
+ raise Exception("Key not found")
+
+# For headers
+def currentdate():
+ dt=datetime.datetime.now()
+
+ day=dt.timetuple()[2]
+ month=dt.timetuple()[1]
+ year=dt.timetuple()[0]
+
+ hour=dt.timetuple()[3]
+ minute=dt.timetuple()[4]
+ #second=5
+ #weekday=6
+ #yearday=7
+
+ return "%04d-%02d-%02d %02d:%02d-0300" % (year, month, day, hour, minute)
+
+
+def init():
+ global defaultLang, rootPath, langs, files, originals, tm
+ # Populate langs
+ o=open("langs.txt", "r")
+ for i in o:
+ langs.append(i.replace('\n',''))
+ o.close()
+
+ # Create the original file
+ f=open(rootPath+defaultLang+".yml", "r")
+ originals=yaml.load(f, Loader=yaml.FullLoader) # Dictionary
+ f.close()
+
+ # We don't care with metadata
+ del originals["language_meta"]
+
+ # Create each language's template
+ for i in langs:
+ files[str(i)]=copy.copy(originals)
+ tm[str(i)]=["","\n"]
+
+ """
+ # Do the reading for each language
+ for i in langs:
+ f=open(rootpath+i+".yml", "r")
+ files[str(i)]=yaml.load(f, Loader=yaml.FullLoader) # Dictionary
+ f.close()
+ """
+
+# [OK] Returns name from language code
+def lgname(lg):
+ if lg == "en":
+ return "English"
+ elif lg == "pt-BR":
+ return "Português (Brasil)"
+ elif lg == "de":
+ return "Deutsch"
+ elif lg == "fr":
+ return "François"
+ elif lg == "es":
+ return "Español"
+ elif lg == "ru":
+ return "Русский"
+ else:
+ return "Unknown %s" % lg
+
+# [OK] Entry
+def poentry(org, ttl, comments):
+ return polib.POEntry(msgid=org, msgstr=ttl, comment=comments)
+
+# Creates/Loads stuff
+def generatePoFiles():
+ global tm
+ context=copy.copy(langs)
+ context.append('en')
+ for lg in context:
+ print("Updating po file for "+lg)
+ po=polib.POFile()
+ po.metadata = {
+ 'Project-Id-Version': '1.0',
+ 'Report-Msgid-Bugs-To': 'dev@tmw2.org',
+ 'POT-Creation-Date': currentdate(),
+ 'PO-Revision-Date': currentdate(),
+ 'Last-Translator': 'TMW2 Team <dev@tmw2.org>',
+ 'MIME-Version': '1.0',
+ 'Content-Type': 'text/plain; charset=utf-8',
+ 'Content-Transfer-Encoding': '8bit',
+ }
+
+ for key, speech in originals.items():
+ # Translation Memory (no duplicates)
+ if speech in tm[lg]:
+ continue
+ tm[lg].append(speech)
+
+ # Add to po file
+ if lg == "en":
+ po.append(poentry(speech, "", key))
+ else:
+ po.append(poentry(speech, files[lg][key], key))
+
+ po.save("po/%s.po" % lg)
+ context.remove('en')
+
+
+
+
+
+# [OK] Reads Po Files
+def readPoFile(lg):
+ try:
+ po=polib.pofile("po/"+lg+".po")
+ except:
+ a=open("po/"+lg+".po", "w")
+ a.close()
+ print("%s.po does not exist, not reading" % lg)
+ return
+
+ print("%s Progress: %d%%" % (lgname(lg), po.percent_translated()))
+
+ for entry in po:
+ #print("%s = %s" % (entry.msgid, entry.msgstr))
+
+ try:
+ if entry.msgstr != "":
+ dest=dl_search(files[lg], entry.msgid)
+ #print("[+] %s" % dest)
+ files[lg][dest]=entry.msgstr
+ else:
+ dest=dl_search(files[lg], entry.msgid)
+ #print("%s.%s IS EMPTY" % (lg, dest))
+ try:
+ files[lg][dest]=originals[dest]
+ except:
+ print("%s - failed to obtain originals" % entry.msgid)
+ except:
+ print("%s - string was removed" % entry.msgstr)
+
+# [OK] Save the new YML file
+def writeLocal(lg):
+ f=open(rootPath+lg+".yml", 'w')
+ f.write("# THIS FILE WAS GENERATED AUTOMATICALLY\n#EDITING IT WILL HAVE NO EFFECT\n\n")
+ files[lg]["language_meta"]={"code": lg, "name": lgname(lg)}
+ yaml.dump(files[lg], f)
+ f.close()
+
+
+
+
+
+
+
+
+
+
+
+# Mainframe: setup
+init()
+
+# Save translations to their YML files
+for lg in langs:
+ readPoFile(lg)
+ writeLocal(lg)
+
+# Mainframe: handle PO files
+generatePoFiles()
+