78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
import os, json
|
|
from path import path
|
|
|
|
# BASE_DIR is the working directory to execute django-admin commands from.
|
|
# Typically this should be the 'mitx' directory.
|
|
BASE_DIR = path(__file__).abspath().dirname().joinpath('..').normpath()
|
|
|
|
# LOCALE_DIR contains the locale files.
|
|
# Typically this should be 'mitx/conf/locale'
|
|
LOCALE_DIR = BASE_DIR.joinpath('conf', 'locale')
|
|
|
|
class Configuration:
|
|
"""
|
|
# Reads localization configuration in json format
|
|
|
|
"""
|
|
_source_locale = 'en'
|
|
|
|
def __init__(self, filename):
|
|
self._filename = filename
|
|
self._config = self.read_config(filename)
|
|
|
|
def read_config(self, filename):
|
|
"""
|
|
Returns data found in config file (as dict), or raises exception if file not found
|
|
"""
|
|
if not os.path.exists(filename):
|
|
raise Exception("Configuration file cannot be found: %s" % filename)
|
|
with open(filename) as stream:
|
|
return json.load(stream)
|
|
|
|
@property
|
|
def locales(self):
|
|
"""
|
|
Returns a list of locales declared in the configuration file,
|
|
e.g. ['en', 'fr', 'es']
|
|
Each locale is a string.
|
|
"""
|
|
return self._config['locales']
|
|
|
|
@property
|
|
def source_locale(self):
|
|
"""
|
|
Returns source language.
|
|
Source language is English.
|
|
"""
|
|
return self._source_locale
|
|
|
|
@property
|
|
def dummy_locale(self):
|
|
"""
|
|
Returns a locale to use for the dummy text, e.g. 'fr'.
|
|
Throws exception if no dummy-locale is declared.
|
|
The locale is a string.
|
|
"""
|
|
dummy = self._config.get('dummy-locale', None)
|
|
if not dummy:
|
|
raise Exception('Could not read dummy-locale from configuration file.')
|
|
return dummy
|
|
|
|
def get_messages_dir(self, locale):
|
|
"""
|
|
Returns the name of the directory holding the po files for locale.
|
|
Example: mitx/conf/locale/fr/LC_MESSAGES
|
|
"""
|
|
return LOCALE_DIR.joinpath(locale, 'LC_MESSAGES')
|
|
|
|
@property
|
|
def source_messages_dir(self):
|
|
"""
|
|
Returns the name of the directory holding the source-language po files (English).
|
|
Example: mitx/conf/locale/en/LC_MESSAGES
|
|
"""
|
|
return self.get_messages_dir(self.source_locale)
|
|
|
|
|
|
CONFIGURATION = Configuration(LOCALE_DIR.joinpath('config').normpath())
|