From 7a2eb96c6d99d155738aa73af2aa42a6fafbf5a9 Mon Sep 17 00:00:00 2001 From: Dmitry Shelepnev <mitshel@mail.ru> Date: Fri, 13 Jan 2017 21:52:34 +0300 Subject: [PATCH] Create Language select from django-constance config by new opds_catalog.middeleware --- opds_catalog/feeds.py | 2 +- .../{opds_middleware.py => middleware.py} | 11 ++++++++++- opds_catalog/settings.py | 11 ++++++++++- sopds/settings.py | 16 ++++++++++++---- 4 files changed, 33 insertions(+), 7 deletions(-) rename opds_catalog/{opds_middleware.py => middleware.py} (84%) diff --git a/opds_catalog/feeds.py b/opds_catalog/feeds.py index 47cdf6e..f54a5fc 100644 --- a/opds_catalog/feeds.py +++ b/opds_catalog/feeds.py @@ -12,7 +12,7 @@ from django.db.models import Count, Min from opds_catalog.models import Book, Catalog, Author, Genre, Series, bookshelf, Counter, lang_menu from opds_catalog import models from opds_catalog import settings -from opds_catalog.opds_middleware import BasicAuthMiddleware +from opds_catalog.middleware import BasicAuthMiddleware from opds_catalog.opds_paginator import Paginator as OPDS_Paginator from constance import config diff --git a/opds_catalog/opds_middleware.py b/opds_catalog/middleware.py similarity index 84% rename from opds_catalog/opds_middleware.py rename to opds_catalog/middleware.py index 490bbd2..a8457fd 100644 --- a/opds_catalog/opds_middleware.py +++ b/opds_catalog/middleware.py @@ -4,10 +4,12 @@ from django.http import HttpResponse from django.contrib import auth from django.core.exceptions import ImproperlyConfigured from django.core.urlresolvers import resolve +from django.utils import translation #from opds_catalog import settings from constance import config + class BasicAuthMiddleware(object): header = "HTTP_AUTHORIZATION" @@ -47,4 +49,11 @@ class BasicAuthMiddleware(object): auth.login(request, user) return None - return self.unauthed() \ No newline at end of file + return self.unauthed() + +class SOPDSLocaleMiddleware: + + def process_request(self, request): + request.LANG = config.SOPDS_LANGUAGE + translation.activate(request.LANG) + request.LANGUAGE_CODE = request.LANG \ No newline at end of file diff --git a/opds_catalog/settings.py b/opds_catalog/settings.py index 9aafc1b..52ee698 100644 --- a/opds_catalog/settings.py +++ b/opds_catalog/settings.py @@ -1,6 +1,7 @@ import logging import os from django.conf import settings +from django.utils import translation from constance import config loglevels={'debug':logging.DEBUG,'info':logging.INFO,'warning':logging.WARNING,'error':logging.ERROR,'critical':logging.CRITICAL,'none':logging.NOTSET} @@ -16,13 +17,21 @@ if loglevel.lower() in loglevels: else: LOGLEVEL=logging.NOTSET +from django.dispatch import receiver +#from constance.signals import config_updated +# +#@receiver(config_updated) +#def constance_updated(sender, updated_key, new_value, **kwargs): +# if updated_key == 'SOPDS_LANGUAGE': +# translation.activate(new_value) +# print(new_value) + def constance_update_all(): pass # Переопределяем некоторые функции для SQLite, которые работают неправлено from django.db.backends.signals import connection_created -from django.dispatch import receiver def sopds_upper(s): return s.upper() diff --git a/sopds/settings.py b/sopds/settings.py index bd73188..7ecfd73 100644 --- a/sopds/settings.py +++ b/sopds/settings.py @@ -50,8 +50,8 @@ MIDDLEWARE_CLASSES = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', - #'opds_catalog.opds_middleware.BasicAuthMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'opds_catalog.middleware.SOPDSLocaleMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] @@ -134,7 +134,7 @@ AUTH_PASSWORD_VALIDATORS = [ # Internationalization # https://docs.djangoproject.com/en/1.9/topics/i18n/ -LANGUAGE_CODE = 'en-US' +#LANGUAGE_CODE = 'en-US' #LANGUAGE_CODE = 'ru-RU' LOCALE_PATHS = ( @@ -153,7 +153,15 @@ STATIC_ROOT = 'static' CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend' +CONSTANCE_ADDITIONAL_FIELDS = { + 'language_select': ['django.forms.fields.ChoiceField', { + 'widget': 'django.forms.Select', + 'choices': (("ru-RU", "Russian"), ("en-US", "English")) + }], +} + CONSTANCE_CONFIG = OrderedDict([ + ('SOPDS_LANGUAGE', ('en-US',_('Select language'),'language_select')), ('SOPDS_ROOT_LIB', ('books/',_('Absolute path to books collection directory'))), ('SOPDS_BOOK_EXTENSIONS', ('.pdf .djvu .fb2 .epub', _('List of managed book files extensions'))), ('SOPDS_SCAN_START_DIRECTLY', (False,_('Turn once scanning directly'))), @@ -194,7 +202,7 @@ CONSTANCE_CONFIG = OrderedDict([ ]) CONSTANCE_CONFIG_FIELDSETS = { - '1. General Options': ('SOPDS_ROOT_LIB', 'SOPDS_BOOK_EXTENSIONS','SOPDS_SCAN_START_DIRECTLY'), + '1. General Options': ('SOPDS_LANGUAGE', 'SOPDS_ROOT_LIB', 'SOPDS_BOOK_EXTENSIONS','SOPDS_SCAN_START_DIRECTLY'), '2. Server Options': ('SOPDS_AUTH', 'SOPDS_ALPHABET_MENU', 'SOPDS_DOUBLES_HIDE', 'SOPDS_COVER_SHOW', 'SOPDS_SPLITITEMS', 'SOPDS_MAXITEMS', 'SOPDS_TITLE_AS_FILENAME', 'SOPDS_NOCOVER_PATH'), '3. Scanner Options': ('SOPDS_FB2PARSE','SOPDS_ZIPSCAN','SOPDS_ZIPCODEPAGE', 'SOPDS_INPX_ENABLE', 'SOPDS_INPX_SKIP_UNCHANGED', 'SOPDS_INPX_TEST_ZIP', 'SOPDS_INPX_TEST_FILES', 'SOPDS_DELETE_LOGICAL'), '4. Scanner Shedule': ('SOPDS_SCAN_SHED_MIN', 'SOPDS_SCAN_SHED_HOUR', 'SOPDS_SCAN_SHED_DAY','SOPDS_SCAN_SHED_DOW'), -- GitLab