2016-06-23 11:32:45 +02:00
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
import os
|
|
|
|
import re
|
|
|
|
import ujson
|
|
|
|
from typing import Any, Dict, List
|
|
|
|
|
|
|
|
from django.core.management.commands import compilemessages
|
|
|
|
from django.conf import settings
|
|
|
|
|
|
|
|
|
|
|
|
class Command(compilemessages.Command):
|
|
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
super(Command, self).handle(*args, **options)
|
|
|
|
self.extract_language_options()
|
|
|
|
|
|
|
|
def extract_language_options(self):
|
2016-07-14 12:00:26 +02:00
|
|
|
locale_path = "{}/locale".format(settings.STATIC_ROOT)
|
|
|
|
output_path = "{}/language_options.json".format(locale_path)
|
2016-06-23 11:32:45 +02:00
|
|
|
|
|
|
|
po_template = '{}/{}/LC_MESSAGES/django.po'
|
|
|
|
data = {'languages': []} # type: Dict[str, List[Dict[str, str]]]
|
|
|
|
lang_name_re = re.compile('"Language-Team: (.*?) \(')
|
|
|
|
|
2016-07-05 09:25:23 +02:00
|
|
|
locales = os.listdir(locale_path)
|
|
|
|
locales.append('en')
|
|
|
|
locales = list(set(locales))
|
|
|
|
|
|
|
|
for locale in locales:
|
2016-06-23 11:32:45 +02:00
|
|
|
info = {}
|
|
|
|
if locale == 'en':
|
|
|
|
data['languages'].append({'code': 'en', 'name': 'English'})
|
|
|
|
continue
|
|
|
|
if locale == 'zh_CN':
|
|
|
|
name = 'Simplified Chinese'
|
|
|
|
else:
|
|
|
|
filename = po_template.format(locale_path, locale)
|
2016-07-14 12:00:26 +02:00
|
|
|
if not os.path.exists(filename):
|
|
|
|
continue
|
|
|
|
|
2016-06-23 11:32:45 +02:00
|
|
|
with open(filename, 'r') as reader:
|
|
|
|
result = lang_name_re.search(reader.read())
|
|
|
|
if result:
|
|
|
|
try:
|
|
|
|
name = result.group(1)
|
|
|
|
except Exception:
|
|
|
|
print("Problem in parsing {}".format(filename))
|
|
|
|
raise
|
|
|
|
else:
|
|
|
|
raise Exception("Unknown language")
|
|
|
|
|
|
|
|
info['name'] = name
|
|
|
|
info['code'] = locale
|
|
|
|
|
|
|
|
if info:
|
|
|
|
data['languages'].append(info)
|
|
|
|
|
|
|
|
with open(output_path, 'w') as writer:
|
2016-07-14 12:00:26 +02:00
|
|
|
ujson.dump(data, writer, indent=2)
|