From 8ed897ce861663a5c4eea99f615c73d0a7751ea5 Mon Sep 17 00:00:00 2001
From: Dmitry Shelepnev <mitshel@mail.ru>
Date: Fri, 6 Jan 2017 21:31:35 +0300
Subject: [PATCH] Start integration django-constance package to project

---
 opds_catalog/locale/ru/LC_MESSAGES/django.mo  | Bin 4650 -> 4650 bytes
 opds_catalog/locale/ru/LC_MESSAGES/django.po  | 110 +++++++-------
 opds_catalog/models.py                        |   3 +-
 requirements.txt                              |   3 +-
 sopds/locale/ru/LC_MESSAGES/django.mo         | Bin 0 -> 4869 bytes
 sopds/locale/ru/LC_MESSAGES/django.po         | 141 ++++++++++++++++++
 sopds/settings.py                             |  51 ++++++-
 .../locale/ru/LC_MESSAGES/django.mo           | Bin 5571 -> 5571 bytes
 .../locale/ru/LC_MESSAGES/django.po           |  35 ++++-
 9 files changed, 281 insertions(+), 62 deletions(-)
 create mode 100644 sopds/locale/ru/LC_MESSAGES/django.mo
 create mode 100644 sopds/locale/ru/LC_MESSAGES/django.po

diff --git a/opds_catalog/locale/ru/LC_MESSAGES/django.mo b/opds_catalog/locale/ru/LC_MESSAGES/django.mo
index bbfdda88a588b5110ae675d2f24e078af0f1b6af..3c66cbba09c54d57b975274b7c2939131c30090a 100644
GIT binary patch
delta 33
pcmZ3bvPxxx7bmZ|u7RPhftiAlp_P&4=5WqL4yKFUlXnRg005o33Dp1q

delta 33
pcmZ3bvPxxx7bmZouAz~xk%5Atg_Wt<=5WqL4yFq`Chrm~005rB3IqTE

diff --git a/opds_catalog/locale/ru/LC_MESSAGES/django.po b/opds_catalog/locale/ru/LC_MESSAGES/django.po
index 859f1bf..58ef9d5 100644
--- a/opds_catalog/locale/ru/LC_MESSAGES/django.po
+++ b/opds_catalog/locale/ru/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-12-20 18:56+0300\n"
+"POT-Creation-Date: 2017-01-06 21:29+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,87 +20,87 @@ msgstr ""
 "10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%"
 "100>=11 && n%100<=14)? 2 : 3);\n"
 
-#: .\opds_catalog\feeds.py:123
+#: .\opds_catalog\feeds.py:127
 #, python-format
 msgid "All books by %(author)s"
 msgstr "Все книги автора %(author)s"
 
-#: .\opds_catalog\feeds.py:135
+#: .\opds_catalog\feeds.py:139
 msgid "Book doublicates"
 msgstr "Дубликаты книги"
 
-#: .\opds_catalog\feeds.py:156 .\opds_catalog\feeds.py:241
-#: .\opds_catalog\feeds.py:243 .\opds_catalog\tests\test_feeds.py:22
+#: .\opds_catalog\feeds.py:160 .\opds_catalog\feeds.py:245
+#: .\opds_catalog\feeds.py:247 .\opds_catalog\tests\test_feeds.py:22
 msgid "By catalogs"
 msgstr "По каталогам"
 
-#: .\opds_catalog\feeds.py:157 .\opds_catalog\tests\test_feeds.py:23
+#: .\opds_catalog\feeds.py:161 .\opds_catalog\tests\test_feeds.py:23
 #, python-format
 msgid "Catalogs: %(catalogs)s, books: %(books)s."
 msgstr "Каталогов: %(catalogs)s, книг: %(books)s."
 
-#: .\opds_catalog\feeds.py:158
+#: .\opds_catalog\feeds.py:162
 msgid "By authors"
 msgstr "По авторам"
 
-#: .\opds_catalog\feeds.py:159 .\opds_catalog\tests\test_feeds.py:24
+#: .\opds_catalog\feeds.py:163 .\opds_catalog\tests\test_feeds.py:24
 #, python-format
 msgid "Authors: %(authors)s."
 msgstr "Авторов: %(authors)s."
 
-#: .\opds_catalog\feeds.py:160
+#: .\opds_catalog\feeds.py:164
 msgid "By titles"
 msgstr "По наименованиям"
 
-#: .\opds_catalog\feeds.py:161
+#: .\opds_catalog\feeds.py:165
 #, python-format
 msgid "Books: %(books)s."
 msgstr "Книг: %(books)s."
 
-#: .\opds_catalog\feeds.py:162
+#: .\opds_catalog\feeds.py:166
 msgid "By genres"
 msgstr "По жанрам"
 
-#: .\opds_catalog\feeds.py:163 .\opds_catalog\tests\test_feeds.py:25
+#: .\opds_catalog\feeds.py:167 .\opds_catalog\tests\test_feeds.py:25
 #, python-format
 msgid "Genres: %(genres)s."
 msgstr "Жанров: %(genres)s."
 
-#: .\opds_catalog\feeds.py:164
+#: .\opds_catalog\feeds.py:168
 msgid "By series"
 msgstr "По сериям"
 
-#: .\opds_catalog\feeds.py:165
+#: .\opds_catalog\feeds.py:169
 #, python-format
 msgid "Series: %(series)s."
 msgstr "Серий: %(series)s."
 
-#: .\opds_catalog\feeds.py:169
+#: .\opds_catalog\feeds.py:173
 #, python-format
 msgid "%(username)s Book shelf"
 msgstr "Книжная полка (%(username)s)"
 
-#: .\opds_catalog\feeds.py:170
+#: .\opds_catalog\feeds.py:174
 #, python-format
 msgid "%(username)s books readed: %(bookshelf)s."
 msgstr "Книг прочитано (%(username)s): %(bookshelf)s."
 
-#: .\opds_catalog\feeds.py:301 .\opds_catalog\feeds.py:545
+#: .\opds_catalog\feeds.py:305 .\opds_catalog\feeds.py:549
 #, python-format
 msgid "<b>Authors: </b>%(authors)s<br/>"
 msgstr "<b>Авторов: </b>%(authors)s<br/>"
 
-#: .\opds_catalog\feeds.py:302 .\opds_catalog\feeds.py:546
+#: .\opds_catalog\feeds.py:306 .\opds_catalog\feeds.py:550
 #, python-format
 msgid "<b>Genres: </b>%(genres)s<br/>"
 msgstr "<b>Жанров: </b>%(genres)s<br/>"
 
-#: .\opds_catalog\feeds.py:303 .\opds_catalog\feeds.py:547
+#: .\opds_catalog\feeds.py:307 .\opds_catalog\feeds.py:551
 #, python-format
 msgid "<b>Series: </b>%(series)s<br/>"
 msgstr "<b>Серий: </b>%(series)s<br/>"
 
-#: .\opds_catalog\feeds.py:304 .\opds_catalog\feeds.py:548
+#: .\opds_catalog\feeds.py:308 .\opds_catalog\feeds.py:552
 #, python-format
 msgid ""
 "<b>File: </b>%(filename)s<br/><b>File size: </b>%(filesize)s<br/><b>Changes "
@@ -109,158 +109,158 @@ msgstr ""
 "<b>Файл: </b>%(filename)s<br/><b>Размер файла: </b>%(filesize)s<br/><b>Дата "
 "изменения: </b>%(docdate)s<br/>"
 
-#: .\opds_catalog\feeds.py:337 .\opds_catalog\tests\test_feeds.py:58
+#: .\opds_catalog\feeds.py:341 .\opds_catalog\tests\test_feeds.py:58
 msgid "Search by titles"
 msgstr "Поиск по наименованиям"
 
-#: .\opds_catalog\feeds.py:337
+#: .\opds_catalog\feeds.py:341
 msgid "Search books by title"
 msgstr "Поиск книг по наименованию"
 
-#: .\opds_catalog\feeds.py:338
+#: .\opds_catalog\feeds.py:342
 msgid "Search by authors"
 msgstr "Поиск авторов"
 
-#: .\opds_catalog\feeds.py:338
+#: .\opds_catalog\feeds.py:342
 msgid "Search authors by name"
 msgstr "Поиск авторов по имени"
 
-#: .\opds_catalog\feeds.py:339
+#: .\opds_catalog\feeds.py:343
 msgid "Search series"
 msgstr "Поиск серий"
 
-#: .\opds_catalog\feeds.py:371
+#: .\opds_catalog\feeds.py:375
 msgid "Books found"
 msgstr "Найдены книги"
 
-#: .\opds_catalog\feeds.py:371
+#: .\opds_catalog\feeds.py:375
 msgid "doubles hide"
 msgstr "дубликаты скрыты"
 
-#: .\opds_catalog\feeds.py:371
+#: .\opds_catalog\feeds.py:375
 msgid "doubles show"
 msgstr "дубликаты показаны"
 
-#: .\opds_catalog\feeds.py:549
+#: .\opds_catalog\feeds.py:553
 #, python-format
 msgid "<b>Doubles count: </b>%(doubles)s<br/>"
 msgstr "<b>Число дубликатов: </b>%(doubles)s<br/>"
 
-#: .\opds_catalog\feeds.py:563
+#: .\opds_catalog\feeds.py:567
 msgid "Series by authors select"
 msgstr "Выбор серий у автора"
 
-#: .\opds_catalog\feeds.py:584
+#: .\opds_catalog\feeds.py:588
 msgid "Books by series"
 msgstr "Книги по сериям"
 
-#: .\opds_catalog\feeds.py:584
+#: .\opds_catalog\feeds.py:588
 msgid "Books by author and series"
 msgstr "Книги по авторам и сериям"
 
-#: .\opds_catalog\feeds.py:585
+#: .\opds_catalog\feeds.py:589
 msgid "Books outside series"
 msgstr "Книги вне серий"
 
-#: .\opds_catalog\feeds.py:585
+#: .\opds_catalog\feeds.py:589
 msgid "Books by author outside series"
 msgstr "Книги автора вне серий"
 
-#: .\opds_catalog\feeds.py:586
+#: .\opds_catalog\feeds.py:590
 msgid "Books by alphabet"
 msgstr "Книги по алфавиту"
 
-#: .\opds_catalog\feeds.py:586
+#: .\opds_catalog\feeds.py:590
 msgid "Books by author alphabetical order"
 msgstr "Книги автора в алфавитном порядке"
 
-#: .\opds_catalog\feeds.py:617
+#: .\opds_catalog\feeds.py:621
 msgid "Authors found"
 msgstr "Найдены авторы"
 
-#: .\opds_catalog\feeds.py:670 .\opds_catalog\feeds.py:748
+#: .\opds_catalog\feeds.py:674 .\opds_catalog\feeds.py:752
 #, python-format
 msgid "Books count: %s"
 msgstr "Всего: %s книг"
 
-#: .\opds_catalog\feeds.py:686
+#: .\opds_catalog\feeds.py:690
 msgid "Series found"
 msgstr "Найдены серии"
 
-#: .\opds_catalog\feeds.py:772
+#: .\opds_catalog\feeds.py:776
 msgid "Select language"
 msgstr "Выбор алфавита"
 
-#: .\opds_catalog\feeds.py:784 .\opds_catalog\models.py:36
+#: .\opds_catalog\feeds.py:788 .\opds_catalog\models.py:36
 #: .\opds_catalog\tests\test_feeds.py:104
 #: .\opds_catalog\tests\test_feeds.py:117
 #: .\opds_catalog\tests\test_feeds.py:128
 msgid "Cyrillic"
 msgstr "Кириллица (РУС)"
 
-#: .\opds_catalog\feeds.py:785 .\opds_catalog\models.py:36
+#: .\opds_catalog\feeds.py:789 .\opds_catalog\models.py:36
 #: .\opds_catalog\tests\test_feeds.py:105
 msgid "Latin"
 msgstr "Латинница (LAT)"
 
-#: .\opds_catalog\feeds.py:786 .\opds_catalog\models.py:36
+#: .\opds_catalog\feeds.py:790 .\opds_catalog\models.py:36
 #: .\opds_catalog\tests\test_feeds.py:106
 msgid "Digits"
 msgstr "Цифры (0..9)"
 
-#: .\opds_catalog\feeds.py:787 .\opds_catalog\models.py:36
+#: .\opds_catalog\feeds.py:791 .\opds_catalog\models.py:36
 #: .\opds_catalog\tests\test_feeds.py:107
 msgid "Other symbols"
 msgstr "Другие символы"
 
-#: .\opds_catalog\feeds.py:788 .\opds_catalog\models.py:36
+#: .\opds_catalog\feeds.py:792 .\opds_catalog\models.py:36
 #: .\opds_catalog\tests\test_feeds.py:108
 msgid "Show all"
 msgstr "Показать все"
 
-#: .\opds_catalog\feeds.py:818
+#: .\opds_catalog\feeds.py:822
 msgid "Select books by substring"
 msgstr "Поиск книг по подстроке"
 
-#: .\opds_catalog\feeds.py:855 .\opds_catalog\feeds.py:1021
+#: .\opds_catalog\feeds.py:859 .\opds_catalog\feeds.py:1025
 #, python-format
 msgid "Found: %s books"
 msgstr "Найдено %s книг"
 
-#: .\opds_catalog\feeds.py:876
+#: .\opds_catalog\feeds.py:880
 msgid "Select authors by substring"
 msgstr "Поиск авторов по подстроке"
 
-#: .\opds_catalog\feeds.py:913
+#: .\opds_catalog\feeds.py:917
 #, python-format
 msgid "Found: %s authors"
 msgstr "Найдено %s авторов"
 
-#: .\opds_catalog\feeds.py:934
+#: .\opds_catalog\feeds.py:938
 msgid "Select series by substring"
 msgstr "Поиск серий по подстроке"
 
-#: .\opds_catalog\feeds.py:971
+#: .\opds_catalog\feeds.py:975
 #, python-format
 msgid "Found: %s series"
 msgstr "Найдено %s серий"
 
-#: .\opds_catalog\feeds.py:992
+#: .\opds_catalog\feeds.py:996
 #, python-format
 msgid "Select genres (%s)"
 msgstr "Выбор жанра (%s)"
 
-#: .\opds_catalog\feeds.py:992
+#: .\opds_catalog\feeds.py:996
 msgid "section"
 msgstr "секция"
 
-#: .\opds_catalog\feeds.py:992
+#: .\opds_catalog\feeds.py:996
 msgid "subsection"
 msgstr "подсекция"
 
 #: .\opds_catalog\opdsdb.py:36
 msgid "Unknown genre"
-msgstr "Неизвестний жанр"
+msgstr "Неизвестный жанр"
 
 #: .\opds_catalog\tests\test_feeds.py:76
 #, fuzzy, python-format
diff --git a/opds_catalog/models.py b/opds_catalog/models.py
index 624fd01..b491e5d 100644
--- a/opds_catalog/models.py
+++ b/opds_catalog/models.py
@@ -130,6 +130,5 @@ class Counter(models.Model):
     update_time = models.DateTimeField(null=False, default=timezone.now)
     obj = models.Manager()
     objects = CounterManager()
-
-
+    
 
diff --git a/requirements.txt b/requirements.txt
index 03c2041..7dc9a7d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,5 @@
 Django==1.8 ; python_version == '3.3'
 Django>=1.8 ; python_version >= '3.4'
 Pillow>=2.9.0
-apscheduler>=3.3.0
\ No newline at end of file
+apscheduler>=3.3.0
+django-constance[database]>=1.3
\ No newline at end of file
diff --git a/sopds/locale/ru/LC_MESSAGES/django.mo b/sopds/locale/ru/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000000000000000000000000000000000..b963715d578ccf1849569a7aeb290539a5d7c621
GIT binary patch
literal 4869
zcmca7#4?qEfq_Amfq_AWfq{XAk%2*zfq~%-BS@5iVFD8agEj*L!$c+q1}z2#hP_M-
z4B`w73@?}%7(_uzm>C#?85kJEm>C#U85kI{m>C!Z85kHQFf%ZyGcYhLVrF1aVqjo6
z1*P9IGcZ^&Ffa(PK<x2mVPMc;U|=YP^5;SMCs-I56d4#8K0?KXSt0stSs55y7#J8T
zSQ!|cLGEE?U@&E1U|?i}m}kxgaYrH>M1MOQ1A`6&1H(!-h`MWR3=Db<3=BN%3=9Sg
z3=G!n3=FRr85nZd85n#R7#PAi85oin7#NmtGBDUOFfg!lF)-*dFfh1sF)%z~U|=Zb
zVqnN%U|@*ghNwTt&A?E=z`(%A1F^pzO0VQ$U}#`qV7Sb~z~IEdz!1XAz~IQhz%ZSc
zfx&@+f#D`E1A{#S1A`PF1A`$0149%a1A`d@149oV14AnV1H)lH28Klp3=E$93=FG4
z@xjl)5DU^T0MY+dfPo=~fq}tH5E34f1sNDz85kID2r@7PF)%R52{ACZGcYg|3NbKv
zGcYjh6k=ciMJY2V&Y+kDN`ok21_lOx5CfVPKuk%H`#=m(I503Uh%hiP@G>wka4|42
zFhRw6KyeREJ0KxY+_N%3(g-&wo<V{P3=C`x3=EtM3=A9$3=Be`@Pdj<FfcGkGeFZ4
zNX#**I6tSfBvqjxu_QyGBwryZKR>%zAvr%MCpEbwGe1uuC9^0sxg@`+lEJwsHL)aB
zAtk>&FDE}SB{fAMEi)%IFEKY&A+0Ds7pzsGB(o$ZmBBSHF)1fiAu*>QBQYtpM4`Ae
zDK|B*6fRy`l98HMl9`+cvH~hvtWcDin4*xIT9TNOSds`aGc&KCLKkF>f<|Iqib8Qo
zet|-9a$;UyW?s5NN@{9BY7tZ+OkF`vVsfe`gHL90i9&vwLT+MSVtQ%{#Bm^liWO2T
zN>cNRGxPI`8GI8f6f#RvbBh)7^Arja(^J7B#idCQ!Q}kXyb^`XJcLI;z5vNF1VF>f
z&B;jDH6YYUAvr&<EVZa4wMe0$C_lX@F&9ONufLNg9wnK%iRr1};8ZBi$S((ZE-k+Z
z;^^|sl8pS)5{1;<q|_8ps3+%_r53?W&&f{*c}oGLzBs=ir8piOJ`i^#rxq9EQ<+*+
zhDBjPW(tu;Vo{0R$dc6Dg8ZVyqDrtQi;+@QaB7J{a(+rGDD=Ue09g%6RK*IJdBvG2
zsR~t@1t2ko;OtDK$oKRMh)@89jY4T&az<hvD3Xgat5Ovb(;$(MT9%n#S`1Dt3?Zq-
zB?^gUnTa`xNtrpBC6$n%1sPkckds+ll9~dFX0Vw_scHE|sS1fHU?D_Kz+y;MW&zYc
zM4OS3S*(zjlbEiMm|T)s2Fg#V6(vO=PJSL*+D}U|f|$+_f~gCZOu&f&l+eK$7n@3i
zBf$wHGcO%URYqn?YOz9EeraBcLP~yVQVu9jrWP|4XQZZ-=A@=5q$E~?V+A#7X(Sir
z=P49d=9MH?Xre04Pg5vQP0a=wTBJafu8jQBA`+D6X6BWafE|tB{D7kTtkmQZUC$KV
zu+$<@ez#HxaCG)|bazz<a}5gi^!MWmN-fAQD$(^VPR~rybt+9S)(y$GQs4^k577me
zcA5Ekx-N+&sa6U`28QOk28Ox@W(r1zRz{ZE2F3;kTmk;NL8)b#Aj6^RB3&JWbbbAG
zT^toW{H=UFwWIv~T)BJ_i%WDviW2jRa}rDPi>wsfLVbJ`{2YB<6>MC69X)*<99>+3
zT!Vw{xO@`x(n}N5Q*}d96LYN;d>sAULqSfq@$qrU$<)g)O1I<k_4IW`c*;=EfXg{Q
zuOv0EL^q_eAk|8tB(<VMzaS?uGtXKfIU}*CIJLw!G{jBU0-+A%mbBC&UDv$i{FKbR
zbSnjmq|6eofSl5z#2j6>{G!}qD}}rQFt^y&#99HuwAIK{H8ilbHB?YjQvfjy6m1O+
z73>uZ6s*8}J6j`|l#Q(khzZtVU}I>cP*Vd|Vqj-zqN!l7U<lP>Yij_K0;{vLH3jJb
znQUWgsR<W1umf2Gv(v`b&_vT-!AQYM!C2Fpi{ZkA3mY#sUf6eG_r<=8O&9iF?7py5
z;llol%@><4_9$G~rEp=_g$);*E^N54`@+5pn=dviTx?Xh*m7aRg`F36U)XSA&xIWz
zC3`RIxUiYw!i)=hF7_*2*nVNdh0PZmE;e7-c45PXtrzxyv|iYUqz}a0cd-Ga{bIv~
zeHS)?ECE@#<HB}@3wtkYxUd~0c46;@9UudDffyGyU)aHLVbX<NV7Ink*a3Fp#m0-x
z7dBqlb7AX+y%+lwE^NBkePQDTkl7m)K&}S6brVSOg$<axFKht$6s))D!j6kA7j}UC
z+je2c#Xg1$3ok-!=?1%H>xDfEAbY@}vE{;s3wy!AwH5Avg$vsiK;@t=*iKOR?7Of@
zLF2;yiwzfcC|vBl*mPkZ$c()gwklj~1X%>~7C4+hX2Wz{>{fsTDpI&#*rB6vvEjmo
zi;WldgCgs~z6;wxu7<f_?}ZHt7n`9$2{Qk}jtjd%rhp=5+l8%=Fx`1!3s}>>3!5+O
z13Oid;ljcT`!DPOCxKm1D=v0i*m1D|ta8VNouH_K#P+@mn{*T|Y`L%-6eXMB@vs%_
zi++U*n?ND4@51g2yDx0Lu<If?5J5s9H*99OFz3RC3%f2hUf6MA4>)3aF6_Oq4-^!j
zKyC!3FNKS}V7-vY1clZnu)`HDHePH3c^_<3+l8$}83qoiE!d3Qgl^G>i>>I1W$(pq
zkRZe<eGC`ogAxiTg@Uuhz6*OVY`U=ZV#CEIFxjjCYt0a+64a<cRk`EB_6z$iYy|rf
z616)n_922B6zjXd*<u4Upf_A>zpxb)Fd&C0fb@cb@WQqWyFl>{jU{NtQMj=2!d6hu
z+IL|iRMplCyHFhf$=}eNeX$uH(V*13?_wL+uEq-+P%9>ii~zTHP)sPuOo3+}vYbGg
z0hkWBunC;-!Lbfbo_j#fKq~?noMDYFSY`kv>8%&`qGT0?3!5(N1t%I%?vL^eV7M?B
zl-e;fKB&ylQ2+%nB+qUIXHRfS*bXjm8bG;VtHK3P8i6=%$A#S&8!z^Q3S)5bvh~82
z3p*}sx!8QM^8!>ml0A?D7Mywd87?dW*>n+9+<{7HP{{)>aCcwW0V?i5Wd$_V=qOy+
z4@%t^wt^%sg0d(muS0XjCU5})S8`zsD8+!%*M<w5z_}Qd?ZKw+xY!CR@AiR8pNkC_
zwt-6kNEw8+%m5_`NTmSEVEv#91QY<EDhTF8P|FNfUV?l#a86wUt_C-QijQ5OK)nE}
zYrp|}u?Z4m;LreN)(d+tYz5`bJr}m3)*+yR22}B-B^kk!Kgd@M7x0@7FBFio|5iw)
z4GR6u2m>Ig36!`mc7W>Si%p;?0hK7ADi#vjpc)P2KyYQS1swCpaTVnmfRexwhJ%ve
z#eR?%L4F3+-msbm)SlR?07{tPf(KH&Hi2q5Xc}X<umzMZL1_nEt?UN}C)`aJJ0UeP
zwA2X(^<Ptq6g0q<=Ppo52x?Ai!c75%FsP0L*L~13kW3>lwu7o$kW(o$2h_%a76jdt
GdJ_P5)Zlyo

literal 0
HcmV?d00001

diff --git a/sopds/locale/ru/LC_MESSAGES/django.po b/sopds/locale/ru/LC_MESSAGES/django.po
new file mode 100644
index 0000000..208e7f9
--- /dev/null
+++ b/sopds/locale/ru/LC_MESSAGES/django.po
@@ -0,0 +1,141 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-01-06 21:29+0300\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%"
+"100>=11 && n%100<=14)? 2 : 3);\n"
+
+#: .\sopds\settings.py:152
+msgid "Absolute path to books collection directory"
+msgstr "Абсолютный путь к каталогу с файлами книг"
+
+#: .\sopds\settings.py:153
+msgid "List of managed book files extensions"
+msgstr "Список расширений файлов, для включения в коллекцию книг"
+
+#: .\sopds\settings.py:154
+msgid "This flag hides found doublicates"
+msgstr "Флаг прячет найденные дубликаты книг"
+
+#: .\sopds\settings.py:155
+msgid "This flag activate showing cover of books"
+msgstr "Флаг активирует показ обложек книг"
+
+#: .\sopds\settings.py:156
+msgid "This flag activate extraction metadata from fb2 files"
+msgstr "Флаг активирует извлеченеи метаданных из fb2-файлов"
+
+#: .\sopds\settings.py:157
+msgid "This flag activate zip files scanning"
+msgstr "Флаг разрешает сканированеи содержимого ZIP файлов"
+
+#: .\sopds\settings.py:158
+msgid "Set codepage for filenames inside zipfile"
+msgstr "Codepage для имен файлов внутри ZIP"
+
+#: .\sopds\settings.py:159
+msgid ""
+"Enables read metadata from inpx-file (and stop scanning deeper from ipx-file "
+"place)"
+msgstr ""
+"Считываем метаданные книг з INPX-файлов (при этом не сканируем файлы и "
+"каталоги, расположенные на уровне или ниже найденого INPX)"
+
+#: .\sopds\settings.py:160
+msgid "Skip scanning INPX with unchanged size after previous scan"
+msgstr ""
+"Не сканируем INPX, если его размер не изменился с предидущего сканирования"
+
+#: .\sopds\settings.py:161
+msgid "Test avialability zip files listed in INPX before add in collection"
+msgstr ""
+"Проверяем наличие zip файлов, перечисленных в INPX перед добавлением их "
+"содержимого в коллекцию"
+
+#: .\sopds\settings.py:162
+msgid "Test avialability book files listed in INPX before add in collection"
+msgstr ""
+"Тестируем наличие книг, перечисленных в INPX перед добавлением их "
+"содержимого в коллекцию"
+
+#: .\sopds\settings.py:164
+msgid "Max subitems count in alphabet menuitem"
+msgstr "Максимальное число подэлементов в элементах алфавитных меню"
+
+#: .\sopds\settings.py:165
+msgid "Max items on page"
+msgstr "Максимальное число элементов на странице"
+
+#: .\sopds\settings.py:166
+msgid "Path to FB2-EPUB converter program"
+msgstr "Путь к конвертеру FB2-EPUB"
+
+#: .\sopds\settings.py:167
+msgid "Path to FB2-MOBI converter program"
+msgstr "Путь к конвертеру FB2-MOBI"
+
+#: .\sopds\settings.py:168
+msgid "Path to temporary files directory"
+msgstr "Путь к временному каталогу"
+
+#: .\sopds\settings.py:169
+msgid "Create downloaded filename from book title"
+msgstr "Имя загружаемого файла формировать из названия книги"
+
+#: .\sopds\settings.py:170
+msgid "Enable alphabet submenu"
+msgstr "Включить субменю выбора алфавита"
+
+#: .\sopds\settings.py:171
+msgid "Path to image file showing for book without embedded cover"
+msgstr "Путь к изображению, для показа в качестве обложки для книг без обложек"
+
+#: .\sopds\settings.py:172
+msgid "Enable authentication"
+msgstr "Включить аутентификацию"
+
+#: .\sopds\settings.py:173
+msgid "Path to logfile for sopds_server process"
+msgstr "Путь к логфайлу для процесса sopds_server"
+
+#: .\sopds\settings.py:174
+msgid "Path to logfile for sopds_scanner process"
+msgstr "Путь к логфайлу для процесса sopds_scanner"
+
+#: .\sopds\settings.py:175
+msgid "Path to pidfile for sopds_server process"
+msgstr "Путь к pid-файлу для процесса sopds_server"
+
+#: .\sopds\settings.py:176
+msgid "Path to pidfile for sopds_scanner process"
+msgstr "Путь к pid-файлу для процесса sopds_scanner"
+
+#: .\sopds\settings.py:177
+msgid "sheduled minutes for sopds_scanner (cron syntax)"
+msgstr "минуты для планировщика sopds_Scanner (как в cron)"
+
+#: .\sopds\settings.py:178
+msgid "sheduled hours for sopds_scanner (cron syntax)"
+msgstr "часы для планировщика sopds_Scanner (как в cron)"
+
+#: .\sopds\settings.py:179
+msgid "sheduled day for sopds_scanner (cron syntax)"
+msgstr "дни для планировщика sopds_Scanner (как в cron)"
+
+#: .\sopds\settings.py:180
+msgid "sheduled day of weeks for sopds_scanner (cron syntax)"
+msgstr "дни недели для планировщика sopds_Scanner (как в cron)"
diff --git a/sopds/settings.py b/sopds/settings.py
index d225e72..2ce1b3a 100644
--- a/sopds/settings.py
+++ b/sopds/settings.py
@@ -13,6 +13,8 @@ https://docs.djangoproject.com/en/1.9/ref/settings/
 import os
 import sys
 
+from django.utils.translation import ugettext_lazy as _
+
 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
@@ -37,6 +39,8 @@ INSTALLED_APPS = [
     'sopds_web_backend',    
     'django.contrib.admin',   
     'django.contrib.staticfiles',     
+    'constance.backends.database',
+    'constance',
 ]
 
 MIDDLEWARE_CLASSES = [
@@ -129,8 +133,8 @@ AUTH_PASSWORD_VALIDATORS = [
 # Internationalization
 # https://docs.djangoproject.com/en/1.9/topics/i18n/
 
-LANGUAGE_CODE = 'en-US'
-#LANGUAGE_CODE = 'ru-RU'
+#LANGUAGE_CODE = 'en-US'
+LANGUAGE_CODE = 'ru-RU'
 
 TIME_ZONE = 'Europe/Moscow'
 USE_I18N = True
@@ -142,6 +146,49 @@ USE_TZ = True
 STATIC_URL = '/static/'
 STATIC_ROOT = 'static'
 
+CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
+
+CONSTANCE_CONFIG = {
+    'SOPDS_ROOT_LIB': ('books/',_('Absolute path to books collection directory')),
+    'SOPDS_BOOK_EXTENSIONS': ('.pdf .djvu .fb2 .epub', _('List of managed book files extensions')),
+    'SOPDS_DOUBLES_HIDE': (True,_('This flag hides found doublicates')),
+    'SOPDS_COVER_SHOW': (True,_('This flag activate showing cover of books')),
+    'SOPDS_FB2PARSE': (True,_('This flag activate extraction metadata from fb2 files')),
+    'SOPDS_ZIPSCAN': (True,_('This flag activate zip files scanning')),
+    'SOPDS_ZIPCODEPAGE': ('cp866',_('Set codepage for filenames inside zipfile')),
+    'SOPDS_INPX_ENABLE': (False,_('Enables read metadata from inpx-file (and stop scanning deeper from ipx-file place)')),
+    'SOPDS_INPX_SKIP_UNCHANGED': (True,_('Skip scanning INPX with unchanged size after previous scan')),
+    'SOPDS_INPX_TEST_ZIP': (False,_('Test avialability zip files listed in INPX before add in collection')),
+    'SOPDS_INPX_TEST_FILES': (False,_('Test avialability book files listed in INPX before add in collection')),
+    'SOPDS_DELETE_LOGICAL': (False,'Logical deleting unavialable files'),
+    'SOPDS_SPLITITEMS': (300,_('Max subitems count in alphabet menuitem')),
+    'SOPDS_MAXITEMS': (60,_('Max items on page')),
+    'SOPDS_FB2TOEPUB': ('',_('Path to FB2-EPUB converter program')),
+    'SOPDS_FB2TOMOBI': ('',_('Path to FB2-MOBI converter program')),
+    'SOPDS_TEMP_DIR': (os.path.join(BASE_DIR,'tmp'),_('Path to temporary files directory')),
+    'SOPDS_TITLE_AS_FILENAME': (True,_('Create downloaded filename from book title')),
+    'SOPDS_ALPHABET_MENU': (True,_('Enable alphabet submenu')),
+    'SOPDS_NOCOVER_PATH': (os.path.join(BASE_DIR,'static/images/nocover.jpg'),_('Path to image file showing for book without embedded cover')),
+    'SOPDS_AUTH': (True,_('Enable authentication')),
+    'SOPDS_SERVER_LOG': (os.path.join(BASE_DIR,'opds_catalog/log/sopds_server.log'),_('Path to logfile for sopds_server process')),
+    'SOPDS_SCANNER_LOG': (os.path.join(BASE_DIR,'opds_catalog/log/sopds_scanner.log'),_('Path to logfile for sopds_scanner process')),
+    'SOPDS_SERVER_PID': (os.path.join(BASE_DIR,'opds_catalog/tmp/sopds_server.pid'),_('Path to pidfile for sopds_server process')),
+    'SOPDS_SCANNER_PID': (os.path.join(BASE_DIR,'opds_catalog/tmp/sopds_scanner.pid'),_('Path to pidfile for sopds_scanner process')),
+    'SOPDS_SCAN_SHED_MIN': ('0',_('sheduled minutes for sopds_scanner (cron syntax)')),
+    'SOPDS_SCAN_SHED_HOUR': ('0,12',_('sheduled hours for sopds_scanner (cron syntax)')),
+    'SOPDS_SCAN_SHED_DAY': ('*',_('sheduled day for sopds_scanner (cron syntax)')),
+    'SOPDS_SCAN_SHED_DOW': ('*',_('sheduled day of weeks for sopds_scanner (cron syntax)')),                       
+}
+
+CONSTANCE_CONFIG_FIELDSETS = {
+    '1. General Options': ('SOPDS_ROOT_LIB', 'SOPDS_BOOK_EXTENSIONS',),
+    '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'),
+    '5. Converters Options': ('SOPDS_FB2TOEPUB', 'SOPDS_FB2TOMOBI', 'SOPDS_TEMP_DIR'),   
+    '6. Log & PID Files': ('SOPDS_SERVER_LOG', 'SOPDS_SCANNER_LOG', 'SOPDS_SERVER_PID','SOPDS_SCANNER_PID'),
+}
+
 #
 # SIMPLE OPDS SETTINGS
 #
diff --git a/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo b/sopds_web_backend/locale/ru/LC_MESSAGES/django.mo
index 934ad59a387ad42ffb131c6dfd8e25f504282783..e0c74d30839a8d0b1097c270c2c30d715e18a81d 100644
GIT binary patch
delta 26
icmX@CeOP<LVJ=>CT?0d112Y99Ln|Z8%@?>na{&N#qzG{U

delta 26
icmX@CeOP<LVJ==XT|*;XBLf9P3oBEz%@?>na{&N#y9jgu

diff --git a/sopds_web_backend/locale/ru/LC_MESSAGES/django.po b/sopds_web_backend/locale/ru/LC_MESSAGES/django.po
index 3f0c306..2ab2c87 100644
--- a/sopds_web_backend/locale/ru/LC_MESSAGES/django.po
+++ b/sopds_web_backend/locale/ru/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-12-20 18:56+0300\n"
+"POT-Creation-Date: 2017-01-06 21:29+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,6 +19,36 @@ msgstr ""
 "10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%"
 "100>=11 && n%100<=14)? 2 : 3);\n"
 
+#: .\sopds_web_backend\templates\admin\base.html:30
+msgid "Welcome,"
+msgstr ""
+
+#: .\sopds_web_backend\templates\admin\base.html:35
+#, fuzzy
+#| msgid "File size:"
+msgid "View site"
+msgstr "Размер файла:"
+
+#: .\sopds_web_backend\templates\admin\base.html:40
+msgid "Documentation"
+msgstr ""
+
+#: .\sopds_web_backend\templates\admin\base.html:44
+#, fuzzy
+#| msgid "Enter Password"
+msgid "Change password"
+msgstr "Введите пароль"
+
+#: .\sopds_web_backend\templates\admin\base.html:46
+#, fuzzy
+#| msgid "Logout"
+msgid "Log out"
+msgstr "Выход"
+
+#: .\sopds_web_backend\templates\admin\base.html:56
+msgid "Home"
+msgstr ""
+
 #: .\sopds_web_backend\templates\sopds_authors.html:8
 #, python-format
 msgid "Total: %(a_book_count)s books."
@@ -110,7 +140,8 @@ msgid ""
 "Bookshelf is available only SimpleOPDS Catalog mode with activated user "
 "authorization."
 msgstr ""
-"Книжная полка доступна только в режиме работы SimpleOPDS Catalog со включенной авторизацией пользователей."
+"Книжная полка доступна только в режиме работы SimpleOPDS Catalog со "
+"включенной авторизацией пользователей."
 
 #: .\sopds_web_backend\templates\sopds_footer.html:22
 msgid "STATISTICS"
-- 
GitLab