97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
# Steps to use:
|
|
# 1) Install Python (depends on OS)
|
|
# 2) Install Lokalise API for python:
|
|
# > pip3 install python-lokalise-api --break-system-packages
|
|
# 3) Obtain token here: https://app.lokalise.com/profile#apitokens
|
|
# 4) Create file local.properties (if not exists) and define variables there:
|
|
# > lokalise.project.id=[PROJECT_ID]
|
|
# > lokalise.token=[YOUR_TOKEN]
|
|
# 5) Use script when you need to download translations:
|
|
# > python3 lokalize.py
|
|
# In case you want to filter languages, just add --langs argument with specific values
|
|
# > python3 lokalize.py --langs en,ru
|
|
|
|
import os
|
|
import urllib.request
|
|
import zipfile
|
|
import lokalise
|
|
import configparser
|
|
import argparse
|
|
import sys
|
|
import shutil
|
|
import time
|
|
|
|
config = configparser.ConfigParser()
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument(
|
|
"--langs",
|
|
nargs='?',
|
|
type=str,
|
|
help="--langs en,ru",
|
|
default='',
|
|
)
|
|
|
|
config_file_path = "local.properties"
|
|
section_default = "default"
|
|
project_id_key = "lokalise.project.id"
|
|
token_key = "lokalise.token"
|
|
|
|
directory_prefix = "core/res/src/main/res/values-%LANG_ISO%/"
|
|
|
|
if not os.path.isfile(config_file_path):
|
|
print(f"{config_file_path} not found!")
|
|
else:
|
|
with open(config_file_path) as stream:
|
|
config.read_string(f'[{section_default}]\n' + stream.read())
|
|
api_token = config.get(section_default, token_key, fallback=None)
|
|
project_id = config.get(section_default, project_id_key, fallback=None)
|
|
if project_id is None:
|
|
print(f"Key '{project_id_key}' not found in file {config_file_path}")
|
|
elif api_token is None:
|
|
print(f"Key '{token_key}' not found in file {config_file_path}")
|
|
else:
|
|
print(f"Found project: {project_id}")
|
|
print(f"Found token: {api_token}")
|
|
|
|
folder_path = "."
|
|
file_name = "lokalize.zip"
|
|
|
|
client = lokalise.Client(api_token)
|
|
project = client.project(project_id)
|
|
|
|
print('Found project: ' + project.name)
|
|
|
|
print('Read args...')
|
|
args = parser.parse_args()
|
|
|
|
print("Starting bundling process...")
|
|
response = client.download_files_async(project_id, {
|
|
"format": "xml",
|
|
"original_filenames": True,
|
|
"filter_langs": list(filter(None, args.langs.split(",") if args.langs is not None else "")),
|
|
"directory_prefix": directory_prefix,
|
|
"filter_data": ["translated"]
|
|
})
|
|
|
|
while True:
|
|
process = client.queued_process(project_id, response.process_id)
|
|
print(f"Process status: {process.status}")
|
|
if process.status == "finished":
|
|
break
|
|
elif process.status == "failed":
|
|
raise RuntimeError(f"Export failed: {process.message}")
|
|
time.sleep(5)
|
|
|
|
print("Downloading translation file...")
|
|
bundle_url = process.details["download_url"]
|
|
urllib.request.urlretrieve(bundle_url, file_name)
|
|
|
|
print("Unzipping archive...")
|
|
with zipfile.ZipFile(file_name, 'r') as zip_ref:
|
|
zip_ref.extractall(folder_path)
|
|
|
|
print("Removing archive...")
|
|
os.remove(file_name)
|
|
|
|
print("All done!")
|