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