zulip/zerver/management/commands/compilemessages.py

61 lines
1.9 KiB
Python

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):
locale_path = "{}/locale".format(settings.STATIC_ROOT)
output_path = "{}/language_options.json".format(locale_path)
po_template = '{}/{}/LC_MESSAGES/django.po'
data = {'languages': []} # type: Dict[str, List[Dict[str, str]]]
lang_name_re = re.compile('"Language-Team: (.*?) \(')
locales = os.listdir(locale_path)
locales.append('en')
locales = list(set(locales))
for locale in locales:
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)
if not os.path.exists(filename):
continue
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:
ujson.dump(data, writer, indent=2)