96 lines
3.7 KiB
Python
96 lines
3.7 KiB
Python
from __future__ import annotations
|
|
from typing import Callable
|
|
|
|
from django.conf import settings
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
|
|
from ._typing import AutoPopulate, _ListOrTuple
|
|
|
|
TRANSLATION_FILES: tuple[str, ...] = tuple(
|
|
getattr(settings, "MODELTRANSLATION_TRANSLATION_FILES", ())
|
|
)
|
|
|
|
AVAILABLE_LANGUAGES: list[str] = list(
|
|
getattr(
|
|
settings,
|
|
"MODELTRANSLATION_LANGUAGES",
|
|
(val for val, label in settings.LANGUAGES),
|
|
)
|
|
)
|
|
_default_language: str | None = getattr(settings, "MODELTRANSLATION_DEFAULT_LANGUAGE", None)
|
|
if _default_language and _default_language not in AVAILABLE_LANGUAGES:
|
|
raise ImproperlyConfigured("MODELTRANSLATION_DEFAULT_LANGUAGE not in LANGUAGES setting.")
|
|
DEFAULT_LANGUAGE = _default_language or AVAILABLE_LANGUAGES[0]
|
|
|
|
REQUIRED_LANGUAGES: _ListOrTuple[str] = getattr(settings, "MODELTRANSLATION_REQUIRED_LANGUAGES", ())
|
|
|
|
# Fixed base language for prepopulated fields (slugs)
|
|
# (If not set, the current request language will be used)
|
|
PREPOPULATE_LANGUAGE: str | None = getattr(settings, "MODELTRANSLATION_PREPOPULATE_LANGUAGE", None)
|
|
if PREPOPULATE_LANGUAGE and PREPOPULATE_LANGUAGE not in AVAILABLE_LANGUAGES:
|
|
raise ImproperlyConfigured("MODELTRANSLATION_PREPOPULATE_LANGUAGE not in LANGUAGES setting.")
|
|
|
|
# Load allowed CUSTOM_FIELDS from django settings
|
|
CUSTOM_FIELDS: tuple[str, ...] = getattr(settings, "MODELTRANSLATION_CUSTOM_FIELDS", ())
|
|
|
|
# Don't change this setting unless you really know what you are doing
|
|
ENABLE_REGISTRATIONS: bool = getattr(
|
|
settings, "MODELTRANSLATION_ENABLE_REGISTRATIONS", settings.USE_I18N
|
|
)
|
|
|
|
# Modeltranslation specific debug setting
|
|
DEBUG: bool = getattr(settings, "MODELTRANSLATION_DEBUG", False)
|
|
|
|
AUTO_POPULATE: AutoPopulate = getattr(settings, "MODELTRANSLATION_AUTO_POPULATE", False)
|
|
|
|
# FALLBACK_LANGUAGES should be in either format:
|
|
# MODELTRANSLATION_FALLBACK_LANGUAGES = ('en', 'de')
|
|
# MODELTRANSLATION_FALLBACK_LANGUAGES = {'default': ('en', 'de'), 'fr': ('de',)}
|
|
# By default we fallback to the default language
|
|
_fallback_languages = getattr(settings, "MODELTRANSLATION_FALLBACK_LANGUAGES", (DEFAULT_LANGUAGE,))
|
|
if isinstance(_fallback_languages, (tuple, list)):
|
|
_fallback_languages = {"default": tuple(_fallback_languages)}
|
|
|
|
# To please mypy, explicitly annotate:
|
|
FALLBACK_LANGUAGES: dict[str, tuple[str, ...]] = _fallback_languages
|
|
|
|
|
|
if "default" not in FALLBACK_LANGUAGES:
|
|
raise ImproperlyConfigured(
|
|
'MODELTRANSLATION_FALLBACK_LANGUAGES does not contain "default" key.'
|
|
)
|
|
for key, value in FALLBACK_LANGUAGES.items():
|
|
if key != "default" and key not in AVAILABLE_LANGUAGES:
|
|
raise ImproperlyConfigured(
|
|
'MODELTRANSLATION_FALLBACK_LANGUAGES: "%s" not in LANGUAGES setting.' % key
|
|
)
|
|
if not isinstance(value, (tuple, list)):
|
|
raise ImproperlyConfigured(
|
|
'MODELTRANSLATION_FALLBACK_LANGUAGES: value for key "%s" is not list nor tuple.' % key
|
|
)
|
|
for lang in value:
|
|
if lang not in AVAILABLE_LANGUAGES:
|
|
raise ImproperlyConfigured(
|
|
'MODELTRANSLATION_FALLBACK_LANGUAGES: "%s" not in LANGUAGES setting.' % lang
|
|
)
|
|
ENABLE_FALLBACKS: bool = getattr(settings, "MODELTRANSLATION_ENABLE_FALLBACKS", True)
|
|
|
|
LOADDATA_RETAIN_LOCALE: bool = getattr(settings, "MODELTRANSLATION_LOADDATA_RETAIN_LOCALE", True)
|
|
|
|
BUILD_LOCALIZED_VERBOSE_NAME: Callable[[str, str], str] = getattr(
|
|
settings,
|
|
"MODELTRANSLATION_BUILD_LOCALIZED_VERBOSE_NAME",
|
|
lambda verbose_name, lang: f"{verbose_name} [{lang}]",
|
|
)
|
|
|
|
JQUERY_URL: str = getattr(
|
|
settings,
|
|
"JQUERY_URL",
|
|
"//ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js",
|
|
)
|
|
JQUERY_UI_URL: str = getattr(
|
|
settings,
|
|
"JQUERY_UI_URL",
|
|
"//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js",
|
|
)
|