mirror of
https://github.com/Hopiu/django-rosetta.git
synced 2026-03-16 21:30:24 +00:00
117 lines
4.4 KiB
Python
117 lines
4.4 KiB
Python
"""
|
|
For a description of each rosetta setting see: docs/settings.rst.
|
|
"""
|
|
|
|
from django.conf import settings as dj_settings
|
|
from django.core.signals import setting_changed
|
|
|
|
|
|
__all__ = ["settings"]
|
|
|
|
|
|
class RosettaSettings(object):
|
|
"""
|
|
Class that holds rosetta settings.
|
|
|
|
The settings object is an instance of this class and is reloaded when
|
|
the ``setting_changed`` signal is dispatched.
|
|
"""
|
|
|
|
SETTINGS = {
|
|
"ROSETTA_MESSAGES_PER_PAGE": ("MESSAGES_PER_PAGE", 10),
|
|
"ROSETTA_ENABLE_TRANSLATION_SUGGESTIONS": (
|
|
"ENABLE_TRANSLATION_SUGGESTIONS",
|
|
False,
|
|
),
|
|
"YANDEX_TRANSLATE_KEY": ("YANDEX_TRANSLATE_KEY", None),
|
|
"AZURE_CLIENT_SECRET": ("AZURE_CLIENT_SECRET", None),
|
|
"GOOGLE_APPLICATION_CREDENTIALS_PATH": (
|
|
"GOOGLE_APPLICATION_CREDENTIALS_PATH",
|
|
None,
|
|
),
|
|
"GOOGLE_PROJECT_ID": ("GOOGLE_PROJECT_ID", None),
|
|
"DEEPL_AUTH_KEY": ("DEEPL_AUTH_KEY", None),
|
|
"ROSETTA_MAIN_LANGUAGE": ("MAIN_LANGUAGE", None),
|
|
"ROSETTA_MESSAGES_SOURCE_LANGUAGE_CODE": (
|
|
"MESSAGES_SOURCE_LANGUAGE_CODE",
|
|
"en",
|
|
),
|
|
"ROSETTA_MESSAGES_SOURCE_LANGUAGE_NAME": (
|
|
"MESSAGES_SOURCE_LANGUAGE_NAME",
|
|
"English",
|
|
),
|
|
"ROSETTA_ACCESS_CONTROL_FUNCTION": ("ACCESS_CONTROL_FUNCTION", None),
|
|
"ROSETTA_WSGI_AUTO_RELOAD": ("WSGI_AUTO_RELOAD", False),
|
|
"ROSETTA_UWSGI_AUTO_RELOAD": ("UWSGI_AUTO_RELOAD", False),
|
|
"ROSETTA_EXCLUDED_APPLICATIONS": ("EXCLUDED_APPLICATIONS", ()),
|
|
"ROSETTA_POFILE_WRAP_WIDTH": ("POFILE_WRAP_WIDTH", 78),
|
|
"ROSETTA_STORAGE_CLASS": (
|
|
"STORAGE_CLASS",
|
|
"rosetta.storage.CacheRosettaStorage",
|
|
),
|
|
"ROSETTA_ENABLE_REFLANG": ("ENABLE_REFLANG", False),
|
|
"ROSETTA_POFILENAMES": ("POFILENAMES", ("django.po", "djangojs.po")),
|
|
"ROSETTA_CACHE_NAME": (
|
|
"ROSETTA_CACHE_NAME",
|
|
"rosetta" if "rosetta" in dj_settings.CACHES else "default",
|
|
),
|
|
"ROSETTA_REQUIRES_AUTH": ("ROSETTA_REQUIRES_AUTH", True),
|
|
"ROSETTA_EXCLUDED_PATHS": ("ROSETTA_EXCLUDED_PATHS", ()),
|
|
"ROSETTA_LANGUAGE_GROUPS": ("ROSETTA_LANGUAGE_GROUPS", False),
|
|
"ROSETTA_AUTO_COMPILE": ("AUTO_COMPILE", True),
|
|
"ROSETTA_SHOW_AT_ADMIN_PANEL": ("SHOW_AT_ADMIN_PANEL", False),
|
|
"ROSETTA_LOGIN_URL": ("LOGIN_URL", dj_settings.LOGIN_URL),
|
|
"ROSETTA_LANGUAGES": ("ROSETTA_LANGUAGES", dj_settings.LANGUAGES),
|
|
"ROSETTA_SHOW_OCCURRENCES": ("SHOW_OCCURRENCES", True),
|
|
# Deepl API language codes are different then those of django, so if this is not set according to your desired languages,
|
|
# We use the first 2 letters of django language code.
|
|
# In which case it would work fine for most of the languages,
|
|
# But for 'en' if you want "EN-GB" for example, please set it in this dictionary.
|
|
# you can find the supported languages list of DeepL API here: https://www.deepl.com/docs-api/translating-text/request/
|
|
# ex: DEEPL_LANGUAGES = {"fr": "FR", "en": "EN-GB", "zh_Hans": "ZH"}
|
|
"DEEPL_LANGUAGES": ("DEEPL_LANGUAGES", {}),
|
|
}
|
|
|
|
def __init__(self):
|
|
# make sure we don't assign self._settings directly here, to avoid
|
|
# recursion in __setattr__, we delegate to the parent instead
|
|
super(RosettaSettings, self).__setattr__("_settings", {})
|
|
self.load()
|
|
|
|
def load(self):
|
|
for user_setting, (rosetta_setting, default) in self.SETTINGS.items():
|
|
self._settings[rosetta_setting] = getattr(
|
|
dj_settings, user_setting, default
|
|
)
|
|
|
|
def reload(self):
|
|
self.__init__()
|
|
|
|
def __getattr__(self, attr):
|
|
if attr not in self._settings:
|
|
raise AttributeError(
|
|
"'RosettaSettings' object has not attribute '%s'" % attr
|
|
)
|
|
return self._settings[attr]
|
|
|
|
def __setattr__(self, attr, value):
|
|
if attr not in self._settings:
|
|
raise AttributeError(
|
|
"'RosettaSettings' object has not attribute '%s'" % attr
|
|
)
|
|
self._settings[attr] = value
|
|
|
|
|
|
# This is our global settings object
|
|
settings = RosettaSettings()
|
|
|
|
|
|
# Signal handler to reload settings when needed
|
|
def reload_settings(*args, **kwargs):
|
|
val = kwargs.get("setting")
|
|
if val in settings.SETTINGS:
|
|
settings.reload()
|
|
|
|
|
|
# Connect the setting_changed signal to our handler
|
|
setting_changed.connect(reload_settings)
|