Add transifex helper
This commit is contained in:
parent
ca51e4c544
commit
630cb3142f
1 changed files with 113 additions and 0 deletions
113
transifex.py
Normal file
113
transifex.py
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
"""
|
||||||
|
transifex.py - Tool to manage Transifex translations
|
||||||
|
|
||||||
|
u, up, update <DIR> 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()
|
Loading…
Reference in a new issue