From 650a09400ddd0d663b8cdefcc992982f6135d19f Mon Sep 17 00:00:00 2001 From: Jannis Portmann Date: Wed, 17 May 2023 12:44:36 +0200 Subject: [PATCH] Add command to get locales --- .../management/commands/getlocales.py | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pflaenzli/pflaenzli/management/commands/getlocales.py diff --git a/pflaenzli/pflaenzli/management/commands/getlocales.py b/pflaenzli/pflaenzli/management/commands/getlocales.py new file mode 100644 index 0000000..5c0fc93 --- /dev/null +++ b/pflaenzli/pflaenzli/management/commands/getlocales.py @@ -0,0 +1,52 @@ +import os +import requests + +from django.core.management.base import BaseCommand +from django.utils.translation import trans_real +from django.apps import apps +from pflaenzli_django.settings import LOCO_API_KEY + +API_URL = ' https://localise.biz/api/export/locale' + + +class Command(BaseCommand): + help = 'Fetch translations from Loco (Localise.biz) and write them to message files' + + def handle(self, *args, **options): + errors = 0 + + if LOCO_API_KEY is None or LOCO_API_KEY == '': + self.stdout.write(self.style.ERROR('An API key is required')) + return + + app_config = apps.get_app_config('pflaenzli') + app_path = app_config.path + + for locale in trans_real.get_languages(): + url = f'{API_URL}/{locale}.po' + self.stdout.write(f'Getting translations for locale {self.style.SUCCESS(locale)}') + response = requests.get(url, auth=(LOCO_API_KEY, '')) + + if response.status_code == 200: + destination = f'{app_path}/locale/{locale}/LC_MESSAGES/django.po' + self.stdout.write(f'Saving to {destination}') + + os.makedirs(os.path.dirname(destination), exist_ok=True) + + with open(destination, 'wb') as f: + f.write(response.content) + + self.stdout.write(self.style.SUCCESS( + f'Locale {locale} successfully saved to {destination}\n')) + + else: + self.stdout.write(self.style.ERROR( + f'There was an error processing the request to {url}: {response.status_code}\n')) + errors += 1 + + if errors == len(trans_real.get_languages()): + self.stdout.write(self.style.ERROR('No locales could be downloaded.')) + elif errors > 1: + self.stdout.write(self.style.WARNING('There were errors getting some locales.')) + else: + self.stdout.write(self.style.SUCCESS('All translations fetched and written to message files.'))