From b74a075aa6cba7c6876faab2c3115a0c4f8d5a45 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 2 Dec 2017 11:15:51 +0100 Subject: [PATCH] Added posibility to change settings db via command line for multiple instances (#247) --- cps/cli.py | 21 ++ cps/gdriveutils.py | 7 +- cps/templates/config_edit.html | 4 + cps/translations/de/LC_MESSAGES/messages.mo | Bin 303031 -> 303662 bytes cps/translations/de/LC_MESSAGES/messages.po | 346 +++++++++--------- cps/translations/es/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/translations/fr/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/translations/it/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/translations/nl/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/translations/pl/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/translations/ru/LC_MESSAGES/messages.po | 344 +++++++++-------- .../zh_Hans_CN/LC_MESSAGES/messages.po | 344 +++++++++-------- cps/ub.py | 26 +- cps/web.py | 17 +- messages.pot | 342 +++++++++-------- readme.md | 23 +- 16 files changed, 1720 insertions(+), 1474 deletions(-) create mode 100644 cps/cli.py diff --git a/cps/cli.py b/cps/cli.py new file mode 100644 index 00000000..d75d54c7 --- /dev/null +++ b/cps/cli.py @@ -0,0 +1,21 @@ +import argparse +import os + +parser = argparse.ArgumentParser(description='Calibre Web is a web app' + ' providing a interface for browsing, reading and downloading eBooks\n', prog='cps.py') +parser.add_argument('-p', metavar='path', help='path and name to settings db, e.g. /opt/cw.db') +parser.add_argument('-g', metavar='path', help='path and name to gdrive db, e.g. /opt/gd.db') +args = parser.parse_args() + +generalPath = os.path.normpath(os.getenv("CALIBRE_DBPATH", + os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep)) +if args.p: + settingspath = args.p +else: + settingspath = os.path.join(generalPath, "app.db") + +if args.g: + gdpath = args.g +else: + gdpath = os.path.join(generalPath, "gdrive.db") + diff --git a/cps/gdriveutils.py b/cps/gdriveutils.py index 8909db15..f2665ba6 100644 --- a/cps/gdriveutils.py +++ b/cps/gdriveutils.py @@ -7,6 +7,7 @@ except ImportError: import os from ub import config +import cli from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base @@ -15,9 +16,7 @@ from sqlalchemy.orm import * import web - -dbpath = os.path.join(os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep), "gdrive.db") -engine = create_engine('sqlite:///{0}'.format(dbpath), echo=False) +engine = create_engine('sqlite:///{0}'.format(cli.gdpath), echo=False) Base = declarative_base() # Open session for database connection @@ -64,7 +63,7 @@ def migrate(): session.execute('ALTER TABLE gdrive_ids2 RENAME to gdrive_ids') break -if not os.path.exists(dbpath): +if not os.path.exists(cli.gdpath): try: Base.metadata.create_all(engine) except Exception: diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index 4d59190f..4b8aefde 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -88,6 +88,10 @@ +
+ + +
diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index d19f5e449639ade4125949586cdf8ec738073b98..e6defdfe1dff9611927ec48d8f67733e416dfb49 100644 GIT binary patch delta 129900 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 delta 129393 zcmYJ+dE8c0`@iwKLK31VQ?sN*lt>~omdLDVX=F>0KEPYXPgPSY(-%<4|Dt5q! z{!NWRr`#M}$nIDN+hEC#UAb_=9`9 zC;lf^{;No+8d|?On()@>#C6f}4bjA#;#SxK?SCM;gNL9A9*K_c^H-_3IE4xWoQ-C7 ze##{@;Ak|lYf^t38u%_Wf&0*Y55}2Ti}I7`RxiY@@hdd`pJ==dOKXd*-5RZE6kDMk zJEAM;js`pp-O?dw0;ABCjYStQ0n4`_PDA@Wf+qMRy7FgJF1?fvub~0nOo#VV|5?gk zr@RvF_iM_3rMy1n4gW3{v}xQH?Y|Q`af_7qL>5@8Xvc+z;t=#ja}0XQ&x{wL0Y=0t zu{Pyvu`=F+-hzA42_8UK{2013v*Szgb+q66E z|0xowhW4)!w~E`M{p+C<@04;&G@-rY{^)`_;|4zeho_=D8lYFoeeFQ`)YSJ!1D&7x zORzrWVd&1?iH?5+o!}|7{~R>Vd^E8IXuo%`WQQeOxbiR2fh*9CKclC1EqVxRtSfHS zjA7UxvgK3qRCVk=sxsuc^Lh0c?EqcK1NUd z_qaX&hE7o9-(upr=n9*lahjuNYWLUyjnggmMf(l-m*?NW7p0U96D|in%I<-??n@OB=x1oxiH|fxFs$?1AT(!6`%pWPyK2%ku_=G zbbWCzw?YGNgKmA@)VE0e?r36dQr^EPmnu4O;psgBy+wFgMKfViYD?Nx-*}k z6Mh?4pb4)=C;AgzNCj^R-3V>pG;W2P@&4gkPvvr;=CLI@V9(eN9e4nGdJjP-I0{Xm z51LRvwBOlizYEbg!_s~Q`YAdNUC8a0eg5y}!h88B8sIr};QW*qq7%K7@`q@kFVKD~ z(SX08iTsuNDwQgipQ38$_#M#r4bgGUu;j!ox$t@1Hw_(P=Xf|8;K-DF#pBULPDT?r z5AAnx+Al-T)aB?IyD3gZziU2PsdA}&&lgkSmVJh1xE#%JRm#7|b?DY_P`Q|BGqhY2 zO<;R;2O6Pqc8zV)z8`wl4#I7)XXR3{MFXht@Le8nh*RS%^i}&J8sIB*<-ewVJ$mYE zRHK*FRp0zRJg<{imkBG&2=1qPO5}bn8D!hcB@OZ_rNZh;=& z+UVA9m-?3IVQho$NINvKqtLj$%VnOwlejQY|9Bo6a1gp9L*f-^V%MR8CZmbnoARS* z;HS}v=cYVA5HANHL6AjP~eXKghqtOXZ zM-w<3?SDbM1RXaVJ(O3XXW>pPIq~CMxb?50U#UJo2YieM{u14ZZ&O~4PV_svl7G<0 zZi9`Bvrr>8ifzzW`XT6HJ{gTaY-65(FGf>gX4j#oa~itx$I-(x4^8B4bixnN6@Gyx z_6_a#9ou>ghZfEq+?pBTG-z`6o3h((*>DUXMs4u$GGg3bQo$z9` z|A>@Fq5a396HG!Uyff|7Q~xO1?@2V_xg{=K@gj7^OVA0IqqpKGG~mzikGKw^lUtYu6Q0AXb~FV9dz81 zl)p&(@|1rdu#I28>vBhE_wv*@@NQ~x@;u=mmVmKF7-ieI@f z(|^zvR@$O?lT||x$*$-G?a>4}qbofOT~VKu&qd=5kE77X_!>0s&FJ@oJJE$bhShxj zXQyI5+Hny&;k#%8pQgM5P2e{)@L%YJRkkd~RYS{LqOaaMX#d^N30tEHw?lX02(0e& z-_Gp}j=q=c}7SF#Idr{%NJ}4b} zp!cqK$|uIt(G{MH2D}7a;c)a8UWra{Q@joBH#OcDA4U^>yu^hQ&qo8liw61}9k?R? zjIQVpbi#_QinFmX`ZVl-*6)fY&;}jf9-XLT+K)natT(#A(kWcn@k}((0CY!6=o|4m zG_hOLJ}o|(`d873-$COnK@(V-`sHW>tI+uWp%d5Gx@@UpD=r+kEgGmk`bKPu2HGX< ztx|5AatE}3=ajpmE9-%dJ04B^l(Y{>{Y5EXhE;w3FE3y4+w3&lfCiX^W;!|EllmF) zQ8e+V;v6)gm(WBOrT)FR1j{=Um#feJPh5D*RJ#bY5gKT7bYPuW5AELsU12Nq zZ0v`Ar|XjT6VY3E4w~2{xFe20&)jq@|Nj4pR6L8`tA*&qOVAZAi{HmpXrjNTycV5c zeXLq1-}TV?ozQr@rMx$~pbm9-{ta|+8V*MfNe}c8o*FMe6B&U9x-#YQ@#c6t8hC2T zGvXs?+$Z8IssFGJ&%XmcqrybKMz{2P^hc!M(DrKE6!lx6;!magT-sku{X#VEo9Ji9 zM_3Pkh^39UEi!6~-upe#l^=xu%+?!C;371E%izFT~QtM)Hgueo1+QrjwZHu>f5KjW6Fod z|6%$2f6r9(Mg#OiACEK8$LV5p!g1(?lh6sK#(U8O9z^@iLU-!f_!9c@y(lh4&&Kaq z{{8=YE}VFS?TbLw(ejpY8+5|@Xkt5}JJTASs59EXE1JmBu{YYkAG)*Wq5X!TXKNIe zfB%0y7Y>|+2D~#)PyNGa0*|Aw=4a4AbJ9LPE=2pimGb-Ot^6deM0apq+Be!E-~Tt= zp-7+>n%TB!$0q1uY>94dXLRCj=*oJc6P${ENNbGhIQx! z8`di(td5pzq64=<12#;1v$%We_eT47h@Io%X+IK;a~!guQpL$!_~PjwhoJZL>UbOa z_&kWNXdb%tub}tvU2KY<<1V;i{mKQwn2kp;#zSVG=aJ)H%C|85_iNl=z@Bq{mw!Y7#xSAJ2)CQ_VfR`R7{MM(Usks z@+>sK>^Kj7o?k=X10Tfi(1h2b{Woq{SOeX;+UP>JPq{UgKmXfu;eh?o0G-jTIy&|J z(9?Pb`Z%7Cu3!v$FUQAQurB4PXuKED9e6dqm-;W!Uv7QZkmujix`GO~a22|;-_e1U z8x@(?h+CokwnY=DkM?hx_BQCm?c#xG|3hLobllPL_(r8-1*fLs+;kiiFGB-fp7K@b zipQaWCdDafzYp#IaC`#Yx#!TWe+3=)Il91aOI&!`e?>c1Xv#mA?7GCE;@wBPwDU!3;Ra4sA$8qH`ddIoMmC%P~7kE8wOp@CjS z59#Zv{}4^^GjzhQQ(lQa4Zo(o@{Yy$O_2Wl`41P~!`kRh?1(1N2A%LAG~i+JC^XUD zDW8FkI}aT<0v$IV-O-yioRmEO1U{2pcT49`=JvZi{-O`?#K`{u@bs~ ztI@=6jJKi*+=V{YGg2-+!G(uy4jNz{8gLOB;B7RakI(==p%bi0`+w*TZP=`6-vk|3 z6OFSi+P^-U_|9=JWWG|xLFv#9o#2?Fq2k1p`=@+98t5|g`@kslF}f8!GxwqkSb*-> zyJ-K<(S(+x3H^kgx! z746>>-TJ=h#OI`bFqZs~8Nr1K+=33g8_O?>)IWy?cmI&>W4oPYa%ZJ9MGKQ+ZT6_D#7zx}rg;AB`q@eag3?2AdttBcONcZmxp?0{y}6J5c{=z#N69*ItT1De>q@foz=qLe>P`6u)c|A)ri zvSrb)9=c;K(RoVya$$$V(2R~r!-**mK)3wjI0C)b*PvT_6M7~lr#uaf_b7Ug=b+;k zq4D2G5A$b*rHZe)@CC9W9af_O|BU~lf1+7s_u?DT4(N*aM0cb!x+A^gIq3M|Xo92A zofseQMiY4wH}v^`o(mJ0k7l+Y<+tMdXuu_DUmBOkpU{bZM+2`%<5k_G*r`p?9oQOe zuOFM*?&p8YRJ27WIsi@NU^`$}bj7_=e+GIF2cQ#QijEtNZuwYrqFdusY(e>cG?5R{ zeqUnw`~NB~4EQ@bu%cBl;l^lrTQs4D=)j#*-V2?0KlIJl34Nb*K@&d_y)|d1d?}j1 z6=>quwc`2r`M!k;oq-N`2EAvC&T)4vS=!>Hlx`pSW?}gFmz}vAgKAQIT(7%qe5>32no8l>Hh>mZU z@=@_@wBIQ7g)}*qW^-Yn_pt%~oQ5s;Dt=Me0&PDW4SWXrIF{lqsh@@RTZm5dExMrf z=t64mU6fm(<2xb!N)^X*;lPX0jyGcYEW~G0zaV}Qe@AcCCT)wYuZ5PkLC;D<^b9mX zceribAKlS|a7&;6W4Z92o`s&u^U-@fG>$?8UW?x2>r;O-I^mt@ita^E_Y3HmScp#i zF&giSl$WCk{Aj(;f5kqPD_Xbe(iYv4cH|ON1y|GqK`+Pct+|kL<0{&1C2lvyE^sPq2ni@J9ryL#h;z_YT8s~hh zj~AzYV(KTCxNs}(K__?^J^fFh6TOTkun67qH_?Ef$7Sfa@8T+S+?tgCL4V(0xqT6* zA=ic>f~P8t9hQM%%YT12<0l&S>H-(TUrmfsa7@9gXhHaVejO#yb@qcP5sf z|3T?64BeuUXrQZ8e*+q5BKoSnBlXXu{(1C`Ha~uZK20lAuINy-Z-vI+8I9kvL!SS= z)6gEBs1v$^L(!FYLqB|uLAUI6Mps;^W3kezXrSt7;96+=cIYi@kaAlz-u`I6PDOpG;;=My zM>FpkPc1rBT!`NDA@K?{z;$r~n&9mz--jmf2s+^tsh^GB(s}4NpoQgnp1*In@ZG$! zT)|2@6#;6-ZDKt%;EpLbOSxsrd!mW8iwCCu5OiF(lzXInocjFt<-%_&r=S5YPKRMB zk3?5=b?V2bege9p+tD4EhW49@PWV)O4t+Z2q48gj?_%-a|8QY|FVVyHBRXI$dP_Dq zsHm@n9=Zl`cXYx7(C7bP^!NY0(eam{XW$C-7T%8bpB^7Pi09vmS*dtBK93HVk0$g6 zx}s0e6)!~(-S_B-P-Tbv+x(X^6Cc{ zPthpFyILE9$twia2wk3VRWJ= zQl69Y{FGmh@1k**pc5{|^1{;oJ$lAgqw)SJQr;mpLbq^dG_h9b zMEjrt_d~~ZMtAZsG@;(;&h<1jU~?LQbjd_%D#UX7h_G479B99H!EA3ERBhvoV2orZqs1gD{y_eXc;0(8P* zXo92AofwDqn}~kDpMoCVr_c!&rv0syKSmS%0*(9iVLbny%2iajHGiXlYaU)4qV3S< zv^hG_K4{>M@enj%H#ET>XyD#hUP$WuqhG@ZqFX;6jXSl(g#l{{qvIN)JJ%e&1+8LdG~TgjBFCfsPbw@`oRx+P(Tp!aCn%*nI$nz=auXha z_h57U2A!}*w<2&O^h0PDG@(P$SNDoA|BH+Lu=4*Zm;X!01JEtH0G;46 z^gG^2bOn>p!!#XzvAm4FP?n;H>u2;HSMFZa*FfVnK<{}obOCL!{QJKSTsW|EJO*8P zf2@x~QhzJD)eoXi%UpD&AI2}x9a@eiz9Qvc&=s#i6Z<<>Ju=V#R!0^Cw?ntA9y(yh z*bIH8?uJgdN8AUU@IbVGXLS5w==-2MI^h}Uf-Xw^C^W&_kL39`;N4U>@BuW?OmwTB zOve||)4u@S>aWoLzoz}KxE>w9(NRTvb#&{uMC-RpeSI|XCM7ORpc&e64>YrO@xXXU z+W!}iMFXCc_S4Zg=b|s5L1=;_(0hF)+W-2r-<)#kE-svKIy&H?G(3g|dKwM<654N3 z%I~24m&B#Zk_geXaPbqYT@1(=W=q>po zKT`fL?He3Z)NhXNOl>rQhN<5Ewo%8-NK#Fd$~Kh zwQbVAPdp&)T~a;*O|(Z*E>-kNhm+$OXy)e>9V!N;ekhvp<#7yp%dU%eqT?P$CwL0& zKNo!rUq;W;2k2S(4!8I7e;pTY^)|;9D`<=cXo?1CiLSH_y7CV3;Mg@DjqY5Zl>4LO z2gZxhd4{5ij=?&9{$HOCGth4)kDza^m(YOkpetP(SEK#bqi3O3@8W4_fj%`I&=vPY z6F5DdgHC(_`czzoCGXi7E?n_gG{c+Fl}<)iJ{?WyQ8e&ewEtW2BQ)UBlvkpO|Au}+ zsnn-fzz*ovw?OL;?8EbKpyR1<;#1KTorflH6`H_!wBN1hVVfH7MaMmeuJkE%+#EEa z`DuR(UHK>Id*JJ||J;Y?-z{604mFQ2I&O~!+7bN*vB|IO&m-(E_^6fAFb%8#M}o=p9m)W3?Zcyas)UD+~p{7Q7(8g$3jp|@g# z6N+-pxLqtY%0+W@1+CD-ws-6jk3lm(Bc6*+a3MP3W$5^kDUU(>k3&~F0Zs50bSLjd z5-(Le!i625j?c&W=zxVOzlTn+1pO5IBIU2pM3%=@@eefae{qApMR^mn{}$yk&)+s& zxZ-+ow{+Ma{R}u5UEvAnSvVC@y68Of#p+-z7ZdZFQ9SWM&BzRqYGPwj$f1Z_2@#YmQE_3&pPOvsR^24 zD|Bb}Mkm@g^Hv|Z?s>flZ${=(ZsiiTcc0UcIX$CJyL&Y>{eK+=)pyK1+gzW!KvuP zXQP=9LMON(PDEF7dz_Z~hvQ@D_@~jGd=Z`J6?EmVWBJej-sHkSpTw`xmH&t)@;jQq zKj>+$b4u|cwI^EN6-}%^I&J_u@x|yp9)TX(>(R3^1)XmumVf_0I~8-Spy4%i;>Gbj zH1ki;z+a}k0`31ZI`Nvc|BG&U)l-X!>!TCyh9hL51?n_*%B89T8K{kW_&;OpQOALUCFm-;MJ-B4IRHW z_5Y#wxbo@6PSrxUetUGn9nsU@8jVxhiwh@imx=?>6&-|rUH%`sRVSfae`d-9(SU=| z@mHq)S~T!YX#YuQ;!{$-A5CZ$GOkqdY#QdFD_MX}_(tmAM+1D8`sJzr2~BiO+AGc| zCfo$Qr8Uv5Z;JNY8~twC5q&lH!Sdh#J3keJ(af$x6PbvG6PL)CK~YR)W3xG zUxe=1Tj(qMD{O~9rM&Z*#n<#b(H-l8<=_8x<-!-qG4Vol!trRvlTtquO>i+9;Dh*S z{0dF*JM`4Ai}staAZ2c}_o8pfih`*!p+KY#{)1P$;MI>CH&;)Uod z_ieP__vnN_$2I7g_&eo|&Mx{@FL7bVT4=y+Vm)-?9aG*J{f)jaNwutp<9;nU+6^Z(ScRZE!-6Cza=`sHnARhsCGop&YtMF zPUwytf}WjT=(tmC_xpc;FK_^w`GqMDMgtB-ADe5@TQUjVk*VmRdlC)!Mtl!Va0&Vz z_!8aGuhae`n#iwM@?t#~X1wWuBGc_-Gjzhe(bIb%8n`Q(z|rW$XQC4fNO>^2bHn0j zbli1mpMcJL+W?+_1KgL652xdk=#I=u`NfnMpn=~&6Z;_LrSZGC8lCXZ_+Q-cykh*O zXaZZE$MbIj4b#vR9oQ1x`n^(raO{@$Ug$kN0UdvKJU~?pLhm(7%xNv4o4SoCHnM?M-!c%_J`1&dIC-CB{Z?ukbb3#H`4Gv8gNO` zQ1MmD-^ZU*|5wWE(TS^`UyR!#Zi7zL0G+4_n!qmTg7!gopfi@A|Nn8}#K*>d=+kf} z8elM%?o(CQZyUnCl# z`RHN(0A0wpXu>~Y`RD&%xp3fG^aWJq z!XjW*bU=+*8_m2f8epf?w@7{Kl-sAhQ_6>;33gBUSaiMEchD&_4{ zZk%#+G(fAA+oBU6kowN4KO9|1kCcx`pZ8PITQ&ln=ay0~reOK25qj@tp&7q~23i!~ zLkE7A_OH=nbVgTj8oKgf@k%tY@n|Bq zr+jaG4Bdgb=q-Ca^`FJ>Q~x{qV%qSM;(f9WmaJ&Og#kLC_w)$#R`gD}Kf0p9=vf(t zu5=`t=(Q=|jE!G)wua0o%p~g{6w7T$u50Xoh>I!-1(k1YOCIu@@S+4;t_kG|{utJ`jE33`+fw z)R$5og^s@l8}t6DxRDDVyQk9dX1Re6k<|ZPfk;t~_g!ST%=mMIf3uuk@-!JtC z#jfbYy<%T1|NZ~d)8X7STx62r3|~W6_9psReU2vb6FTr$wBO(8`=SyHD8CW&MW!CwzB4+mB^rNEG$H?k zC+&pxD;<#zJ>qd`I1%l5dg}d2$pM2>KQ!ghXkyo*J1`;TTjE`4f-}%W9!KNOF3P2f zm$)$S0<_~>=qvUUbjw!7ztDb_M-->L8tzNE4jQ-z8u&PL=T1gnP#2&(H5wg1DNe@n z@BgQBVSrij>G*t{j|N_t^1EnaAER5m4Bdh6&H# zjRxqK4riqPJak2a(EeAVTRaxahc4~6pewx}jq@~`z})z1>fc0f!3QIAsFqS;;N|JC zGX5IZq7zkIQEd4J=#OT#&~eStS8mIA5IXU3=zHTNG_iBhTXq?`fNM&rxC!leHyZE} zbgLdmS28=!LkGTw_In$B<9&dRUxq$KtFSSyO?%x@MV#hnVtb(dOZ%jvGdf|{*aHo8 zT-r}f{W<94c>%hTE73!CGy2zVr=y>y^U)Q5iYEL68vobS|Ama_-+vxm1l$_!*bL3E z6*{0@JOJH^gVBCn(SE(s-Z$k_(H%JlO<+jMW6*dL&^WhY`RD(ssdxarhqJH&zKZ_L z_8odys$5yDbTc$iUG&4HF}mV?&>cAvO|W0=k4|_2I&KJ>cuD#GQ86YJ7ki>R(Ffh?lhMO< zHu@M1LAQQ%+HXWByd8aSOhxCJjxP8CG~Qz+E(|z39bSsB#l`U*bijx4b2QL5=;8b^ z^?#rf|BEJ8wicWMddaGumaTlO*-$E8%s`!8l1Al>bT!9|4wdjCNt|Y^)XfquU4 znf8Oxct@Z+dn~#`C!zh%M&n*sF7y0d%7qz?Ooyw`m0XWbbSFCCA#^7mNBhr3`@M`# z@D952Ptkr~qKT|T6Ztb%j4k?A!%cktH|N3*+oFLQp%b(~CvKJUKCuIO%Q~YI9vZu) zy$2fSIJDm>Xq+?99T*TV#*$k-oC~*be4L5~ejH8Y88qNrG|>fUpm)-~B=t+tiN24k z(H;5&jbG*3Vn?@*J6_B4Zvw4TaS-}g^*|>&2@QA_I^p?fLPOATB{b3N(|&Wj6YV!W zh8!>b-h34ezAmhv zaC$mCg-$#t<(E@ll=8diz>nk7)GtR9`VpOAP5e9U>(RIyjw{A*hL*QN5-nBikcLKS zXjU{-?12W{JLUE%cTBlU?3(%>@mMsW6ViSi0tfcS`*cXulrlVLdjUjK(4 z6Jmcf;2<>7OVR$L&LeHbi!%q${#>?;u$pVYuEGqmsd)KpH`otfmdTQT#E*1 zd_!^XnxPZ!8rz`b_Di`tn#i#!pNJ-W26|@BNqH#R@A6VAu0j*JE>1)zo|5+IXkrhf z{)yB-i;jB%O>6=BVtE_g;^pX}`wLBE9U8aNjfJJEx!4SS6V^gkR1Y1nN80yFdwX;% zyTqPo0;j}t&_o8I6AweXq+~&J$eQ@Vfp|6?j@uudxDy($8#>=HShC_oE*x+sx}x*YfrHSFm!bhiqW!K*{RH&Z+=2e& zbT2yoxwOBC#$Sk@sdv-ki z(VukoMHBfSI#EwF(c{s1PEYyln|c22IEV@ZUWQII3LSWD>Tim7pj$s3UD4y{mcNPy z{wU?o(D6T|{&)04Xf664*l1#L2y2(Pa9|U3i<_f=%cTvPP&f23ItER&51QafX#f7` zL>I-&(0C)!9T|frd=vVYSEr(J=At`NdYKDbSGX%`z^up&;MU>;e;#VFX`|X8mQuyVxo=E@)qbVsg15|yI4Q%JEHNL zqZ96dE}%o~j*dGC%fJ6SoeKk=lZJt4fI)F+>aU1b#p}?7ZbY~K7W7O^N5{`ZCwdxP z@toAZ9AC%s&;ReH!$)aYiVj?kCbly5tIXyT*LTQ>o{b@!kPn-gC`$1gzR zy-`@I_>c=%x-=cWMgx7H@}Fp+b?C&E?Ga5T=Scx{{z??4lqhUM@7PjO+! zub^A^K6+2TO8J-gADUS8$;Aq4q7!Y8);CUlb2Q=B=&jucO?W?aoxSh&;P(Q z3_(9uufhg+JDTa7)W4bfuh2jFtURSSymirAwMXoj`W{$5yy#&bh$eg~y3mnRO2x%^ zD(rX%n)!5ez=P<3C(*5bKJ~AozZ?DlJp;d>J683sVx@J^a^u(5v9#1H7;g+0* zzKDjTVO+c&JsUI71YSf}`W8CDm#P05P2|6nx0+hSZG=v|2ikvsbnCmJ3oM<^g)1M3 z-oqj3FajNLOUg6Q?+NqJejlL;eSwbu5#6aZY5x~}N;bH==wB^vf%dC|Bv7iT&xIYE zpJJh z4BGKbG?5F@r{OYm;5hU#x;f>kXulb8W_$*ncpf@#VajjECFr zA-n_KvWMba^h4`ybmzWFc?}w;+Vo=l7U;sZO}Qz$pxx1(ZZo}93^;%a4^dP{DOGtmCep^xcnX#X!${uNzF^?Qq**b3c&9nc+VR7yn)H1k&IfPK(R zJEpx0x|LmH&(xoQjyomgv(TLxh>jnX_N&u=JsN*v>Pu6&a4YUjhgs-~o<;-AM<-r@ z4tzW1CFsOorTl&T8IAW>%2nmF}AIo+%%Q z-oryuJ}MrU`hI9)XQ4ZCIl6<_qVaFW@_+wxdn%@*6FrC?zQ^KxbfWjsTk}O+fhPV3 z*2n+Q3F_TnB;GXciQdWs(f$Xchq)V;|NdX!G@KuYpc!7C@)$I+@#sn>q5-C&J2WfK zMH75I?H{3A{T-UvA8|bzXX6KW{=H|l9w;Vgh-SDmI$-zI?}P5Z0cc`}rM^4b|Cp3d zM8}@L4opGEPeY%Q2Oi-0H^5vf^ws!g{19FF7wEum(T~rSX|M8NvEu6J zO6#Egc8V>~gj%6-_Dy|9ET5ec7w*7O=$7d6PQ&Zz_%<4F2^wf=T%Puy(*6hfFCVN+d+nJ;|GMax*B#L~?cxDx zKNwA*Ybgyq(aid!+z$i{2|)!OLW}# zXrgPd{P|z;c+sI6I?i?v1{fPD*(o8fUO& zpZ{T8c$!C{0k1+cybiqux1gCng0A#A^cKB_-s3M){t=z1$`eI>&Da3lx!urPyg&MQ zAB83F?1xU+6CHOZ z`hFPtB+tJcZ>GYD?v2l&0~VnJK1UDVFDY;ORMFl59p4=cvB_f7racvaeOjgO-{ z_{LK_|NdJ18!DWj($mGK-wx=14ci`FSs!$wfoP(aV*|ViUEvex-+o(+CcXmQ@_*5B zn>|z1*F$$~kCYE6ap6|?Km+$jpYzMml}}3jgJ_`V(Fxu}&&pTmp6a^lrKp65_F;waZK9B zp@(|{a+pgMQ@C(~2h-tkbl~hb4^8kj^z?s-Cb$e8_bb}}Z#2P5&lXS9M(6@IK@;90 zZj1JBRF>zjSt@o%1MZ!2hj?)8ir%WD(ST>A{z7!(OVJ5SsUMBLC$3HV#MIv&?^d7x z`%^I!eGfd1PVgLhN?%4-{wbRIcj!c`QvMyC=pXbjZunerXzQXo)e1dZ9kILswEtOH z{{8<&T-b34HpZ*bi62Jq)ywFFZ=r|q1N6nSJng@uiLFO>aHBcJ0yak%R0mza_UPl; z6iw)WIXwRkJcr`sdKZUru=uI_^Dm zo=@iR{F~V_Dh#kH9e#^{r(>n(i$K-Tel^fQTcx}`nqY&}H%C{xN9qql6FC~)k>2R| zz9lYP(P`;05Dj#3I*dRk9D@$LHs$Nl72J#lx-<3D;{9oVBtC`qn;Tz26DloEhj-D( z>=QJhA5#83N zcDyiNh7P;}P3W4`-yH9Z)8oTv;3wmA==c{?UVtX{Cc4m%u_p6Ze3y#9(bHY+h2q|A zhX!bk25yI*`U6t#miD93r>76P6KA6nT!J3rG3fZ~<3u#>9hQCm?@7b`=t>_&x9VB6 z;|pnj6`f!)8h8oXZ&~~f?f)ZssDF#=(FCf`EBbGV_N$HM|Nf^g7j8}Cbl4Rg&Zam2~R=K#ZptI#b?DCAhTi)b=#D*&##w;Ie?NYOE@V|H9sWwg1}_zXwnPWkM+feba$EEr zeh_+AddJhy1O}r0hsUvKoLka9Ek1_EDb3@;Kp&!+e}xYCIrZz%z*XlL^;@G8G(=ap z8#=xNx}w9-TW~ZQ@3?p-daDM<;f1A&(OeklTJ$^Io#?07)96;eg??BpL;L-X_S^8~ zqP{+sU$y8rro+&$VtvuCbVJiVDeW`SI4_s$dHy~~hgIlARbMGOY>NhJj&9W<=y%1w zX}=8pu(=kU_#X7T;?rn?i?KN_M^F2fuNH@HYxHo|!}90?vvA4U)Dv#;^|8{icx+@jah@%@xPL09lKI&dXA@UK{9LD9Z> ztc|X$9vZJn>UWEKrG0;N-p-|59G-?FQ$9B3zUbq3TIw%M{Sb6zBjV`PUxNm|0o}n# zXd+Y5{tu-6QFLLYCsXl!I?P8`upsqsrTzmn;3sH8-=K%=*H~#`F>VXAUmbL(8lnlc zK%atEDer|ORH|s7iUVVpqM@QIn#fV;)*qMh>G51N@I~>`)Q^Z`&=rqE-y=7n3EhkC z$gHwF|Ic#aisqwF!#n8Ke1}f38qIu7>er%yD=jMAC{~YKp#8T_d0Q->2{djKbe>&t zdq4j>ap4Q(#57!pzDTY{AG^tDfG5$3=b&5sBKo3v9bLe;=yUxW+J8N|a~r*0ya#Hb z<9CU>W63~mxNtxRG|<5*AC2X2HfZ3pQ$HBpnc;C1x~12|o6vZ7pcCGc`WfgB%!;#L z=lM6#i|OzhI`D1uugiRdO>ixmX#K@SfM#eyd!Y6E#V+XhBhiG8MH4s)o#%9Pr_VwA zjaba{@5LA@+^TW$cJ#AgMtl|xuozvzyYZ8_42`n_o$wd5{~vK3no#98iuUSg;#-us zu;X@UfCecyO?g)|;GQY(g9bVP-JwIV37(C{xdDwcDdov%!qd<=52bz<8mII$7Y>*g zUyE<1!v|>KFVH~Wr2a>A+?u!!ouJB_g&U(2Y=-u$opN0?&Q3`GQpIju`1##B9gaW` zT~G90orXRQL(qZa(5GS|8u(%KaeD%t@R`)Vh$gfE9rs4+KS29^R<7sy`!*Fnp#%Pi z|DY?cc&l)uxG5U2CVCIILlfCC?t+eMm2z7&ZU=PSLGcLO)aUG#sw{!^l=DQmGCD)X<^Yj06R5;;F=t>r$6TBCf zpb0EZ`|^}mqdWEoI`IbY6jnp~Z;r;>I`#F?xQ%18cX<9C*fJG+q8}3N&_mW4-SXqn z_rdA$67;LpHR$2I8x8z)d>);6K00nOn$Q>MVf_~E|3fJatIw`Q2h*HFTw0 z#CoZ3fsSj9-ut#_;Db_s7e{~EpLKcaEhq2o4qujp3;Ipn2^t&59_9npcUQ*MuL{o&{YJyYKs z-OB!G;DPZHbixtn%C1Kfx&s}5H#+XV_y}(5&;L(y;Y2T?2`okfe-J-M2Y!q8`!W8J z_KNq5{u`qcZ-MsT0gcxg7hjEwQ^(TQiIJQJPp zDRlgE=;?kb?XSkgXhQFzx9C%J+;<=F{JW(;QlbB%TfO;*MZmgoNAz&*68A-)`@_-x z{ZfA(ns5o7a3uPw9*ZvE7IeXr(Qz~F=oY<@4hzwhycIu8`{(Ej=exKbouJM~#flrC z<90+R+$H6_+dHMU_9~TWR|M(Wj=`C&ew<4y|ty_f7p_ z=#CzbCVUpUfPtUn`~ToH3`19NMZ5}4;5u}`4d@Qtf<9(iyhh&EpLskcsq3BW-0HT_Jh$wc{n;@ zPjshG!166D<>GvFD=$g;YV=lIj}E*Q9XJ*JV)6)@z$@quEkXmniT3{hjrTd4;3_o1 zf6-f5{j=hhm3HL9L$w#W(!5;G_jjfKM74> zGMdmsg{6w;xNw3+XrOoF5;V}4Xo5dref$?)LEX=b_Px+?9nd%jr@mY2k4b%BG=bC6 zg%V zCN{+?KL543FoEsR2^*)}Eag_{R<}hb+7CTchoBQ36^}y`?1%2qnP|VuQ$H3Re^crw zWBK!cMmjtipGE_}fKL1>n&9hce?RS?p$UJD2L1u<_j~I9MZX_ZSz1^-HjC|-^8CA% z|D(dKJTVSLC%zm_) zPD7Q@&Hm&C&k5qy5^T3GJWugVED}MC?=I!Y>kMp&c!o z$QX2jajBnx-pe~ue=n9FBWy+ebLhmY&^W)LKWhDh?(mjh6+7Gz{jGQ_^l2(}<-!-r zx#+~B(22*Q_w)ud@Exh28t+3VdKew|B>L$&C*=j`A$%+4@6mXx(fEHCWzPSyqM|zb zm~4r5tcT@SDjIlibW1zMBhWxS(M0;Bd`cdUF^IwyS8_zyG~&Dh@yc9gI%c4ZY_* zQ$7*PZ!mO6E<$h32y|ygqk+ezJORD;ccSqgPWuz+JkMguj9%ixiQYg1eiT1L2Y!Y2 z`yQR>H*|&T(Egi!Qyj*cXkrb~r()NX_dtK%-w(aT$Ds+F{teIn?pzF@qBTxQ$M?`b zdRdL-3BD~Ru8AhJeQbm#-Yo5{(f;kzeqibkN%=^0hmK9T@3%bvK7OZBVdj^jnO}(p zx(40y@$pXdjrJh=_{~lEjg-GcCs>WHa81hpqB~b*d6Dp@=t63jxbO{D7Y)1z`dl7_ zKBuQ*1GJys6<79O>Ccd0J^d+=*}F8jyo5Pa{(Iv613l_)Q`jR=l_IM+#aW*E4U90 zG!xDENp#|u&_oud{C_mvdB9cE+lTQdG*IRw6ls(Q4W@_;QJE@!5<-eHMTkU46e=Wy zl%$YkC=rq=V={*fm9da1QK96$uCu@IU!T3Ed);g8wf8yCQ}RLl6z%^d`V@VKo~0kq zL{_5-tV_AdPdxtys_|11xF%ZO0o}3&sc()3XpJV;Chdo%d@OoTyTv|eqL;@K`j}sb z#vd0a|HSj};h08+TlXUR!{ry~&{hp04 z$9ZVH575MxpmCO_{a5AtN5$%NSdV5}`S)T#b##KQQr;GA-!b(K(Umk!xh1+Y`=ZbL zq3EqV7Cp45p@;H9^sJSzd&P6&h3Hc?08L;7x^s8_!SnBc`=~I$6!h_#j&9uxsec#kw-8I`BPo;*V1PJboF!OZ$)UH+1}} zxDK6f!_~f!c>bz$;mUVL12>PY;{NeqbcOBFE$@gP!fxm-IWzSG(6ccVJL1jgxX;ju z7o$776gmHVgWexl z`S1Vr;KCi~g?79s4nQ*<6o;ZabQ7A$ZRo^zqvIyUDd@OI;#25^FQohy8fU?pJpZ3j zVZblZK+Djr{VC7Y?+2O=q+i7Zrw5H1l?2L8%>~p>W85HZcP1MXxu4r2D+f<(0(tW@k(!VVW5TR z)-6lJFDd_pCiWkian*l{ew(88HPMOcq}&)AQf`i}xNGXqMB|?u`y=B@6$82Oo?Kg0 zRNRP8bO#z>Ji7Idpj$s1UCDg3-}`C*B<1hWc*|4%15NbrSZQrh-WWIX`QMTYGpiNr z#)jww&CoNk7dmlkbnEs7@cr1 zI$&tZx5csOg!iI>9z?%HK8fzkLNxJ3Xq=^J|DV#nGUYYsLe{V2`FG+f{}!ixOEl1q zXn+Rj=XO&x@PTN+_Gkh}qy0}t&&KKK7GH#pAB0XcBo0T%kB)c!o6rAysc^spaauae zNcoxgLh4^dAJ6$Ie~M1@B^u}ZwEu$cCkL%8h6L;VF+ocX%v%IPXX2dlH?eG$$9Yq~WcUKSVSB3|;Ax)c=G| zxH9dP{wo4iK_}i6onY(K?~wZX=q=m@y;XY^mMRWOMOQS#Ug*c^B`IHzep9&<9XK`4 zj`Pup7oih>gHE(O?SG(OayQ~3wqG4|VfC^6^M8}_1%J$ju56!lXpau)lyYZu%l?OM z^{MDBI~#qa4n`9lf%Y4Zj-QMsHWi(CM(Sr_`QQJX!-e-~J{sr~G|)HL5dTC6Zda)Y zv?E$>jIOj9I$^7n+ob(4^u^U7?MI^t9goh_9m{|IcUCI;p^w!dG~?mu1f$Uj??zXC zFFN7Wl&7N$n4R)#X@4(%f=;{`jq@!U|A$Ka`G*;+l`9)-O#{oQ$8L|= zfW}#f#$S^9@6rChSnucmDlW`?y%kukN-=OtbfVhmnb;8>xOZ%ej%$yOI}V-jB=mHj zj*jnzKJVwCD<6RN8-(T0|7*A~@bze*QSmM`z-Vf z;wp6Ff6#dWVS2s3@ zP0`1Fj}jMth#ZMNx2L7UrRWL=p<6W!%Rld@eR7J-_vMm(Ahm#1Ei} zJc-0BRXkfwW%@=fV}7iUv3nO{fpLl^3S|k~k1u$zXKcFtq>3wBMHcyW#}2|NUv7h9)!} z%Rm1=%Y^}6L_5Bb4)3B9EJW}1;dIuN~gN23#*j3#zE+OJRShbA@v?RO>GZwUJ9`r+sqnt~p>7t#LjqWwNX z&)T9IJpX>UtfWFW-LyEZyPzEpLnl58z4u*H-y40Uo{xSk4@A$%O({=6cjgH+!CC0S zo{RI)xC=|USc0D3rD&!r(1EMbMAo7MHr%Y(!cEYv-5PDLi;i!U_C3+@`^C1YKNKBz z6gsZ-KQ0{DBOUspr@BA7;$dh)ccKa06Yo#`G<2dF=$6ky@A13n1Pjrf_!6D?+tmMp z#4A;-;=%#z&@HOGd9k%yqXBk8+nb;P_Dp&Iv>%%KPH2KBpb4Lna?jW|^%tUNVnA7* zzhPWB(e3Fl9)0soLRa>5>gU9{Xd-W-<33FJ^R#~#m&X-ozt!kYtViQ+umuVG{8#0| z4x7bV=uYft2iz^TjQgWI(hd#O5nb`IX+HryoTs2qRUb6r%h6kV4Z6TFShB;zTzIc% zqvf~J2^OWi6#bA|g$}H-W#P_f|Gm-v?c=fNtGOHcbX*jNp$i&|E_mXWJpX3)5EZWE z33Me-qlfbOl;1=Lyo*ls2|DgewBL_u{}bK0b#areigC5ke)Z4~736`UQ z{y?|x-?-)0#g;chw|4*76+O-8#X)G`5om&=<5+Z_`_euI-Ko-JshERq(JNTqYBZ5g zQvM3vp&!r*{zL<=O}SFdqP|+(9F0>e?uhnpj4pIHBu=TKbs7#RDk=^^2X;ugGdiGK z%4eWk*(VM}`;UmX#=Fr4OhV7rBWRo%Xd<(*{P+J};=+#e)9`Wp0=)%aqbpv8KELZy zuGpriuZjlT42@G0ooGjNN1LEK*COS%DR;o~zyEhaDo(S4j_0O)Y05*;Lo^ay>0M|- z6XO&#vB%KI@rgJ$?H{5$@L9@BQeKMXKmT9Og)8_y9oC=|tw&cl~XRD*-ZEz3Vep{Y@C+tXtc18nsLj&|c4_n`quRsF~L$`bc zdT(z|{oUxw??rFr6DiL@AJg~Z5_Cbolyb2O4g7D)8`Lf)-UPj;JEYtU4RioHaVIp; ziSaZvv9r;{&qWiu5?kUZ+#O%Rrdax&i@mtmVY_1B(dZU;Mt7up%4eVxos;_hDGyBh z5On88#9QJWaXdPH68hqK7)h*D@eCKPXg+$%KS#Ijdo+RH<6rSVbfPNT7uJYd#oFis zc0_lgN$Q)S3G9W&-w(@w{(mSJZhc2I@Uig(bim1IB4?)l9CYh1O#78_XuJ`PcRM<6 zY|0bU{y@r)V)@_yc)|-hK7(fbLORSvcjk@wN$QuPftRBz{T;o>|DgAL(;bS(Ye%%c zHM)=^(Z4l+9J&KtvHbu4Je3PG?v1YO9CW|{bfUp=SiBLP_%?Lhcys~xr91^4_Xrwi zCiF8F!fWFz@LszsE9rtHki^koc zZZY8|XnRfc{jx)e3%9N@+HtpZXoXJHChZ;KvFJ)pKojqd20RlDcn%upQZ(*WX}=a7 zHzMUx=mJW2aN(cfOhLE$t+)t%cmIm6aDyF-0kzQ|v6`a&k3bVR37z0{^p)Nl{i1Ru zdI-nFhtR~HLlP}jyv&97Vjdc30lKo!(T?Auzti~#qV zorT6bFJ6p}zXIK%VP*OLeG?ZZFecuM4xEavXgV73DKxR?;;ZqU_z4>4OZ1Tbh#tyS zXq>;%IP1~)8`UErzyDX~!irjG$GWjTnrV}??~(ewQ*MJMbO`!fcR~|52A!xI8n;Kv zz2muP+>5aM{eK`Ae#i_*@9Ee$4Nd5IG~irx!Z*?`Xf(=+#eo?N5E@X4GUrn@qM|7fwaX0j7 zYK11!vBZVX;ThlW2hFQvVW~=sYx$_tL%~^`EAGN&F`D%dq_U|1%c`{3HH_ z-lKof#I|l&BvuEVs6lL+`aRH7zIW;mLE{~n^3muHbWQ!q=&Sv7EIC>fb>V{Sck#iSpN4vHfdB;)Ic%|(Hr$zx z51@e_K?6U7?!XK2b#!I#qKPbwi_nR_MpyU)I_~GR|B1%?8@H9oXd(xpfjgmzc0qrgemWZHN;Hw%(Fw+)3ErFfhtNbGMH71p-SKD9@um5>_%^OZ z6WDr}B2Zm4fyP)5cSk2Y2JP218K-pb@FR0~uecxH}#0N8jlW z$Jyw_Z=q-712oVQ^xl1!_O)??rbYY4=){|&E8iMTcn5UF_0YKcmgV#Jpj5O+J06X0 zVHY&O$!R|`?dPQ251nWLn)nr|AAu%1I^{djSNw#OA5Z%%%YOdP;lizXB@OSP34Dwu zumnBr%hLWIdUz`DS|q#$x}t5+TT%xd*BDKtIoiJ!+V3EAq3yB!=l`9!u;cOQ#NE^3 z%+&Wm2VQ{Q+e^`Y!{e=Jz;SUR8t;KP4IMut{EmE;B8lWAzf+NuZ$DkAZ zFZCy*hw_ZHUx1Dqkn&Y=7#ioMly8gU&@(f+#DxQA#@XmZFQXH`p7OhB#tYDZi{dwE zzaP+XD^kA-O>k|jwp%gJHt6^|=$R|k=fbUNjt1HnJuC;KiFHCJ?t%_H8SQsQ+WV$_ zVcIW`gVDG{(Kt89G3YHDkHjriOyt7AQ{&_41Wy$mDxOCJy^aQYKQ2VaEy42p08M-? zy0R*}7jd>i$8C@H-x=MhCgpaXzumZSg{{)zz;XkBeLm$*Xab#6J{g_h3^dUBsqc?Y zbUFHpEul}#Xf*x<=)xXDoi^i!p4>d!zk>5KO7hxQwQW;7`6*QNbNG?UxV zIOEYwA8yWr?Zwkn81Pjz;9KznH1MbBo-9TuSeo(*wEtfz|A+Rkxk()WBDHXZE{&UtV0KGv}dtZo1+ueiMyn}6&ko*${kZa5l!TDbb)7KIdSw>_eaN- zuH?duhNZ(z=)haifp?(;?oItvbSoc61I$GG&55t1{;jwGjkhR%gMNeg0omzN#TqW$ zfy#Ro8P-7u>>Qh*6YP%eNUM|&LZ6%V=*qgI37v-i8Ev1`Uz_?H(72<~1>cF~FZTDQ z!-Hvf9PRit8u)oMfw|}e^Uy>-O#Nas;CJXw{fv%Zo%VI;A>Xh?;TGtvtc&IUu~$^)y>)X_ey1hRza17*;d8$T4ZIvZrN5&) zQ_-q;S=T@_-w~a-aoi0Z*COrv#dc}$fX;I)n#l2~?@>xcFEqdf@lrI?E75`1qdRdU zx?^L}L?*?D(eY2D{A_#~O>`bQ?maZ_r?K>HE`CM7YW$66xN+;ktNcRjRqc@@&xo&J&5+7j(($QhuFPgw+`|$jGu?-g{PzRl`9y(!T^w2erZO{acL?=EPJxnK}<9njx&qDj1 zm-0pEJeQ?@aLU*2lP~ros4&1NG{9}>R*gjiO+pizlJ>__|5VDe(FtBcu|5^s?OO!e2@TX39k?r+NK5p;B-|I>@-DFl8t@!+!VBZI z=(s!5J`P>TeW{;X;=&irW9W~a&!aD*kI_%JZ_~a8ouJBoMM5>u@-}F|9nc+Ukn*l6 zw@7(Ew0}EvK}VoxqjX#<&O!t9Lw|EH0KLbzq7#gd_oIjGk@y07xZX#{eU0wGzp3A1 z|NJEowBO$7LXSY=lqyb3!$n0!#WiT4+fzS1zKrh3hv)>$&|CL++H1Bc+8d$2@ZS&J z*<;XzPmTT1I74uApZ_sjIN$;FcdE0|Oc$d6bC(~`Kgy_jK#^FZ*bc2f75$@;K`Bqb zdX(p&-|-fse=@NeO}O@f#kiJO+vmSC7iM}6y0U?2hBwBEXo63o_iP^es{Rt~{~Nl( z4cZp-<%0Hz2*S7imUzLXS=wr3fK}EnV&68_)?yp|@rt8t4i1y)X}5=|VJ-W$22QqZ6z_Cs-FZ zY**B8f+oB<`Z#Zco}E%%E_{dYi3VbVK;1wLvdGp3|;AGXuxmK{y(6ra zztKcCIHY)LHpT{&8=(nwK;o1tI&@X+$LTnn-~7))xANe_ zivCB%uILVSM-x5|J%pE{aY|)*{)Ta3MkCQJye-~U?!f6sS2!8l;*8X^@GvGhN6$>jcC8|X}=HcKL!2ln49_~ zXyV_YXY405&Tna7)4o*Pn}4Y=qm7R!tc~9DCg_0HXrc$ATYf0IrN^TaoQh7+E9E}u zVe6Orf#~?F&;?wJCVX3o3j;ic27C$~_yRidoAG@#z^7p;X!42{%%Q!2hfS9r92Z|;j`%3cmuunpPRjxI{HSekKTet zX#A#V;(KBF`~SXPP|+@SL_2m(`DFAK^g{3LMX4Wz1{#V^FcM8<6uOgR;@$CHH1Ye< zIMcEG^Z#rv3^X^+i|?a>7NUU{p^1Hiekd(Zd!h&^YVS z&xUIJhjr!e^V=U)1ZagOa4fo|-BLaU4b&U`{(o*9hCW93q7y!WyW{KVS@{!Papj|n zH{YgcoZ4ujJC?X`Ynr104otZ-+VOPsm3dam7oj_KS-cXxr$f-gdK0>Uap;cRpY|8g z9hjf?57ER*UvOc-Z_$(0g6^ z*y2`hj>g>@-SOJxdY=C#X=sLKwr9%wrQ8<1mq(xpbVJWTAKV46!Hzf$O<*;;GwaX^ zs~%Ta15J2Kbe`?7{1^M`dqKr6>Cimxjc#RIG|*A0?~L|8DV~=4-spp<6vOz7*d<@8RcYfMsX`zoz^rI?+0G;!2&1IGdpTwncAo zT{Mw~X#YJr^ZdKDtx|C~IzdNtU>9`aZs_CKEA@Ti1@RIz;1wyC;xKeUBhduzLi^pD z_WL{Y{QH28~?BPF}o(Z zuombJABEnE6Ut?t|5LbdMZM8`a%nnTmGaPdBkn}|?dZf$q7%J_27Vt6{8{`8eSE)1 z6JCYJUz_rVCvrxZzhYx9yce6H9h#wmTB4_ZfAlc5MFSn0`VQ!Gd~`e!P3#ObPXBmC zyatUs0*yBs%fJ7-BNg|c11F(@A4a$CN%SkzyXa1Ri>~|+^p>ng6RX~>_z>F?y>*Sy z9oQG0usxbUC$xW;Zu$P-Ee$=;Gte77y;q^1iZ`NxCZb=d9zzqIfd+mSeXL$U6Mrl1 zAECEq5jx>gG_jxJ`ffb`R&04vaVi_4?}G!;3A)A8(Zu?oiCv9OI11g7acCmbQa>G? za1OfSxv8IrCipSBpf5{Y81NT#!gc7tjk*^r-vqshc&uV`F}{6F@qIJM|dE7n0*S|2^#P0>TRU+O!e6L&@@I1N1`=b`-vr93j;jrO04 zF6?RamHynRJpVpc?@*yj(G~w2H|SB6tD*_jh+C(Ad-PuK6q}%d_dpYBhu*s5(DB{l z8L>|fo__=MOUKL507K9Kx25AGG_k2@|Hsg+oP}=fi>ZGNo#>skf0X*gDKABL>{oQ$ z+EOkmomSk#s&Q*H^PSKEO;f*j%7>td92-we{b^|6^Uy^4$AM_VSEqe=ER9OT7<9md z_yC%~Bj`Pwg(fl^-I+Jgd-@4F?mIN0pU?#UNd4cbuQYIKF`upw@AMv+)k^zqvlP2ezeAsx^Uuai^mhsGHaugCIV?7fK#S9TZr0(t;l z*>mVEn49w3XaWn+6@7v3%y%jOfhMpn%fJ8In+qpwgMJzw zf@XRGy0Vk8y!Ge~T@tTB``;2Lqbr|uQ-2N`=aST4ab~HQXb2TfI2;W$IvvKN z0VksaA4U7kO!>K#Uq%y}m-725e~KpfB|82G^lbf_`t>C)oUm%IqQh2bpxWqG?-X}O z?{%BBcSP@X=al~!PetSPLMQAOFGX+RAT<6Bu{0_j?ug^jz?0Akr^H!k;MdSV@1qke zj^Cm?^<&!qK+ix$@8YwgCc1Nt&>h(w8DFZ{n+vz(fOI%29gas6ITf9#C;B1O2i=*0 z=;6E`P3*R`Pl%7F{v~wc`DmO4=ni~VuIKarD=u8=59sM#gHF8hS%sUS1Gh#4ZHK-Q zcSZv>io3;@X#f4u{s*UgB)alr&~YbX`T6gW4t>+mFXaJffGgwB)Zd5(xD`!wY@Cq# z$?;({ks0x6G~V-QBClcj`G1!S11&%Ye2Px61l{7L=so`(y;bYcK%1Ri-1Ay!|9Y_r z+P^t^tJ{~gdBY?1o5=mZ_& zap)`hM0Dlnq`p6zXlWo9W_k@e!42rjZbAp#o%TuSfQQmP1D*HPr>>aADy8(3Ms@r}zxg(z(T(ZF4l?258{c=t|q53pyCf zr#|gn(Rofn`<-sRKmYem!?{*a?jJ8lI}T3y+LVW*Psh#Z8Mp_X@JV#S=h1O*#JAD7 zAE5mfqC52!w)Wx&E?n7)xE{-o%XvkhZPCo@pn)3P`E{*I#a|uXhbnV90NspEXvkC1 zA-&Nd=f(bL|I5)SuSffhL66h;lpjLJJ&wkEDn5^{?X~lGb$Ia>72f9e&_D~&fuF~( z(01(SjEUMUw%(16X+bJ_|G+zy?v zHyYpqH1MVI3N-Qmk8?d`6Sx_TH#Xjzeh;8OkUxsXDZRyof!{+1e1ZmCgiicj>VH88 z{1N{``~4d$_baw`Q?%cQ?&y3ii*l)A|8zJQ9nhg@sOXG#JTdh>Qh!!F zFZNIS<>*9LqvM97PyQ|Fp`3{B>?846+`?ZSyv~IgFGM>oLJ!FgxDT$3yIxrQWs08I zg!-G&iDseq{`oi`-Qv&Czgn~!>tW4{iu%^*;q8LuUmf=1!ma6xX4uaLyfXDeup#B^ z(L?zN+V6QZfw$rZ@l$jszC?HQhm=>KXXEeGZ`40u9cpl4pe@mr)J8LG9QQ?^ijHW% zlj7;WeoIqcp7xb!|G&|M{zDU}acMEn4oH2eq6rsvY=s8eA6?l&sqcs;cpN(6i7B6k zJ`HE3{xWoY2^~Ka-GNc)itj`FKZEY{JS_j4z#nqqfX~s>xwPEC_fRyzzi8&04=57d z5#7>;DK|$GYlX%+08RLa)E|Q;_CIu?C#U@k%YJp}lMWZei*2C(@;EpSMJE`6u3${+ zC!iDDk8btUI163zD{21-z2~2y;}>K3{|UB?3!l&5(Fr!XtXRS3Xd<;@omd}T@h<4Z zd!jqn8a+dYqlt7zccKT{uQ$4L=b#B(a#^1LtEh0I>*G!FHgv#PbiiaZ&?C4L&OmR? z2j~L6LKFD|{aU%<<;5SU)y3T?AAo+G_eJ9lxt!TUr~H9-X7hN=4hZ+=)`TY ze7fT?XuuQDdwy!l=b(qJKRSK@y5g(R@xzeElD|5@g#jj`E0~53corS-O4{E<2fmLc zwh&EdG1`9_x}p^+uT6X9K}Gz{(0;X2u2(Me{O!Vpfm)!i(l+QXJ^qJ#;W_BQ@#q8( zqWx!}3C%_mdKvxPe*?XB-=T5-OntR0i(A%YStE4;K!obXDOd=!&*R6WR`) zxE>m4PqhEO=q+o9PJC?YyQ7canP>u6q2sPc6CRcNiC6Lb8{lCoobZ`6ynx<{H_?f{ zP5sYkpw;Mv>*L0Qiyf$m#%qAK?}eWJ15!RR<*w+0P8-bgZ^wRAnCTViI5Ztc#c}8s zPf2+eI&N;t@5Im0r(h|X=t}fn|AYR#yE*fD>l(#8WoXhO?V|C=&@#j12z8#lPNIQ1K&JFyiSxGox?Vd|Tr zhqe{E^=;99N25>8@#xN+8hfMT&qv4g$C4|)k_!jkgl_Ha=){xIl{}jInP|Y5<2-Ch z`2%!EDi1Br#FpszozeQ;&~f{s^BtUW=b=3RPJ9v-PJB9Az5vbiQuNJt1^NTVV02~U z(XD?Vct3Qaw&)6uK)1Ln z8mK3h6GZ!6flhcWmUl4qlh9AsX(`XgV<>-wK9&ti*A-jS5?y(lln+54vySLQr=yAV zMklxkebG4H@{K9qjrN;@CN>lO$!ZSz`TsH2$KSCYmTF#K{BYSC?bsd7_+oUxZRlSu zdK?}2LCSxoz19uIt!aVvXg>}ee-Zj=I2s$`W9Z*)T9EQeY~=I5?eL=Gf#^itdEg$5pjz5%DAxAeI<7mYg)eHs?vh9xe(;KF4fGM3 z*y7ZGjRyDu4e%@ac>awZuFY>Q&QKGy{Qxx15$IEO9D4ZrqKRFJ#vfAR!ik5W6WoXf zxD_364|;2+$7kY8XrMRIr{Ntm&M&F|6FoD3r+&jx#S3SXxILOcX;&`X^5$s31LGm_ z2sH3fXo6kQgigX;@Ql=tK>OVi??n4eh!3LiA4_>Al0d2AIWD{xFQQvEAAOa6l=4#a zEc}X|?se$nRr{7A;I8OO_COP88TUsMZikLP0)0Q6fS!>{u)3fBL%1;0o6rDb&`igp z0q%=a;-hE+Gtr%U4ITFpdh5PGCs-E$i2Q$E%KbJ)=c}nc|8>&P5WQ#3Qf?g&KtC)F zMHB0a?o_w5pAq|@f%~O=8QO1f%Gbx6(H$Fu<$n`sEEfizlnztSTk;sX!r5rxd1$~7 z(4F}l9rqO)a4EX-AJP7+)4m?vp$%^>>Ni2hZFMWpzk#-;!VinOXnFs5Fq%MnbO%mA zU$MPYKQQ$-pcCAMPJC~ilKRKdxU#xb@4@umT#q ziiEa6cW5Vc!e(d!EwQ`+G~U5!@0j*3=)@<*o+U0CP;oBS!%^r?Oh*H~gJ!${-QrJE zUW88kHF~;#M4y^9=;5q(dr`kVTE7drgZrhv1A41UCvxF{UTDVwXvgc(Z^3t_{0Mq0 z=AixNqvIB({42Tx|DlOh8B;7|Gc-;!wEbXoK}R4vSgJUR3%9r%y5cj@mG(skoF6ZV zgV67S*P#6;q5&UF`?S@Q*e^=C(3RipqdhaenS5!g+Ux)U)5$!iR?RTeq zUwk;u#PXp-$Gw4-@NM*|c^6&KS5DxHs*Nostcwn8nDQQRZ}ijaKs13<&_sKqD>^^r z%h0VYrT%903(8$sey^b4Dc?ckmA>Pmyrp*+E3J)Yykp7@Qf`Xg%jR)^^zmw+_KxU| z9h>_9p*zS3CoKmA;Ek@O9e1Pk9BJ z=xQ|4wdfXCySKPiwb8h((49OWb}DgUCf(7%z2muPrWc`!U4i9{(JdZ@CO!^#!Aa;3 zB=ga4NMEA~uRTQpuBbbP5X7khKDd+dcxD38N^@D*%;YtaOEx~~}62wm}R zaW8b`d!vaS8jp!5p|_wHy0AXT;Ve~L#DzajUxQ9CK2Acn>>)JZbaYFfi}TTdU!aM6 zi3a{I{*wCDDX&H2Z#1b`z$RG!PY1RvU$8Pfj1IeFTkMZcI0Fs*GP)CQrTi=Uv)vkW zi?^6uJbpW&{ac}l9f(eR2)gA*qH&M4-OvBixF~N8dT;um9sAn>2c~^6x+B-10Y}7J zQhx{9e*zk3GWxVUir&g~=uWn}zqnNgVad~d6c-+vzStPALVwqDKf1Cv(2PGxd0EP< z(14X6DB8D(_0R?FiGJF(itW?h4ZY=k9^m=6!!=a+qPZPSWE#5C7vmdf!1vIdS&;JQ z=!%!1hwoeT=~#jGTZfL@@WEoos-pcjjaxlfDqgAEQsIQ#$NK2NUDL5Sy5%j=ME64{ zJPzHNQ&WFFI`L36-bi%ZZRo^f(F7-;{T?oHQGUUoAH(mW1HMg%AJHvdfd*Kc_KGRR zA*+JcZ;p?GtoHDAaP3-uW(_<`9(#=hv)>K$FJftbY(xI6R$u&-TpyuLG_1< zI6I&VsUMr6Tiyyy;9xZV;bnRLI;Em>JQ00$o{HX*3sXNV<&o%9F%ezK@O&ztGR=x>JjlHA4?u8?^q&)c-G@g-$#GP3THA zq3h9|8ikGjixqB)2HFb!VzN`}>!S%Y zK@-~p9p4(=iNnwx>hy3v|Bs`>K>tHmaAwLEq~jp;-d~Ld9Et`SfhIZ{onRaq_~H0C zn#hyrm(MxzBlNxV^TRySyb<4v3($P*51rscwEySmnfMADjk(Yk=ox5>ezQ3#_D3I|k?5Dq$!G%4#uw3vUqhd!chPuXpbPmP zP4G8#q5q(_xYG1|{#Tz~Y-L?^Kyx(U-e{nMQtpKA#PR6Ia8L9e4@`MDn&?C{&NJx5 zFQGd!A5Gu~G=bmz<8(XzO@)V~(u~3?=)meJ*Fp#GfF@Kw?ak3d_d{2HNZOA@pYxN` zerX(x#nc58DP$6y+-DN^7KC z3yo7J^`!=B*d3j?Wo(NE?tlj9f(|?d-LW&##LrE6U>p*M$I)nFW6_6T#&^*PK0+s4gzm(*DgO|ELsz;QP4FLdf{kVtiEn{Uyj|QWHbUb!E0=lxTXNw9 z`=Os=ZBuTCc5EMyiT^_b_dv(>O1W>^`=xvtn$T5oc-qIHKfd3C<=_83%Y|RJUrL8> zZJ_)UI?>9M|3U-)m-^~Y7VTT2w{F{%>&IQt{>{;N`=dM7F71b7`T6g}g)2P~UD0W= z7y1pTZ`uc=fv$@;q5W@9``Faq7au~;(Bo-;23^ogXu_{Qna}?Z(s3a=!B^%g*pP~~ji@&22 zu1mSf)5R-yOEkfz=u@;8*27ll%1=O7-UIE|3yD*zIFAb_7=R`)1nqbOI`C#R^E=~s z^j&@*`XTi~>KDdE@oO~BviLI^ebi&)v0Ata6H6iT}qL1TrbmF(r z{-2=RMZ9Wgc~f*;&DlKv-uvxS(Fi@A&Cmq)Koe_~_O|h`w0A@& zJQfYyEuMzPIVx>@9_-uRy~g{ zJYhrYmmO1a{>V#2C%Q#9VzrCe;Ah8@sMcSZv?PI<4i?~M*T06hZ-qmSuvDfd8c z%>`(jtI(BR6K_Dr-;6H2bSoEj9Giv-=zvM7e<<~jqAQw#-rLvF9eWpjQ7uHreTPo4 zJmp_g{u5o$U+9ls8_p>wP^#F53j@|EDk>VHD`2O}Tf< z{o-Zl0!!$Mho*icR`dD4Ee+$-Fd5y_Y3RUbQ~v_`2}W- ziSLQtqP@|bYLCV{HucA2`S1Vs;=(}vtiVC&3a>*4+>CDhZD_xTaBqAv<)6@r*PuJL z*$c(a)I`Vah<;|YMB{cqe;(+JC0Ep&3p2b54RBq&G2V)9-CgJ#?%tFqrF|+I`0z z>d#C05;X20^aq?FX&?V$sW^@IQ(;E4&@Fx!y{Dg}0av3F{fh>w{8C|c^cHQ2J_WVV zd)@#&LoHL^F7?Nthr0)Qn9nb9Vc?6<00Ys0*P#=SL_ZU5Mf*)l`^@+Zn(*@}&qMpY zoAM`U!e7L%(TTrLx%3kkp61`ti8p$=7_c#V3pS6n(SbXo6Eupur@b|ra9ec3!_(dg z8&d9ye#l*p#vM~ws+f?9Dd@eOj!rN;<+bi)7839HO4tbyKwtQ-4_MJEq(vc0+G@kHS*LIjI;p8hPq4i5)GtNjEl0<%O!@D!JpYy6C>l0KJ8ppn zsEy?nr@nE@&C!Wkq6zGWzS)jIcc2$K{sJ`KWwC_5z^+Hf-+|?y|HpITfXVR@bl_8H z$LCZ33L4<;_yv|%7FVKi{z1>ghHn=Aw?;qQ>Z6b6{^(>2dAo{I)rfKId&y{D_tge%P}cC;!wZZq@+R2z*~C+!XA@%(#Fno(iqEzkgM z(xF}Ik4(99+PkIP0}a?a<@3=AFF_L=j4tdJH2#D*1rQ#5DQ7Dm znP|f2rhEzd>3Ai2>+V1&dL+(76Pk_Qy4TQzK0)J@mgM4lbl{3~ScC4we`sQx%`XPj zMC=%HGe@)s$8gC?>Jy#+s`<5r{ND!*MUqz0D%``>N2a6nyjs~TVfY>sB!1^xU! z4NYhO8t^(SCz|r)v_FAPJQv-ex6uWDgeLG+>c7YG@Be>G!+JD<%I_2%w?G4Iiw4{Y zO|)s;0}a?Z9uN;j<8(w9ass-5f#^NI1&ucr%l}XC$y_*KCYtFB@hx-*K0)u(hR7 z>hDbbz34m-V)^g?Kaz&0&|5JF>*GB1dHorE{MMr1bT(d4OxPF=)EwQ~R_HxGDD|Dt zg>_E(e`sQ-pbI*40nfh!&!@tHm#4$fI5Hh?MOQc;y#@E9;~qjMn282_22E&g%5S3m zK16qNF*?t(w69#i^KZqvbg1@G@x@_FbixKHH$!*kz}OKzq$i>)IwxL)PINh%$PhHK z>(f3OP57>q?Pr<5r(t>;o=*8CbmBMA3ExY3LHq)}x8I_P{EEKg|4g~^Cq*LF(SBQ@x2!I@V|$k6 z`P-ihGd>Kx1)cCnJP8dv3C;K+^o2A74fHblCG#V6{Id8<{1Y9&Hdb0#l&i)~vHZUd z**X<<(9G(i_hvUV^S#gs4nPw*6zkzp=+2yv_P+=nKLDNh>eOF{#uqxDVDL|Uf)Ks4?l=)@gT-}zIX ze=Gh+g$eYCz0%>F*bfbGNgRZZyC&@;(D9>EKPL6}q<#`Q{-Lx#p8BUh<@xu}JWquy zco*H`1?bi;Lht!k=-F6-23n6MQ2DdMP0{*o(3RIoxiK1d_mo@2{o=tTE}ZBHEFV7f zd;Cf0z#2VaeQ_;D<1I&b>Nhmu(yCmnLkDj7 zdC{>3I&e#Lq8-sgv@15i)@eTp4RjWo*!gJxOH&?#PB=V{LgS1n+DjD^)9?_MzX72u znv1UZee}On_zL|v{V(mcz9}l^=l~(i6}vJ{KKVLJ!$>aU?p?E%A=jk4O98w>UrlKSYIzJf04-)8WOG zUq=(1pZW!8;Lp?kRqB_f{%5rR%GCdZ?qH=Q#ZGU5CQxq)&%YNt zenk`c7kzJR_+>F+RdmHQ(0Db`csr!MVQdf50cb&Q?S zz}?VW)EnK>%i?wDy&jYDgXmNB6gtlUTtMLF3f#757FbZiDXNA+@=1g7&F6CU&`V$hrLMtj0c*D#!Fi=eQ7E z#HFbpjJ}PBq5a3D{ysGHL#dx0XQh1(mNz5iw^Lq_@}h6KI|lrg3jHzuh9zpc=TYo}Z<<;E#DM;Fv8wn_aVXhKJ#o74F_?v4|kkPh9^z^9`D`lQ@1?U$wg zs?-ln{f%gxTT{Lh9e+>C_s56Pe$(SqB`(Zpb}C*$&)u77A|IpYcQJatzEArqbb<|* z7CW*rTHZX?LeFho^xW=&#%r7Q_Gludqq#7FF6nS`JTo26MJK)x4Kz6IH=(y|3>s)0 zn!v<31x@_1l%GNSy_ot}3riL6a$%rP(R;iEo#?lsL&bXZpjTT~)NhTxo9d(EnxhM7 zmGXgTB8R5FBO0$Ox&uAY@#mDwyd4K{;ef$thQm@Gfle?Q-O4-B08>*x13g4fr~bM4 z3Od1jG~PmVCl;lB89Lvu>f3o$I;=w{tnz)a}P`A(%BS{e+b0|}WB9&tvQs&YzCJGrt zB*_pGrHn=OyRK({fB&4%Uemqqwf0{7dEU2l(1*Addh6<^zBxLsRowGO&c7M$M@9LU z9q5)0L=zc|u4pK_f{RkV0^Qpouj=12#qbw?-#ym-hWq-!Gbd;yx^mFPn~8hMEMud}&u!YSy$XV5@1&;hTb6V6Nd zW3>O5=*quC$Nhx%TZxYU3+-2Vc~QS9TE8XwN00Tf{Ozn=I_!f^cp!Q!4l8%yg@Fbd zfKK$EctPqfikG7ajY1Q-G37hZxD!(U0Gh}YtnK-q&V>WtMko3Jeb^SD6Ml<6R6nBq zR-*y`MklKDb1`mHw0?`YJ-YQx&{NU|U3nKY?#WpG*V#_v!ik5ZVFa4trRcr7E{;q4 zLuf*eqd#*zhfe%K+CN7VU7Y&w&_sVh=lLW4`!na?Osf1+thgGQ@z&TFo1lTZq7!yU ze?5F$>W9SPXq-z^z7n1Ax_ApZ@p$ybG&xTBCEw0opuzyJ#y8LbZ>Rhrn#iXqFN$BI z{l1UCpcDL#K0}pO6mQb)&;{&_?$jRWLOYhYFz})AsMs?dPDTfwjSd`&PIyVY3SH?9 zXq>TV|M4l`hrUrCK^HhBK9%;;^IRD4MKq(=(G`3c7o!80qZ9m!2K+PiYtiu=;>IhB z{+pxyYp1+j$~&O(cSN4CQbijs4A2qH{6KU?ho}Cylut$z>7Vj|w4ayy;b>x)r2cX= z&Zu}Z`Y?|}6L<*Aznyu83p1S=UqvT+6HVxy)PI8Bf-lg7ze9IyIr<^C1|3)X*W&bS z8=Ihsv_{A6i5~BLvHZ8Qx~1X>G?5cyA9TPO==nVt{Tg0ES9%AUz+Gs+htcs<pR?n1AKzHI) zG{OGp7nUJtLRX=2Mz7-hoB6F&IAA=wXvR;W6V62M;hSinPg4J7%FEFHtI&9B z(fAwEzVYf}e9gGSYRQb zn{+%n{(dyxw6xDCapBYWN-E}|E1QpY`~pqnyVNgBc~#o~#PSN!L^l4dc;VDRCvJw0 zZ-d^_J<$Yvq2o%uxp3g==sg;WCU8wU+=wP}JNgh#L_b8HMElK+AD{t0Lnrtu^-Ix} z|AIaXYtp{S@8y2{>%3eTXe)Fl>ZQDMY=b7&0Zp`fJQ3|b0R6H$44vqj)ZdCGGzne6 zgXla{Q~!Lq%;)b*T$u42=)HXh4fH-b;TPz;{3mq6N`DmfHPQMV&<~|{DIbIG)PU5F zM1Q?J9^JX==np#YtDpZ%(y$86c+)?NQ?Lb^ab0xcCUG}(Mf;+OAB3Ko!_fXc(XH;C z`g70(hhh0|`l5+Hj^)3dIg1Oo@I5s1#pr~q;`&(QuVUrfq5Ybp{q~86VEN-2%jX?k z=~d`&ac@Txdj$R7@cdt#e*=6-MR{T@PmB&&k8WA*zl#;NL|5Jp-KkFKgk8~z`l2g4 zKVFaayBD4KVRZa+=uW--cRv5$q{3tJE;`_&_<1@mLAUrvwBKrU>;FQJ**Y|lYHNyq z&CvGU&}V2*^x5i)j_;QCBT8Ht_*gWf-e>}6#B<|NbcGkA@9xoP|No*p_9(it=h5-6 zpmE|@m!m6MizZNIL(#tmn&39*g!R#twn({6%AL@8x~6<&EcHyo zDd=DGJQGdia&*Gc=mfW?d^bA5{qZsM>3%A{fll-}n$WlCf__EgZ9u<>RO5zGF7XGJ zRm&aQ#{JQIc?AFKN_(IaoP=)O;M8A@CNd`8mioI>z7JiV#BI?8_d)v~nEJ!e9q57X+$pK=hxR`^{fSPz4vkl(auKHix`3U~g|@@;@Bh1S z;ebQYl^lfzIwAFa&=sA52KW!UBbTBtp6k$YccJ6%OZ%hfLY__i3uwPr(Q$88=I0;p z?LsQNH!ISx7F}_TDn-W~(f33<^v!ih%BNvN%0tmOx1k@i52F)3jxOxklxLy|zMk^i zRruHGte8)QTfGpS=o@s4{y@)j)v86HZDM_NWlhito5x+yIJ=<c+koIR7=c@L{Wm9>cci z3c8^kk50K48lVrBPXoG@|4ID_^qyaaCNLI_b1%9xkD&dhpmCm4=CAl47f$qAoQoc> z_tDH3qJh3j`wyvKfd>37_5a2yn-uY?qj9!GC#;XY;+v#>Uo8LrzY7=sTSVQ_jsxOg zG_ecf$kbnnCU#xQH=;XtTYLolsrn`K^n8xqqU9;CN1u%?s^$FeP_5Xq-O-MnV-GaI z8R*syN8jb6Q=WkKpN96EmHLm-p96kO{RXt(mYWs}YKrd6E}L@xU2%IV47@M8rH7|u zPju@~LHnJa_JQaQ3{Cxrcp2LNYV`dv27MMLpwG;s=!@=|lwT=v;e>Cc;v+P`B6N$s zLkFxv`>jj+#?_0J)I<}jlXAV-B=s%OIJ=<<@0<1mVyPP!20khkC!m@4NqI0j!LXD^ zqEGXcXuxaH2}YwI&*RY*Per%*MRe=uq<&$_KO*y#D*j1B^%}*%?a*7X6M9eEqXD|1 z5827+xjzq0{0em98_@pu#-~$18+~>bq6=Gr##x8u^Iv>AqboZcov1IG==tbzyc$jLUNru*STghXxNytAMhC7!>nqnP zwyX|XZi;5U7aI5obZ7dYfk&i%3>s$=I&K>Jtjt2+Cv#GMuNLRuiuqLduq;f&QuLww z32py1^?#xF@L#lljV+4Pu?^b430l81I$>M%8R?Mn0qE&E80~-L7My=8j-$efPKo`~ zVIUgtyf`xL*QWi(ly8f7qY3^OJ+@DxJMkhq&%5Y6pP&gYDska)`Wnq>DVp)}_&Yja zU97rgQLcdotetY**f{QtJ}bMS@eWUYPjuo_(D_Pz({L90h8mm>BT|29ygH7KW6{L# zLMNDr{)F=oy7D*B#6LtQ`Yh$e=#DN$9?DY1uUz<0ZC1P3swU_|(-y5i7)|UHH1jjj zEj|Z##Ea2>lhDA=q7%M?Zv7kR3+dCee}^Wv63hQ})}LIsg7xT%Hrc9JK@Ifj-WCni z1|4`n?1qjzDxMJgq6rT~6S@E$S4#V}=t6GB2A==h)9?(M`HLyfLI=Ks-s_LhtzC!) z_&)8+<7%|u8Z=I&t&4t}pm8=!c`G!*?Xdj$--L@sRJ1@R=#B^If z=c9o}r2R@XvFp)sH>ErlO>7(*XL9Nv+M4t4fXCC}$v7h&UyXCngx*X0$7mvp;tz3k zT!&6ntxjPrbo@5xhgE&_Ro|ix=ie0^K!q6}h7LRmP3(9y^OMng-9P1X;|1{&bllZw zVxv=kXPlJwhf;n5P3XB&F8-GeucbT}P3%21;AiM7_FME8{e?c1RkkTsvNf7OD>QIh z^r_!F0Ef6hM+6F91U=NycrFAN6Poa`_RN5K@)uj?e|jJXQLCm zjmBMo?&y-Z6zN~8_=yVxt&0Dm32d@$F<^5vaBZ}HdvwBvX>XDGUC~?B4&9l3(H%Gf zUGd52_;b*BL$Lg>vy3QT@I@ltfCjn^&3FR(Y}||fDc1vNpoh^wPoVvtP5lcgzk((@ z8(rXgX#daA9a(}r|NN~tE)2K=&G>ip9#`J3*ut9VfO=?q)70+~JEQ#%Px*v+2KpvF zKjmxUSTxRLEP3yr;KD6?5e@V%dhb4u-=iz}E$!=4zv=cxpl#4`P0?{}QtpI)PdF6a zfs^BzXaYmFXZ_`;kP01x2D&R99*obRfnGxc%|{bojQ0N}^=r_;RqGb@wb8f@&;{;- zj^7tu&>?j>|K7V}(r|q2i{7hqe*TMOpZ{;*!U;ESP^_#LI`Ot~2Xvwx(XDKWz8^ZKy$c%n(9|D`PIz+4r=>gq zjXNmyLoIv$N2cKlbl|9z$DmK|SoEo#oc71igr}haXQccxn%Eq4-23RbMe&EUua0Z6 z{P|zGVX?wZ(EwY-?NZ+eov1l_D_W<1@6_*~^1d$Y;`8V)I zRJesDbY<74<5;wP9Gcj~lpjp{Fl`aRKr`=DEYK*~qPp6EhOiTzSPpp=XMpc7n(zDP!* z8Q+BN$V7DOA3|63H2MO1HT4V83BE@Y{~6t}U(vXK$91uCv3RBqLdPA2Ce|zU{o^1k|M}l=F3jjMbb?Xw zMs%xhLlb-~K7}SQBff#|#7A)n8gB)fz+Z7g+@xs{uNLzB^R<`@C$1M8qXC+u?QPKG zv}f8oqX`|9^5H4>K>MGV@~LQ?GteCx9B)VGo7t4}Z=hFGF$c}~T{O@qsb7c&T7vdp z7JrR@rF}gbc#~#DoXyd3bXxx6WbT$_bJTDa&qJb|(2VNO(Kvz5#eb^?W0iQsR<@7iU zeQ~{;_C@Hp@6ouwp$q!Es4rDiYF=bi6YWqZ<+^BMjbn3kVC$6IqY3PbCVFr@5?$f( z==k2Tf7;JZc?k0S^9Czl@HZB4HwIjR-pi-ZH{V?J&Gj|9(keR_6V^l%+6JAdVQhvb zuuIzaNVy}r69=LTJqpX8|Hq}nN$5)Yro-8GpgcJB7o`4@)L((VSVo}_;caMw51^kR z)8Z^F|K1S&?zb9^yKxKF@5N?ZxRToF(_0T+L2LABZHM;jkox`56&#du_jpV^0bOaI zcy8)1LdRX6`fFO`^M7m_#-kZdL|60_n!qe{rEj8%e1z`QXK3O}QeGBUp`VUx&>h*T zWzoL@n!rwIoLySx^M7|Ld}=$UV|R35k96#va{o9Oo%kYj+?6TcicWAhx&xEZot%Ou z{7n2G`eFBai3=y1k7l$O4e%X0a9R8n4fq%O)K}f5NT4Pfc-z_5)*g zbVo})xNyL!=!(urhrwtf7p8tB+VAQ(8l8A7mRFqeWOPR!MsMNs=&hKO^4I7*tC4v8 z{+|n1Ub$6awOBK5jSi@bCa@zqam&>2fv&V;>JLKu9f8I@F7+p&r=lOa?}cI4E9#K3pTw@uSgOF%G>okD$-ebS#yY_O?2X|V?DIJ33`lM#r@Iv$Dzl$cglTt<@}r3 zKq?G0G99i&6Sy{xN&8qd^Se@h2wmY5X#W?`XX6!g$L64M=b;nNPyK?_FWQy!?|^U9 zVL5i9yb^s#TJKg&&;gyeD_VaHy3$kPndn64p%V>96BvnpnY|oM@XoZ~gO0zq#D!b) z7#iRibVW1K#NI>$y@v*vA3sO?eT6;~%hCR8(q5@e(SH;4)@_c)sUI7o^Obf=MQb#` z9_U2-#QoELFq-ILsXq?we^Sc*&{Hq~-J#3ThjTPK(IhnPgYj`Bp;Ef_4woWC>EVOScjMz{1% zG~)-*6+9N7iZjqHeI?FD6L>4_@1hI&7(Hc+QvM1Z_XBS3`Tv;Kmkf=eR36Q9E?&_eCc-1RZyH%01DYI|*Ij*;xMl-|%#}7Tw~}XvaIyr~UzS z2cC*EQvXWI^U#Urqlqj^`*-LUk5yBtT z|NChF&r<#h?e}BqSD+L9fqoXOL*s3}XA!4fEbYXFfp(7_(0krF<-^fu;#hQtdZP*S zMJF7X@_8v=gl=^SP55eb{LSb*cg1^=1WOeUbK#Fj)6kCZ6%7@ip#hepemNT8kF@_A ztF|xdH$x}h3Qcf3bO#!zy#<Hg@g7=gaaM`IIw82t+NHahW- z=)^10ME^h+RIztazfr7#CcGs&ZhLe=jrL~!253b^L);@BdZfdNX!{xH1m~oDA$m$K zN&WTcGjTf__&#(8rlJd+fyQ|aO=J$5$or*Ke3}l6)9_tfp8C}(|DEy%G@*_5DFSbS z2Hpk@+#ohXAL3SM!uz5L9g6OFsYf~tLbv`>bR}csy=dlB(XD+pi@kQt@xqd&^??ZPt6>iluJQSbDgR!D>k=P+VUop_eXD0 z|9CDMa2Ptl$ds={cj!8F$L>TEoDfS7abcjR&;T>j@G5#t-a((*h3HQF5Pw4hZ9o&N zeqb>{Z8XldX#EaoLd{~U)VD=;tW?pF3o|g$8XxT z=-&|i_S_DAwhl&jvM-i=N{4abLv|DT`92Bl_&m1257B=Aqr~>xE$NzuUg!!=Nx2_7@GNw|khG6L$6ba7 zycJFCPITf)@nQ7geiH5XEV=_Pp#4jqSy9dTzo6HV}DG{HOL1g!4)zn2R$dK~TeOghX&1HXb!I4^#L`%wN2_r|Rb zD|YG#bo}w?Y3hw8J_vmVZbVPRcywo{V)^&~)4ibLrT99!^0&~ZdkMOAtJ3}t8lckQ z#VfixI^p(ceG4?+9_WfYpyNBC3q2(5M`8K@ow;W!`k=@040Poe#4FH1H=z^UhOYFU zljK$ef6->|Qj%2jdiUN1jRh zE2*Cy-%0&P=)<@GiC?PtIvtjw0e(d%_&4>HjxOq}p)1}ReP-&Si8jabEkYA*gFbwF zqy4+1i5?w$q5V%S%lYrmg#!n~A!s5Or+h6M=;n9_8gK#{=st97A5QscbcNI7Yv}lQ z&>j6Sevaio|NlA_KcYX~{)#@;HIFG0YY>~G0otIaqXW7FJ<&u?M8}~}Pg^{L;uM{!FwL(l*A=ma~bzAd_= z`=|bJv|q0toPRr>Nri!j#F6NVu0aRhfcCpH{x?oRpM~k@Et!ob_71wB`KkXr^-Ius zeoT3F56*v6D%MiriW?qV1lSD?xL4c{9e5D>tQ>_Vb^FD@@=#E{CZvA!WLheHQ zO-lO%DL-A}!hkbU@fx~F{&PtJ3~Ax@GIpuU<8eF9J126WR&=HoQB!)d!<-k48U~jz=dRfIb_8u>7wx zU&e(UuS2)&rg$fs(4_bv+HXpHI?hP@%PGGR-%0(4=qdRu<)!F6KV$jl|KHPLExMJP z^eQsl27NZ_#pdY1w&<32L=!wV^(UbT_Dgv{+RsCGXgC`GN_2;A?Zx?bz=Tx%Hys~G zxB7W>!Z*>0-ix24eo@NbpUx#jW)f0;LI%u4_=)8?j;QTv5^EB+1hW6-F zy)PQzAT*)lQ$920;pn{`g|6(bv_F#e7vfv-b9CZm=)5aSTsYBRXrPJ{i|>B5(T*+9 zmFfoR;rvHa(M$8zCH`=MKW7MkgK zXd>5R`4zVdbQa&9`;G8%l4oBl$8cWxt;YKvjZD@vfr~ZC)z@w>u z3e9|G%CpgN@1hfaj6Mqs(Q#|gV_NC7Vq7gW{`SbYQbiLk+`1NMfY#`FZ<}&wbb^D> zoj4o~d<+`s#MlqZD@Na>L(p4w6*~SFblkW&xh&`JVJ;jv4V~aQbimB`8k*2twEbgr z>pw>)SP}n0zZX>NTil|0=-2d}QtpE8+>z+G6R@%8{|qh+JPJ)@Ov+=?6^=u9=-&7M zn&2aG8an>@l>djunT3v_h2EYH<_ zdT(D#`#b1Pe2Dg2j3)Yh+LxpKSC#8IfB$gd$}7$+8fu{BI_SiW(1}{aHt2W3z0e&w z1fAembixzR{-?#W(3KBH`(1#Jy9mqw{qHqg`04im`t<$}9q=}q$Oq_)LUf)b=ngI&!1;HAYG)S{)JAurE?VCp^*f^h+n^Kgg>LEo z=)F7=P4J|&_d~~@lk%{%UzYl7(RjC%xG>{!shAiaNd4pJL{G(6(23qn`zPqf?HB0E z)}l}UhO}=sut=mfI<9`oP0@KvyXK-@+z0KrKe`j$(7=bI86T7O6XI!Tf&vAkep=Sme5xiG+^=$mUgx^;8Wr}!iE!(=IX?AE5f`Z+~;2Xung=&fjv zjyn*I*E61p?#ys>fmdVszyBS>h41h?&@ZD?<1BO~pP~c4L=#(zu5@L}zoQT3dUR!* zo?G;z-aBSMg$I0l# z52ZW}UBL5b+?UaW-ooW{$1hQR2c9>G}DFXMBkw8KcWLxro0|abfdvV|1Hs#ZJ%;e zG@({0?~f+h4UN|$o;aBEZ^da;IN@1n0)tW>h9))=?RRzRN2h!%+JAh?_oDqDPWegn z#WWpV`CDlJ1@Ws=E`C5WT!}thYtTUJ(Zn|SPqD(y(SF;Z^-bc==$mj?G|_|5<9m3@ zN5@|1xKq(MrPFgU7~R4V=+<79^35sVjShGyzZ z|1vIoVT?i_n!C|2lT*=$ZZ>)k=cE0WqJjQK6JCc-RCP#Eu8tM}ud=wo&4NY`r%Jb0i3(zfJgx=aE=)?Fk zmR#vtE}U?S^NWVMXuzFgTXaSHp%WgA20lFX$Drr^MD)EeFy)KU9UP5Ld^Z~Bp*Z#Y zeE)x*3SS&E(Wm%*+!epaJ+RKu;+IR^uq)-EXaY0PEq)2znK#jeyo*k>AoX9R{5{%# z1-g*GhI0PBSeJ?_7Zl}9(LlA(E!`eXY!@tlxS%WRiS|1kO<-^w7B4~LUlp&9H^)0l zT$s@W^d3EshDXp9OhqSn9-ZJ-bmeo!#c|9d=52S9HR*ac?x?&S~$0J~Q3ov8g{5joTkhXdt?SLy>2O@Bdu5wd2w- z6$-)PIU5ycm6`zD@l~bfUlF`nb`B#l)Lod7Xyr#zeZd*uo*gW zEA&*fOMQ3rULS)davGZOz_ee19;fTj?-6%m`Da6P>)(zG(0<>c^Q^}5@Bh|v;nq|d zUL;Z-&2&q&ej9Y+hAFo|1MCs^K^JgfJQN*wG&K0{pa1XS!T|T9 zfgeLBd^+V9(R(`^-MaTv{|P$oODwM}?W^P8=t9<`2~`+A^L+J- z3Y(x0)jsiHG_f9Nq9gjN4gRh4*VO- znV}PHbaAmoo1^vHq4f<@-yBV3kF@WLPS^#F*9}eVNOWAUl>5X1==jnQF1!~b(er#Q zn(+;2pu5lnCZqixO8F^t!Wr=;bfQ^le>?Rbru-?I(3j}3{vPRHs#wN_6Rkog`YYx2 zvFgYoaCP+7)Q%0%XQE~7h$eJ68t)i%!d~dO)6#w}I?oU+|NCDf(r`K2@fvicx1xdW zL05JkI>BRTfN5yI=Tm+S?Kc;F!+n50l;5JCihrT+gH0|e;%<%Q^Iw+>Gi{uPmNrms zgZ>(QFEsG6X+JskP5oK%KWIY3(R+I(8fOf;klRwe3th;)SpNGz52nL3bfV|b0572l z%t7C5-^PE@XQa-h#qaf-qC3|Eo$ypN&KW5WLgQV4j=L=0cxk@>-;<8_$H&kBPoZ1( z0vh1Ww0{s6q<%5F!XHz=BIQ3){wG$xta!*bMf-1l8Ry@v---&Yk51eywnn#VPjqYd zLHiwquJlMW!Jb$N`=NnPPy0Z0{19~9g=sILr|lXq>~KB0!kf}CKHh@{yceDDA+-M! z@oDr$G969uW3=B_=(z9W&uIMB=&kxU^`&a;fB|dfo6uJ14s4(L#^|ebCv<{#(Z4zE z#NE;H{7c5=3C>OVLi7}jM91Bf`n%9)Y7#O}sbVG%dM{r?1HX&jy7}>ow10~xvNHaTj$eZ%S6FdnF|aDyaWgdFmguMBw&*R`4eh@V zdXD!)6Fve>q!${vKbq)3bjL=Zzel(OjsGkf|Ai|#|8D&&X_$+y;NAEMy7Dj4&+*@| z5pH=^5qJ-DqNC7T)*DS=AU4Ax=!E0YdG1O1K{WBluHxbG;dqt`S2i2XY%aQ@_fo$Q zO>8kb@OyOJud(9lV&W~(M7BlaG)2EFwoLm0v0K`YDskb&J<$nHL^JM-4e?BLMc2j~ ze4|FS#(&?^5v-`tYqvedTM4_G)M%HPM}^ zllsQ!jx>+EV)wi~3TJCHp^3CgdH1w; zK)=!Km-+)z-wmDk$dr4bx1cu~r!SU2|Ig&Y%m!J3!&ANt&Gb4n&@E_!ccnZT?f*#X zr=k6yLnnAC^|R1hHaG1bqvIA~`S1UIn}+4+1iz)cCRQ3%JT#l41GkTj(21I(6Sqpa z9h&goXuJbsH?-f8=(yuYasKUaG8G=1zHu-*(MYuYN^}L+q0h$c=tFg1d;;x11D*I4 zblhBY!uQhtY06)wed#F9za5uT;VoE|j{n5U*A@3{Q#A1AX#Z_ueRP5*X>Wg(g0~)Xyn$T`>&$M?$SJEZ*N20g#ICNZJG~shn zz5tDTSs_3Fr{N|vv+-!AlT-gd>ZhUupG*5o=(8{@^&g-KeulyJ32v+lzXH7&q(=PwEqQYzl+egS7Q}F z|8L;J0XLxm??`zfx`hv*KfO*xKXzY5xA^_I2%TUVI(|j!|4g~c=wiYeaZ5CjZL#FN zX~KmAcR|1Bw?&`Q!_kl5{%OAm9e4$rz!-GL?urkl{wXx>%PG%E`D1kDU!n{Cb~NYT z%zvW7m99+3HE2SW#}q58jt;Da4y=Rrub=vz&{u0KbmBH>zrExBsXrv;qtST1#^n6> zroxZK{^&zB6kYihXoBO=0r$lF&QjeH!E>r z;5z7v>!E>nOox`KZ;STphz33Y?RPLb!4YU8$EUt88gBr)Q|F=ME>8RZ&s(~d3eW!- z^j=Oz2R@DtdpRpaE9JztKcD zpyR6FQtU)6G=ciDX>5g#Z_un zqUZmKl%GQTzmW3lX#aQOhv>7k;1AJSn3y29VnaSi%2Tjg7e_rkVlduufC z9w~P~19wXKVDwfUmik^PpO*5uB`%zJSiA(y{3>)sH>Up9I3AsNa(p25kH#m_gr>)r z&>eam9rsSkAH>pUT$u3^G?8T~|B8OAU6cBM(UnvgTTD<3O|%XgxFI@G)6};@`?p6Q z(gV?XjzfPt-Wz$iOBExy@TtBQP2i4r54r>QqbqtCo!|-d_&pbAp$WW?CiF4-EGTW9kLZ7|yDH@xcN77(Mpsx5y~iEU2@XV8+8zD4K0cm{ zJ|kD6KSke+exaF$?!cSq7o9Ke;QU+hI~D#`YSTN5K+Vwljwv6F?HunyMp^M5BU%&dLvf(|@7 zQq_vicq%%661oEqp@~jG6M7lTw4TQjZ)sF{`}))0*|+kjlg8aNu5#CL(^gh#IepLZ zl{dY0`o%4(Y+kSW?ycLlX|#L$ecJ6g{noBk>g_uHoAaye-C+7bw^kXv>GWssuCnuS m\n" "Language: es\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "No instalado" @@ -79,380 +79,384 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "Invitado" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "Solicitando paquete de actualización" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Descargando paquete de actualización" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Descomprimiendo paquete de actualización" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "Ficheros sustituidos" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Los conexiones de base datos están cerradas" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "El servidor está detenido" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Actualización finalizada. Por favor, pulse OK y recargue la página" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Libros populares (los mas descargados)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "Libros mejor valorados" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Libros al azar" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Lista de autores" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Error en la apertura del eBook. El archivo no existe o no es accesible:" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Lista de series" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Lenguajes disponibles" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Lenguaje: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Lista de categorias" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Categoría : %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Estadisticas" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Servidor reiniciado. Por favor, recargue la página" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Actualización realizada" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "búsqueda" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Libros leídos" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Libros no leídos" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Leer un libro" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "¡Por favor completar todos los campos!" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "registrarse" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Error desconocido. Por favor, inténtelo de nuevo mas tarde." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Usuario o dirección de correo en uso." -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Sesion iniciada como : '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Usuario o contraseña invalido" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "Iniciar sesión" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Configurar primero los parametros SMTP por favor..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Envio de Libro a %(kindlemail)s correctamente" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ha sucedido un error en el envio del Libro: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Configurar primero la dirección de correo Kindle por favor..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue removido del estante: %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Une étagère de ce nom '%(title)s' existe déjà." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "Ha sucedido un error" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "crear un estante" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "Estante %(title)s cambiado" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Editar un estante" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Cambiar orden del estante: '%(name)s'" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Existe una cuenta vinculada a esta dirección de correo." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Página de administración" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Configuración de Calibre-web actualizada" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Configuración básica" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Configuración de Calibre-web actualizada" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "Localicación de la BD inválida. Por favor, introduzca la ruta correcta." -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "" "Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre" " de usuario." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Parámetros de correo actualizados" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Error al realizar envio de prueba a E-Mail: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Ajustes de correo electrónico actualizados" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Editar parametros de correo" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' actualizado" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Error inesperado." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "editar metainformación" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión \"%s\" a este servidor" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fallo al crear la ruta %s (permiso negado)" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fallo al almacenar el archivo %s (permiso negado)" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fallo al borrar el archivo %s (permiso negado)" @@ -609,7 +613,7 @@ msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -702,7 +706,7 @@ msgstr "Ver libro tras la edicion" msgid "Get metadata" msgstr "Obtener metainformación" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -818,71 +822,123 @@ msgstr "Expresión regular para ordenar títulos" msgid "Tags for Mature Content" msgstr "" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Permitir subida" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Permitir navegación anónima" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Permitir registro público" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Ajustes por defecto para nuevos usuarios" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Usuario Administrador" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Permitir descargas" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Permitir subidas de archivos" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Permitir editar" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Permitir cambiar la clave" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Mostrar libros al azar" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Mostrar libros populares" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Mostrar libros mejor valorados" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Mostrar lenguaje seleccionado" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Mostrar series seleccionadas" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Mostrar categorias elegidas" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Mostrar selección de autores" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Mostrar leídos y no leídos" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Mostrar libro aleatorios con vista detallada" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Inicio de Sesion" @@ -1014,6 +1070,22 @@ msgstr "Libros ordenados por Categorias" msgid "Books ordered by series" msgstr "Libros ordenados por Series" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Estantes públicos" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "Sus estantes" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Alternar navegación" @@ -1075,14 +1147,6 @@ msgstr "Categoria" msgid "Languages" msgstr "Lenguaje" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Estantes públicos" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "Sus estantes" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Crear un estante" @@ -1265,50 +1329,6 @@ msgstr "Mostrar lenguaje de los libros" msgid "Show all" msgstr "Mostrar Todo" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Mostrar libros al azar" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Mostrar libros populares" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Mostrar libros mejor valorados" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Mostrar lenguaje seleccionado" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Mostrar series seleccionadas" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Mostrar categorias elegidas" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Mostrar selección de autores" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Mostrar leídos y no leídos" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Mostrar libro aleatorios con vista detallada" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "" diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 28fc847b..035b22d9 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-10-26 22:42+0200\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -31,7 +31,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "non installé" @@ -85,382 +85,386 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "Invité" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Téléchargement la mise à jour" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Décompression de la mise à jour" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "Fichiers remplacés" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Connexion à la base de donnée fermée" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "Serveur arrêté" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Mise à jour terminée, merci d’appuyer sur okay et de rafraîchir la page" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "Ajouts récents" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "Livres récents" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "Anciens livres" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "Livres (A-Z)" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "Livres (Z-A)" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "Livres les mieux notés" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Liste des auteurs" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est " "pas accessible :" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Serveur redémarré, merci de rafraîchir la page" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Mise à jour effectuée" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "recherche" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Livres lus" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Livres non-lus" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "s’enregistrer" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Une erreur a eu lieu. Merci de réessayez plus tard." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Ce nom d'utilisateur ou cette adresse de courriel est déjà utilisée." -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Mauvais nom d'utilisateur ou mot de passe" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "connexion" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "Jeton non trouvé" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "Jeton expiré" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "Réussite! Merci de vous tourner vers votre appareil" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Veillez configurer les paramètres smtp d'abord..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Livres envoyés à %(kindlemail)s avec succès" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Il y a eu une erreur en envoyant ce livre : %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Veuillez configurer votre adresse kindle d'abord..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Le livre a été supprimé de l'étagère %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Une étagère de ce nom '%(title)s' existe déjà." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "créer une étagère" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Modifier une étagère" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "l’étagère %(name)s a été supprimé avec succès" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Un compte avec cette adresse de courriel existe déjà." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Page administrateur" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Configuration de Calibre-web mise à jour" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Configuration basique" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Configuration de Calibre-web mise à jour" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "Un compte avec cette adresse de courriel ou ce surnom existe déjà." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Paramètres de courriel mis à jour" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Préférences e-mail mises à jour" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Éditer les paramètres de courriel" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" "Erreur à l’ouverture du livre. Le fichier n’existe pas ou n’est pas " "accessible" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "modifier les métadonnées" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "inconnu" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "Pour être téléverser le fichier doit avoir une extension" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossible de créer le chemin %s (permission refusée)" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossible de supprimer le fichier %s (permission refusée)" @@ -617,7 +621,7 @@ msgstr "D’accord" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -710,7 +714,7 @@ msgstr "voir le livre après l'édition" msgid "Get metadata" msgstr "Obtenir les métadonnées" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -826,71 +830,123 @@ msgstr "" msgid "Tags for Mature Content" msgstr "Mots clés pour contenue pour adulte" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Autoriser le téléversement" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Autoriser la navigation anonyme" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Autoriser l’inscription publique" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "Utiliser" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "Obtenir la clé API" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Réglages par défaut pour les nouveaux utilisateurs" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Utilisateur admin" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Permettre les téléchargements" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Permettre les téléversements" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Permettre l'édition" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "Autoriser la suppression des livres" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Permettre le changement de mot de passe" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "Autoriser la modification d’étagères publiques" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Montrer des livres au hasard" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Montrer les livres populaires" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Montrer les livres les mieux notés" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Montrer la sélection par langue" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Montrer la sélection par séries" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Montrer la sélection par catégories" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Montrer la sélection par auteur" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Montrer lu et non-lu" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Montrer aléatoirement des livres dans la vue détaillée" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Connexion" @@ -1024,6 +1080,22 @@ msgstr "Livres classés par catégorie" msgid "Books ordered by series" msgstr "Livres classés par série" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Étagères publiques" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "Vos étagères" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Basculer la navigation" @@ -1085,14 +1157,6 @@ msgstr "Catégories" msgid "Languages" msgstr "Langues" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Étagères publiques" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "Vos étagères" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Créer une étagère" @@ -1275,50 +1339,6 @@ msgstr "Montrer les livres dans la langue" msgid "Show all" msgstr "Montrer tout" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Montrer des livres au hasard" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Montrer les livres populaires" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Montrer les livres les mieux notés" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Montrer la sélection par langue" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Montrer la sélection par séries" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Montrer la sélection par catégories" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Montrer la sélection par auteur" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Montrer lu et non-lu" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Montrer aléatoirement des livres dans la vue détaillée" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "Montrer le contenu pour adulte" diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 1e2febe8..998bbd96 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Marco Picone \n" "Language: it\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "non installato" @@ -79,386 +79,390 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "ospite" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "Richiesta del pacchetto di aggiornamento" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Scaricare il pacchetto di aggiornamento" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Decomprimere pacchetto di aggiornamento" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "I file vengono sostituiti" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Le connessioni di database sono chiuse" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "Il server viene arrestato" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Aggiornamento completato, prego premere bene e ricaricare pagina" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "Libri aggiunti di recente" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "I più nuovi libri" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "Libri più vecchi" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "Ebook (A-Z)" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "Ebook (Z-A)" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Hot Books (più scaricati)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "I migliori libri valutati" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Libri casuali" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Elenco degli autori" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Errore durante l'apertura di eBook. Il file non esiste o il file non è " "accessibile:" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Lista delle serie" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Serie :" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Lingue disponibili" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Lingue: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Elenco categorie" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Categoria : %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "Mancano autorizzazioni di esecuzione" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Statistica" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Server riavviato, ricarica pagina" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "Eseguire l'arresto del server, chiudi la finestra." -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Aggiornamento fatto" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "ricerca" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Leggere libri" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Libri non letti" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Leggere un libro" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "Compila tutti i campi" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "Registrare" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Si è verificato un errore sconosciuto. Per favore riprova più tardi." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Questo nome utente o indirizzo email è già in uso." -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "ora sei connesso come : '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Nome utente o password errata" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "Accesso" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "Token non trovato" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "Il token è scaduto" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "Successo! Torna al tuo dispositivo" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Configurare prima le impostazioni della posta SMTP..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Libro inviare con successo %(kindlemail)s correttamente" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Si è verificato un errore durante l'invio di questo libro: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Si prega di configurare innanzitutto il tuo indirizzo email..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Il libro è stato aggiunto alla mensola: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Il libro è stato rimosso dalla mensola: %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Uno scaffale con il nome '%(title)s' esiste già." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Mensola %(title)s creato" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "c'era un errore" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "creare uno scaffale" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "Mensola %(title)s cambiato" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Modifica un ripiano" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "cancellato con successo il ripiano %(name)s" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Mensola: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" "Errore durante l'apertura dello scaffale. La mensola non esiste o non è " "accessibile" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Modificare l'ordine della mensola: '%(name)s'" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Trovato un account esistente per questo indirizzo email." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "Profilo di %(name)s" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Profilo aggiornato" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Pagina di amministrazione" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Aggiornamento della configurazione del calibro-web" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Configurazione di base" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Aggiornamento della configurazione del calibro-web" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "Posizione DB non valida. Inserisci il percorso corretto." -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Aggiungi un nuovo utente" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "utente '%(user)s' creato" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "" "È stato trovato un account collegato a questo indirizzo e-mail o nome " "utente." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Parametri di posta aggiornati" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Successo quando invii il test a %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Impossibile inviare il test a E-Mail: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Impostazioni email aggiornate" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Modificare i parametri della posta" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "utente '%(nick)s' cancellati" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "utente '%(nick)s' aggiornato" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Errore imprevisto." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Modifica utente %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" "Errore durante l'apertura di eBook. Il file non esiste o il file non è " "accessibile" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "modificare la metainformazione" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Non è consentito caricare i file con l'estensione \"%s\" a questo server" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "Sconosciuto" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "Il file da caricare deve avere un'estensione" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossibile creare il percorso %s (autorizzazione negata)" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossibile archiviare il file %s (autorizzazione negata)" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossibile eliminare il file %s (autorizzazione negata)" @@ -615,7 +619,7 @@ msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -708,7 +712,7 @@ msgstr "visualizzare il libro dopo la modifica" msgid "Get metadata" msgstr "Ottieni metadati" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -824,71 +828,123 @@ msgstr "Espressione regolare per la selezione del titolo" msgid "Tags for Mature Content" msgstr "Tags per Contenuti maturi" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Abilita il caricamento" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Abilita la navigazione anonima" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Abilita la registrazione pubblica" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "Attiva login remoto (\"magic link\")" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "Uso" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "Ottenere una chiave API" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "API di Goodreads" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "Goodreads API Secret" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Impostazioni predefinite per i nuovi utenti" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Utente amministratore" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Consenti download" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Consenti caricamenti" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Consenti Modifica" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "Consenti l'eliminazione di libri" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Consenti la modifica della password" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "Consenti la modifica dei ripiani pubblici" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Mostra libro a caso" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Mostra libri popolari" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Mostra sezione più votati" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Mostra sezione lingua" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Mostra sezione serie" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Mostra sezione categorie" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Mostra sezione autore" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Mostra letto e non letto" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Un libro a caso" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Accesso" @@ -1020,6 +1076,22 @@ msgstr "Libri ordinati per categoria" msgid "Books ordered by series" msgstr "Libri ordinati per serie" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Ripiani pubblici" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "I tuoi scaffali" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Toggle navigation" @@ -1081,14 +1153,6 @@ msgstr "Categoria" msgid "Languages" msgstr "lingua" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Ripiani pubblici" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "I tuoi scaffali" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Crea una mensola" @@ -1273,50 +1337,6 @@ msgstr "Mostra libri per lingua" msgid "Show all" msgstr "Mostra tutto" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Mostra libro a caso" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Mostra libri popolari" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Mostra sezione più votati" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Mostra sezione lingua" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Mostra sezione serie" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Mostra sezione categorie" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Mostra sezione autore" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Mostra letto e non letto" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Un libro a caso" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "Mostra sezione adulti" diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 18a36030..44523a78 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web dutch translation by Ed Driesen (GPL V3)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-06-21 20:15+0200\n" "Last-Translator: \n" "Language: nl\n" @@ -33,7 +33,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "niet geïnstalleerd" @@ -87,382 +87,386 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "Gast" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "Update pakket wordt aangevraagd" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Update pakket wordt gedownload" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Update pakket wordt uitgepakt" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "Bestanden zijn vervangen" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Database verbindingen zijn gesloten" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "Server is gestopt" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Update voltooid, klik op ok en herlaad de pagina" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "Recent toegevoegde boeken" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "Nieuwste boeken" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "Oudste boeken" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "Boeken (A-Z)" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "Boeken (A-Z)" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Populaire boeken (meeste downloads)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "Best beoordeelde boeken" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Willekeurige boeken" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Auteur lijst" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Fout bij openen van het boek. Bestand bestaat niet of is niet " "toegankelijk:" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Serie lijst" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Beschikbare talen" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Taal: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Categorie lijst" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Categorie: %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "Rechten om uit te voeren ontbreken" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Statistieken" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Server herstart, gelieve de pagina herladen" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "Bezig met het stoppen van de server, gelieve venster te sluiten" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Update voltooid" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "zoek" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Gelezen Boeken" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Ongelezen Boeken" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Lees een boek" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "Gelieve alle velden in te vullen!" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "registreer" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Een onbekende fout deed zich voor. Gelieve later nog eens te proberen." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Deze gebruikersnaam of dit emailadres is reeds in gebruik." -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "je bent nu ingelogd als: '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Verkeerde gebruikersnaam of Wachtwoord" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "login" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "Token niet gevonden" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "Token is verlopen" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "Gelukt! Ga terug naar je apparaat" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Gelieve de SMTP mail instellingen eerst te configureren..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Boek met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Er trad een fout op bij het versturen van dit boek: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Gelieve eerst je kindle email adres te configureren..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boek werd verwijderd van boekenplank: %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Boekenplank %(title)s aangemaakt" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "Er deed zich een fout voor" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "maak een boekenplank" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "Boekenplank %(title)s gewijzigd" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Bewerk een boekenplank" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Boekenplank %(name)s succesvol gewist" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Boekenplank: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" "Fout bij openen boekenplank. Boekenplank bestaat niet of is niet " "toegankelijk" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Verander volgorde van Boekenplank: '%(name)s'" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Een bestaand gebruiker gevonden voor dit email adres." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's profiel" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Profiel aangepast" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Administratie pagina" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Calibre-web configuratie aangepast" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Basis configuratie" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Calibre-web configuratie aangepast" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "DB locatie is niet geldig, gelieve het correcte pad in te geven" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Voeg nieuwe gebruiker toe" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "Gebruiker '%(user)s' aangemaakt" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "Een bestaande gebruiker gevonden voor dit emailadres of gebruikersnaam." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Mail instellingen aangepast" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test email met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Er trad een fout op met het versturen van de test email: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Email instellingen aangepast" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Bewerk mail instellingen" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "Gebruiker '%(nick)s' verwijderd" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "Gebruiker '%(nick)s' aangepast" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Een onbekende fout deed zich voor." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Bewerk gebruiker '%(nick)s'" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Fout bij openen eBook. Het bestand bestaat niet of is niet toegankelijk" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "Bewerk metadata" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Het uploaden van bestandsextensie \"%s\" is niet toegestaan op deze server" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "Bestand opslaan niet gelukt voor %s." -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "onbekend" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "Up te loaden bestanden dienen een extensie te hebben" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Het pad %s aanmaken mislukt (Geen toestemming)." -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Bestand %s opslaan mislukt (Geen toestemming)." -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Bestand %s wissen mislukt (Geen toestemming)." @@ -619,7 +623,7 @@ msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -712,7 +716,7 @@ msgstr "bekijk boek na bewerking" msgid "Get metadata" msgstr "Verkrijg metadata" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -828,71 +832,123 @@ msgstr "Rguliere expressie op titels te sorteren" msgid "Tags for Mature Content" msgstr "Tags voor Volwassen Inhoud" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Uploaden aanzetten" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Anoniem verkennen aanzetten" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Publieke registratie aanzetten" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "Maak op afstand ionloggen mogelijk (\"magic link\")" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "Gebruik" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "Verkrijg een API sleutel" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "Goodreads API sleutel" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "Goodreads API geheim" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Standaard instellingen voor nieuwe gebruikers" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Administratie gebruiker" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Downloads toestaan" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Uploads toestaan" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Bewerken toestaan" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "Het wissen van boeken toestaan" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Wachtwoord wijzigen toestaan" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "Publieke boekenplanken bewerken toestaan" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Toon willekeurige boeken" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Toon populaire boeken" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Toon best beoordeelde boeken" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Toon taal selectie" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Toon serie selectie" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Toon categorie selectie" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Toon auteur selectie" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Toon gelezen en ongelezen" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Toon willekeurige boeken in gedetailleerd zicht" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" @@ -1024,6 +1080,22 @@ msgstr "Boeken gesorteerd op Categorie" msgid "Books ordered by series" msgstr "Boeken gesorteerd op Serie" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Publieke Boekenplanken" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "Jou Boekenplanken" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Kies navigatie" @@ -1085,14 +1157,6 @@ msgstr "Categorieën" msgid "Languages" msgstr "Talen" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Publieke Boekenplanken" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "Jou Boekenplanken" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Maak een boekenplank" @@ -1275,50 +1339,6 @@ msgstr "Toon boeken met taal" msgid "Show all" msgstr "Toon alles" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Toon willekeurige boeken" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Toon populaire boeken" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Toon best beoordeelde boeken" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Toon taal selectie" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Toon serie selectie" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Toon categorie selectie" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Toon auteur selectie" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Toon gelezen en ongelezen" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Toon willekeurige boeken in gedetailleerd zicht" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "Toon Volwassen Inhoud" diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index 6adf346c..95ebc5a5 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2017-04-11 22:51)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-04-11 22:51+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "nie zainstalowane" @@ -80,378 +80,382 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "Gość" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "Żądanie o pakiet aktualizacji" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Pobieranie pakietu aktualizacji" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Rozpakowywanie pakietu aktualizacji" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "Pliki zostały zastąpione" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Połączenia z bazą danych zostały zakończone" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "Serwer jest zatrzymany" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Lista autorów" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Błąd otwierania e-booka. Plik nie istnieje lub plik nie jest dostępny:" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Seria: %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Aktualizacja zakończona" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "szukaj" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Przeczytane książki" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Nieprzeczytane książki" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "rejestracja" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Wystąpił nieznany błąd. Spróbuj ponownie później." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Nazwa użytkownika lub adres e-mail jest już w użyciu." -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Zalogowałeś się jako: '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Błędna nazwa użytkownika lub hasło" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "logowanie" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Książka została pomyślnie wysłana do %(kindlemail)s" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Książka została usunięta z półki: %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Znaleziono istniejące konto dla tego adresu e-mail." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Konfiguracja Calibre-web została zaktualizowana" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Konfiguracja Calibre-web została zaktualizowana" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "Znaleziono istniejące konto dla tego adresu e-mail lub nazwy użytkownika." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Zaktualizowano ustawienia poczty e-mail" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Wystąpił błąd podczas wysyłania testowej wiadomości e-mail: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Zaktualizowano ustawienia e-mail" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Edytuj ustawienia poczty e-mail" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "Plik do przesłania musi mieć rozszerzenie" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." @@ -608,7 +612,7 @@ msgstr "OK" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -701,7 +705,7 @@ msgstr "wyświetl książkę po edycji" msgid "Get metadata" msgstr "Uzyskaj metadane" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -818,71 +822,123 @@ msgstr "Wyrażenie regularne dla tytułu sortującego" msgid "Tags for Mature Content" msgstr "" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Włącz wysyłanie" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Włącz anonimowe przeglądanie" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Włącz publiczną rejestrację" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Domyślne ustawienia dla nowych użytkowników" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Użytkownik z uprawnieniami administratora" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Zezwalaj na pobieranie" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Zezwalaj na wysyłanie" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Zezwalaj na edycję" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Zezwalaj na zmianę hasła" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Pokaż losowe książki" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Pokaż najpopularniejsze książki" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Pokaż najlepiej ocenione książki" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Pokaż wybór języka" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Pokaż wybór serii" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Pokaż wybór kategorii" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Pokaż wybór autora" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Pokaż przeczytane i nieprzeczytane" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Pokaz losowe książki w widoku szczegółowym" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Zaloguj się" @@ -1014,6 +1070,22 @@ msgstr "Książki sortowane według kategorii" msgid "Books ordered by series" msgstr "Książki sortowane według serii" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Publiczne półki" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "Twoje półki" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Przełącz nawigację" @@ -1075,14 +1147,6 @@ msgstr "Kategorie" msgid "Languages" msgstr "Języki" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Publiczne półki" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "Twoje półki" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Utwórz półkę" @@ -1266,50 +1330,6 @@ msgstr "Pokaż książki w języku" msgid "Show all" msgstr "Pokaż wszystko" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Pokaż losowe książki" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Pokaż najpopularniejsze książki" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Pokaż najlepiej ocenione książki" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Pokaż wybór języka" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Pokaż wybór serii" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Pokaż wybór kategorii" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Pokaż wybór autora" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Pokaż przeczytane i nieprzeczytane" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Pokaz losowe książki w widoku szczegółowym" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "" diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index cb6d86b8..76dd6e1c 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: Pavel Korovin \n" "Language: ru\n" @@ -26,7 +26,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "Отсутствует" @@ -80,378 +80,382 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "Гость" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "Проверка обновлений" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "Загрузка обновлений" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "Распаковка обновлений" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "Файлы заменены" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "Соеднинения с базой данных закрыты" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "Сервер остановлен" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "Популярные книги (часто загружаемые)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "Книги с наивысшим рейтингом" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "Случайный выбор" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "Авторы" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Невозможно открыть книгу. Файл не существует или недоступен." -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "Серии" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "Серии: %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "Языки" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "Язык: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "Категории" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "Категория: %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "Статистика" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "Производится остановка сервера, пожалуйста, закройте окно" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "Обновление закончено" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "поиск" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "Прочитанные" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "Непрочитанные" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "Читать книгу" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "Пожалуйста, заполните все поля!" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "зарегистрироваться" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "Неизвестная ошибка. Пожалуйста, попробуйте позже." -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "Имя пользователя или адрес эл. почты уже используется" -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Вы вошли как пользователь '%(nickname)s'" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "Ошибка в имени пользователя или пароле" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "войти" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP" -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Книга успешно отправлена на %(kindlemail)s" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ошибка при отправке книги: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "Пожалуйста, сначала укажите ваш kindle email..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Книга удалена с книжной полки: %(sname)s" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Книжкная полка с названием '%(title)s' уже существует." -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "Создана книжная полка %(title)s" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "Произошла ошибка" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "создать книжную полку" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "Книжная полка %(title)s изменена" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "Изменить книжную полку" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Книжная полка %(name)s удалена" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "Книжная полка: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Изменить расположение книжной полки '%(name)s'" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "Найдена учётная запись для для данного адреса email." -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "Профиль %(name)s" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "Профиль обновлён" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "Администрирование" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Конфигурация Calibre-web обновлена" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "Настройки сервера" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Конфигурация Calibre-web обновлена" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "Добавить пользователя" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "Пользователь '%(user)s' добавлен" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "Для указанного адреса или имени найдена существующая учётная запись." -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "Настройки почты изменены" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Ошибка отправки тестового сообщения: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "Обновлены настройки e-mail" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "Изменить почтовые настройки" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "Пользователь '%(nick)s' удалён" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "Пользователь '%(nick)s' обновлён" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "Произошла неизвестная ошибка." -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "Изменить пользователя %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "изменить метаданные" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Запрещена загрузка файлов с расширением \"%s\"" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "неизвестно" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "Загружаемый файл должен иметь расширение" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Ошибка при создании пути %s (доступ запрещён)" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Ошибка записи файоа %s (доступ запрещён)" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Ошибка удаления файла %s (доступ запрещён)" @@ -608,7 +612,7 @@ msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -701,7 +705,7 @@ msgstr "смотреть книгу после редактирования" msgid "Get metadata" msgstr "Получить метаданные" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -817,71 +821,123 @@ msgstr "Regexp для сортировки по названию" msgid "Tags for Mature Content" msgstr "" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "Разрешить анонимный просмотр" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "Разрешить публичную регистрацию" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "Настройки по умолчанию для новых пользователей" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "Управление сервером" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "Разрешить скачивание с сервера" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "Разрешить редактирование книг" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "Разрешить удаление книг" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "Разрешить смену пароля" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "Разрешить редактирование публичных книжных полок" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "Показывать случайные книги" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "Показывать популярные книги" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "Показывать книги с наивысшим рейтингом" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "Показывать выбор языка" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "Показывать выбор серии" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "Показывать выбор категории" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "Показывать выбор автора" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "Показывать прочитанные и непрочитанные" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "Показывать случайные книги при просмотре деталей" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Имя пользователя" @@ -1011,6 +1067,22 @@ msgstr "Книги, отсортированные по категории" msgid "Books ordered by series" msgstr "Книги, отсортированные по серии" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "Общие книжные полки" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "Ваши книжные полки" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Включить навигацию" @@ -1072,14 +1144,6 @@ msgstr "Категории" msgid "Languages" msgstr "Языки" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "Общие книжные полки" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "Ваши книжные полки" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Создать книжную полку" @@ -1262,50 +1326,6 @@ msgstr "Показать книги на языках" msgid "Show all" msgstr "Всех" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "Показывать случайные книги" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "Показывать популярные книги" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "Показывать книги с наивысшим рейтингом" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "Показывать выбор языка" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "Показывать выбор серии" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "Показывать выбор категории" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "Показывать выбор автора" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "Показывать прочитанные и непрочитанные" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "Показывать случайные книги при просмотре деталей" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 190ef138..dccd5438 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -26,7 +26,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "未安装" @@ -80,378 +80,382 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "游客" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "正在请求更新包" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "正在下载更新包" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "正在解压更新包" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "文件已替换" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "数据库连接已关闭" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "服务器已停止" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "更新完成,请按确定并刷新页面" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "最近添加的书籍" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "最新书籍" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "最旧书籍" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "书籍 (A-Z)" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "书籍 (Z-A)" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "最高评分书籍" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "作者列表" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "分类列表" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "可执行权限缺失" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "统计" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "服务器已重启,请刷新页面" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "更新完成" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "搜索" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "已读书籍" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "未读书籍" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "请填写所有字段" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "注册" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "发生一个未知错误。请稍后再试。" -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "此用户名或邮箱已被使用。" -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "您现在已以'%(nickname)s'身份登录" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "用户名或密码错误" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "登录" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "找不到Token" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "Token已过期" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "成功!请返回您的设备" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "请先配置SMTP邮箱..." -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "此书已被成功发给 %(kindlemail)s" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "请先配置您的kindle电子邮箱地址..." -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "打开书架出错。书架不存在或不可访问" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "找到已使用此邮箱的账号。" -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "管理页" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" -msgstr "Calibre-web配置已更新" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" +msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "Calibre-web配置已更新" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "已存在使用此邮箱或昵称的账号。" -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "邮箱设置已更新" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "E-Mail 设置已更新" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "编辑邮箱设置" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "打开电子书出错。文件不存在或不可访问" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "编辑元数据" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "未知" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须有一个后缀" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "创建路径 %s 失败(权限拒绝)。" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "存储文件 %s 失败(权限拒绝)。" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "删除文件 %s 失败(权限拒绝)。" @@ -608,7 +612,7 @@ msgstr "确定" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -701,7 +705,7 @@ msgstr "编辑后查看书籍" msgid "Get metadata" msgstr "获取元数据" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -817,71 +821,123 @@ msgstr "标题排序的正则表达式" msgid "Tags for Mature Content" msgstr "" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "启用上传" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "启用匿名浏览" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "启用注册" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "启用远程登录 (\"魔法链接\")" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "新用户默认设置" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "管理用户" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "允许下载" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "允许上传" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "允许编辑" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "允许删除书籍" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "允许修改密码" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "允许编辑公共书架" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "显示随机书籍" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "显示热门书籍" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "显示最高评分书籍" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "显示语言选择" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "显示丛书选择" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "显示分类选择" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "显示作者选择" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "显示已读和未读" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "在详情页显示随机书籍" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "登录" @@ -1011,6 +1067,22 @@ msgstr "书籍按分类排序" msgid "Books ordered by series" msgstr "书籍按丛书排序" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "公开书架" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "您的书架" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "切换导航" @@ -1072,14 +1144,6 @@ msgstr "分类" msgid "Languages" msgstr "语言" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "公开书架" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "您的书架" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "创建书架" @@ -1262,50 +1326,6 @@ msgstr "按语言显示书籍" msgid "Show all" msgstr "显示全部" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "显示随机书籍" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "显示热门书籍" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "显示最高评分书籍" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "显示语言选择" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "显示丛书选择" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "显示分类选择" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "显示作者选择" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "显示已读和未读" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "在详情页显示随机书籍" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "" diff --git a/cps/ub.py b/cps/ub.py index b76ace02..0d0f78e0 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -14,9 +14,9 @@ from flask_babel import gettext as _ import json import datetime from binascii import hexlify +import cli -dbpath = os.path.join(os.path.normpath(os.getenv("CALIBRE_DBPATH", os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep)), "app.db") -engine = create_engine('sqlite:///{0}'.format(dbpath), echo=False) +engine = create_engine('sqlite:///{0}'.format(cli.settingspath), echo=False) Base = declarative_base() ROLE_USER = 0 @@ -294,6 +294,7 @@ class Settings(Base): config_goodreads_api_key = Column(String) config_goodreads_api_secret = Column(String) config_mature_content_tags = Column(String) # type: str + config_logfile = Column(String) def __repr__(self): pass @@ -322,6 +323,7 @@ class Config: self.config_main_dir = os.path.join(os.path.normpath(os.path.dirname( os.path.realpath(__file__)) + os.sep + ".." + os.sep)) self.db_configured = None + self.config_logfile = None self.loadSettings() def loadSettings(self): @@ -356,11 +358,22 @@ class Config: self.config_goodreads_api_key = data.config_goodreads_api_key self.config_goodreads_api_secret = data.config_goodreads_api_secret self.config_mature_content_tags = data.config_mature_content_tags + if data.config_logfile: + self.config_logfile = data.config_logfile @property def get_main_dir(self): return self.config_main_dir + def get_config_logfile(self): + if not self.config_logfile: + return os.path.join(self.get_main_dir, "calibre-web.log") + else: + if os.path.dirname(self.config_logfile): + return self.config_logfile + else: + return os.path.join(self.get_main_dir, self.config_logfile) + def role_admin(self): if self.config_default_role is not None: return True if self.config_default_role & ROLE_ADMIN == ROLE_ADMIN else False @@ -584,6 +597,13 @@ def migrate_Database(): conn = engine.connect() conn.execute("ALTER TABLE Settings ADD column `config_default_show` SmallInteger DEFAULT 2047") session.commit() + try: + session.query(exists().where(Settings.config_logfile)).scalar() + session.commit() + except exc.OperationalError: # Database is not compatible, some rows are missing + conn = engine.connect() + conn.execute("ALTER TABLE Settings ADD column `config_logfile` String DEFAULT ''") + session.commit() def clean_database(): @@ -662,7 +682,7 @@ Session.configure(bind=engine) session = Session() # generate database and admin and guest user, if no database is existing -if not os.path.exists(dbpath): +if not os.path.exists(cli.settingspath): try: Base.metadata.create_all(engine) create_default_config() diff --git a/cps/web.py b/cps/web.py index f3c55109..da7f6f61 100755 --- a/cps/web.py +++ b/cps/web.py @@ -222,7 +222,7 @@ gevent_server = None formatter = logging.Formatter( "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s") -file_handler = RotatingFileHandler(os.path.join(config.get_main_dir, "calibre-web.log"), maxBytes=50000, backupCount=2) +file_handler = RotatingFileHandler(config.get_config_logfile(), maxBytes=50000, backupCount=2) file_handler.setFormatter(formatter) app.logger.addHandler(file_handler) app.logger.setLevel(config.config_log_level) @@ -2573,7 +2573,20 @@ def configuration_helper(origin): content.config_default_show = content.config_default_show + ub.SIDEBAR_RECENT if "show_sorted" in to_save: content.config_default_show = content.config_default_show + ub.SIDEBAR_SORTED - + if content.config_logfile != to_save["config_logfile"]: + # check valid path, only path or file + if os.path.dirname(to_save["config_logfile"]): + if os.path.exists(os.path.dirname(to_save["config_log_level"])): + content.config_logfile = to_save["config_logfile"] + else: + ub.session.commit() + flash(_(u'Logfile location is not valid, please enter correct path'), category="error") + return render_title_template("config_edit.html", content=config, origin=origin, + gdrive=gdrive_support, + goodreads=goodreads_support, title=_(u"Basic Configuration")) + else: + content.config_logfile = to_save["config_logfile"] + reboot_required = True try: if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"): gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db") diff --git a/messages.pot b/messages.pot index 27f35ad0..a2cfa7a8 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-11-30 16:45+0100\n" +"POT-Creation-Date: 2017-12-02 11:12+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1450 msgid "not installed" msgstr "" @@ -71,378 +71,382 @@ msgstr "" msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" msgstr "" -#: cps/ub.py:577 +#: cps/ub.py:649 msgid "Guest" msgstr "" -#: cps/web.py:967 +#: cps/web.py:1016 msgid "Requesting update package" msgstr "" -#: cps/web.py:968 +#: cps/web.py:1017 msgid "Downloading update package" msgstr "" -#: cps/web.py:969 +#: cps/web.py:1018 msgid "Unzipping update package" msgstr "" -#: cps/web.py:970 +#: cps/web.py:1019 msgid "Files are replaced" msgstr "" -#: cps/web.py:971 +#: cps/web.py:1020 msgid "Database connections are closed" msgstr "" -#: cps/web.py:972 +#: cps/web.py:1021 msgid "Server is stopped" msgstr "" -#: cps/web.py:973 +#: cps/web.py:1022 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1047 +#: cps/web.py:1096 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1057 +#: cps/web.py:1106 msgid "Newest Books" msgstr "" -#: cps/web.py:1069 +#: cps/web.py:1118 msgid "Oldest Books" msgstr "" -#: cps/web.py:1081 +#: cps/web.py:1130 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1092 +#: cps/web.py:1141 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1120 +#: cps/web.py:1169 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:1133 +#: cps/web.py:1182 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:32 cps/web.py:1144 +#: cps/templates/index.xml:32 cps/web.py:1193 msgid "Random Books" msgstr "" -#: cps/web.py:1158 +#: cps/web.py:1207 msgid "Author list" msgstr "" -#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 +#: cps/web.py:1219 cps/web.py:1277 cps/web.py:1407 cps/web.py:1876 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1261 msgid "Series list" msgstr "" -#: cps/web.py:1226 +#: cps/web.py:1275 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:1259 +#: cps/web.py:1308 msgid "Available languages" msgstr "" -#: cps/web.py:1276 +#: cps/web.py:1325 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:58 cps/web.py:1286 +#: cps/templates/index.xml:58 cps/web.py:1335 msgid "Category list" msgstr "" -#: cps/web.py:1300 +#: cps/web.py:1349 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/web.py:1412 +#: cps/web.py:1461 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1426 +#: cps/web.py:1475 msgid "Statistics" msgstr "" -#: cps/web.py:1591 +#: cps/web.py:1640 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1593 +#: cps/web.py:1642 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1609 +#: cps/web.py:1658 msgid "Update done" msgstr "" -#: cps/web.py:1691 cps/web.py:1704 +#: cps/web.py:1740 cps/web.py:1753 msgid "search" msgstr "" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:132 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1831 msgid "Read Books" msgstr "" #: cps/templates/index.xml:46 cps/templates/index.xml:49 -#: cps/templates/layout.html:134 cps/web.py:1785 +#: cps/templates/layout.html:134 cps/web.py:1834 msgid "Unread Books" msgstr "" -#: cps/web.py:1860 cps/web.py:1862 cps/web.py:1864 cps/web.py:1873 +#: cps/web.py:1909 cps/web.py:1911 cps/web.py:1913 cps/web.py:1922 msgid "Read a Book" msgstr "" -#: cps/web.py:1925 cps/web.py:2556 +#: cps/web.py:1974 cps/web.py:2644 msgid "Please fill out all fields!" msgstr "" -#: cps/web.py:1926 cps/web.py:1942 cps/web.py:1947 cps/web.py:1949 +#: cps/web.py:1975 cps/web.py:1992 cps/web.py:1997 cps/web.py:1999 msgid "register" msgstr "" -#: cps/web.py:1941 +#: cps/web.py:1991 msgid "An unknown error occured. Please try again later." msgstr "" -#: cps/web.py:1946 +#: cps/web.py:1996 msgid "This username or email address is already in use." msgstr "" -#: cps/web.py:1965 cps/web.py:2061 +#: cps/web.py:2015 cps/web.py:2111 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2020 msgid "Wrong Username or Password" msgstr "" -#: cps/web.py:1976 cps/web.py:1997 +#: cps/web.py:2026 cps/web.py:2047 msgid "login" msgstr "" -#: cps/web.py:2009 cps/web.py:2040 +#: cps/web.py:2059 cps/web.py:2090 msgid "Token not found" msgstr "" -#: cps/web.py:2017 cps/web.py:2048 +#: cps/web.py:2067 cps/web.py:2098 msgid "Token has expired" msgstr "" -#: cps/web.py:2025 +#: cps/web.py:2075 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2075 +#: cps/web.py:2125 msgid "Please configure the SMTP mail settings first..." msgstr "" -#: cps/web.py:2079 +#: cps/web.py:2129 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2083 +#: cps/web.py:2133 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:2085 cps/web.py:2641 +#: cps/web.py:2135 cps/web.py:2730 msgid "Please configure your kindle email address first..." msgstr "" -#: cps/web.py:2129 +#: cps/web.py:2179 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2166 +#: cps/web.py:2216 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:2185 cps/web.py:2209 +#: cps/web.py:2235 cps/web.py:2259 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:2190 +#: cps/web.py:2240 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:2192 cps/web.py:2220 +#: cps/web.py:2242 cps/web.py:2270 msgid "There was an error" msgstr "" -#: cps/web.py:2193 cps/web.py:2195 +#: cps/web.py:2243 cps/web.py:2245 msgid "create a shelf" msgstr "" -#: cps/web.py:2218 +#: cps/web.py:2268 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2221 cps/web.py:2223 +#: cps/web.py:2271 cps/web.py:2273 msgid "Edit a shelf" msgstr "" -#: cps/web.py:2244 +#: cps/web.py:2294 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:2266 +#: cps/web.py:2316 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2269 +#: cps/web.py:2319 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2300 +#: cps/web.py:2350 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2369 +#: cps/web.py:2419 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:2371 cps/web.py:2375 +#: cps/web.py:2421 cps/web.py:2425 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2372 +#: cps/web.py:2422 msgid "Profile updated" msgstr "" -#: cps/web.py:2386 +#: cps/web.py:2436 msgid "Admin page" msgstr "" -#: cps/web.py:2510 -msgid "Calibre-web configuration updated" +#: cps/web.py:2583 +msgid "Logfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 +#: cps/web.py:2586 cps/web.py:2605 cps/web.py:2611 cps/web.py:2625 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2521 +#: cps/web.py:2598 +msgid "Calibre-web configuration updated" +msgstr "" + +#: cps/web.py:2609 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 +#: cps/templates/admin.html:34 cps/web.py:2646 cps/web.py:2700 msgid "Add new user" msgstr "" -#: cps/web.py:2603 +#: cps/web.py:2691 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:2607 +#: cps/web.py:2695 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:2629 +#: cps/web.py:2718 msgid "Mail settings updated" msgstr "" -#: cps/web.py:2636 +#: cps/web.py:2725 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2639 +#: cps/web.py:2728 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2643 +#: cps/web.py:2732 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2644 +#: cps/web.py:2733 msgid "Edit mail settings" msgstr "" -#: cps/web.py:2673 +#: cps/web.py:2762 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:2781 +#: cps/web.py:2870 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:2784 +#: cps/web.py:2873 msgid "An unknown error occured." msgstr "" -#: cps/web.py:2787 +#: cps/web.py:2876 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2803 +#: cps/web.py:2892 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 +#: cps/web.py:2907 cps/web.py:3115 cps/web.py:3120 cps/web.py:3263 msgid "edit metadata" msgstr "" -#: cps/web.py:2828 cps/web.py:3068 +#: cps/web.py:2917 cps/web.py:3157 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2839 +#: cps/web.py:2928 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2861 cps/web.py:2865 +#: cps/web.py:2950 cps/web.py:2954 msgid "unknown" msgstr "" -#: cps/web.py:3074 +#: cps/web.py:3163 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:3093 +#: cps/web.py:3182 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:3098 +#: cps/web.py:3187 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:3103 +#: cps/web.py:3192 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" @@ -599,7 +603,7 @@ msgstr "" #: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:135 cps/templates/book_edit.html:157 -#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 +#: cps/templates/config_edit.html:211 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:139 msgid "Back" @@ -692,7 +696,7 @@ msgstr "" msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:154 +#: cps/templates/book_edit.html:134 cps/templates/config_edit.html:209 #: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:137 msgid "Submit" @@ -808,71 +812,123 @@ msgstr "" msgid "Tags for Mature Content" msgstr "" -#: cps/templates/config_edit.html:93 +#: cps/templates/config_edit.html:92 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "" + +#: cps/templates/config_edit.html:98 msgid "Enable uploading" msgstr "" -#: cps/templates/config_edit.html:97 +#: cps/templates/config_edit.html:102 msgid "Enable anonymous browsing" msgstr "" -#: cps/templates/config_edit.html:101 +#: cps/templates/config_edit.html:106 msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:105 +#: cps/templates/config_edit.html:110 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:110 +#: cps/templates/config_edit.html:115 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:111 +#: cps/templates/config_edit.html:116 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:120 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:119 +#: cps/templates/config_edit.html:124 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:125 +#: cps/templates/config_edit.html:129 msgid "Default Settings for new users" msgstr "" -#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:94 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:94 msgid "Admin user" msgstr "" -#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:103 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:103 msgid "Allow Downloads" msgstr "" -#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:107 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:107 msgid "Allow Uploads" msgstr "" -#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:111 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:111 msgid "Allow Edit" msgstr "" -#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:115 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:115 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:120 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:120 msgid "Allow Changing Password" msgstr "" -#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:124 +#: cps/templates/config_edit.html:156 cps/templates/user_edit.html:124 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 +#: cps/templates/config_edit.html:160 +msgid "Default visiblities for new users" +msgstr "" + +#: cps/templates/config_edit.html:164 cps/templates/user_edit.html:46 +msgid "Show random books" +msgstr "" + +#: cps/templates/config_edit.html:168 cps/templates/user_edit.html:50 +msgid "Show recent books" +msgstr "" + +#: cps/templates/config_edit.html:172 cps/templates/user_edit.html:54 +msgid "Show sorted books" +msgstr "" + +#: cps/templates/config_edit.html:176 cps/templates/user_edit.html:58 +msgid "Show hot books" +msgstr "" + +#: cps/templates/config_edit.html:180 cps/templates/user_edit.html:62 +msgid "Show best rated books" +msgstr "" + +#: cps/templates/config_edit.html:184 cps/templates/user_edit.html:66 +msgid "Show language selection" +msgstr "" + +#: cps/templates/config_edit.html:188 cps/templates/user_edit.html:70 +msgid "Show series selection" +msgstr "" + +#: cps/templates/config_edit.html:192 cps/templates/user_edit.html:74 +msgid "Show category selection" +msgstr "" + +#: cps/templates/config_edit.html:196 cps/templates/user_edit.html:78 +msgid "Show author selection" +msgstr "" + +#: cps/templates/config_edit.html:200 cps/templates/user_edit.html:82 +msgid "Show read and unread" +msgstr "" + +#: cps/templates/config_edit.html:204 cps/templates/user_edit.html:86 +msgid "Show random books in detail view" +msgstr "" + +#: cps/templates/config_edit.html:214 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "" @@ -1002,6 +1058,22 @@ msgstr "" msgid "Books ordered by series" msgstr "" +#: cps/templates/index.xml:70 cps/templates/layout.html:152 +msgid "Public Shelves" +msgstr "" + +#: cps/templates/index.xml:73 +msgid "Books organized in public shelfs, visible to everyone" +msgstr "" + +#: cps/templates/index.xml:77 cps/templates/layout.html:156 +msgid "Your Shelves" +msgstr "" + +#: cps/templates/index.xml:80 +msgid "User's own shelfs, only visible to the current user himself" +msgstr "" + #: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "" @@ -1063,14 +1135,6 @@ msgstr "" msgid "Languages" msgstr "" -#: cps/templates/layout.html:152 -msgid "Public Shelves" -msgstr "" - -#: cps/templates/layout.html:156 -msgid "Your Shelves" -msgstr "" - #: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "" @@ -1253,50 +1317,6 @@ msgstr "" msgid "Show all" msgstr "" -#: cps/templates/user_edit.html:46 -msgid "Show random books" -msgstr "" - -#: cps/templates/user_edit.html:50 -msgid "Show recent books" -msgstr "" - -#: cps/templates/user_edit.html:54 -msgid "Show sorted books" -msgstr "" - -#: cps/templates/user_edit.html:58 -msgid "Show hot books" -msgstr "" - -#: cps/templates/user_edit.html:62 -msgid "Show best rated books" -msgstr "" - -#: cps/templates/user_edit.html:66 -msgid "Show language selection" -msgstr "" - -#: cps/templates/user_edit.html:70 -msgid "Show series selection" -msgstr "" - -#: cps/templates/user_edit.html:74 -msgid "Show category selection" -msgstr "" - -#: cps/templates/user_edit.html:78 -msgid "Show author selection" -msgstr "" - -#: cps/templates/user_edit.html:82 -msgid "Show read and unread" -msgstr "" - -#: cps/templates/user_edit.html:86 -msgid "Show random books in detail view" -msgstr "" - #: cps/templates/user_edit.html:98 msgid "Show mature content" msgstr "" diff --git a/readme.md b/readme.md index 0b228086..c1e35e5c 100755 --- a/readme.md +++ b/readme.md @@ -46,7 +46,7 @@ Calibre Web is a web app providing a clean interface for browsing, reading and d The configuration can be changed as admin in the admin panel under "Configuration" Server Port: -Changes the port calibre-web is listening, changes take effect after pressing submit button +Changes the port Calibre-Web is listening, changes take effect after pressing submit button Enable public registration: Tick to enable public user registration. @@ -70,7 +70,7 @@ Optionally, to enable on-the-fly conversion from EPUB to MOBI when using the sen ## Using Google Drive integration -Additional optional dependencys are necessary to get this work. Please install all optional requirements by executing `pip install --target vendor -r optional-requirements.txt` +Calibre Calibre library (metadata.db) can be located on a Google Drive. Additional optional dependencys are necessary to get this work. Please install all optional requirements by executing `pip install --target vendor -r optional-requirements.txt` To use google drive integration, you have to use the google developer console to create a new app. https://console.developers.google.com @@ -84,7 +84,7 @@ Once a project has been created, we need to create a client ID and a client secr 6. Give the Credentials a name and enter your callback, which will be CALIBRE_WEB_URL/gdrive/callback 7. Finally click save -The Drive API should now be setup and ready to use, so we need to integrate it into Calibre Web. This is done as below: - +The Drive API should now be setup and ready to use, so we need to integrate it into Calibre-Web. This is done as below: - 1. Open config page 2. Enter the location that will be used to store the metadata.db file, and to temporary store uploaded books and other temporary files for upload @@ -92,7 +92,7 @@ The Drive API should now be setup and ready to use, so we need to integrate it i 3. Enter Client Secret and Client Key as provided via previous steps 4. Enter the folder that is the root of your calibre library 5. Enter base URL for calibre (used for google callbacks) -6 Now select Authenticate Google Drive +6. Now select Authenticate Google Drive 7. This should redirect you to google to allow it top use your Drive, and then redirect you back to the config page 8. Google Drive should now be connected and be used to get images and download Epubs. The metadata.db is stored in the calibre library location @@ -108,7 +108,7 @@ Calibre Web can be run as Docker container. Pre-built Docker images based on Alp ## Reverse Proxy -Reverse proxy configuration examples for apache and nginx to use calibre-web: +Reverse proxy configuration examples for apache and nginx to use Calibre-Web: nginx configuration for a local server listening on port 8080, mapping calibre web to /calibre: @@ -152,12 +152,12 @@ Listen 443 ``` -## Start calibre-web as service under Linux +## Start Calibre-Web as service under Linux Create a file "cps.service" as root in the folder /etc/systemd/system with the following content: ```[Unit] -Description=Calibre-web +Description=Calibre-Web [Service] Type=simple @@ -173,3 +173,12 @@ Replace the user and ExecStart with your user and foldernames. `sudo systemctl enable cps.service` enables the service. + +## Command line options + +Starting the script with `-h` lists all supported command line options +Currently supported are 2 options, which are both useful for running multiple instances of Calibre-Web + +`"-p path"` allows to specify the location of the settings database +`"-p path"` allows to specify the location of the google-drive database +