def get_language_parameter(request, query_language_key='language', object=None, default=None): """ Get the language parameter from the current request. """ # This is the same logic as the django-admin uses. # The only difference is the origin of the request parameter. if not is_multilingual_project(): # By default, the objects are stored in a single static language. # This makes the transition to multilingual easier as well. # The default language can operate as fallback language too. return default or appsettings.PARLER_LANGUAGES.get_default_language() else: # In multilingual mode, take the provided language of the request. code = request.GET.get(query_language_key) if not code: # forms: show first tab by default code = default or appsettings.PARLER_LANGUAGES.get_first_language() return normalize_language_code(code)
FLUENT_PAGES_TEMPLATE_DIR = FLUENT_PAGES_TEMPLATE_DIR.rstrip('/') + '/' # Test whether the template dir for page templates exists. settingName = 'TEMPLATE_DIRS[0]' if not hasattr( settings, 'FLUENT_PAGES_TEMPLATE_DIR') else 'FLUENT_PAGES_TEMPLATE_DIR' if not os.path.isabs(FLUENT_PAGES_TEMPLATE_DIR): raise ImproperlyConfigured( "The setting '{0}' needs to be an absolute path!".format( settingName)) if not os.path.exists(FLUENT_PAGES_TEMPLATE_DIR): raise ImproperlyConfigured( "The path '{0}' in the setting '{1}' does not exist!".format( FLUENT_PAGES_TEMPLATE_DIR, settingName)) # Clean settings FLUENT_PAGES_DEFAULT_LANGUAGE_CODE = normalize_language_code( FLUENT_PAGES_DEFAULT_LANGUAGE_CODE) if not is_supported_django_language(FLUENT_PAGES_DEFAULT_LANGUAGE_CODE): raise ImproperlyConfigured( "FLUENT_PAGES_DEFAULT_LANGUAGE_CODE '{0}' does not exist in LANGUAGES". format(FLUENT_PAGES_DEFAULT_LANGUAGE_CODE)) FLUENT_PAGES_LANGUAGES = parler_appsettings.add_default_language_settings( FLUENT_PAGES_LANGUAGES, 'FLUENT_PAGES_LANGUAGES', hide_untranslated=False, hide_untranslated_menu_items=False, code=FLUENT_PAGES_DEFAULT_LANGUAGE_CODE, fallback=FLUENT_PAGES_DEFAULT_LANGUAGE_CODE) # Using a slug field, enforce keys as slugs too.
if not FLUENT_PAGES_TEMPLATE_DIR: raise ImproperlyConfigured("The setting 'FLUENT_PAGES_TEMPLATE_DIR' or 'TEMPLATE_DIRS[0]' need to be defined!") else: # Clean settings FLUENT_PAGES_TEMPLATE_DIR = FLUENT_PAGES_TEMPLATE_DIR.rstrip('/') + '/' # Test whether the template dir for page templates exists. settingName = 'TEMPLATE_DIRS[0]' if not hasattr(settings, 'FLUENT_PAGES_TEMPLATE_DIR') else 'FLUENT_PAGES_TEMPLATE_DIR' if not os.path.isabs(FLUENT_PAGES_TEMPLATE_DIR): raise ImproperlyConfigured("The setting '{0}' needs to be an absolute path!".format(settingName)) if not os.path.exists(FLUENT_PAGES_TEMPLATE_DIR): raise ImproperlyConfigured("The path '{0}' in the setting '{1}' does not exist!".format(FLUENT_PAGES_TEMPLATE_DIR, settingName)) # Clean settings FLUENT_PAGES_DEFAULT_LANGUAGE_CODE = normalize_language_code(FLUENT_PAGES_DEFAULT_LANGUAGE_CODE) if not is_supported_django_language(FLUENT_PAGES_DEFAULT_LANGUAGE_CODE): raise ImproperlyConfigured("FLUENT_PAGES_DEFAULT_LANGUAGE_CODE '{0}' does not exist in LANGUAGES".format(FLUENT_PAGES_DEFAULT_LANGUAGE_CODE)) FLUENT_PAGES_LANGUAGES = parler_appsettings.add_default_language_settings( FLUENT_PAGES_LANGUAGES, 'FLUENT_PAGES_LANGUAGES', hide_untranslated=False, hide_untranslated_menu_items=False, code=FLUENT_PAGES_DEFAULT_LANGUAGE_CODE, fallback=FLUENT_PAGES_DEFAULT_LANGUAGE_CODE ) # Using a slug field, enforce keys as slugs too. FLUENT_PAGES_KEY_CHOICES = [(slugify(str(key)), title) for key, title in FLUENT_PAGES_KEY_CHOICES]
languages_list.setdefault('default', {}) defaults = languages_list['default'] defaults.setdefault('code', PARLER_DEFAULT_LANGUAGE_CODE) defaults.setdefault('fallback', PARLER_DEFAULT_LANGUAGE_CODE) defaults.setdefault('hide_untranslated', False) # Whether queries with .active_translations() may or may not return the fallback language. defaults.update(extra_defaults) # Also allow to override code and fallback this way. if not is_supported_django_language(defaults['code']): raise ImproperlyConfigured("The value for {0}['defaults']['code'] ('{1}') does not exist in LANGUAGES".format(var_name, defaults['code'])) for site_id, lang_choices in languages_list.iteritems(): if site_id == 'default': continue if not isinstance(lang_choices, (list, tuple)): raise ImproperlyConfigured("{0}[{1}] should be a tuple of language choices!".format(var_name, site_id)) for i, choice in enumerate(lang_choices): if not is_supported_django_language(choice['code']): raise ImproperlyConfigured("{0}[{1}][{2}]['code'] does not exist in LANGUAGES".format(var_name, site_id, i)) # Copy all items from the defaults, so you can provide new fields too. for key, value in defaults.iteritems(): choice.setdefault(key, value) return languages_list # Clean settings PARLER_DEFAULT_LANGUAGE_CODE = normalize_language_code(PARLER_DEFAULT_LANGUAGE_CODE) PARLER_LANGUAGES = add_default_language_settings(PARLER_LANGUAGES)
PARLER_DEFAULT_LANGUAGE_CODE = getattr(settings, 'PARLER_DEFAULT_LANGUAGE_CODE', settings.LANGUAGE_CODE) PARLER_SHOW_EXCLUDED_LANGUAGE_TABS = getattr( settings, 'PARLER_SHOW_EXCLUDED_LANGUAGE_TABS', False) PARLER_LANGUAGES = getattr(settings, 'PARLER_LANGUAGES', {}) if not PARLER_LANGUAGES: if hasattr(settings, 'CMS_LANGUAGES'): PARLER_LANGUAGES = get_parler_languages_from_django_cms( getattr(settings, 'CMS_LANGUAGES')) PARLER_ENABLE_CACHING = getattr(settings, 'PARLER_ENABLE_CACHING', True) # Have to fill the default section explicitly to avoid circular imports PARLER_LANGUAGES.setdefault('default', {}) PARLER_LANGUAGES['default'].setdefault('code', PARLER_DEFAULT_LANGUAGE_CODE) PARLER_LANGUAGES['default'].setdefault('fallbacks', [PARLER_DEFAULT_LANGUAGE_CODE]) # Cleanup settings PARLER_DEFAULT_LANGUAGE_CODE = normalize_language_code( PARLER_DEFAULT_LANGUAGE_CODE) PARLER_LANGUAGES = add_default_language_settings(PARLER_LANGUAGES) # Activate translations by default. Flag to compensate for Django >= 1.8 default `get_language` behavior PARLER_DEFAULT_ACTIVATE = getattr(settings, 'PARLER_DEFAULT_ACTIVATE', False)