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