mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 04:23:46 +00:00
i18n: Extract language options from tracked locales.
Now we use 'git ls-files' to get the list of locales that we actually track. Previously we were using os.listdir to get the contents of the static/locale directory. This could also return locales which were present in the directory but are not supported by us, e.g. zh_CN.
This commit is contained in:
@@ -3,6 +3,7 @@ import os
|
|||||||
import re
|
import re
|
||||||
import ujson
|
import ujson
|
||||||
|
|
||||||
|
from subprocess import check_output, CalledProcessError
|
||||||
from typing import Any, Dict, List, Text
|
from typing import Any, Dict, List, Text
|
||||||
|
|
||||||
from django.core.management.commands import compilemessages
|
from django.core.management.commands import compilemessages
|
||||||
@@ -72,6 +73,19 @@ class Command(compilemessages.Command):
|
|||||||
else:
|
else:
|
||||||
raise Exception("Unknown language %s" % (locale,))
|
raise Exception("Unknown language %s" % (locale,))
|
||||||
|
|
||||||
|
def get_locales(self):
|
||||||
|
# type: () -> List[Text]
|
||||||
|
tracked_files = check_output(['git', 'ls-files', 'static/locale'])
|
||||||
|
tracked_files = tracked_files.decode().split()
|
||||||
|
regex = re.compile('static/locale/(\w+)/LC_MESSAGES/django.po')
|
||||||
|
locales = ['en']
|
||||||
|
for tracked_file in tracked_files:
|
||||||
|
matched = regex.search(tracked_file)
|
||||||
|
if matched:
|
||||||
|
locales.append(matched.group(1))
|
||||||
|
|
||||||
|
return locales
|
||||||
|
|
||||||
def extract_language_options(self):
|
def extract_language_options(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
locale_path = u"{}/locale".format(settings.STATIC_ROOT)
|
locale_path = u"{}/locale".format(settings.STATIC_ROOT)
|
||||||
@@ -79,9 +93,14 @@ class Command(compilemessages.Command):
|
|||||||
|
|
||||||
data = {'languages': []} # type: Dict[str, List[Dict[str, Any]]]
|
data = {'languages': []} # type: Dict[str, List[Dict[str, Any]]]
|
||||||
|
|
||||||
locales = os.listdir(locale_path)
|
try:
|
||||||
locales.append(u'en')
|
locales = self.get_locales()
|
||||||
locales = list(set(locales))
|
except CalledProcessError:
|
||||||
|
# In case we are not under a Git repo, fallback to getting the
|
||||||
|
# locales using listdir().
|
||||||
|
locales = os.listdir(locale_path)
|
||||||
|
locales.append(u'en')
|
||||||
|
locales = list(set(locales))
|
||||||
|
|
||||||
for locale in locales:
|
for locale in locales:
|
||||||
if locale == 'en':
|
if locale == 'en':
|
||||||
|
|||||||
Reference in New Issue
Block a user