OpenDroneMap-WebODM/app/management/commands/translate.py

54 wiersze
2.7 KiB
Python

import os
from django.core.management.base import BaseCommand
from django.core.management import call_command
from app.scripts.extract_odm_strings import extract_odm_strings
from app.scripts.extract_plugin_manifest_strings import extract_plugin_manifest_strings
from app.scripts.extract_potree_strings import extract_potree_strings
root = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", ".."))
class Command(BaseCommand):
requires_system_checks = []
def add_arguments(self, parser):
parser.add_argument("action", type=str, choices=['extract', 'build'])
parser.add_argument("--safe", action='store_true', required=False, help="Skip invalid languages")
super(Command, self).add_arguments(parser)
def handle(self, **options):
with open(os.path.join(root, "LOCALES")) as f:
locales = f.read().strip().split(" ")
if options.get('action') == 'extract':
print("Extracting .po files from Django/React")
locale_params = ["--locale=%s" % l for l in locales]
locale_dir = os.path.join(root, "locale")
if not os.path.exists(locale_dir):
os.mkdir(locale_dir)
extract_potree_strings(
os.path.join(root, "app", "static", "app", "js", "vendor", "potree", "build", "potree", "resources", "lang", "en", "translation.json"),
os.path.join(root, "app", "static", "app", "js", "translations", "potree_autogenerated.js")
)
extract_odm_strings(
"https://raw.githubusercontent.com/OpenDroneMap/ODM/master/opendm/config.py",
os.path.join(root, "app", "static", "app", "js", "translations", "odm_autogenerated.js")
)
extract_plugin_manifest_strings(
os.path.join(root, "coreplugins"),
os.path.join(root, "app", "translations", "plugin_manifest_autogenerated.py")
)
call_command('makemessages', '--keep-pot', *locale_params, '--ignore=build', '--ignore=app/templates/app/registration/*')
call_command('makemessages_djangojs', '--keep-pot', *locale_params, '-d=djangojs', '--extension=jsx', '--extension=js', '--ignore=build', '--ignore=app/static/app/js/vendor', '--ignore=app/static/app/bundles', '--ignore=node_modules', '--language=Python')
elif options.get('action') == 'build':
if options.get('safe'):
for l in locales:
print("Building %s .po files into .mo" % l)
call_command('compilemessages', '--locale=%s' % l)
else:
print("Building .po files into .mo")
call_command('compilemessages')