From 630cb3142f0f4c3857b9c6ffeb8099fe04dc0bae Mon Sep 17 00:00:00 2001 From: Alexandre Vicenzi Date: Sat, 19 Sep 2020 22:04:37 +0200 Subject: [PATCH] Add transifex helper --- transifex.py | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 transifex.py diff --git a/transifex.py b/transifex.py new file mode 100644 index 0000000..df6d10f --- /dev/null +++ b/transifex.py @@ -0,0 +1,113 @@ +""" +transifex.py - Tool to manage Transifex translations + + u, up, update Download all translations from Transifex + l, list List all translations available on Transifex +""" +import os +import sys + +import requests + +API_URL = "https://www.transifex.com/api/2" +API_KEY = os.getenv("TRANSIFEX_API_KEY") +PROJECT_SLUG = "flex-pelican" +RESOURCE_SLUG = "messagespot" + + +def get_languages(): + url = "{api_url}/project/{project_slug}/languages/".format( + **{"api_url": API_URL, "project_slug": PROJECT_SLUG,} + ) + + req = requests.get(url, auth=("api", API_KEY)) + req.raise_for_status() + languages = req.json() + + return sorted([lang["language_code"] for lang in languages]) + + +def list_languages(): + languages = get_languages() + + print("LANG LOCAL") + + for lang in languages: + filename1 = os.path.join(".", lang, "LC_MESSAGES", "messages.po") + filename2 = os.path.join( + ".", "translations", lang, "LC_MESSAGES", "messages.po" + ) + + if os.path.exists(filename1) or os.path.exists(filename2): + print("{0} YES".format(lang.ljust(5))) + else: + print("{0} NO".format(lang.ljust(5))) + + print("\nTotal: {}".format(len(languages))) + + +def download(path): + languages = get_languages() + + for lang in languages: + print("Downloading {}...".format(lang)) + + url = "{api_url}/project/{project_slug}/resource/{resource_slug}/translation/{lang_code}/".format( + **{ + "api_url": API_URL, + "project_slug": PROJECT_SLUG, + "resource_slug": RESOURCE_SLUG, + "lang_code": lang, + } + ) + + req = requests.get(url, auth=("api", API_KEY)) + req.raise_for_status() + data = req.json() + po_content = data["content"] + + filepath = os.path.join(path, lang, "LC_MESSAGES") + os.makedirs(filepath, exist_ok=True) + + filename = os.path.join(path, lang, "LC_MESSAGES", "messages.po") + + with open(filename, "w") as f: + f.write(po_content) + + print("{} updated".format(lang)) + + +def usage(): + print(__doc__[1:]) + + +def _pop(l, default=None): + try: + return l.pop(0) + except IndexError: + return default + + +def run(): + args = sys.argv[1:] + + cmd = _pop(args, "help") + + if cmd in ["u", "up", "update"]: + path = _pop(args) + + if path and not args: + download(path) + else: + usage() + elif cmd in ["l", "list"]: + if not args: + list_languages() + else: + usage() + else: + usage() + + +if __name__ == "__main__": + run()