From e6031844d5f10b825a5b412e452a3ac6bc210eb5 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 24 Nov 2024 08:42:13 +0100 Subject: [PATCH 1/7] Update Testresults --- test/Calibre-Web TestSummary_Linux.html | 121 +++++++++++++++++++----- 1 file changed, 97 insertions(+), 24 deletions(-) diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 8443cf4a1..5f14b98dc 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2024-11-20 18:23:06

+

Start Time: 2024-11-23 20:45:47

-

Stop Time: 2024-11-21 01:38:12

+

Stop Time: 2024-11-24 03:58:38

-

Duration: 6h 7 min

+

Duration: 6h 6 min

@@ -2111,11 +2111,11 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - + TestEditBooksOnGdrive 18 - 18 - 0 + 17 + 1 0 0 @@ -2242,11 +2242,31 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - +
TestEditBooksOnGdrive - test_edit_rating
- PASS + +
+ FAIL +
+ + + + @@ -2354,12 +2374,12 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - + TestSSL 7 - 7 - 0 + 6 0 + 1 0 Detail @@ -2413,11 +2433,31 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - +
TestSSL - test_email_limit
- PASS + +
+ ERROR +
+ + + + @@ -3058,12 +3098,12 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - + TestSecurity 5 - 5 - 0 + 4 0 + 1 0 Detail @@ -3099,11 +3139,44 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon - +
TestSecurity - test_redis_backend
- PASS + +
+ ERROR +
+ + + + @@ -5838,9 +5911,9 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon Total 525 - 515 - 1 - 0 + 512 + 2 + 2 9   @@ -5869,7 +5942,7 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon Platform - Linux 6.8.0-48-generic #48~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 7 11:24:13 UTC 2 x86_64 x86_64 + Linux 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64 x86_64 Basic @@ -6013,7 +6086,7 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon tornado - 6.4.1 + 6.4.2 Basic @@ -6385,7 +6458,7 @@ AssertionError: 'https://comicvine.gamespot.com/' != 'https://amazon From a972447dbc8cf5492ed39296de9f2efd50721f30 Mon Sep 17 00:00:00 2001 From: leyan Date: Sat, 30 Nov 2024 23:21:14 +0100 Subject: [PATCH 2/7] Correct a typo on config_password_character --- cps/templates/config_edit.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index 773532410..4018db2e9 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -411,7 +411,7 @@
- +
From f9390ceea5e51847e1dd0fa51c2ab41153a6a7a5 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 1 Dec 2024 16:22:08 +0100 Subject: [PATCH 3/7] reenable hide console window on windows --- cps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps.py b/cps.py index d7cb393a2..039c2a5e1 100755 --- a/cps.py +++ b/cps.py @@ -43,7 +43,7 @@ def hide_console_windows(): if __name__ == '__main__': if os.name == "nt": - pass # hide_console_windows() + hide_console_windows() main() From e49402649d829f569a75db05b740f9d17d3b70ad Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 7 Dec 2024 19:13:28 +0100 Subject: [PATCH 4/7] Order of elements on the book editing page changed --- cps/templates/book_edit.html | 69 +++++++++++++++++------------------- 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/cps/templates/book_edit.html b/cps/templates/book_edit.html index 71d62ca4e..615b40c2e 100644 --- a/cps/templates/book_edit.html +++ b/cps/templates/book_edit.html @@ -78,27 +78,6 @@
- -
- - -
- -
- - - {% for identifier in book.identifiers %} - - - - - - {% endfor %} - -
{{_('Remove')}}
- {{_('Add Identifier')}} -
-
@@ -111,21 +90,6 @@
-
- - -
- {% if current_user.role_upload() and g.allow_upload %} -
- - -
-
- -
- -
- {% endif %}
@@ -142,6 +106,39 @@
+
+ + +
+
+ + +
+
+ + + {% for identifier in book.identifiers %} + + + + + + {% endfor %} + +
{{_('Remove')}}
+ {{_('Add Identifier')}} +
+ {% if current_user.role_upload() and g.allow_upload %} +
+ + +
+
+ +
+ +
+ {% endif %} {% if cc|length > 0 %} {% for c in cc %}
From e542151652543452ef08ae5a46dcaae4c90e6197 Mon Sep 17 00:00:00 2001 From: pollitor Date: Sun, 8 Dec 2024 17:02:27 +0100 Subject: [PATCH 5/7] Update Galician translation --- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 55266 -> 70664 bytes cps/translations/gl/LC_MESSAGES/messages.po | 1316 +++++++++---------- 2 files changed, 630 insertions(+), 686 deletions(-) diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index adaa3ce4d484b3caaffb71017fb98d7d67477c46..c8b66be9fa8a008e60f3b8518efc3734bb9481cb 100644 GIT binary patch literal 70664 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∨d#77T}Zph3ue55o>Dc^7$qH~3I z=r;Z_3K-Ve6A1@wEJ$JXW|C8y-Zxl1fRzkV)M0vfmwik2?3#Tpw&pL?%&V~?!@5Vd z-$AyBlo38{8yJWSfl1Jty#ppT&y5R8iQYM;Ds9u48IG07Y_TdqDHvp~;mRH&EUoz4 zzBN9UmDE{%47b__JhY5t%{mp%A(?;8g&I3(&YW0h49cv3J6MO3$^Xqh>F)2$|>!t2OZ30^+iv%lV!L^5$MOAMIHcRmvcm>qzyqh*+jfMLw z+5MHq{e0m7MY@tb7Om4>QR||U@QQxu>@+03*l%qy^W?G8O1xFEHM7L^tes_{h9^)7 z+UWF+_+(^Hp~^gZWh31=abzzzq1ah!u>>oFq|`FBcca-Y(6_w>P9 z7rloMYM)PuCmoe;wza6=)l0Uw%uZCToh5bysbZ<^0?I#1UksP>k!l{#b(4AQWeE|G z0Ai=(=DZ}+3%RJ>9UD3I7}{*^7ShL#CYxer^?;CK{|`H^RmzPA4t*N$3?o5g(F|!L zt&HPUdNo4CRNo;DE7y>cnci&jjVonU`uy%|-SB%x}cB9%}^tn;(E(uxsj#z)&UP<0?8>$C*&WbLMZ?e!QaDAaCN z>DtQ5T0cVw`gd=Th6VR5Bq$wpw<;YnHZ1ZY`QB)1eg)4YCeDK5L3gUv*Ir*^(pl)! z*8=seYLxlPw0OatN|*$@o z=hL)I)DI1h%ENjP)qzZ`7YFliEUZ6Ku|XGxNjjD0?GWfx9S6-5({X51t|}bMwk&R2|B5Z z{c4leEB}gp*c{1jg{RN4G5+`ksZy?px|_Ma-C+8I$?mL&+XcOo@A^riGOqNYu*~M8 z8SIayyRq{_X*1ELLDFh4%ytop(-DY>ZRt7wO-CQ0+`Eu0q8Rvg2XD}zNe7Wi^5S+6 zB5r&JT}$x1b*?tzMaw{EE z7Pad=vZ39c7XuPUkTCgxi#*NgYPKb7_*2EGTAKrFojTOb(D_hQ z9b*zn#6ZDbl^inZp;){udZfQ&wU+qLW!9SniVC^`yK>25fw*MIX?!x>N=t8Xsy$E( z79p=IWQ{v!L%%>WJRczoR)}kFWd!3P9>qF}(VvG&Xh{28TxDHAs`hf`C>k_f(SzOR(-j!EsmG$PP$<317j5H)w5wlP*LsCF8u%Y4W z=}Z+mhbDs=soM)ovPpn6iSI@YC~DMZ(%Z+|z=}>qs7950O7_Xc5ZX%Fa@(otRh7)j zJg6yc!%!gy{XN<(6bK(pqwc^0Aq^ZRWTbC{H{b)bID+~vAFNMNq=MhRnCw^MHQEdc? zQp=x{^&!Hw5iqY34AuCX?H$^I9Lncq8al!hS&cVNkY@xxv?hdY(^x3ub=aCX1C?G) z)bbmfgU`<6C5d-h18?W(vpdW#Oi9S5mR-E-#N5!jj!Ic(5IrpmpbFGHoQWFaCDk}= z-qQ#i!r1JS;To%f6S339ZBXSM0ymuMAK{z!{xGRWXtFeKEJ{9WSHbygaO7Ein<>65s#eV4 znrROai<;~RWLv_ZUqS|s>ef}!;@6}9(d~rkttzc3z zZFvOyk0wYG;248YlaOD1$co^kCPF#7$Ao3Ys;?g-y26l08`DRy=&?CFX(3%W*xyQS zeJ={1@7H5(z(;EtswV{nB$>_UgixXL5ixfhD(8pZ9r7K_*bK1iGh??k&sr^66dLBu zD&_<79;JxB`Y!>AS*#%|LJJv^f(_{)!-DHo{UA?Fookv%tHjq{uSFAt8r@2-Q_@3w zB;5Fno2|mIc|?<4eSl6)u5Gn81-bqoLb@oES+TJy<7@80MndR(By?ZX8iw5AQwBAl zuw37K6A~_}%ZX1gX-V_wz8ZtppkFA6LH&J{@BlV{L@mxcopd}~e_`;;4B(kpw0{$# z+GPF?A!v9r?RKU();nAl=Fa`s3uNfmSIkaijx{YL5h;5UccAWB)1M3cGjU=elBL(b~j>8uRYrPVE0b{(46g7I@Iv=TdG#_LLzyw1q<6W!%YTkza6k%NxiypaHR5@(Ol`|WuG71UDRNZEeK98$0SetXD|jA@iuHkH?uolSM?zT9i-|C`cwGrpao)5J(}{MhTarzCj_oh}mPLMbLO}(>N17 z`AltQY<0Db)Z4mZh?Zg1v~#P6pr4Zne(l118XtJel95YeT-=Uv(M=eXwLU(h)T6cg zgtz7y)CQ9_+iiz%X-uoUm^3SOxtzPi?`iATFKQE37x)nZJENfaAqM8ehS`sfugb3LZp^+mAyF&CrQEJOCp6Eqkr6yjc zS%t-!cn3=?4Vy7v_;t11;u)dw#OvJUO0G72C;<{GQfzVoC~Y<5h98k)Rt_upxqzq& zZoqBwi)$#R@D9m`7RHzquq!7gry5De4xAYjf^X9uVQ6f6+z6R9p&2$v%EaJPK$OLQq&>st?8n8nx83#=_(U6lL$6HQ+Y`V82WP_ zY*zG{tyxZ2Vpq{e@Ya5=v2IE8rX3BSVVVY?$$2wIQk(iU7|i_E{oTNUbPestexHLC zqP*$Of8|4-VNtl@Va>DQ47sF9>t{bKnz-FW$`8{RS5?9uIjam;67?>4uoP+{h-~t= z!z+n@T8a)VV`3En5!9%4)Sb4g>pk*yE$FV}Hhlp^^^`X$goa5SX#0BekAjR`+y3yz zJSNVH(iWPKwg%GheX7E5glt?C)_FJBN%SKkr2l1SyV6OS(g&L@Lk$Z!!Xf@T$jHgv zmRS;5X+I2(+xaw#5>mejLiCzui#j#tq3uUSJoTi@JLhD3mOdBnyB~F51aRH z^MQk?p4!_P>XBK`mGLR4dM4-MMyO%t6+XJcuLhfST%TmLiim9v{Ve-wlPRhoGjC;L z(-xk1$17O1w1otN zr@@<=b{1$2zQm2J0S3dH)?iKdwWS7EkkmG<)w=dc!;SMC{n`pI2l^%%GXS#njlF!c zeS_Rcnrqk{N2Ti{c-SQ=$1V(nq(MDViW2H>p^sfYW@o3}+dey8QnR6Y&|9$jYJZm% z7wZ$)_}4uPY3>wpD2;`e|LvA&Tb6`smX~2Sy37`&TnQaEXW$yCFJLtc=LGcedT1bfQq!tec9T6d zyKC+BzICMWt1kqzdtK(=+V`NiFM41BC%Tj=sJyyo4YTIeaxE z_YiVVjQwkGEou`|i#3tT|1y_dJxkxCXBY9HO%+0K%(G zD`y*&UilkjkR?2J;l>;k5ylGKh ztzB&Sr%LP$-OxZ(QMGFXtt9$7{jg-maW&LtZq>EGSMYdGGs~ey$gm`9YMPCOq)NlR z?WS%7EvQpS@I-4+?$Y`mxXd)3T;OCqKdQsd(ZRgox=kBIX$U-(Evu^Dkpx2=;S`Lu zKqRpq$7DEE;|AW?Sxl?o?FQbM;?@zAY_+e%zc;`GhFZ()sx?6iVjBdamZ1bSZCbD` z!L+|7vxx-42%)eNNi4)c-MY_`u&9>bv||$pT9D1eeMHY)CSNUDqRX_dSXV=J2IOmQ zClE;rFUny~W9d@w_r{kNsE#3l8TYi$AyX%^n7nDW%xKg50G9c2LvLo#Bk_%Dvu%35 z3SVobt*z%(t96#ff16{kpdfD56RnKxM}dOb(kl{!s$0(WMNsXLBWQ1R5WgVoRL@Ob zVdb87QRzgShPOg;_h<@Wi~H*gVuoz=Q@s>p8&24q#-JNEM6m&p@pXf7g0Y@i?oS$Xn<%Gv?PPVul~-O^_zWKv;$H|2|AJ>gzn zd4`CT3{RxDjg2qQ*!k@{-ZYLl1@(C74cS05Z*j0>4Gl#FH{XS*Yy4bMqeSyfET-Fv zGhZ_63iR@dWu38Xe8I#m6ewoee$8Hr+@=XPb!%t{JJI7F?U~YGnB=js3guZ-HI`Kv z)!3G{_Evpb3s3fyH1q*fb$c(t-oc>DYJ$p}Mb?_kGSprb_lFsbk z_ljx4!RMsn53vs$z$=+0LyyiP8Ma+&{?!*Z1FD6nb7&ddSWk`9}o6=!fuyG?vpbyGK$!vwsxX84I2F`CiVXGq- z{Zhrz>hd0;A7!2mZ9RmJyYm`%(jR?OlEoNaDWN4HPKk}p_V&7-&G9s0Zn7BA#~wOJsnsnX=^t%uwsCih|;(qjQj69}|K-$|hE3T5Wx zv_)pRxmT;@)3C#^JZsmY8Kg-<=s}I3{4UpO%yzn+OlUSn&ecHTuI#XK61tT&$+Bu#qUfB_8dPDB`?`C)0)w zx`};8LTx7WJtk-}3v^fbZ7O@GLZXI`n$bfB@{@+v{QV3swtnV!W?OKXhHEg2QTs}m z>f9S{oH{BY+Tv@uX)cSHEd^o3qb0@2;^5vii$H`BkWBe*h{i6z5ZcoG-^8Q$R!M); zLoHIJf2e_zk7b;1!&{IW{;7&AxN>4yZniMHjESGM;3E+-CTA0Q2K=F4u1FU8qP`_e za}vTA_)Q6I?qXp;8nZ5$)dvs#QdYF2Vb5|S5Wkkyh{S3~U&D)A?_8FI7#W;w>D2Pk zkkDEs2!s5v;V9aAu?6w_Q(@JHbw6xC=%_%4ZsUZ|$mBzM*RwQ)L%cw`wu1+9Tk zujxx6D~soc-`3KW>loUsIdSyVw2_sF%zEaF1UcExN6r*g&}fo&CX?zZyrP8Sl#Q*m z>}RwHiJXoDph`O!E;f8?^Dl6%GoEFIQsID<))4kdTf^}Yv0=9#LBzE3;jjPOoj#E0 z$GAL(5tbsgv=&$DHehP?INabmM84&WAMsf^WuLMfAzRkZG1@e}VMb+d^c!aJNep8$ zLt|^% z3MGlHOn+FU+Kw(O_O3zR;8J5m8>(t!v`JM~BbffUwl_otk+vPRl;%rhl66hl99bja zDMfxHteEl>VHj8J%Q^+xVP18K(}u=%B~Sb9JfA^gH@~hJe@=|;W~N;*7Bnwq=6adZ zqC(Q=0GMjgk%+jbu#*4vu7O(rYOKTPy9dEGj0A|QQ?w(k@w1;06RO_d)s&kVm%WyT zs$)AO5a=)ac6Nu*y;%XU?(M%_hA|$6itU-~g9{&EvV{Zl2x~#wrKBG))60ipCP;Ga zTSkmmXb`BeHsi{TpM@ITG;DH>pFcB`4o^!nkB|i>k9sWEjj`B}qEK_=GO6q+1?|KAFJ(4vyjU4)t z31eMW;ra6+KaiFSHRM;){$FY5l3Pa+h2dVxWduyJ0A?Wx4=I8W$B5~Txh57SH?n0Z zTVTLKGROv)dSiV5f6l3{y4}}~g9NeNU9YaH^M3VjD8TBQve^zpAttOmHo1i-ed}0G zcz2L(rml+9rHon%4E<=b%>u&On(nUhbk`C+NM(R`A+3DKrMp``p~~7^WKAQ0J32j_ z(2Yc^$eq~Z4Iz7XR$FaE9+7;$55>u2?wXjd%{4e zCNZA+MlNLXqwPhRJgtK}UoBzPLwO1ZAll9`bDz(M`LG%+C{1O}v;Nf>xTIfU(IK&( z%E>{(S+jq#t(F%AbKwN^RH{2$8F*Bthv_%wyNZ9c`0=@(lx57J4_?^Q*}tk5oh<^h?yQqIm@rJNszCSE@3$ZD=@D}f!7+xUGAY45 zi5k)H&=|ns)-}=>G%GL9A2uwl$MSXGD=_|Q@(&9;4%c6kub7tudu{UwDmYn5_#qu* z=AFt1Y&qIY`T4{HL3B9ec3sHD@dnfWb{W4_sPIU(6tHM2fwdYHY88(~unq`TTO;=2 zYMTnL$tfq}Uwhfk#;8{~xcD|WVjvy-=ftQGg z>3-dq4s)zJvy~Whs8N$u`&^>)V4pccj}5xPo|Q{~n|4Tn`pGRfCrk532^5itpiOFLpwAx&D(NiCN4u8S8s@SkWK@X zWxx^wP0vca+LX(~Kx6Tmc(1^MU3V?oGr(Acf)p*xhGrqgD*#7aw6c$toak_h-pQbB zbmQ`IKN|Tn!_@GBLY`s`mAMFkOCEUGZEF*Rht9+&2^xcfN+Sn8@i~}?9x5v5iAhbDUzq9#1MVtAHYXOR; zM5hK$7^@qW@_-mL#CK)i7|fy;Fs?CrmrCaZp@}4#glL8SMMfP{Ff7o<8@I220gC~` zC@V|h21jHwt?aSW{~7^ABxm7+F~DHfyX0y z4EaaO?`kgIQ>k1Zus`=T#Mr3DXKU+Wag3#Btvv<5H2EZHnV5U85>F_~Ny-6|uyqsU5ez`j}8 z!ka(SCGn)?QP{{SHmRXm-qu{(Q2b&wGeCatx~y4SIS<0|39gpAe!jm5 zECD+(1f+HBGIFrH+esZMjgTPKQ&a+}c+=rqFP>U4=r8OYqOHNk$)&Z1S~zWxdt!jk z>D7XaP)k#)($hT>moFz?@L!sXfMpwM`9681v|ci=MW0y0p+)a~qICo*M8}{DfMR;z zvcrX4g2BbIbAyCn1)XfULR3}7QjQN?2Gn)C>pzHF(pHBY)%2o3For77-SjH+ALP%V zS4qH4D+n-(pl~b+bCMP$y-3pKg+OaYpoG>cg%@@WhZih3@2GCcnpw#Cg|oFIxC=eX z#vu9(Fl`Z$pWglpPH#%`Cnb)?E^xY-N$0#nr|BYkxR?e_vxn|WsHd92pm1AY-`R5v zV9c%rEnFk7gnbh{3X}TM<+Kti`zl5XfNf4RI$!O%xRY|MF-z1x*{VxAUS$?i=Az3E zKW#ay&W>1JLl)AWYwNJGi5Ay3(^<=n)qsms>xG5fr7kahp_Dr-*3~f z!3GTDtlg!>NH9;bB%lHvwzB0D4Qv=-!`j*ra%sjMGH}h7ZEQ!}d_@{RK5R#cPJ!nB zM%*{}Ve|NG_s&931PdaNXBd77Z0)Pq#$bsQRj3OYEe+t+_=%sfLmq@Rh*!{&vSO`} z+YnBoeRQ4&iawijg#c)6s@fSI9B~t+8U!t?L}#KkTbbpW6PV1S2;=lRHIP%5?S!?e z{Klr{g1cBHghFB#3JNcq&(vK0Jt}vuBYZItbR2vVsBqNB51(FRc!-ePr&oBwM@dgk zyWlNA$vz=!I~Vm_v|*Q%-7WZztd7amrQN17RbZuR#g;O8g%c;#Ed$PHO;p!6Sg|ir z%3XpIK?oe3U@Q$6kX`=H_F%v2`4%XYKVjHOguFmvwY^EG1|VpvJcP+>4X{2P#U@5ao1J83RD?oT{Pw>DLlVejHGo8JCb( zXrcX}b||=o|2M|!;{4P6p=Z8`*t+?ZP3sh=epHIFXdresD|N}Zn~omAUpdokG6Uc> z7c|h$$N2UV1q#r}7&CBT@#Q#sBYVlgPUs8g zMp{MA9QeC?g={FtPLqnFd-3i~x7 z%@_|63B8{<(yTQq))8jGxp3Etjq1V~3g@#0+jz5pR;M8ga3-8)TA8=AElj&mG|m1S zG9*CoRgQELPT?QrnSh91>VmVKm>aLA>t-Sf%l-bHr<}4D&6LAXnRHSDkx7=gY5Smk zqq3-Orkyqtjy62YG#`9%a@!W&cd4|lKnHaevXIXb7XVX3UocD6OcO-8@?uxT=x{%a Gg#QPToXw*E literal 55266 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 hF%u5-lgkts(FwEAH3qy=y9+V{{wv%q#ytQ diff --git a/cps/translations/gl/LC_MESSAGES/messages.po b/cps/translations/gl/LC_MESSAGES/messages.po index beb79b535..944609f69 100644 --- a/cps/translations/gl/LC_MESSAGES/messages.po +++ b/cps/translations/gl/LC_MESSAGES/messages.po @@ -3,45 +3,43 @@ # msgid "" msgstr "" -"Project-Id-Version: Calibre-Web\n" +"Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" "POT-Creation-Date: 2024-11-23 09:36+0100\n" -"PO-Revision-Date: 2022-08-11 16:46+0200\n" -"Last-Translator: pollitor \n" -"Language: gl\n" +"PO-Revision-Date: 2024-12-08 13:50+0100\n" +"Last-Translator: pollitor@gmx.com\n" "Language-Team: gl\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: Babel 2.13.1\n" +"X-Generator: Poedit 3.4.2\n" #: cps/about.py:85 msgid "Statistics" msgstr "Estatísticas" #: cps/admin.py:151 -#, fuzzy msgid "Server restarted, please reload page." -msgstr "Servidor reiniciado. Por favor, recargue a páxina" +msgstr "Servidor reiniciado. Por favor, recargue a páxina." #: cps/admin.py:153 -#, fuzzy msgid "Performing Server shutdown, please close window." -msgstr "O servidor estase apagando. Por favor, peche a xanela" +msgstr "O servidor estase apagando, por favor peche a xanela." #: cps/admin.py:161 msgid "Success! Database Reconnected" -msgstr "" +msgstr "Éxito! Base de datos reconectada" #: cps/admin.py:164 msgid "Unknown command" msgstr "Orde descoñecida" #: cps/admin.py:175 -#, fuzzy msgid "Success! Books queued for Metadata Backup, please check Tasks for result" -msgstr "Posto en cola un correo electrónico de proba enviado a %(email)s, por favor, comproba o resultado nas Tarefas" +msgstr "Éxito! Libros postos na cola para a copia de seguridade dos metadatos, por favor comproba o resultado nas Tarefas" #: cps/admin.py:208 cps/editbooks.py:629 cps/editbooks.py:672 #: cps/editbooks.py:1317 cps/updater.py:615 cps/uploader.py:108 @@ -65,7 +63,7 @@ msgstr "Configuración da Interface de Usuario" #: cps/web.py:754 #, python-format msgid "Custom Column No.%(column)d does not exist in calibre database" -msgstr "Columna personalizada No.%(column)d non existe na base de datos calibre" +msgstr "Columna personalizada Num. %(column)d non existe na base de datos calibre" #: cps/admin.py:333 cps/templates/admin.html:51 msgid "Edit Users" @@ -95,15 +93,15 @@ msgstr "Petición mal formada" #: cps/admin.py:480 cps/admin.py:2073 msgid "Guest Name can't be changed" -msgstr "O nome do convidado non se pode cambiar" +msgstr "Non se pode cambiar o nome do convidado" #: cps/admin.py:492 msgid "Guest can't have this role" -msgstr "O convidado non pode ter este rol" +msgstr "O convidado non pode ter este papel" #: cps/admin.py:504 cps/admin.py:2027 msgid "No admin user remaining, can't remove admin role" -msgstr "Non queda ningún usuario administrador, non se pode eliminar ao usuario" +msgstr "Non queda ningún usuario administrador, non se pode eliminar o rol de administrador" #: cps/admin.py:508 cps/admin.py:522 msgid "Value has to be true or false" @@ -123,7 +121,7 @@ msgstr "Vista non válida" #: cps/admin.py:527 msgid "Guest's Locale is determined automatically and can't be set" -msgstr "O sitio do convidado determínase automáticamente e non se pode cambiar" +msgstr "A localización do convidado determínase automáticamente e non se pode cambiar" #: cps/admin.py:531 msgid "No Valid Locale Given" @@ -131,11 +129,11 @@ msgstr "Non hai unha localización válida" #: cps/admin.py:542 msgid "No Valid Book Language Given" -msgstr "Non se indicou unha lingua válida para o libro" +msgstr "Non se indica ningún idioma de libro válido" #: cps/admin.py:544 cps/editbooks.py:306 msgid "Parameter not found" -msgstr "Parámetro non atopado" +msgstr "Non se atopou o parámetro" #: cps/admin.py:581 msgid "Invalid Read Column" @@ -147,15 +145,15 @@ msgstr "Columna restrinxida non válida" #: cps/admin.py:607 cps/admin.py:1898 msgid "Calibre-Web configuration updated" -msgstr "Configuración de Calibre-Web actualizada" +msgstr "Actualizouse a configuración de Calibre-Web" #: cps/admin.py:619 msgid "Do you really want to delete the Kobo Token?" -msgstr "De verdade queres borrar o Token de Kobo?" +msgstr "De verdade queres eliminar o token Kobo?" #: cps/admin.py:621 msgid "Do you really want to delete this domain?" -msgstr "De verdade desexas borrar este dominio?" +msgstr "De verdade queres eliminar este dominio?" #: cps/admin.py:623 msgid "Do you really want to delete this user?" @@ -163,43 +161,43 @@ msgstr "De verdade queres borrar este usuario?" #: cps/admin.py:625 msgid "Are you sure you want to delete this shelf?" -msgstr "De verdade queres eliminar este andel?" +msgstr "De verdade queres eliminar esta estantería?" #: cps/admin.py:627 msgid "Are you sure you want to change locales of selected user(s)?" -msgstr "De verdade queres cambiar a linguaxe dos usuarios seleccionados?" +msgstr "Estás seguro de que queres cambiar a(s) rexión(s) local(/is) do(s) usuario(s) seleccionado(s)?" #: cps/admin.py:629 msgid "Are you sure you want to change visible book languages for selected user(s)?" -msgstr "De verdade queres cambiar as linguas visibles do libro dos usuarios seleccionados?" +msgstr "Estás seguro de que queres cambiar os idiomas dos libros visibles para o(s) usuario(s) seleccionado(s)?" #: cps/admin.py:631 msgid "Are you sure you want to change the selected role for the selected user(s)?" -msgstr "De verdade queres cambiar o rol seleccionado do usuario seleccionado?" +msgstr "Estás seguro de que queres cambiar o rol seleccionado para o(s) usuario(s) seleccionado(s)?" #: cps/admin.py:633 msgid "Are you sure you want to change the selected restrictions for the selected user(s)?" -msgstr "De verdade queres cambiar as restricións escollidas dos usuarios seleccionados?" +msgstr "Estás seguro de que queres cambiar as restricións seleccionadas para o(s) usuario(s) seleccionado(s)?" #: cps/admin.py:635 msgid "Are you sure you want to change the selected visibility restrictions for the selected user(s)?" -msgstr "De verdade queres cambiar as restricións de visibilidade dos usuarios seleccionados?" +msgstr "Estás seguro de que queres cambiar as restricións de visibilidade seleccionadas para o(s) usuario(s) seleccionado(s)?" #: cps/admin.py:638 msgid "Are you sure you want to change shelf sync behavior for the selected user(s)?" -msgstr "De verdade queres cambiar o comportamento da sincronización do andel para o usuario seleccionado?" +msgstr "Estás seguro de que queres cambiar o comportamento de sincronización da estantería para o(s) usuarios seleccionado(s)?" #: cps/admin.py:640 msgid "Are you sure you want to change Calibre library location?" -msgstr "De verdade queres cambiar a localización da biblioteca Calibre?" +msgstr "Estás seguro de que queres cambiar a localización da biblioteca de Calibre?" #: cps/admin.py:642 msgid "Calibre-Web will search for updated Covers and update Cover Thumbnails, this may take a while?" -msgstr "Calibre-web buscará cubertas actualizadas e miniaturas de cubertas actualizadas, isto pode levar un intre?" +msgstr "Calibre-Web buscará portadas actualizadas e actualizará as miniaturas das portadas, isto pode levar un tempo?" #: cps/admin.py:645 msgid "Are you sure you want delete Calibre-Web's sync database to force a full sync with your Kobo Reader?" -msgstr "Está seguro que quere borrar a base de datos de sincronización de Calibre-Web para forzar unha sincronización completa co seu lector Kobo?" +msgstr "Estás seguro de que queres eliminar a base de datos de sincronización de Calibre-Web para forzar unha sincronización completa co teu Kobo Reader?" #: cps/admin.py:888 cps/admin.py:894 cps/admin.py:904 cps/admin.py:914 #: cps/templates/modal_dialogs.html:29 cps/templates/user_table.html:41 @@ -219,7 +217,7 @@ msgstr "Elimináronse {} entradas de sincronización" #: cps/admin.py:990 msgid "Tag not found" -msgstr "Etiqueta non atopada" +msgstr "Non se atopou a etiqueta" #: cps/admin.py:1008 msgid "Invalid Action" @@ -231,54 +229,54 @@ msgstr "client_secrets.json non está configurado para a aplicación web" #: cps/admin.py:1180 msgid "Logfile Location is not Valid, Please Enter Correct Path" -msgstr "A localización do arquivo de rexistro non é válida. Por favor, Introduce a ruta correcta" +msgstr "A localización do ficheiro de rexistro non é válida. Introduza o camiño correcto" #: cps/admin.py:1186 msgid "Access Logfile Location is not Valid, Please Enter Correct Path" -msgstr "A localización do rexistro de accesos non é válida. Por favor, Introduce a ruta correcta" +msgstr "A localización do ficheiro de rexistro de acceso non é válida. Introduza o camiño correcto" #: cps/admin.py:1220 msgid "Please Enter a LDAP Provider, Port, DN and User Object Identifier" -msgstr "Por favor, Introduce un provedor LDAP, porto, DN e o User Object Identifier" +msgstr "Introduza un provedor LDAP, un porto, un DN e un identificador de obxecto de usuario" #: cps/admin.py:1226 msgid "Please Enter a LDAP Service Account and Password" -msgstr "Por favor, introduce unha conta de servizo LDAP e o seu contrasinal" +msgstr "Introduza unha conta de servizo LDAP e un contrasinal" #: cps/admin.py:1229 msgid "Please Enter a LDAP Service Account" -msgstr "Por favor, introduce unha conta de servizo LDAP" +msgstr "Introduza unha conta de servizo LDAP" #: cps/admin.py:1234 #, python-format msgid "LDAP Group Object Filter Needs to Have One \"%s\" Format Identifier" -msgstr "LDAP Group Object Filter necesita ter un identificador de formato \"%s\"" +msgstr "O filtro de obxectos de grupo LDAP debe ter un identificador de formato \"%s\"" #: cps/admin.py:1236 msgid "LDAP Group Object Filter Has Unmatched Parenthesis" -msgstr "O LDAP Group Object Filter ten parénteses que non casan" +msgstr "O filtro de obxectos de grupo LDAP ten parénteses sen coincidencia" #: cps/admin.py:1240 #, python-format msgid "LDAP User Object Filter needs to Have One \"%s\" Format Identifier" -msgstr "LDAP Group Object Filter necesita ter un identificador de formato \"%s\"" +msgstr "O filtro de obxectos de usuario LDAP debe ter un identificador de formato \"%s\"" #: cps/admin.py:1242 msgid "LDAP User Object Filter Has Unmatched Parenthesis" -msgstr "O LDAP Group Object Filter ten parénteses que non casan" +msgstr "O filtro de obxectos de usuario LDAP ten parénteses sen coincidencia" #: cps/admin.py:1249 #, python-format msgid "LDAP Member User Filter needs to Have One \"%s\" Format Identifier" -msgstr "O filtro de usuarios LDAP necesita ter un identificador de formato \"%s\"" +msgstr "O filtro de usuario de membro LDAP debe ter un identificador de formato \"%s\"" #: cps/admin.py:1251 msgid "LDAP Member User Filter Has Unmatched Parenthesis" -msgstr "O filtro de LDAP \"Member User\" ten parénteses que non casan" +msgstr "O filtro de usuarios de membros de LDAP ten parénteses sen coincidencia" #: cps/admin.py:1258 msgid "LDAP CACertificate, Certificate or Key Location is not Valid, Please Enter Correct Path" -msgstr "As localizacións do certificado da CA do LDAP, do certificado ou da chave non válidos. Por favor introduce a ruta correcta" +msgstr "As localizacións do certificado da Autoridade de certificación (CA) do LDAP, do certificado ou da chave non son válidos. introduza o camiño correcto" #: cps/admin.py:1289 cps/templates/admin.html:53 msgid "Add New User" @@ -286,11 +284,11 @@ msgstr "Engadir novo usuario" #: cps/admin.py:1298 cps/templates/admin.html:100 msgid "Edit Email Server Settings" -msgstr "Cambiar os parámetros do correo" +msgstr "Editar a configuración do servidor de correo electrónico" #: cps/admin.py:1317 msgid "Success! Gmail Account Verified." -msgstr "" +msgstr "Éxito! Conta de Gmail verificada." #: cps/admin.py:1337 cps/admin.py:1340 cps/admin.py:1725 cps/admin.py:1882 #: cps/admin.py:1980 cps/admin.py:2101 cps/editbooks.py:168 @@ -299,37 +297,37 @@ msgstr "" #: cps/shelf.py:476 cps/tasks/convert.py:156 cps/web.py:1533 #, python-format msgid "Oops! Database Error: %(error)s." -msgstr "Error na base de datos: %(error)s." +msgstr "Vaia! Erro da base de datos: %(error)s." #: cps/admin.py:1347 #, python-format msgid "Test e-mail queued for sending to %(email)s, please check Tasks for result" -msgstr "Posto en cola un correo electrónico de proba enviado a %(email)s, por favor, comproba o resultado nas Tarefas" +msgstr "Un correo electrónico de proba púxose na cola para enviar a %(email)s, comprobe Tarefas para ver o resultado" #: cps/admin.py:1350 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" -msgstr "Ocurreu un error enviando o correo electrónico de proba: %(res)s" +msgstr "Produciuse un erro ao enviar o correo electrónico de proba: %(res)s" #: cps/admin.py:1352 msgid "Please configure your e-mail address first..." -msgstr "Por favor, configure o seu correo electrónico primeiro..." +msgstr "Configure primeiro o seu enderezo de correo electrónico..." #: cps/admin.py:1354 msgid "Email Server Settings updated" -msgstr "Actualizáronse os axustes do servidor de correo electrónico" +msgstr "Actualizouse a configuración do servidor de correo electrónico" #: cps/admin.py:1377 cps/templates/admin.html:195 msgid "Edit Scheduled Tasks Settings" -msgstr "Editar a Configuración das Tarefas Programadas" +msgstr "Editar a configuración de tarefas programadas" #: cps/admin.py:1389 msgid "Invalid start time for task specified" -msgstr "Indicada unha hora incorrecta de comezo de tarefa" +msgstr "Hora de inicio non válida para a tarefa especificada" #: cps/admin.py:1394 msgid "Invalid duration for task specified" -msgstr "Indicada unha duracción incorrecta para a tarefa" +msgstr "Duración non válida para a tarefa especificada" #: cps/admin.py:1404 msgid "Scheduled tasks settings updated" @@ -337,11 +335,11 @@ msgstr "Actualizouse a configuración das tarefas programadas" #: cps/admin.py:1414 cps/admin.py:1463 cps/admin.py:2097 cps/web.py:1323 msgid "Oops! An unknown error occurred. Please try again later." -msgstr "Sucedeu un erro descoñecido. Por favor volva a intentalo máis tarde." +msgstr "Vaia! Produciuse un erro descoñecido. Téntao de novo máis tarde." #: cps/admin.py:1418 msgid "Settings DB is not Writeable" -msgstr "A configuración da DB non se pode escribir" +msgstr "A base de datos de configuración non se pode escribir" #: cps/admin.py:1448 cps/admin.py:2089 #, python-format @@ -349,18 +347,17 @@ msgid "Edit User %(nick)s" msgstr "Editar o Usuario %(nick)s" #: cps/admin.py:1460 -#, fuzzy, python-format +#, python-format msgid "Success! Password for user %(user)s reset" -msgstr "Reiniciada a contrasinal para o usuario %(user)s" +msgstr "Éxito! O contrasinal para o usuario %(user)s restableceuse" #: cps/admin.py:1466 -#, fuzzy msgid "Oops! Please configure the SMTP mail settings." -msgstr "Configura primeiro os parámetros do servidor SMTP..." +msgstr "Vaia! Configure a configuración do correo SMTP." #: cps/admin.py:1477 msgid "Logfile viewer" -msgstr "Visor do ficheiro de rexistro" +msgstr "Visor de ficheiros de rexistro" #: cps/admin.py:1543 msgid "Requesting update package" @@ -372,28 +369,28 @@ msgstr "Descargando paquete de actualización" #: cps/admin.py:1545 msgid "Unzipping update package" -msgstr "Descomprimendo paquete de actualización" +msgstr "Descomprimindo o paquete de actualización" #: cps/admin.py:1546 msgid "Replacing files" -msgstr "Remplazando archivos" +msgstr "Substituindo ficheiros" #: cps/admin.py:1547 msgid "Database connections are closed" -msgstr "As conexións coa base datos están pechadas" +msgstr "As conexións de base de datos están pechadas" #: cps/admin.py:1548 msgid "Stopping server" -msgstr "Detendo o servidor" +msgstr "Parando o servidor" #: cps/admin.py:1549 msgid "Update finished, please press okay and reload page" -msgstr "Actualización finalizada. Por favor, prema OK e recargue a páxina" +msgstr "A actualización finalizou, preme Aceptar e volve cargar a páxina" #: cps/admin.py:1550 cps/admin.py:1551 cps/admin.py:1552 cps/admin.py:1553 #: cps/admin.py:1554 cps/admin.py:1555 msgid "Update failed:" -msgstr "A actualización fallou:" +msgstr "Fallou a actualización:" #: cps/admin.py:1550 cps/updater.py:391 cps/updater.py:626 cps/updater.py:628 msgid "HTTP Error" @@ -405,7 +402,7 @@ msgstr "Erro de conexión" #: cps/admin.py:1552 cps/updater.py:395 cps/updater.py:632 msgid "Timeout while establishing connection" -msgstr "Tempo esgotado mentras se trataba de establecer a conexión" +msgstr "Tempo esgotado ao establecer a conexión" #: cps/admin.py:1553 cps/updater.py:397 cps/updater.py:634 msgid "General error" @@ -413,7 +410,7 @@ msgstr "Erro xeral" #: cps/admin.py:1554 msgid "Update file could not be saved in temp dir" -msgstr "A actualización do arquivo non se puido gardar no directorio temporal (Temp Dir)" +msgstr "Non se puido gardar o ficheiro de actualización no directorio temporal" #: cps/admin.py:1555 msgid "Files could not be replaced during update" @@ -421,11 +418,11 @@ msgstr "Non se puideron substituír os ficheiros durante a actualización" #: cps/admin.py:1579 msgid "Failed to extract at least One LDAP User" -msgstr "Erro ao extraer polo menos un usuario LDAP" +msgstr "Produciuse un erro ao extraer polo menos un usuario LDAP" #: cps/admin.py:1624 msgid "Failed to Create at Least One LDAP User" -msgstr "Erro ao crear polo menos un usuario LDAP" +msgstr "Produciuse un erro ao crear polo menos un usuario LDAP" #: cps/admin.py:1637 #, python-format @@ -434,43 +431,43 @@ msgstr "Erro: %(ldaperror)s" #: cps/admin.py:1641 msgid "Error: No user returned in response of LDAP server" -msgstr "Erro: o servidor LDAP non devolveu ningún usuario" +msgstr "Erro: non se devolveu ningún usuario en resposta do servidor LDAP" #: cps/admin.py:1677 msgid "At Least One LDAP User Not Found in Database" -msgstr "Polo menos, un usuario LDAP non se atopou na base de datos" +msgstr "Non se atopou polo menos un usuario LDAP na base de datos" #: cps/admin.py:1679 msgid "{} User Successfully Imported" -msgstr "Usuario {} importado con éxito" +msgstr "Usuario {} importado correctamente" #: cps/admin.py:1737 msgid "Books path not valid" -msgstr "" +msgstr "O camiño dos libros non é válido" #: cps/admin.py:1744 msgid "DB Location is not Valid, Please Enter Correct Path" -msgstr "A localización da base de datos non é válida. Por favor, Introduce a ruta correcta" +msgstr "A localización da base de datos non é válida, introduza o camiño correcto" #: cps/admin.py:1772 msgid "DB is not Writeable" -msgstr "A base de datos non é modificable" +msgstr "A base de datos non é escribible" #: cps/admin.py:1786 msgid "Keyfile Location is not Valid, Please Enter Correct Path" -msgstr "A localización do Keyfile non é válida, por favor, Introduce a ruta correcta" +msgstr "A localización do ficheiro de chave non é válida. Introduza o camiño correcto" #: cps/admin.py:1790 msgid "Certfile Location is not Valid, Please Enter Correct Path" -msgstr "A localización do Certfile non é válida, por favor, Introduce a ruta correcta" +msgstr "A localización do ficheiro de certificado non é válida. Introduza o camiño correcto" #: cps/admin.py:1867 msgid "Password length has to be between 1 and 40" -msgstr "" +msgstr "A lonxitude do contrasinal debe estar entre 1 e 40" #: cps/admin.py:1921 msgid "Database Settings updated" -msgstr "Actualizados os axustes da base de datos" +msgstr "Actualizouse a configuración da base de datos" #: cps/admin.py:1929 msgid "Database Configuration" @@ -478,41 +475,41 @@ msgstr "Configuración da base de datos" #: cps/admin.py:1944 cps/web.py:1297 msgid "Oops! Please complete all fields." -msgstr "Por favor, cubra todos os campos!" +msgstr "Vaia! Complete todos os campos." #: cps/admin.py:1953 msgid "E-mail is not from valid domain" -msgstr "O correo electrónico non ven dun dominio válido" +msgstr "O correo electrónico non é dun dominio válido" #: cps/admin.py:1959 msgid "Add new user" -msgstr "Engadir un usuario novo" +msgstr "Engadir novo usuario" #: cps/admin.py:1970 #, python-format msgid "User '%(user)s' created" -msgstr "Usuario '%(user)s' creado" +msgstr "Creouse o usuario '%(user)s'" #: cps/admin.py:1976 msgid "Oops! An account already exists for this Email. or name." -msgstr "Atopada unha conta existente para este correo electrónico ou nome de usuario." +msgstr "Vaia! Xa existe unha conta para este correo electrónico ou nome." #: cps/admin.py:2006 #, python-format msgid "User '%(nick)s' deleted" -msgstr "Usuario '%(nick)s' eliminado" +msgstr "Eliminouse o usuario '%(nick)s'" #: cps/admin.py:2009 msgid "Can't delete Guest User" -msgstr "Non se pode borrar ao Usuario Invitado" +msgstr "Non se pode eliminar o usuario convidado" #: cps/admin.py:2012 msgid "No admin user remaining, can't delete user" -msgstr "Non queda ningún usuario administrador, non se pode borrar ao usuario" +msgstr "Non queda ningún usuario administrador, non se pode eliminar o usuario" #: cps/admin.py:2067 cps/web.py:1482 msgid "Email can't be empty and has to be a valid Email" -msgstr "" +msgstr "O correo electrónico non pode estar baleiro e ten que ser un correo electrónico válido" #: cps/admin.py:2093 #, python-format @@ -538,133 +535,132 @@ msgstr "Ningún" #: cps/editbooks.py:154 #, python-format msgid "File %(file)s uploaded" -msgstr "O ficheiro %(file)s subiuse" +msgstr "Cargouse o ficheiro %(file)s" #: cps/editbooks.py:183 msgid "Source or destination format for conversion missing" -msgstr "Falta a fonte ou o formato de destino para a conversión" +msgstr "Falta o formato de orixe ou destino para a conversión" #: cps/editbooks.py:191 #, python-format msgid "Book successfully queued for converting to %(book_format)s" -msgstr "Libro posto na cola para a súa conversión a %(book_format)s" +msgstr "O libro fixo cola correctamente para converterse a %(book_format)s" #: cps/editbooks.py:195 #, python-format msgid "There was an error converting this book: %(res)s" -msgstr "Houbo un erro ao convertir este libro: %(res)s" +msgstr "Produciuse un erro ao converter este libro: %(res)s" #: cps/editbooks.py:448 cps/editbooks.py:943 cps/web.py:536 cps/web.py:1574 #: cps/web.py:1619 cps/web.py:1664 msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" -msgstr "oh, oh, o libro seleccionado non está disponible. O arquivo non existe ou non está accesible" +msgstr "Vaia! O libro seleccionado non está dispoñible. O ficheiro non existe ou non é accesible" #: cps/editbooks.py:494 cps/editbooks.py:1300 msgid "User has no rights to upload cover" -msgstr "O usuario non ten permisos para subir a cuberta" +msgstr "O usuario non ten dereitos para cargar portada" #: cps/editbooks.py:515 cps/editbooks.py:758 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" -msgstr "Os identificadores non distinguen entre maiúsculas e minúsculas, sobrescribindo o identificador antigo" +msgstr "Os identificadores non distinguen entre maiúsculas e minúsculas, sobreescribindo o identificador antigo" #: cps/editbooks.py:530 cps/editbooks.py:732 cps/editbooks.py:1070 #, python-format msgid "'%(langname)s' is not a valid language" -msgstr "%(langname)s non é unha lingua válida" +msgstr "'%(langname)s' non é un idioma válido" #: cps/editbooks.py:558 msgid "Metadata successfully updated" -msgstr "Metadatos actualizados con éxito" +msgstr "Actualizáronse correctamente os metadatos" #: cps/editbooks.py:581 msgid "Error editing book: {}" -msgstr "Erro editando libro: {}" +msgstr "Erro ao editar o libro: {}" #: cps/editbooks.py:676 msgid "Uploaded book probably exists in the library, consider to change before upload new: " -msgstr "O libro cargado probablemente existe na biblioteca, considera cambialo antes de subilo outra vez: " +msgstr "Probablemente exista o libro cargado na biblioteca. Considera cambiar antes de cargar un novo: " #: cps/editbooks.py:770 cps/editbooks.py:1217 -#, fuzzy msgid "File type isn't allowed to be uploaded to this server" -msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor" +msgstr "Non se permite cargar o tipo de ficheiro neste servidor" #: cps/editbooks.py:776 cps/editbooks.py:1228 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" -msgstr "Non se permite subir arquivos coa extensión '%(ext)s' a este servidor" +msgstr "Non se permite cargar a extensión de ficheiro '%(ext)s' a este servidor" #: cps/editbooks.py:780 cps/editbooks.py:1233 msgid "File to be uploaded must have an extension" -msgstr "O arquivo que se vai cargar debe ter unha extensión" +msgstr "O ficheiro que se vai cargar debe ter unha extensión" #: cps/editbooks.py:788 #, python-format msgid "File %(filename)s could not saved to temp dir" -msgstr "El archivo %(filename)s non puido gravarse no directorio temporal (Temp Dir)" +msgstr "Non se puido gardar o ficheiro %(filename)s no directorio temporal" #: cps/editbooks.py:808 #, python-format msgid "Failed to Move Cover File %(file)s: %(error)s" -msgstr "Fallo ao mover o arquivo de cuberta %(file)s: %(error)s" +msgstr "Produciuse un erro ao mover o ficheiro de portada %(file)s: %(error)s" #: cps/editbooks.py:865 cps/editbooks.py:867 msgid "Book Format Successfully Deleted" -msgstr "Formato de libro eliminado con éxito" +msgstr "O formato do libro eliminouse correctamente" #: cps/editbooks.py:874 cps/editbooks.py:876 msgid "Book Successfully Deleted" -msgstr "Libro eliminado con éxito" +msgstr "Libro eliminado correctamente" #: cps/editbooks.py:928 msgid "You are missing permissions to delete books" -msgstr "Vostede non ten permisos para borrar libros" +msgstr "Faltan permisos para eliminar libros" #: cps/editbooks.py:978 msgid "edit metadata" msgstr "editar metadatos" #: cps/editbooks.py:1031 -#, fuzzy, python-format +#, python-format msgid "Seriesindex: %(seriesindex)s is not a valid number, skipping" -msgstr "%(seriesindex)s non é un número válido, saltando" +msgstr "Seriesindex: %(seriesindex)s non é un número válido, saltando" #: cps/editbooks.py:1222 msgid "User has no rights to upload additional file formats" -msgstr "O usuario non ten permisos para cargar formatos de ficheiro adicionais" +msgstr "O usuario non ten dereitos para cargar formatos de ficheiro adicionais" #: cps/editbooks.py:1246 #, python-format msgid "Failed to create path %(path)s (Permission denied)." -msgstr "Fallo ao crear a ruta %(path)s (permiso denegado)" +msgstr "Produciuse un erro ao crear o camiño %(path)s (permiso denegado)." #: cps/editbooks.py:1253 #, python-format msgid "Failed to store file %(file)s." -msgstr "Fallo ao gardar o arquivo %(file)s." +msgstr "Produciuse un erro ao almacenar o ficheiro %(file)s." #: cps/editbooks.py:1278 #, python-format msgid "File format %(ext)s added to %(book)s" -msgstr "Arquivo con formato %(ext)s engadido a %(book)s" +msgstr "Engadiuse o formato de ficheiro %(ext)s a %(book)s" #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" -msgstr "A configuración de Google Drive non se completou, intente desactivar e activar Google Drive outra vez" +msgstr "Non se completou a configuración de Google Drive, tenta desactivalo e activalo de novo" #: cps/gdrive.py:96 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" -msgstr "O dominio Callback non se comprobou, siga os pasos para comprobalo na consola de desenvolvedor de Google" +msgstr "O dominio de devolución de chamada non está verificado. Sigue os pasos para verificar o dominio na consola de desenvolvedores de Google" #: cps/helper.py:87 #, python-format msgid "%(format)s format not found for book id: %(book)d" -msgstr "%(format)s formato non atopado para o id do libro: %(book)d" +msgstr "Non se atopou o formato %(format)s para o ID do libro: %(book)d" #: cps/helper.py:94 cps/tasks/convert.py:90 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" -msgstr "%(format)s non atopado en Google Drive: %(fn)s" +msgstr "Non se atopou %(format)s en Google Drive: %(fn)s" #: cps/helper.py:99 #, python-format @@ -673,191 +669,184 @@ msgstr "%(format)s non atopado: %(fn)s" #: cps/helper.py:104 cps/helper.py:233 cps/templates/detail.html:58 msgid "Send to eReader" -msgstr "Enviar ao Kindle" +msgstr "Enviar a eReader" #: cps/helper.py:105 cps/helper.py:125 cps/helper.py:235 -#, fuzzy msgid "This Email has been sent via Calibre-Web." -msgstr "Este correo electrónico enviouse empregando Calibre-Web." +msgstr "Este correo electrónico foi enviado a través de Calibre-Web." #: cps/helper.py:123 -#, fuzzy msgid "Calibre-Web Test Email" -msgstr "Correo de proba de Calibre-Web" +msgstr "Correo electrónico de proba de Calibre-Web" #: cps/helper.py:124 -#, fuzzy msgid "Test Email" -msgstr "Comprobar correo electrónico" +msgstr "Correo electrónico de proba" #: cps/helper.py:141 msgid "Get Started with Calibre-Web" -msgstr "Primeiros pasos con Calibre-Web" +msgstr "Comeza con Calibre-Web" #: cps/helper.py:146 -#, fuzzy, python-format +#, python-format msgid "Registration Email for user: %(name)s" msgstr "Correo electrónico de rexistro para o usuario: %(name)s" #: cps/helper.py:157 cps/helper.py:163 -#, fuzzy, python-format +#, python-format msgid "Convert %(orig)s to %(format)s and send to eReader" -msgstr "Convertir %(orig)s a %(format)s e enviar ao Kindle" +msgstr "Converte %(orig)s en %(format)s e envía a eReader" #: cps/helper.py:182 cps/helper.py:186 cps/helper.py:190 -#, fuzzy, python-format +#, python-format msgid "Send %(format)s to eReader" -msgstr "Enviado %(format)s ao Kindle" +msgstr "Enviar %(format)s a eReader" #: cps/helper.py:230 -#, fuzzy, python-format +#, python-format msgid "%(book)s send to eReader" -msgstr "Enviar ao Kindle %(book)s" +msgstr "%(book)s enviado a eReader" #: cps/helper.py:237 msgid "The requested file could not be read. Maybe wrong permissions?" -msgstr "O arquivo solicitado non pode lerse. Quizais existen problemas cos permisos?" +msgstr "Non se puido ler o ficheiro solicitado. Quizais permisos incorrectos?" #: cps/helper.py:352 msgid "Read status could not set: {}" -msgstr "O estado de lectura non pode fixarse: {}" +msgstr "Non se puido establecer o estado de lectura: {}" #: cps/helper.py:375 #, python-format msgid "Deleting bookfolder for book %(id)s failed, path has subfolders: %(path)s" -msgstr "Fallo ao intentar borrar a carpeta do libro %(id)s, a ruta ten subcarpetas: %(path)s" +msgstr "Produciuse un erro ao eliminar o cartafol do libro %(id)s, o camiño ten subcartafoles: %(path)s" #: cps/helper.py:381 #, python-format msgid "Deleting book %(id)s failed: %(message)s" -msgstr "O borrado do libro %(id)s fallou: %(message)s" +msgstr "Produciuse un erro ao eliminar o libro %(id)s: %(message)s" #: cps/helper.py:392 #, python-format msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" -msgstr "Borrando o libro %(id)s, a ruta de libro non é válida: %(path)s" +msgstr "Eliminando o libro %(id)s só da base de datos, a ruta do libro na base de datos non é válida: %(path)s" #: cps/helper.py:439 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" -msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" +msgstr "O cambio de nome do autor de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" #: cps/helper.py:507 cps/helper.py:516 #, python-format msgid "File %(file)s not found on Google Drive" -msgstr "Ficheiro %(file)s non atopado en Google Drive" +msgstr "Non se atopou o ficheiro %(file)s en Google Drive" #: cps/helper.py:559 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" -msgstr "O renomeado do título de: '%(src)s' a '%(dest)s' fallou co erro: %(error)s" +msgstr "O cambio de título de: '%(src)s' a '%(dest)s' produciu o erro: %(error)s" #: cps/helper.py:597 #, python-format msgid "Book path %(path)s not found on Google Drive" -msgstr "A ruta %(path)s do libro non se atopou en Google Drive" +msgstr "Non se atopou o camiño do libro %(path)s en Google Drive" #: cps/helper.py:657 msgid "Found an existing account for this Email address" -msgstr "" +msgstr "Atopouse unha conta existente para este enderezo de correo electrónico" #: cps/helper.py:665 msgid "This username is already taken" -msgstr "Este nome de usuario xa está en uso" +msgstr "Este nome de usuario xa está tomado" #: cps/helper.py:679 -#, fuzzy msgid "Invalid Email address format" -msgstr "Enderezo de correo non válido" +msgstr "Formato de enderezo de correo electrónico non válido" #: cps/helper.py:701 msgid "Password doesn't comply with password validation rules" -msgstr "" +msgstr "O contrasinal non cumpre coas regras de validación do contrasinal" #: cps/helper.py:847 msgid "Python module 'advocate' is not installed but is needed for cover uploads" -msgstr "O módulo Python 'advocate' non está instalado pero se necesita para as cargas de cubertas" +msgstr "O módulo de Python 'advocate' non está instalado pero é necesario para cargas de portadas" #: cps/helper.py:857 msgid "Error Downloading Cover" -msgstr "Erro ao descargar a cuberta" +msgstr "Erro ao descargar a portada" #: cps/helper.py:860 msgid "Cover Format Error" -msgstr "Erro no formato da cuberta" +msgstr "Erro de formato de portada" #: cps/helper.py:863 msgid "You are not allowed to access localhost or the local network for cover uploads" -msgstr "Non ten permiso para acceder a localhost ou á rede local para as cargas de cubertas" +msgstr "Non tes permiso para acceder a localhost ou á rede local para cargas de portadas" #: cps/helper.py:873 msgid "Failed to create path for cover" -msgstr "Erro ao crear unha ruta para a cuberta" +msgstr "Produciuse un erro ao crear o camiño para a portada" #: cps/helper.py:889 msgid "Cover-file is not a valid image file, or could not be stored" -msgstr "O arquivo de cuberta non é unha imaxe válida" +msgstr "O ficheiro de portada non é un ficheiro de imaxe válido ou non se puido almacenar" #: cps/helper.py:900 msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" -msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg/png/webp/bmp" +msgstr "Só se admiten ficheiros jpg/jpeg/png/webp/bmp como ficheiro de portada" #: cps/helper.py:912 msgid "Invalid cover file content" -msgstr "Contido do arquivo de cuberta non válido" +msgstr "Contido do ficheiro de portada non válido" #: cps/helper.py:916 msgid "Only jpg/jpeg files are supported as coverfile" -msgstr "Soamente se admiten como cuberta os arquivos jpg/jpeg" +msgstr "Só se admiten ficheiros jpg/jpeg como ficheiro de portada" #: cps/helper.py:988 cps/helper.py:1145 -#, fuzzy msgid "Cover" -msgstr "Descubrir" +msgstr "Portada" #: cps/helper.py:1005 msgid "UnRar binary file not found" -msgstr "Non se atopa o arquivo binario de UnRar" +msgstr "Non se atopou o ficheiro binario UnRar" #: cps/helper.py:1016 msgid "Error executing UnRar" -msgstr "Erro executando UnRar" +msgstr "Erro ao executar UnRar" #: cps/helper.py:1024 msgid "Could not find the specified directory" -msgstr "" +msgstr "Non se puido atopar o directorio especificado" #: cps/helper.py:1027 msgid "Please specify a directory, not a file" -msgstr "" +msgstr "Especifique un directorio, non un ficheiro" #: cps/helper.py:1041 -#, fuzzy msgid "Calibre binaries not viable" -msgstr "A base de datos non é modificable" +msgstr "Os binarios de calibre non son viables" #: cps/helper.py:1050 #, python-format msgid "Missing calibre binaries: %(missing)s" -msgstr "" +msgstr "Faltan binarios de calibre: %(missing)s" #: cps/helper.py:1052 -#, fuzzy, python-format +#, python-format msgid "Missing executable permissions: %(missing)s" -msgstr "Faltan permisos de execución" +msgstr "Faltan permisos executables: %(missing)s" #: cps/helper.py:1057 -#, fuzzy msgid "Error executing Calibre" -msgstr "Erro executando UnRar" +msgstr "Erro ao executar Calibre" #: cps/helper.py:1147 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" -msgstr "" +msgstr "Pon todos os libros en cola para a copia de seguridade dos metadatos" #: cps/kobo_auth.py:92 msgid "Please access Calibre-Web from non localhost to get valid api_endpoint for kobo device" -msgstr "Por favor, accede a calibre-web dende unha ubicación que non sexa localhost para obter unha api_endpoint válida para o teu dispositivo Kobo" +msgstr "Accede a Calibre-Web desde un host non local para obter un api_endpoint válido para o dispositivo kobo" #: cps/kobo_auth.py:118 msgid "Kobo Setup" @@ -866,26 +855,26 @@ msgstr "Configuración de Kobo" #: cps/oauth_bb.py:78 #, python-format msgid "Register with %(provider)s" -msgstr "Rexistrado con %(provider)s" +msgstr "Rexístrate con %(provider)s" #: cps/oauth_bb.py:139 cps/remotelogin.py:131 #, python-format msgid "Success! You are now logged in as: %(nickname)s" -msgstr "Iniciou sesión como : '%(nickname)s'" +msgstr "Éxito! Agora iniciaches sesión como: %(nickname)s" #: cps/oauth_bb.py:149 #, python-format msgid "Link to %(oauth)s Succeeded" -msgstr "O enlace a %(oauth)s realizouse con éxito" +msgstr "Ligazón a %(oauth)s realizada correctamente" #: cps/oauth_bb.py:156 msgid "Login failed, No User Linked With OAuth Account" -msgstr "Acceso errado, ningún usuario enlazado coa conta OAuth" +msgstr "Fallou o inicio de sesión, ningún usuario vinculado coa conta OAuth" #: cps/oauth_bb.py:198 #, python-format msgid "Unlink to %(oauth)s Succeeded" -msgstr "%(oauth)s desenlazado con éxito" +msgstr "Desvincular a %(oauth)s con éxito" #: cps/oauth_bb.py:203 #, python-format @@ -895,61 +884,61 @@ msgstr "Erro ao desenlazar %(oauth)s" #: cps/oauth_bb.py:206 #, python-format msgid "Not Linked to %(oauth)s" -msgstr "Non vinculado con %(oauth)s" +msgstr "Non vinculado a %(oauth)s" #: cps/oauth_bb.py:263 msgid "Failed to log in with GitHub." -msgstr "Erro ao iniciar sesión con GitHub." +msgstr "Produciuse un erro ao iniciar sesión con GitHub." #: cps/oauth_bb.py:269 msgid "Failed to fetch user info from GitHub." -msgstr "Erro ao obter a información do usuario de GitHub." +msgstr "Produciuse un erro ao obter a información do usuario de GitHub." #: cps/oauth_bb.py:281 msgid "Failed to log in with Google." -msgstr "Erro ao iniciar sesión con Google." +msgstr "Produciuse un erro ao iniciar sesión con Google." #: cps/oauth_bb.py:287 msgid "Failed to fetch user info from Google." -msgstr "Erro ao obter información do usuario de Google." +msgstr "Produciuse un erro ao obter a información do usuario de Google." #: cps/oauth_bb.py:335 msgid "GitHub Oauth error, please retry later." -msgstr "Erro en GitHub Oauth, por favor, volva a intentalo máis tarde." +msgstr "Erro de GitHub Oauth. Ténteo de novo máis tarde." #: cps/oauth_bb.py:338 msgid "GitHub Oauth error: {}" -msgstr "Erro GitHub Oauth {}" +msgstr "Erro de GitHub Oauth: {}" #: cps/oauth_bb.py:359 msgid "Google Oauth error, please retry later." -msgstr "Erro en Google Oauth, por favor volva a intentalo máis tarde." +msgstr "Erro de Google Oauth. Téntao de novo máis tarde." #: cps/oauth_bb.py:362 msgid "Google Oauth error: {}" -msgstr "Erro Google Oauth {}" +msgstr "Erro de Google Oauth: {}" #: cps/opds.py:299 msgid "{} Stars" -msgstr "{} Estrelas" +msgstr "{} estrelas" #: cps/remotelogin.py:63 cps/templates/layout.html:67 #: cps/templates/layout.html:102 cps/templates/login.html:4 #: cps/templates/login.html:21 cps/web.py:1359 msgid "Login" -msgstr "Inicio de sesión" +msgstr "Iniciar sesión" #: cps/remotelogin.py:75 cps/remotelogin.py:109 msgid "Token not found" -msgstr "Token non atopado" +msgstr "Non se atopou o token" #: cps/remotelogin.py:84 cps/remotelogin.py:117 msgid "Token has expired" -msgstr "O token expirou" +msgstr "O token caducou" #: cps/remotelogin.py:93 msgid "Success! Please return to your device" -msgstr "Correcto! Por favor volte ao seu dispositivo" +msgstr "Éxito! Volve ao teu dispositivo" #: cps/render_template.py:41 cps/web.py:425 msgid "Books" @@ -990,14 +979,13 @@ msgid "Read Books" msgstr "Libros lidos" #: cps/render_template.py:63 -#, fuzzy msgid "Show Read and Unread" -msgstr "Mostrar lidos e non lidos" +msgstr "Mostrar lido e non lido" #: cps/render_template.py:65 cps/templates/index.xml:70 #: cps/templates/index.xml:74 cps/web.py:776 msgid "Unread Books" -msgstr "Libros non lidos" +msgstr "Libros sen ler" #: cps/render_template.py:67 msgid "Show unread" @@ -1010,7 +998,7 @@ msgstr "Descubrir" #: cps/render_template.py:70 cps/templates/index.xml:58 #: cps/templates/user_table.html:159 cps/templates/user_table.html:162 msgid "Show Random Books" -msgstr "Mostrar libros ao chou" +msgstr "Mostrar libros aleatorios" #: cps/render_template.py:71 cps/templates/book_table.html:67 #: cps/templates/index.xml:97 cps/web.py:1142 @@ -1018,20 +1006,18 @@ msgid "Categories" msgstr "Categorías" #: cps/render_template.py:73 cps/templates/user_table.html:158 -#, fuzzy msgid "Show Category Section" -msgstr "Mostrar selección de categorías" +msgstr "Mostrar sección de categorías" #: cps/render_template.py:74 cps/templates/book_edit.html:106 #: cps/templates/book_table.html:68 cps/templates/index.xml:106 #: cps/templates/search_form.html:70 cps/web.py:1032 cps/web.py:1044 msgid "Series" -msgstr "Series" +msgstr "Serie" #: cps/render_template.py:76 cps/templates/user_table.html:157 -#, fuzzy msgid "Show Series Section" -msgstr "Mostrar selección de series" +msgstr "Mostrar Sección Serie" #: cps/render_template.py:77 cps/templates/book_table.html:66 #: cps/templates/index.xml:79 @@ -1039,9 +1025,8 @@ msgid "Authors" msgstr "Autores" #: cps/render_template.py:79 cps/templates/user_table.html:160 -#, fuzzy msgid "Show Author Section" -msgstr "Mostrar selección de autores" +msgstr "Mostrar a sección Autor" #: cps/render_template.py:81 cps/templates/book_table.html:72 #: cps/templates/index.xml:88 cps/web.py:1000 @@ -1049,9 +1034,8 @@ msgid "Publishers" msgstr "Editores" #: cps/render_template.py:83 cps/templates/user_table.html:163 -#, fuzzy msgid "Show Publisher Section" -msgstr "Mostrar selección de editores" +msgstr "Mostrar a sección de editores" #: cps/render_template.py:84 cps/templates/book_table.html:70 #: cps/templates/index.xml:115 cps/templates/search_form.html:108 @@ -1060,34 +1044,30 @@ msgid "Languages" msgstr "Linguas" #: cps/render_template.py:87 cps/templates/user_table.html:155 -#, fuzzy msgid "Show Language Section" -msgstr "Mostrar selección de linguas" +msgstr "Mostrar a sección de idioma" #: cps/render_template.py:88 cps/templates/index.xml:124 msgid "Ratings" msgstr "Valoracións" #: cps/render_template.py:90 cps/templates/user_table.html:164 -#, fuzzy msgid "Show Ratings Section" -msgstr "Mostrar selección de valoracións" +msgstr "Mostrar a sección de valoracións" #: cps/render_template.py:91 cps/templates/index.xml:133 msgid "File formats" -msgstr "Formatos de arquivo" +msgstr "Formatos de ficheiro" #: cps/render_template.py:93 cps/templates/user_table.html:165 -#, fuzzy msgid "Show File Formats Section" -msgstr "Mostrar selección de formatos de arquivo" +msgstr "Mostrar a sección de formatos de ficheiro" #: cps/render_template.py:95 cps/web.py:799 msgid "Archived Books" -msgstr "Libros arquivados" +msgstr "Libros Arquivados" #: cps/render_template.py:97 cps/templates/user_table.html:166 -#, fuzzy msgid "Show Archived Books" msgstr "Mostrar libros arquivados" @@ -1097,22 +1077,22 @@ msgstr "Lista de libros" #: cps/render_template.py:102 cps/templates/user_table.html:168 msgid "Show Books List" -msgstr "Mostrar lista de libros" +msgstr "Mostrar a lista de libros" #: cps/search.py:50 cps/search.py:426 cps/templates/book_edit.html:244 #: cps/templates/feed.xml:34 cps/templates/index.xml:12 #: cps/templates/layout.html:46 cps/templates/layout.html:49 #: cps/templates/search_form.html:247 msgid "Search" -msgstr "Buscar" +msgstr "Busca" #: cps/search.py:201 msgid "Published after " -msgstr "Publicado despóis de " +msgstr "Publicado despois " #: cps/search.py:208 msgid "Published before " -msgstr "Publicado antes de " +msgstr "Publicado antes " #: cps/search.py:230 #, python-format @@ -1125,130 +1105,130 @@ msgid "Rating >= %(rating)s" msgstr "Valoración >= %(rating)s" #: cps/search.py:234 -#, fuzzy, python-format +#, python-format msgid "Read Status = '%(status)s'" msgstr "Estado de lectura = %(status)s" #: cps/search.py:351 msgid "Error on search for custom columns, please restart Calibre-Web" -msgstr "Erro na busca de columnas personalizadas, por favor reinicia Calibre-Web" +msgstr "Produciuse un erro ao buscar columnas personalizadas, reinicie Calibre-Web" #: cps/search.py:370 cps/search.py:402 cps/templates/layout.html:57 msgid "Advanced Search" -msgstr "Búsqueda avanzada" +msgstr "Busca avanzada" #: cps/shelf.py:49 cps/shelf.py:111 msgid "Invalid shelf specified" -msgstr "Andel especificado non válido" +msgstr "Especificouse unha estantería non válida" #: cps/shelf.py:55 msgid "Sorry you are not allowed to add a book to that shelf" -msgstr "Sentímolo, non ten permisos para engdir un libro ao andel: %(shelfname)s" +msgstr "Sentímolo, non tes permiso para engadir un libro a ese estante" #: cps/shelf.py:64 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" -msgstr "O libro xa forma parte do andel: %(shelfname)s" +msgstr "O libro xa forma parte do estante: %(shelfname)s" #: cps/shelf.py:77 #, python-format msgid "%(book_id)s is a invalid Book Id. Could not be added to Shelf" -msgstr "" +msgstr "%(book_id)s é un ID de libro non válido. Non se puido engadir ao estante" #: cps/shelf.py:97 #, python-format msgid "Book has been added to shelf: %(sname)s" -msgstr "O libro engadiuse ao andel: %(sname)s" +msgstr "Engadiuse o libro ao estante: %(sname)s" #: cps/shelf.py:116 msgid "You are not allowed to add a book to the shelf" -msgstr "Non ten permiso para engadir un libro ao andel" +msgstr "Non tes permiso para engadir un libro ao estante" #: cps/shelf.py:134 #, python-format msgid "Books are already part of the shelf: %(name)s" -msgstr "Os libros xa forman parte do andel: %(name)s" +msgstr "Os libros xa forman parte do estante: %(name)s" #: cps/shelf.py:146 #, python-format msgid "Books have been added to shelf: %(sname)s" -msgstr "Os libros engadíronse ao andel: %(sname)s" +msgstr "Engadíronse libros ao estante: %(sname)s" #: cps/shelf.py:153 #, python-format msgid "Could not add books to shelf: %(sname)s" -msgstr "Non se pudideron engadir libros ao andel: %(sname)s" +msgstr "Non se puideron engadir libros ao estante: %(sname)s" #: cps/shelf.py:199 #, python-format msgid "Book has been removed from shelf: %(sname)s" -msgstr "O libro eliminouse do andel: %(sname)s" +msgstr "Eliminouse o libro do estante: %(sname)s" #: cps/shelf.py:208 msgid "Sorry you are not allowed to remove a book from this shelf" -msgstr "Síntoo, non ten permiso para quitar un libro do andel" +msgstr "Sentímolo, non tes permiso para eliminar un libro deste estante" #: cps/shelf.py:218 cps/templates/layout.html:158 msgid "Create a Shelf" -msgstr "Crear un andel" +msgstr "Crear un estante" #: cps/shelf.py:226 msgid "Sorry you are not allowed to edit this shelf" -msgstr "Síntoo, non ten permiso para editar o andel: %(sname)s" +msgstr "Sentímolo, non tes permiso para editar este estante" #: cps/shelf.py:228 msgid "Edit a shelf" -msgstr "Editar un andel" +msgstr "Editar un estante" #: cps/shelf.py:237 msgid "Error deleting Shelf" -msgstr "Erro borrando o estante" +msgstr "Produciuse un erro ao eliminar o estante" #: cps/shelf.py:239 msgid "Shelf successfully deleted" -msgstr "Andel eliminado con éxito" +msgstr "Eliminouse correctamente o estante" #: cps/shelf.py:289 #, python-format msgid "Change order of Shelf: '%(name)s'" -msgstr "Cambiar a orde do andel: '%(name)s'" +msgstr "Cambiar a orde do estante: '%(name)s'" #: cps/shelf.py:324 msgid "Sorry you are not allowed to create a public shelf" -msgstr "Síntoo, non ten permiso para crear un andel público" +msgstr "Sentímolo, non tes permiso para crear un estante público" #: cps/shelf.py:341 #, python-format msgid "Shelf %(title)s created" -msgstr "Andel %(title)s creado" +msgstr "Creouse o estante %(title)s" #: cps/shelf.py:344 #, python-format msgid "Shelf %(title)s changed" -msgstr "Andel %(title)s cambiado" +msgstr "O estante %(title)s cambiou" #: cps/shelf.py:358 msgid "There was an error" -msgstr "Ocorreu un erro" +msgstr "Houbo un erro" #: cps/shelf.py:380 #, python-format msgid "A public shelf with the name '%(title)s' already exists." -msgstr "Xa existe un andel público co nome '%(title)s'." +msgstr "Xa existe un estante público co nome '%(title)s'." #: cps/shelf.py:391 #, python-format msgid "A private shelf with the name '%(title)s' already exists." -msgstr "Xa existe un andel privado co nome '%(title)s'." +msgstr "Xa existe un estante privado co nome '%(title)s'." #: cps/shelf.py:481 #, python-format msgid "Shelf: '%(name)s'" -msgstr "Andel: '%(name)s'" +msgstr "Estante: '%(name)s'" #: cps/shelf.py:487 msgid "Error opening shelf. Shelf does not exist or is not accessible" -msgstr "Erro ao abrir un andel. O andel non existe ou non se pode acceder" +msgstr "Produciuse un erro ao abrir o estante. O estante non existe ou non é accesible" #: cps/tasks_status.py:47 cps/templates/layout.html:89 #: cps/templates/tasks.html:7 @@ -1257,7 +1237,7 @@ msgstr "Tarefas" #: cps/tasks_status.py:63 msgid "Waiting" -msgstr "Esperando" +msgstr "Agardando" #: cps/tasks_status.py:65 msgid "Failed" @@ -1265,15 +1245,15 @@ msgstr "Fallou" #: cps/tasks_status.py:67 msgid "Started" -msgstr "Comezado" +msgstr "Comezou" #: cps/tasks_status.py:69 msgid "Finished" -msgstr "Rematado" +msgstr "Rematou" #: cps/tasks_status.py:71 msgid "Ended" -msgstr "Rematado" +msgstr "Rematou" #: cps/tasks_status.py:73 msgid "Cancelled" @@ -1285,40 +1265,40 @@ msgstr "Estado descoñecido" #: cps/updater.py:433 cps/updater.py:444 cps/updater.py:545 cps/updater.py:560 msgid "Unexpected data while reading update information" -msgstr "Dato inesperado mentres líase a información de actualización" +msgstr "Datos inesperados ao ler a información de actualización" #: cps/updater.py:440 cps/updater.py:552 msgid "No update available. You already have the latest version installed" -msgstr "Actualización non dispoñiible. Xa tes instalada a versión máis recente" +msgstr "Non hai ningunha actualización dispoñible. Xa tes instalada a última versión" #: cps/updater.py:458 msgid "A new update is available. Click on the button below to update to the latest version." -msgstr "Unha nova actualización está dispoñible. Preme no botón inferior para actualizar á versión máis reciente." +msgstr "Hai unha nova actualización dispoñible. Fai clic no botón de abaixo para actualizar á última versión." #: cps/updater.py:476 msgid "Could not fetch update information" -msgstr "Non se pode conseguir información sobre a actualización" +msgstr "Non se puido recuperar a información de actualización" #: cps/updater.py:486 msgid "Click on the button below to update to the latest stable version." -msgstr "Preme no botón de abaixo para actualizar á última versión estable." +msgstr "Fai clic no botón de abaixo para actualizar á última versión estable." #: cps/updater.py:495 cps/updater.py:509 cps/updater.py:520 #, python-format msgid "A new update is available. Click on the button below to update to version: %(version)s" -msgstr "Hai unha nova actualización dispoñible. Preme no botón de abaixo para actualizar á versión: %(version)s" +msgstr "Hai unha nova actualización dispoñible. Fai clic no botón de abaixo para actualizar á versión: %(version)s" #: cps/updater.py:538 msgid "No release information available" -msgstr "Non hai información do lanzamento dispoñible" +msgstr "Non hai información de lanzamento dispoñible" #: cps/templates/index.html:6 cps/web.py:452 msgid "Discover (Random Books)" -msgstr "Descubrir (Libros ao chou)" +msgstr "Descubre (Libros aleatorios)" #: cps/web.py:488 msgid "Hot Books (Most Downloaded)" -msgstr "Libros populares (os máis descargados)" +msgstr "Libros populares (máis descargados)" #: cps/web.py:519 #, python-format @@ -1328,17 +1308,17 @@ msgstr "Libros descargados por %(user)s" #: cps/web.py:552 #, python-format msgid "Author: %(name)s" -msgstr "Autor/es: %(name)s" +msgstr "Autor: %(name)s" #: cps/web.py:588 #, python-format msgid "Publisher: %(name)s" -msgstr "Editor/es: %(name)s" +msgstr "Editor: %(name)s" #: cps/web.py:616 #, python-format msgid "Series: %(serie)s" -msgstr "Series: %(serie)s" +msgstr "Serie: %(serie)s" #: cps/web.py:630 msgid "Rating: None" @@ -1352,7 +1332,7 @@ msgstr "Valoración: %(rating)s estrelas" #: cps/web.py:670 #, python-format msgid "File format: %(format)s" -msgstr "Formato do arquivo: %(format)s" +msgstr "Formato de ficheiro: %(format)s" #: cps/web.py:705 #, python-format @@ -1362,7 +1342,7 @@ msgstr "Categoría: %(name)s" #: cps/web.py:734 #, python-format msgid "Language: %(name)s" -msgstr "Lingua: %(name)s" +msgstr "Idioma: %(name)s" #: cps/templates/admin.html:16 cps/web.py:972 msgid "Downloads" @@ -1374,104 +1354,96 @@ msgstr "Lista de valoracións" #: cps/web.py:1101 msgid "File formats list" -msgstr "Lista de formatos" +msgstr "Lista de formatos de ficheiro" #: cps/web.py:1256 -#, fuzzy msgid "Please configure the SMTP mail settings first..." -msgstr "Configura primeiro os parámetros do servidor SMTP..." +msgstr "Configure primeiro a configuración do correo SMTP..." #: cps/web.py:1263 #, python-format msgid "Success! Book queued for sending to %(eReadermail)s" -msgstr "Libro posto na cola de envío a %(eReadermail)s" +msgstr "Éxito! Libro en cola para enviar a %(eReadermail)s" #: cps/web.py:1266 #, python-format msgid "Oops! There was an error sending book: %(res)s" -msgstr "Oh, oh! Houbo un erro no envío do libro: %(res)s" +msgstr "Vaia! Produciuse un erro ao enviar o libro: %(res)s" #: cps/web.py:1268 -#, fuzzy msgid "Oops! Please update your profile with a valid eReader Email." -msgstr "Por favor actualiza o teu perfil co enderezo de correo do teu kindle..." +msgstr "Vaia! Actualiza o teu perfil cun correo electrónico de eReader válido." #: cps/web.py:1284 msgid "Please wait one minute to register next user" -msgstr "" +msgstr "Agarde un minuto para rexistrar o seguinte usuario" #: cps/templates/layout.html:68 cps/templates/layout.html:103 #: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1285 #: cps/web.py:1289 cps/web.py:1294 cps/web.py:1298 cps/web.py:1304 #: cps/web.py:1324 cps/web.py:1328 cps/web.py:1341 cps/web.py:1344 msgid "Register" -msgstr "Rexistro" +msgstr "Rexístrate" #: cps/web.py:1288 cps/web.py:1391 -#, fuzzy msgid "Connection error to limiter backend, please contact your administrator" -msgstr "O servidor de correo non está configurado, por favor, avisa ao teu administrador!" +msgstr "Produciuse un erro de conexión ao back-end do limitador. Ponte en contacto co teu administrador" #: cps/web.py:1293 cps/web.py:1340 msgid "Oops! Email server is not configured, please contact your administrator." -msgstr "O servidor de correo non está configurado, por favor, avisa ao teu administrador!" +msgstr "Vaia! O servidor de correo electrónico non está configurado, póñase en contacto co seu administrador." #: cps/web.py:1326 msgid "Oops! Your Email is not allowed." -msgstr "O seu correo electrónico non está permitido para rexistrarse" +msgstr "Vaia! O teu correo electrónico non está permitido." #: cps/web.py:1329 msgid "Success! Confirmation Email has been sent." -msgstr "Mandouse un correo electrónico de verificación á súa conta de correo." +msgstr "Éxito! Enviouse o correo electrónico de confirmación." #: cps/web.py:1374 cps/web.py:1397 -#, fuzzy msgid "Cannot activate LDAP authentication" msgstr "Non se pode activar a autenticación LDAP" #: cps/web.py:1387 msgid "Please wait one minute before next login" -msgstr "" +msgstr "Agarde un minuto antes do próximo inicio de sesión" #: cps/web.py:1406 -#, fuzzy, python-format +#, python-format msgid "you are now logged in as: '%(nickname)s'" -msgstr "Iniciou sesión como : '%(nickname)s'" +msgstr "agora iniciaches sesión como: '%(nickname)s'" #: cps/web.py:1413 -#, fuzzy, python-format +#, python-format msgid "Fallback Login as: '%(nickname)s', LDAP Server not reachable, or user not known" -msgstr "Fallback login como: '%(nickname)s', non se pode acceder ao servidor LDAP ou usuario descoñecido" +msgstr "Inicio de sesión alternativo como: '%(nickname)s', servidor LDAP non accesible ou usuario descoñecido" #: cps/web.py:1418 -#, fuzzy, python-format +#, python-format msgid "Could not login: %(message)s" -msgstr "Non se puido entrar: %(message)s" +msgstr "Non se puido iniciar sesión: %(message)s" #: cps/web.py:1422 cps/web.py:1447 -#, fuzzy msgid "Wrong Username or Password" -msgstr "Usuario ou contrasinal no válido" +msgstr "Nome de usuario ou contrasinal incorrecto" #: cps/web.py:1429 -#, fuzzy msgid "New Password was sent to your email address" -msgstr "Unha nova contrasinal enviouse ao seu enderezo de correo electrónico" +msgstr "Enviouse un novo contrasinal ao teu enderezo de correo electrónico" #: cps/web.py:1433 -#, fuzzy msgid "An unknown error occurred. Please try again later." -msgstr "Sucedeu un erro descoñecido. Por favor volva a intentalo máis tarde." +msgstr "Produciuse un erro descoñecido. Téntao de novo máis tarde." #: cps/web.py:1435 -#, fuzzy msgid "Please enter valid username to reset password" -msgstr "Por favor, introduce un usuario válido para restablecer a contrasinal" +msgstr "Introduza un nome de usuario válido para restablecer o contrasinal" #: cps/web.py:1443 -#, fuzzy, python-format +#, python-format msgid "You are now logged in as: '%(nickname)s'" -msgstr "Iniciou sesión como : '%(nickname)s'" +msgstr "Agora iniciaches sesión como: '%(nickname)s'" #: cps/web.py:1508 cps/web.py:1558 #, python-format @@ -1479,26 +1451,25 @@ msgid "%(name)s's Profile" msgstr "Perfil de %(name)s" #: cps/web.py:1524 -#, fuzzy msgid "Success! Profile Updated" -msgstr "Perfil actualizado" +msgstr "Éxito! Perfil actualizado" #: cps/web.py:1528 msgid "Oops! An account already exists for this Email." -msgstr "Atopada unha conta existente para ese enderezo de correo electrónico" +msgstr "Vaia! Xa existe unha conta para este correo electrónico." #: cps/services/gmail.py:59 msgid "Found no valid gmail.json file with OAuth information" -msgstr "Non se atopou ningún arquivo gmail.json válido con información OAuth" +msgstr "Non se atopou ningún ficheiro gmail.json válido con información de OAuth" #: cps/tasks/clean.py:29 msgid "Delete temp folder contents" -msgstr "" +msgstr "Eliminar o contido do cartafol temporal" #: cps/tasks/convert.py:109 #, python-format msgid "%(book)s send to E-Reader" -msgstr "Enviar ao Kindle %(book)s" +msgstr "%(book)s envía a E-Reader" #: cps/tasks/convert.py:173 #, python-format @@ -1508,11 +1479,11 @@ msgstr "Non se atopou Calibre ebook-convert %(tool)s" #: cps/tasks/convert.py:207 #, python-format msgid "%(format)s format not found on disk" -msgstr "O formato %(format)s non se atopou no disco" +msgstr "Non se atopou o formato %(format)s no disco" #: cps/tasks/convert.py:211 msgid "Ebook converter failed with unknown error" -msgstr "O conversor de Ebook fallou cun erro descoñecido" +msgstr "Fallou o conversor de libros electrónicos cun erro descoñecido" #: cps/tasks/convert.py:230 #, python-format @@ -1522,57 +1493,56 @@ msgstr "Kepubify-converter fallou: %(error)s" #: cps/tasks/convert.py:251 #, python-format msgid "Converted file not found or more than one file in folder %(folder)s" -msgstr "Arquivo convertido non atopado, ou máis dun arquivo no directorio %(folder)s" +msgstr "Non se atopou o ficheiro convertido ou hai máis dun ficheiro no cartafol %(folder)s" #: cps/tasks/convert.py:285 cps/tasks/convert.py:336 #, python-format msgid "Calibre failed with error: %(error)s" -msgstr "Calibre fallou co erro: %(error)s" +msgstr "Fallou o calibre co erro: %(error)s" #: cps/tasks/convert.py:313 #, python-format msgid "Ebook-converter failed: %(error)s" -msgstr "Fallou Ebook-converter: %(error)s" +msgstr "Fallou o convertidor de libros electrónicos: %(error)s" #: cps/tasks/convert.py:341 msgid "Convert" -msgstr "Convertir" +msgstr "Converter" #: cps/tasks/database.py:26 msgid "Reconnecting Calibre database" -msgstr "Reconectando a base de datos de Calibre" +msgstr "Reconectando a base de datos Calibre" #: cps/tasks/mail.py:279 msgid "E-mail" msgstr "Correo electrónico" #: cps/tasks/metadata_backup.py:34 -#, fuzzy msgid "Backing up Metadata" -msgstr "editar metadatos" +msgstr "Facendo copia de seguranza dos metadatos" #: cps/tasks/thumbnail.py:96 #, python-format msgid "Generated %(count)s cover thumbnails" -msgstr "Xeradas %(count)s miniaturas de cubertas" +msgstr "Xeráronse %(count)s Miniaturas de portada" #: cps/tasks/thumbnail.py:231 cps/tasks/thumbnail.py:444 #: cps/tasks/thumbnail.py:512 msgid "Cover Thumbnails" -msgstr "Miniaturas de cubertas" +msgstr "Miniaturas de portada" #: cps/tasks/thumbnail.py:290 msgid "Generated {0} series thumbnails" -msgstr "Xeradas {0} miniaturas de series" +msgstr "Xeráronse {0} miniaturas de series" #: cps/tasks/thumbnail.py:455 msgid "Clearing cover thumbnail cache" -msgstr "Limpando caché de miniaturas de cubertas" +msgstr "Borrando a caché de miniaturas da portada" #: cps/tasks/upload.py:39 cps/templates/admin.html:20 #: cps/templates/layout.html:81 cps/templates/user_table.html:145 msgid "Upload" -msgstr "Subir arquivo" +msgstr "Cargar" #: cps/templates/admin.html:9 msgid "Users" @@ -1587,16 +1557,16 @@ msgstr "Nome de usuario" #: cps/templates/admin.html:14 cps/templates/register.html:14 #: cps/templates/user_edit.html:15 cps/templates/user_table.html:135 msgid "Email" -msgstr "Enderezo de correo electrónico" +msgstr "Correo electrónico" #: cps/templates/admin.html:15 msgid "Send to eReader Email" -msgstr "Enviar ao enderezo de correo electrónico do Kindle" +msgstr "Enviar ao correo electrónico eReader" #: cps/templates/admin.html:17 cps/templates/layout.html:92 #: cps/templates/user_table.html:143 msgid "Admin" -msgstr "Administrador" +msgstr "Admin" #: cps/templates/admin.html:18 cps/templates/login.html:13 #: cps/templates/login.html:14 cps/templates/user_edit.html:23 @@ -1623,11 +1593,11 @@ msgstr "Editar" #: cps/templates/modal_dialogs.html:116 cps/templates/user_edit.html:67 #: cps/templates/user_table.html:149 msgid "Delete" -msgstr "Borrar" +msgstr "Eliminar" #: cps/templates/admin.html:26 msgid "Public Shelf" -msgstr "Andel público" +msgstr "Estante Público" #: cps/templates/admin.html:55 msgid "Import LDAP Users" @@ -1635,11 +1605,11 @@ msgstr "Importar usuarios LDAP" #: cps/templates/admin.html:62 msgid "Email Server Settings" -msgstr "Axustes do servidor de correo electrónico" +msgstr "Configuración do servidor de correo electrónico" #: cps/templates/admin.html:67 cps/templates/email_edit.html:31 msgid "SMTP Hostname" -msgstr "Servidor SMTP" +msgstr "Nome de host SMTP" #: cps/templates/admin.html:71 cps/templates/email_edit.html:35 msgid "SMTP Port" @@ -1647,25 +1617,24 @@ msgstr "Porto SMTP" #: cps/templates/admin.html:75 cps/templates/email_edit.html:39 msgid "Encryption" -msgstr "Cifraxe" +msgstr "Cifrado" #: cps/templates/admin.html:79 cps/templates/email_edit.html:47 msgid "SMTP Login" -msgstr "Login SMTP" +msgstr "Inicio de sesión SMTP" #: cps/templates/admin.html:83 cps/templates/admin.html:94 #: cps/templates/email_edit.html:55 msgid "From Email" -msgstr "Dende o correo electrónico" +msgstr "Desde o correo electrónico" #: cps/templates/admin.html:90 -#, fuzzy msgid "Email Service" msgstr "Servizo de correo electrónico" #: cps/templates/admin.html:91 msgid "Gmail via Oauth2" -msgstr "Gmail por Oauth2" +msgstr "Gmail a través de Oauth2" #: cps/templates/admin.html:106 msgid "Configuration" @@ -1685,7 +1654,7 @@ msgstr "Porto" #: cps/templates/admin.html:122 msgid "External Port" -msgstr "Porto externo" +msgstr "Porto Externo" #: cps/templates/admin.html:129 cps/templates/config_view_edit.html:28 msgid "Books per Page" @@ -1701,19 +1670,19 @@ msgstr "Navegación anónima" #: cps/templates/admin.html:141 msgid "Public Registration" -msgstr "Rexistro público" +msgstr "Rexistro Público" #: cps/templates/admin.html:145 msgid "Magic Link Remote Login" -msgstr "Acceso remoto mediante enlace máxico" +msgstr "Acceso remoto Magic Link" #: cps/templates/admin.html:149 msgid "Reverse Proxy Login" -msgstr "Acceso mediante Proxy inverso" +msgstr "Inicio de sesión de proxy inverso" #: cps/templates/admin.html:154 cps/templates/config_edit.html:172 msgid "Reverse Proxy Header Name" -msgstr "Nome de cabeceira do Proxy inverso" +msgstr "Nome da cabeceira do proxy inverso" #: cps/templates/admin.html:159 msgid "Edit Calibre Database Configuration" @@ -1721,11 +1690,11 @@ msgstr "Editar a configuración da base de datos de Calibre" #: cps/templates/admin.html:160 msgid "Edit Basic Configuration" -msgstr "Editar a configuración básica" +msgstr "Editar configuración básica" #: cps/templates/admin.html:161 msgid "Edit UI Configuration" -msgstr "Editar a configuración da interfaz de usuario" +msgstr "Editar a configuración da interface de usuario" #: cps/templates/admin.html:167 msgid "Scheduled Tasks" @@ -1734,7 +1703,7 @@ msgstr "Tarefas programadas" #: cps/templates/admin.html:170 cps/templates/schedule_edit.html:12 #: cps/templates/tasks.html:18 msgid "Start Time" -msgstr "Hora de comezo das tarefas" +msgstr "Hora de inicio" #: cps/templates/admin.html:174 cps/templates/schedule_edit.html:20 msgid "Maximum Duration" @@ -1742,24 +1711,24 @@ msgstr "Duración máxima das tarefas" #: cps/templates/admin.html:178 cps/templates/schedule_edit.html:29 msgid "Generate Thumbnails" -msgstr "Xerar as miniaturas das cubertas dos libros" +msgstr "Xerar miniaturas" #: cps/templates/admin.html:182 msgid "Generate series cover thumbnails" -msgstr "Xerar as miniaturas das cubertas das series" +msgstr "Xera miniaturas de portadas de serie" #: cps/templates/admin.html:186 cps/templates/admin.html:208 #: cps/templates/schedule_edit.html:37 msgid "Reconnect Calibre Database" -msgstr "Reconectar á librería de Calibre" +msgstr "Reconectar a base de datos Calibre" #: cps/templates/admin.html:190 cps/templates/schedule_edit.html:41 msgid "Generate Metadata Backup Files" -msgstr "" +msgstr "Xerar ficheiros de copia de seguridade de metadatos" #: cps/templates/admin.html:197 msgid "Refresh Thumbnail Cache" -msgstr "Refrescar a caché de miniaturas das cubertas" +msgstr "Actualizar caché de miniaturas" #: cps/templates/admin.html:203 msgid "Administration" @@ -1767,11 +1736,11 @@ msgstr "Administración" #: cps/templates/admin.html:204 msgid "Download Debug Package" -msgstr "Descargar o paquete de depuración" +msgstr "Descargar paquete de depuración" #: cps/templates/admin.html:205 msgid "View Logs" -msgstr "Ver arquivos de rexistro" +msgstr "Ver rexistros" #: cps/templates/admin.html:211 msgid "Restart" @@ -1779,11 +1748,11 @@ msgstr "Reiniciar" #: cps/templates/admin.html:212 msgid "Shutdown" -msgstr "Apagar" +msgstr "Apagado" #: cps/templates/admin.html:221 msgid "Version Information" -msgstr "Información de versión" +msgstr "Información da versión" #: cps/templates/admin.html:225 msgid "Version" @@ -1799,7 +1768,7 @@ msgstr "Versión actual" #: cps/templates/admin.html:239 msgid "Check for Update" -msgstr "Comprobar actualizacións" +msgstr "Comprobar a actualización" #: cps/templates/admin.html:240 msgid "Perform Update" @@ -1807,7 +1776,7 @@ msgstr "Realizar actualización" #: cps/templates/admin.html:253 msgid "Are you sure you want to restart?" -msgstr "De verdade queres reiniciar?" +msgstr "Estás seguro de que queres reiniciar?" #: cps/templates/admin.html:258 cps/templates/admin.html:272 #: cps/templates/admin.html:292 cps/templates/config_db.html:82 @@ -1827,49 +1796,49 @@ msgstr "Cancelar" #: cps/templates/admin.html:271 msgid "Are you sure you want to shutdown?" -msgstr "De verdade quere deter?" +msgstr "Estás seguro de que queres apagar?" #: cps/templates/admin.html:283 msgid "Updating, please do not reload this page" -msgstr "Actualizando. Por favor, non recargue a páxina" +msgstr "Actualizando, non volvas cargar esta páxina" #: cps/templates/author.html:15 msgid "via" -msgstr "via" +msgstr "vía" #: cps/templates/author.html:23 msgid "In Library" -msgstr "Na Librería" +msgstr "En Biblioteca" #: cps/templates/author.html:26 cps/templates/index.html:74 #: cps/templates/search.html:31 cps/templates/shelf.html:20 msgid "Sort according to book date, newest first" -msgstr "Ordear pola data do libro, máis recente primeiro" +msgstr "Ordena segundo a data do libro, primeiro o máis novo" #: cps/templates/author.html:27 cps/templates/index.html:75 #: cps/templates/search.html:32 cps/templates/shelf.html:21 msgid "Sort according to book date, oldest first" -msgstr "Ordear pola data do libro, máis antigo primeiro" +msgstr "Ordena segundo a data do libro, primeiro o máis antigo" #: cps/templates/author.html:28 cps/templates/index.html:76 #: cps/templates/search.html:33 cps/templates/shelf.html:22 msgid "Sort title in alphabetical order" -msgstr "Ordear polo título en orden alfabético" +msgstr "Ordena o título por orde alfabética" #: cps/templates/author.html:29 cps/templates/index.html:77 #: cps/templates/search.html:34 cps/templates/shelf.html:23 msgid "Sort title in reverse alphabetical order" -msgstr "Ordear polo título en orde alfabético invertido" +msgstr "Ordena o título en orde alfabética inversa" #: cps/templates/author.html:30 cps/templates/index.html:80 #: cps/templates/search.html:37 cps/templates/shelf.html:26 msgid "Sort according to publishing date, newest first" -msgstr "Ordear pola data de publicación, máis recente primeiro" +msgstr "Ordena segundo a data de publicación, primeiro o máis novo" #: cps/templates/author.html:31 cps/templates/index.html:81 #: cps/templates/search.html:38 cps/templates/shelf.html:27 msgid "Sort according to publishing date, oldest first" -msgstr "Ordear pola data de publicación, máis antigo primeiro" +msgstr "Ordena segundo a data de publicación, primeiro o máis antigo" #: cps/templates/author.html:56 cps/templates/author.html:113 #: cps/templates/index.html:30 cps/templates/index.html:113 @@ -1879,35 +1848,35 @@ msgstr "reducir" #: cps/templates/author.html:97 msgid "More by" -msgstr "Máis de" +msgstr "Máis por" #: cps/templates/book_edit.html:11 msgid "Delete Book" -msgstr "Borrar libro" +msgstr "Eliminar libro" #: cps/templates/book_edit.html:14 msgid "Delete formats:" -msgstr "Borrar formatos:" +msgstr "Eliminar formatos:" #: cps/templates/book_edit.html:25 msgid "Convert book format:" -msgstr "Convertir formato de libro:" +msgstr "Converter formato de libro:" #: cps/templates/book_edit.html:30 msgid "Convert from:" -msgstr "Convertir dende:" +msgstr "Converter de:" #: cps/templates/book_edit.html:32 cps/templates/book_edit.html:39 msgid "select an option" -msgstr "seleccionar unha opción" +msgstr "seleccione unha opción" #: cps/templates/book_edit.html:37 msgid "Convert to:" -msgstr "Convertir a:" +msgstr "Converter a:" #: cps/templates/book_edit.html:46 msgid "Convert book" -msgstr "Convertir libro" +msgstr "Converter libro" #: cps/templates/book_edit.html:53 cps/templates/layout.html:78 #: cps/templates/layout.html:135 @@ -1926,11 +1895,11 @@ msgstr "Erro" #: cps/templates/book_edit.html:53 cps/templates/layout.html:78 msgid "Upload done, processing, please wait..." -msgstr "Carga feita, procesando, por favor agarde..." +msgstr "Carga feita, procesando, espera..." #: cps/templates/book_edit.html:58 msgid "Upload Format" -msgstr "Cargar formato" +msgstr "Formato de carga" #: cps/templates/book_edit.html:71 cps/templates/search_form.html:8 msgid "Book Title" @@ -1956,12 +1925,12 @@ msgstr "Tipo de identificador" #: cps/templates/book_edit.html:93 cps/templates/book_edit.html:309 msgid "Identifier Value" -msgstr "Valor de identificador" +msgstr "Valor do identificador" #: cps/templates/book_edit.html:94 cps/templates/book_edit.html:310 #: cps/templates/user_table.html:24 msgid "Remove" -msgstr "Borrar" +msgstr "Eliminar" #: cps/templates/book_edit.html:98 msgid "Add Identifier" @@ -1981,11 +1950,11 @@ msgstr "Valoración" #: cps/templates/book_edit.html:119 msgid "Fetch Cover from URL (JPEG - Image will be downloaded and stored in database)" -msgstr "Obter portada de URL (JPEG, a portada descargarase e almacenarase na base de datos)" +msgstr "Obter a portada do URL (JPEG: a imaxe descargarase e almacenarase na base de datos)" #: cps/templates/book_edit.html:123 msgid "Upload Cover from Local Disk" -msgstr "Cargar portada dende un disco local" +msgstr "Cargar portada desde o disco local" #: cps/templates/book_edit.html:128 msgid "Published Date" @@ -1995,12 +1964,12 @@ msgstr "Data de publicación" #: cps/templates/book_edit.html:298 cps/templates/detail.html:192 #: cps/templates/listenmp3.html:102 cps/templates/search_form.html:16 msgid "Publisher" -msgstr "Editor" +msgstr "Editora" #: cps/templates/book_edit.html:141 cps/templates/detail.html:157 #: cps/templates/listenmp3.html:69 cps/templates/user_edit.html:33 msgid "Language" -msgstr "Lingua" +msgstr "Linguaxe" #: cps/templates/book_edit.html:151 cps/templates/search_form.html:46 #: cps/templates/search_form.html:167 @@ -2014,7 +1983,7 @@ msgstr "Non" #: cps/templates/book_edit.html:217 msgid "View Book on Save" -msgstr "Ver libro ao gardar" +msgstr "Ver Libro en Gardar" #: cps/templates/book_edit.html:220 cps/templates/book_edit.html:238 msgid "Fetch Metadata" @@ -2030,15 +1999,15 @@ msgstr "Gardar" #: cps/templates/book_edit.html:241 msgid "Keyword" -msgstr "Palabra chave" +msgstr "Palabra clave" #: cps/templates/book_edit.html:242 msgid "Search keyword" -msgstr "Buscar por palabras chave " +msgstr "Buscar palabra clave" #: cps/templates/book_edit.html:248 msgid "Click the cover to load metadata to the form" -msgstr "Premer na portada para cargar los metadatos no formulario" +msgstr "Fai clic na portada para cargar metadatos no formulario" #: cps/templates/book_edit.html:255 cps/templates/book_edit.html:294 msgid "Loading..." @@ -2046,45 +2015,45 @@ msgstr "Cargando..." #: cps/templates/book_edit.html:286 cps/templates/book_edit.html:300 msgid "Source" -msgstr "Orixe" +msgstr "Fonte" #: cps/templates/book_edit.html:295 msgid "Search error!" -msgstr "Erro na busca!" +msgstr "Erro de busca!" #: cps/templates/book_edit.html:296 msgid "No Result(s) found! Please try another keyword." -msgstr "Non se atoparon resultados! Por favor intenta con outra palabra chave." +msgstr "Non se atopou ningún resultado! Proba con outra palabra clave." #: cps/templates/book_table.html:12 cps/templates/book_table.html:69 #: cps/templates/user_table.html:14 cps/templates/user_table.html:77 #: cps/templates/user_table.html:100 msgid "This Field is Required" -msgstr "Este campo é necesario" +msgstr "Este campo é obrigatorio" #: cps/templates/book_table.html:37 msgid "Merge selected books" -msgstr "Unir libros seleccionados" +msgstr "Combina os libros seleccionados" #: cps/templates/book_table.html:38 cps/templates/user_table.html:124 msgid "Remove Selections" -msgstr "Eliminar selección" +msgstr "Eliminar seleccións" #: cps/templates/book_table.html:41 msgid "Exchange author and title" -msgstr "Intercambiar autor e título" +msgstr "Intercambio de autor e título" #: cps/templates/book_table.html:47 msgid "Update Title Sort automatically" -msgstr "Actualizar orde do título automáticamente" +msgstr "Actualizar o Título para Ordenar automaticamente" #: cps/templates/book_table.html:51 msgid "Update Author Sort automatically" -msgstr "Actualizar orde do autor automáticamente" +msgstr "Actualizar o Autor para Ordenar automaticamente" #: cps/templates/book_table.html:63 cps/templates/book_table.html:69 msgid "Enter Title" -msgstr "Introduce título" +msgstr "Introduza o título" #: cps/templates/book_table.html:63 cps/templates/config_view_edit.html:24 #: cps/templates/shelf_edit.html:8 @@ -2093,39 +2062,39 @@ msgstr "Título" #: cps/templates/book_table.html:64 msgid "Enter Title Sort" -msgstr "Introduce a orde do título" +msgstr "Introduza o Título para Ordenar" #: cps/templates/book_table.html:64 msgid "Title Sort" -msgstr "Orde do título" +msgstr "Título para Ordenar" #: cps/templates/book_table.html:65 msgid "Enter Author Sort" -msgstr "Introduce orde do autor" +msgstr "Introduce o Autor para Ordenar" #: cps/templates/book_table.html:65 msgid "Author Sort" -msgstr "Orde do autor" +msgstr "Autor para Ordenar" #: cps/templates/book_table.html:66 msgid "Enter Authors" -msgstr "Introduce os autores" +msgstr "Introducir Autores" #: cps/templates/book_table.html:67 msgid "Enter Categories" -msgstr "Introduce as categorías" +msgstr "Introduza categorías" #: cps/templates/book_table.html:68 msgid "Enter Series" -msgstr "Introduce as series" +msgstr "Introduza as series" #: cps/templates/book_table.html:69 msgid "Series Index" -msgstr "Índice da serie" +msgstr "Índice de series" #: cps/templates/book_table.html:70 msgid "Enter Languages" -msgstr "Introduce as linguas" +msgstr "Introduza Idiomas" #: cps/templates/book_table.html:71 msgid "Publishing Date" @@ -2133,11 +2102,11 @@ msgstr "Data de publicación" #: cps/templates/book_table.html:72 msgid "Enter Publishers" -msgstr "Introduce os Editores" +msgstr "Entra Editores" #: cps/templates/book_table.html:73 msgid "Enter comments" -msgstr "Introducir os comentarios" +msgstr "Introduce comentarios" #: cps/templates/book_table.html:73 msgid "Comments" @@ -2149,31 +2118,31 @@ msgstr "Estado do arquivo" #: cps/templates/book_table.html:77 cps/templates/search_form.html:42 msgid "Read Status" -msgstr "Leer estado" +msgstr "Estado de lectura" #: cps/templates/book_table.html:80 cps/templates/book_table.html:82 #: cps/templates/book_table.html:84 cps/templates/book_table.html:86 #: cps/templates/book_table.html:90 cps/templates/book_table.html:92 #: cps/templates/book_table.html:96 msgid "Enter " -msgstr "Introduce " +msgstr "Entra " #: cps/templates/book_table.html:113 cps/templates/modal_dialogs.html:46 #: cps/templates/tasks.html:37 msgid "Are you really sure?" -msgstr "De verdade estás seguro?" +msgstr "Estás realmente seguro?" #: cps/templates/book_table.html:117 msgid "Books with Title will be merged from:" -msgstr "Libros co título uniranse de:" +msgstr "Os libros con título combinaranse de:" #: cps/templates/book_table.html:121 msgid "Into Book with Title:" -msgstr "No libro co título:" +msgstr "No libro con título:" #: cps/templates/book_table.html:126 msgid "Merge" -msgstr "Unir" +msgstr "Combinar" #: cps/templates/config_db.html:12 msgid "Location of Calibre Database" @@ -2181,11 +2150,11 @@ msgstr "Localización da base de datos Calibre" #: cps/templates/config_db.html:21 msgid "Separate Book Files from Library" -msgstr "" +msgstr "Separa os ficheiros de libros da biblioteca" #: cps/templates/config_db.html:34 msgid "Use Google Drive?" -msgstr "Usar Google Drive?" +msgstr "Usa Google Drive?" #: cps/templates/config_db.html:39 msgid "Authenticate Google Drive" @@ -2193,11 +2162,11 @@ msgstr "Autenticar Google Drive" #: cps/templates/config_db.html:44 msgid "Google Drive Calibre folder" -msgstr "Carpeta de Google Drive para Calibre" +msgstr "Cartafol Google Drive Calibre" #: cps/templates/config_db.html:52 msgid "Metadata Watch Channel ID" -msgstr "Metadata Watch Channel ID" +msgstr "ID da canle de visualización de metadatos" #: cps/templates/config_db.html:55 msgid "Revoke" @@ -2205,7 +2174,7 @@ msgstr "Revogar" #: cps/templates/config_db.html:80 msgid "New db location is invalid, please enter valid path" -msgstr "A localización da base de datos non é válida. Por favor, Introduce a ruta correcta" +msgstr "A nova localización da base de datos non é válida, introduce unha ruta válida" #: cps/templates/config_edit.html:18 msgid "Server Configuration" @@ -2217,11 +2186,11 @@ msgstr "Porto do servidor" #: cps/templates/config_edit.html:28 msgid "SSL certfile location (leave it empty for non-SSL Servers)" -msgstr "Localización do arquivo de certificado SSL (deixar en branco se non hai un servidor SSL)" +msgstr "Localización do ficheiro de certificado SSL (déixao baleiro para servidores non SSL)" #: cps/templates/config_edit.html:35 msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" -msgstr "Localización do arquivo clave SSL (dejar en blanco si no hay un servidor SSL)" +msgstr "Localización do ficheiro de chave SSL (déixao baleiro para servidores non SSL)" #: cps/templates/config_edit.html:43 msgid "Update Channel" @@ -2233,67 +2202,67 @@ msgstr "Estable" #: cps/templates/config_edit.html:46 msgid "Nightly" -msgstr "Nocturno" +msgstr "Noite" #: cps/templates/config_edit.html:50 msgid "Trusted Hosts (Comma Separated)" -msgstr "Anfitrións de confianza (Separados por comas)" +msgstr "Hosts de confianza (separados por comas)" #: cps/templates/config_edit.html:61 msgid "Logfile Configuration" -msgstr "Configuración do arquivo de rexistro" +msgstr "Configuración do ficheiro de rexistro" #: cps/templates/config_edit.html:77 msgid "Location and name of logfile (calibre-web.log for no entry)" -msgstr "Localización e nome do arquivo de rexistro (se non se especifica será calibre-web.log)" +msgstr "Localización e nome do ficheiro de rexistro (calibre-web.log sen entrada)" #: cps/templates/config_edit.html:82 msgid "Enable Access Log" -msgstr "Habilitar rexistro de acceso" +msgstr "Activar o rexistro de acceso" #: cps/templates/config_edit.html:85 msgid "Location and name of access logfile (access.log for no entry)" -msgstr "Localización e nombre do archivo de rexistro de acceso (access.log non ten ningunha entrada)" +msgstr "Localización e nome do ficheiro de rexistro de acceso (access.log sen entrada)" #: cps/templates/config_edit.html:96 msgid "Feature Configuration" -msgstr "Configuración de características" +msgstr "Configuración de funcións" #: cps/templates/config_edit.html:104 msgid "Convert non-English characters in title and author while saving to disk" -msgstr "Convertir caracteres non ingleses no título e no autor mentres se graba no disco" +msgstr "Converte caracteres non ingleses en título e autor mentres gardas no disco" #: cps/templates/config_edit.html:108 msgid "Embed Metadata to Ebook File on Download/Conversion/e-mail (needs Calibre/Kepubify binaries)" -msgstr "" +msgstr "Inserir metadatos no ficheiro de libro electrónico na descarga/conversión/correo electrónico (necesita os binarios de Calibre/Kepubify)" #: cps/templates/config_edit.html:112 msgid "Enable Uploads" -msgstr "Permitir cargas" +msgstr "Activa as cargas" #: cps/templates/config_edit.html:112 msgid "(Please ensure that users also have upload permissions)" -msgstr "(Por favor asegúrese que os usuarios teñen permisos de carga)" +msgstr "(Asegúrate de que os usuarios tamén teñan permisos de carga)" #: cps/templates/config_edit.html:116 msgid "Allowed Upload Fileformats" -msgstr "Formatos de arquivo permitidos para carga" +msgstr "Formatos de ficheiro de carga permitidos" #: cps/templates/config_edit.html:122 msgid "Enable Anonymous Browsing" -msgstr "Permitir navegación anónima" +msgstr "Activar a navegación anónima" #: cps/templates/config_edit.html:126 msgid "Enable Public Registration" -msgstr "Permitir rexistro público" +msgstr "Activar o rexistro público" #: cps/templates/config_edit.html:131 msgid "Use Email as Username" -msgstr "Utilizar correo electrónico como nome de usuario" +msgstr "Use o correo electrónico como nome de usuario" #: cps/templates/config_edit.html:136 msgid "Enable Magic Link Remote Login" -msgstr "Permitir inicio de sesión remoto (\"magic link\")" +msgstr "Activa o inicio de sesión remoto de Magic Link" #: cps/templates/config_edit.html:141 msgid "Enable Kobo sync" @@ -2305,19 +2274,19 @@ msgstr "Peticións proxy á tenda Kobo descoñecidas" #: cps/templates/config_edit.html:149 msgid "Server External Port (for port forwarded API calls)" -msgstr "Porto externo do servidor (para peticións API)" +msgstr "Porto externo do servidor (para chamadas á API de reenvío de portos)" #: cps/templates/config_edit.html:157 msgid "Use Goodreads" -msgstr "Usar Goodreads" +msgstr "Use Goodreads" #: cps/templates/config_edit.html:161 msgid "Goodreads API Key" -msgstr "Goodreads API Key" +msgstr "Clave da API de Goodreads" #: cps/templates/config_edit.html:168 msgid "Allow Reverse Proxy Authentication" -msgstr "Permitir Autenticación Proxy Inversa" +msgstr "Permitir a autenticación de proxy inverso" #: cps/templates/config_edit.html:179 msgid "Login type" @@ -2325,19 +2294,19 @@ msgstr "Tipo de inicio de sesión" #: cps/templates/config_edit.html:181 msgid "Use Standard Authentication" -msgstr "Usar autenticación estándar" +msgstr "Use a autenticación estándar" #: cps/templates/config_edit.html:183 msgid "Use LDAP Authentication" -msgstr "Usar autenticación LDAP" +msgstr "Use a autenticación LDAP" #: cps/templates/config_edit.html:186 msgid "Use OAuth" -msgstr "Usar OAuth" +msgstr "Usa OAuth" #: cps/templates/config_edit.html:193 msgid "LDAP Server Host Name or IP Address" -msgstr "Nome de anfitrión ou enderezo IP do servidor LDAP" +msgstr "Nome de host do servidor LDAP ou enderezo IP" #: cps/templates/config_edit.html:197 msgid "LDAP Server Port" @@ -2357,15 +2326,15 @@ msgstr "SSL" #: cps/templates/config_edit.html:209 msgid "LDAP CACertificate Path (Only needed for Client Certificate Authentication)" -msgstr "Ruta LDAP CACertificate (So necesaria para certificado de autenticación de cliente)" +msgstr "Ruta do certificado LDAP da autoridade certificadora (só necesario para a autenticación do certificado do cliente)" #: cps/templates/config_edit.html:216 msgid "LDAP Certificate Path (Only needed for Client Certificate Authentication)" -msgstr "Ruta LDAP Certificate (So necesaria para certificado de autenticación de cliente)" +msgstr "Ruta do certificado LDAP (só necesario para a autenticación do certificado do cliente)" #: cps/templates/config_edit.html:223 msgid "LDAP Keyfile Path (Only needed for Client Certificate Authentication)" -msgstr "Ruta LDAP Keyfile (So necesaria para certificado de autenticación de cliente)" +msgstr "Ruta do ficheiro de chave LDAP (só necesario para a autenticación do certificado do cliente)" #: cps/templates/config_edit.html:232 msgid "LDAP Authentication" @@ -2385,7 +2354,7 @@ msgstr "Simple" #: cps/templates/config_edit.html:241 msgid "LDAP Administrator Username" -msgstr "Nome de usuario de administrador LDAP" +msgstr "Nome de usuario do administrador LDAP" #: cps/templates/config_edit.html:247 msgid "LDAP Administrator Password" @@ -2405,7 +2374,7 @@ msgstr "O servidor LDAP é OpenLDAP?" #: cps/templates/config_edit.html:263 msgid "Following Settings are Needed For User Import" -msgstr "As seguintes configuracións son necesarias para a importación de usuarios" +msgstr "Os seguintes axustes son necesarios para a importación do usuario" #: cps/templates/config_edit.html:265 msgid "LDAP Group Object Filter" @@ -2413,19 +2382,19 @@ msgstr "Filtro de obxectos de grupo LDAP" #: cps/templates/config_edit.html:269 msgid "LDAP Group Name" -msgstr "Nome de grupo LDAP" +msgstr "Nome do grupo LDAP" #: cps/templates/config_edit.html:273 msgid "LDAP Group Members Field" -msgstr "Campo de membros de grupo LDAP" +msgstr "Campo de membros do grupo LDAP" #: cps/templates/config_edit.html:277 msgid "LDAP Member User Filter Detection" -msgstr "Filtro de detección LDAP Member User" +msgstr "Detección de filtros de usuarios de membros de LDAP" #: cps/templates/config_edit.html:279 msgid "Autodetect" -msgstr "Auto detectar" +msgstr "Autodetección" #: cps/templates/config_edit.html:280 msgid "Custom Filter" @@ -2433,106 +2402,102 @@ msgstr "Filtro personalizado" #: cps/templates/config_edit.html:285 msgid "LDAP Member User Filter" -msgstr "Filtro LDAP Member User" +msgstr "Filtro de usuarios de membros de LDAP" #: cps/templates/config_edit.html:296 #, python-format msgid "Obtain %(provider)s OAuth Credential" -msgstr "Obter a Credencial OAuth de %(provider)s" +msgstr "Obter a credencial OAuth de %(provider)s" #: cps/templates/config_edit.html:299 #, python-format msgid "%(provider)s OAuth Client Id" -msgstr "Id de cliente de OAuth de %(provider)s" +msgstr "Id. de cliente OAuth de %(provider)s" #: cps/templates/config_edit.html:303 #, python-format msgid "%(provider)s OAuth Client Secret" -msgstr "Secreto OAuth de Cliente de %(provider)s" +msgstr "Segredo de cliente OAuth de %(provider)s" #: cps/templates/config_edit.html:319 msgid "External binaries" msgstr "Binarios externos" #: cps/templates/config_edit.html:325 -#, fuzzy msgid "Path to Calibre Binaries" -msgstr "Ruta para Calibre E-Book Converter" +msgstr "Camiño aos binarios de Calibre" #: cps/templates/config_edit.html:333 msgid "Calibre E-Book Converter Settings" -msgstr "Axustes de Calibre E-Book Converter" +msgstr "Configuración do conversor de libros electrónicos de Calibre" #: cps/templates/config_edit.html:336 msgid "Path to Kepubify E-Book Converter" -msgstr "Ruta para Kepubify E-Book Converter" +msgstr "Camiño ao conversor de libros electrónicos Kepubify" #: cps/templates/config_edit.html:344 -#, fuzzy msgid "Location of Unrar binary" -msgstr "Localización do binario de UnRar" +msgstr "Localización do binario Unrar" #: cps/templates/config_edit.html:360 -#, fuzzy msgid "Security Settings" -msgstr "Axustes OAuth" +msgstr "Configuración de seguranza" #: cps/templates/config_edit.html:368 msgid "Limit failed login attempts" -msgstr "" +msgstr "Limite os intentos de inicio de sesión errados" #: cps/templates/config_edit.html:372 msgid "Configure Backend for Limiter" -msgstr "" +msgstr "Configurar o backend para o limitador" #: cps/templates/config_edit.html:376 msgid "Options for Limiter Backend" -msgstr "" +msgstr "Opcións para o backend do limitador" #: cps/templates/config_edit.html:382 msgid "Check if file extensions matches file content on upload" -msgstr "" +msgstr "Comproba se as extensións do ficheiro coinciden co contido do ficheiro na carga" #: cps/templates/config_edit.html:385 msgid "Session protection" -msgstr "" +msgstr "Protección de sesión" #: cps/templates/config_edit.html:387 msgid "Basic" -msgstr "" +msgstr "Básico" #: cps/templates/config_edit.html:388 msgid "Strong" -msgstr "" +msgstr "Forte" #: cps/templates/config_edit.html:393 -#, fuzzy msgid "User Password policy" -msgstr "Restablecer contrasinal de usuario" +msgstr "Política de contrasinais de usuario" #: cps/templates/config_edit.html:397 msgid "Minimum password length" -msgstr "" +msgstr "Lonxitude mínima do contrasinal" #: cps/templates/config_edit.html:402 msgid "Enforce number" -msgstr "" +msgstr "Aplicar número" #: cps/templates/config_edit.html:406 msgid "Enforce lowercase characters" -msgstr "" +msgstr "Aplicar caracteres minúsculas" #: cps/templates/config_edit.html:410 msgid "Enforce uppercase characters" -msgstr "" +msgstr "Aplica os caracteres en maiúscula" #: cps/templates/config_edit.html:414 msgid "Enforce characters (needed For Chinese/Japanese/Korean Characters)" -msgstr "" +msgstr "Aplicar caracteres (necesario para caracteres chineses/xaponeses/coreanos)" #: cps/templates/config_edit.html:418 msgid "Enforce special characters" -msgstr "" +msgstr "Aplicar caracteres especiais" #: cps/templates/config_view_edit.html:17 msgid "View Configuration" @@ -2540,11 +2505,11 @@ msgstr "Ver configuración" #: cps/templates/config_view_edit.html:32 msgid "No. of Random Books to Display" -msgstr "Número de libros aleatorios a mostrar" +msgstr "Número de libros aleatorios para mostrar" #: cps/templates/config_view_edit.html:36 msgid "No. of Authors to Display Before Hiding (0=Disable Hiding)" -msgstr "Número de autores para mostrar antes de agochar (0 = desactivar o agochamento)" +msgstr "Número de autores a mostrar antes de ocultar (0=Desactivar ocultar)" #: cps/templates/config_view_edit.html:40 cps/templates/readcbr.html:101 msgid "Theme" @@ -2556,7 +2521,7 @@ msgstr "Tema estándar" #: cps/templates/config_view_edit.html:43 msgid "caliBlur! Dark Theme" -msgstr "caliBlur! Tema Escuro" +msgstr "caliBlur! Tema escuro" #: cps/templates/config_view_edit.html:47 msgid "Regular Expression for Ignoring Columns" @@ -2564,15 +2529,15 @@ msgstr "Expresión regular para ignorar columnas" #: cps/templates/config_view_edit.html:51 msgid "Link Read/Unread Status to Calibre Column" -msgstr "Enlazar á columna de Calibre de lido/sen ler" +msgstr "Enlace o estado de lectura/non lida á columna Calibre" #: cps/templates/config_view_edit.html:60 msgid "View Restrictions based on Calibre column" -msgstr "Ver restricións baseadas na columna de Calibre" +msgstr "Ver restricións baseadas na columna Calibre" #: cps/templates/config_view_edit.html:69 msgid "Regular Expression for Title Sorting" -msgstr "Expresión regular para ordear títulos" +msgstr "Expresión regular para a clasificación de títulos" #: cps/templates/config_view_edit.html:80 msgid "Default Settings for New Users" @@ -2588,11 +2553,11 @@ msgstr "Permitir descargas" #: cps/templates/config_view_edit.html:96 cps/templates/user_edit.html:105 msgid "Allow eBook Viewer" -msgstr "Permitir visor de libros" +msgstr "Permitir o visor de libros electrónicos" #: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:110 msgid "Allow Uploads" -msgstr "Permitir cargas de arquivos" +msgstr "Permitir cargas" #: cps/templates/config_view_edit.html:106 cps/templates/user_edit.html:115 msgid "Allow Edit" @@ -2600,27 +2565,27 @@ msgstr "Permitir editar" #: cps/templates/config_view_edit.html:111 cps/templates/user_edit.html:120 msgid "Allow Delete Books" -msgstr "Permitir borrar libros" +msgstr "Permitir eliminar libros" #: cps/templates/config_view_edit.html:116 cps/templates/user_edit.html:126 msgid "Allow Changing Password" -msgstr "Permitir cambiar a contrasinal" +msgstr "Permitir cambiar o contrasinal" #: cps/templates/config_view_edit.html:120 cps/templates/user_edit.html:130 msgid "Allow Editing Public Shelves" -msgstr "Permitir editar andeis públicos" +msgstr "Permitir editar estantes públicos" #: cps/templates/config_view_edit.html:123 msgid "Default Language" -msgstr "Lingua predeterminada" +msgstr "Idioma predeterminado" #: cps/templates/config_view_edit.html:131 msgid "Default Visible Language of Books" -msgstr "Lingua visible predeterminada dos libros" +msgstr "Linguaxe visible predeterminada dos libros" #: cps/templates/config_view_edit.html:147 msgid "Default Visibilities for New Users" -msgstr "Visibilidade predeterminada para novos usuarios" +msgstr "Visibilidades predeterminadas para novos usuarios" #: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:84 #: cps/templates/user_table.html:154 @@ -2629,11 +2594,11 @@ msgstr "Mostrar libros aleatorios na vista detallada" #: cps/templates/config_view_edit.html:166 cps/templates/user_edit.html:87 msgid "Add Allowed/Denied Tags" -msgstr "Engadir etiquetas Permitidas/denegados" +msgstr "Engadir etiquetas permitidas/denegadas" #: cps/templates/config_view_edit.html:167 msgid "Add Allowed/Denied custom column values" -msgstr "Engadir valores personalizados Permitidos/denegados" +msgstr "Engadir valores de columnas personalizados permitidos/denegados" #: cps/templates/detail.html:77 cps/templates/detail.html:91 msgid "Read in Browser" @@ -2641,7 +2606,7 @@ msgstr "Ler no navegador" #: cps/templates/detail.html:100 cps/templates/detail.html:120 msgid "Listen in Browser" -msgstr "Escoitar no navegador" +msgstr "Escoita no navegador" #: cps/templates/detail.html:150 cps/templates/listenmp3.html:62 #, python-format @@ -2661,30 +2626,28 @@ msgid "Mark As Read" msgstr "Marcar como lido" #: cps/templates/detail.html:254 -#, fuzzy msgid "Mark Book as Read or Unread" -msgstr "Marcar como non lido" +msgstr "Marcar o libro como lido ou non lido" #: cps/templates/detail.html:254 cps/templates/listenmp3.html:159 msgid "Read" -msgstr "Lido" +msgstr "Ler" #: cps/templates/detail.html:264 cps/templates/listenmp3.html:166 msgid "Restore from archive" -msgstr "Restaurar dende o arquivo" +msgstr "Restaurar desde o arquivo" #: cps/templates/detail.html:265 cps/templates/listenmp3.html:166 msgid "Add to archive" -msgstr "Engadir a arquivo" +msgstr "Engadir ao arquivo" #: cps/templates/detail.html:267 msgid "Mark Book as archived or not, to hide it in Calibre-Web and delete it from Kobo Reader" -msgstr "" +msgstr "Marca o libro como arquivado ou non, para ocultalo en Calibre-Web e elimínao de Kobo Reader" #: cps/templates/detail.html:267 -#, fuzzy msgid "Archive" -msgstr "Arquivado" +msgstr "Arquivo" #: cps/templates/detail.html:278 cps/templates/listenmp3.html:177 msgid "Description:" @@ -2693,7 +2656,7 @@ msgstr "Descrición:" #: cps/templates/detail.html:293 cps/templates/listenmp3.html:190 #: cps/templates/search.html:16 msgid "Add to shelf" -msgstr "Engadir ao andel" +msgstr "Engadir ao estante" #: cps/templates/detail.html:305 cps/templates/detail.html:324 #: cps/templates/feed.xml:81 cps/templates/layout.html:155 @@ -2708,25 +2671,23 @@ msgstr "Editar metadatos" #: cps/templates/email_edit.html:13 msgid "Email Account Type" -msgstr "Escolle tipo de servidor" +msgstr "Tipo de conta de correo electrónico" #: cps/templates/email_edit.html:15 -#, fuzzy msgid "Standard Email Account" -msgstr "Usar conta de correo electrónico estándar" +msgstr "Conta de correo electrónico estándar" #: cps/templates/email_edit.html:16 -#, fuzzy msgid "Gmail Account" -msgstr "Escolle tipo de servidor" +msgstr "Conta de Gmail" #: cps/templates/email_edit.html:22 msgid "Setup Gmail Account" -msgstr "" +msgstr "Configurar a conta de Gmail" #: cps/templates/email_edit.html:24 msgid "Revoke Gmail Access" -msgstr "Revogar acceso a Gmail" +msgstr "Revogar o acceso a Gmail" #: cps/templates/email_edit.html:42 msgid "STARTTLS" @@ -2742,21 +2703,20 @@ msgstr "Contrasinal SMTP" #: cps/templates/email_edit.html:58 msgid "Attachment Size Limit" -msgstr "Tamaño límite do arquivo achegado" +msgstr "Límite de tamaño do anexo" #: cps/templates/email_edit.html:66 -#, fuzzy msgid "Save and Send Test Email" -msgstr "Gardar e enviar un correo electrónico de proba" +msgstr "Garda e envía correo electrónico de proba" #: cps/templates/email_edit.html:70 cps/templates/layout.html:26 #: cps/templates/shelf_order.html:42 cps/templates/user_table.html:174 msgid "Back" -msgstr "Voltar" +msgstr "De volta" #: cps/templates/email_edit.html:74 msgid "Allowed Domains (Whitelist)" -msgstr "Dominios permitidos para rexistrarse" +msgstr "Dominios permitidos (lista branca)" #: cps/templates/email_edit.html:78 cps/templates/email_edit.html:105 msgid "Add Domain" @@ -2769,23 +2729,23 @@ msgstr "Engadir" #: cps/templates/email_edit.html:86 cps/templates/email_edit.html:96 msgid "Enter domainname" -msgstr "Introducir nome de dominio" +msgstr "Introduza o nome de dominio" #: cps/templates/email_edit.html:92 msgid "Denied Domains (Blacklist)" -msgstr "Dominios prohibidos (Blaclist)" +msgstr "Dominios denegados (lista negra)" #: cps/templates/feed.xml:22 cps/templates/layout.html:188 msgid "Next" -msgstr "Seguinte" +msgstr "A continuación" #: cps/templates/generate_kobo_auth_url.html:6 msgid "Open the .kobo/Kobo/Kobo eReader.conf file in a text editor and add (or edit):" -msgstr "Abre o arquivo .kobo/Kobo/Kobo eReader.conf nun editor de texto e engade (ou edita):" +msgstr "Abra o ficheiro .kobo/Kobo/Kobo eReader.conf nun editor de texto e engada (ou edite):" #: cps/templates/generate_kobo_auth_url.html:11 msgid "Kobo Token:" -msgstr "Token de sincronización de Kobo" +msgstr "Kobo Token:" #: cps/templates/grid.html:21 msgid "List" @@ -2793,70 +2753,69 @@ msgstr "Lista" #: cps/templates/http_error.html:34 msgid "Calibre-Web Instance is unconfigured, please contact your administrator" -msgstr "A instancia de Calibre-Web non está configurada, por favor contacta co teu administrador" +msgstr "A instancia de Calibre-Web non está configurada, póñase en contacto co seu administrador" #: cps/templates/http_error.html:44 msgid "Create Issue" -msgstr "Crear una incidencia" +msgstr "Crear problema" #: cps/templates/http_error.html:52 -#, fuzzy msgid "Return to Database config" -msgstr "Configuración da base de datos" +msgstr "Volver á configuración da base de datos" #: cps/templates/http_error.html:54 msgid "Return to Home" -msgstr "Voltar ao inicio" +msgstr "Volver ao inicio" #: cps/templates/http_error.html:57 msgid "Logout User" -msgstr "Pechar sesión" +msgstr "Saír Usuario" #: cps/templates/index.html:71 msgid "Sort ascending according to download count" -msgstr "Ordear carra arriba segundo a conta de descargas" +msgstr "Ordenar ascendente segundo o reconto de descargas" #: cps/templates/index.html:72 msgid "Sort descending according to download count" -msgstr "Ordear cara abaixo segundo a conta de descargas" +msgstr "Ordena descendente segundo o reconto de descargas" #: cps/templates/index.html:78 cps/templates/search.html:35 #: cps/templates/shelf.html:24 msgid "Sort authors in alphabetical order" -msgstr "Ordenar autores en orde alfabética" +msgstr "Ordenar os autores por orde alfabética" #: cps/templates/index.html:79 cps/templates/search.html:36 #: cps/templates/shelf.html:25 msgid "Sort authors in reverse alphabetical order" -msgstr "Ordenar autores en orde alfabética reversa" +msgstr "Ordenar os autores en orde alfabética inversa" #: cps/templates/index.html:83 msgid "Sort ascending according to series index" -msgstr "Ordear cara arriba segundo ao índice de serie" +msgstr "Ordena ascendente segundo o índice de serie" #: cps/templates/index.html:84 msgid "Sort descending according to series index" -msgstr "Ordear cara abaixo segundo ao índice de serie" +msgstr "Ordena descendente segundo o índice de serie" #: cps/templates/index.xml:7 msgid "Start" -msgstr "Comezar" +msgstr "Comeza" #: cps/templates/index.xml:19 msgid "Alphabetical Books" -msgstr "Libros alfabéticos" +msgstr "Libros Alfabéticos" #: cps/templates/index.xml:23 msgid "Books sorted alphabetically" -msgstr "Libros ordeados alfabéticamente" +msgstr "Libros ordenados alfabeticamente" #: cps/templates/index.xml:31 msgid "Popular publications from this catalog based on Downloads." -msgstr "Publicacións populares do catálogo baseadas nas descargas." +msgstr "Publicacións populares deste catálogo baseadas en Descargas." #: cps/templates/index.xml:40 msgid "Popular publications from this catalog based on Rating." -msgstr "Publicacións populares do catálogo baseadas na valoración." +msgstr "Publicacións populares deste catálogo baseadas na valoración." #: cps/templates/index.xml:45 msgid "Recently added Books" @@ -2864,48 +2823,48 @@ msgstr "Libros engadidos recentemente" #: cps/templates/index.xml:49 msgid "The latest Books" -msgstr "Últimos libros" +msgstr "Os últimos Libros" #: cps/templates/index.xml:54 msgid "Random Books" -msgstr "Libros ao chou" +msgstr "Libros aleatorios" #: cps/templates/index.xml:83 msgid "Books ordered by Author" -msgstr "Libros ordeados por autor" +msgstr "Libros ordenados por autor" #: cps/templates/index.xml:92 msgid "Books ordered by publisher" -msgstr "Libros ordeados por editor" +msgstr "Libros ordenados pola editorial" #: cps/templates/index.xml:101 msgid "Books ordered by category" -msgstr "Libros ordeados por categorías" +msgstr "Libros ordenados por categoría" #: cps/templates/index.xml:110 msgid "Books ordered by series" -msgstr "Libros ordeados por series" +msgstr "Libros ordenados por series" #: cps/templates/index.xml:119 msgid "Books ordered by Languages" -msgstr "Libros ordeados por lingua" +msgstr "Libros ordenados por Linguas" #: cps/templates/index.xml:128 msgid "Books ordered by Rating" -msgstr "Libros ordeados por valoración" +msgstr "Libros ordenados por valoración" #: cps/templates/index.xml:137 msgid "Books ordered by file formats" -msgstr "Libros ordeados por formato de arquivo" +msgstr "Libros ordenados por formatos de arquivo" #: cps/templates/index.xml:142 cps/templates/layout.html:153 #: cps/templates/search_form.html:88 msgid "Shelves" -msgstr "Andeis" +msgstr "Estantes" #: cps/templates/index.xml:146 msgid "Books organized in shelves" -msgstr "Libros organizados en andeis" +msgstr "Libros organizados en estantes" #: cps/templates/layout.html:26 cps/templates/login.html:30 msgid "Home" @@ -2917,7 +2876,7 @@ msgstr "Alternar navegación" #: cps/templates/layout.html:47 msgid "Search Library" -msgstr "Buscar na librería" +msgstr "Busca na biblioteca" #: cps/templates/layout.html:65 cps/templates/layout.html:95 msgid "Account" @@ -2930,23 +2889,23 @@ msgstr "Pechar sesión" #: cps/templates/layout.html:92 cps/templates/read.html:78 #: cps/templates/readcbr.html:70 cps/templates/readcbr.html:96 msgid "Settings" -msgstr "Axustes" +msgstr "Configuración" #: cps/templates/layout.html:136 msgid "Please do not refresh the page" -msgstr "Por favor, non actualice a páxina" +msgstr "Non actualices a páxina" #: cps/templates/layout.html:146 msgid "Browse" -msgstr "Navegar" +msgstr "Explorar" #: cps/templates/layout.html:159 cps/templates/stats.html:3 msgid "About" -msgstr "Acerca de" +msgstr "Sobre" #: cps/templates/layout.html:173 msgid "Previous" -msgstr "Previo" +msgstr "Anterior" #: cps/templates/layout.html:200 msgid "Book Details" @@ -2962,19 +2921,19 @@ msgstr "Arquivado" #: cps/templates/login.html:18 msgid "Remember Me" -msgstr "Lembrarme" +msgstr "Lémbrame" #: cps/templates/login.html:23 msgid "Forgot Password?" -msgstr "Esqueceu a contrasinal?" +msgstr "Esqueceches o contrasinal?" #: cps/templates/login.html:34 msgid "Log in with Magic Link" -msgstr "Iniciar sesión cun enlace máxico" +msgstr "Inicia sesión con Magic Link" #: cps/templates/logviewer.html:6 msgid "Show Calibre-Web Log: " -msgstr "Mostrar o rexistro de Calibre-Web: " +msgstr "Mostrar rexistro de Calibre-Web: " #: cps/templates/logviewer.html:8 msgid "Calibre-Web Log: " @@ -2982,35 +2941,35 @@ msgstr "Rexistro de Calibre-Web: " #: cps/templates/logviewer.html:8 msgid "Stream output, can't be displayed" -msgstr "A saída do fluxo non se pode mostrar" +msgstr "Saída da emisión, non se pode mostrar" #: cps/templates/logviewer.html:12 msgid "Show Access Log: " -msgstr "Mostrar rexistro de acceso:" +msgstr "Mostrar rexistro de acceso: " #: cps/templates/logviewer.html:18 msgid "Download Calibre-Web Log" -msgstr "Descargar o rexistro de Calibre-Web" +msgstr "Descargar rexistro de Calibre-Web" #: cps/templates/logviewer.html:21 msgid "Download Access Log" -msgstr "Descargar o rexistro de acceso" +msgstr "Descargar rexistro de acceso" #: cps/templates/modal_dialogs.html:6 msgid "Select Allowed/Denied Tags" -msgstr "Seleccionar etiquetas Permitidas/Negadas" +msgstr "Seleccione Etiquetas permitidas/denegadas" #: cps/templates/modal_dialogs.html:7 msgid "Select Allowed/Denied Custom Column Values" -msgstr "Seleccionar valores propios de columnas Permitidas/Denegadas" +msgstr "Seleccione Valores de columna personalizados permitidos/denegados" #: cps/templates/modal_dialogs.html:8 msgid "Select Allowed/Denied Tags of User" -msgstr "Seleccionar etiquetas de usuario Permitido/Denegado" +msgstr "Seleccione Etiquetas permitidas/denegadas do usuario" #: cps/templates/modal_dialogs.html:9 msgid "Select Allowed/Denied Custom Column Values of User" -msgstr "Seleccionar columnas personalizadas de usuario Permitido/Denegado" +msgstr "Seleccione Valores de columna personalizados permitidos/denegados do usuario" #: cps/templates/modal_dialogs.html:15 msgid "Enter Tag" @@ -3018,7 +2977,7 @@ msgstr "Introduce a etiqueta" #: cps/templates/modal_dialogs.html:24 msgid "Add View Restriction" -msgstr "Engadir restricción de vista" +msgstr "Engadir restrición de visualización" #: cps/templates/modal_dialogs.html:50 msgid "This book format will be permanently erased from database" @@ -3026,23 +2985,23 @@ msgstr "Este formato de libro borrarase permanentemente da base de datos" #: cps/templates/modal_dialogs.html:51 msgid "This book will be permanently erased from database" -msgstr "O libro borrarase permanentemente da base de datos" +msgstr "Este libro borrarase permanentemente da base de datos" #: cps/templates/modal_dialogs.html:52 msgid "and hard disk" -msgstr "e do disco duro" +msgstr "e disco duro" #: cps/templates/modal_dialogs.html:56 msgid "Important Kobo Note: deleted books will remain on any paired Kobo device." -msgstr "Nota de Kobo importante: os libros eliminados permanecerán nos dispositivos Kobo emparellados." +msgstr "Nota importante de Kobo: os libros eliminados permanecerán en calquera dispositivo Kobo vinculado." #: cps/templates/modal_dialogs.html:57 msgid "Books must first be archived and the device synced before a book can safely be deleted." -msgstr "Antes de que un libro poida eliminarse con seguridade debe arquivarse e sincronizarse co dispositivo." +msgstr "Primeiro hai que arquivar os libros e sincronizar o dispositivo para que se poida eliminar un libro con seguridade." #: cps/templates/modal_dialogs.html:76 msgid "Choose File Location" -msgstr "Escolla a localización do arquivo" +msgstr "Escolla a localización do ficheiro" #: cps/templates/modal_dialogs.html:82 msgid "type" @@ -3062,7 +3021,7 @@ msgstr "Directorio pai" #: cps/templates/modal_dialogs.html:98 msgid "Select" -msgstr "Seleccionar" +msgstr "Seleccione" #: cps/templates/modal_dialogs.html:134 cps/templates/tasks.html:46 msgid "Ok" @@ -3070,16 +3029,15 @@ msgstr "Vale" #: cps/templates/osd.xml:5 msgid "Calibre-Web eBook Catalog" -msgstr "Catálogo de libros electrónicos de Calibre-Web" +msgstr "Catálogo de libros electrónicos Calibre-Web" #: cps/templates/read.html:7 msgid "epub Reader" -msgstr "Lector epub" +msgstr "lector epub" #: cps/templates/read.html:80 -#, fuzzy msgid "Choose a theme below:" -msgstr "Escolla un nome de usuario" +msgstr "Escolle un tema a continuación:" #: cps/templates/read.html:84 cps/templates/readcbr.html:104 msgid "Light" @@ -3087,7 +3045,7 @@ msgstr "Claro" #: cps/templates/read.html:86 cps/templates/readcbr.html:105 msgid "Dark" -msgstr "Oscuro" +msgstr "Escuro" #: cps/templates/read.html:88 msgid "Sepia" @@ -3099,56 +3057,51 @@ msgstr "Negro" #: cps/templates/read.html:95 msgid "Reflow text when sidebars are open." -msgstr "Refluxo do texto cando as barras laterais están abertas." +msgstr "Redistribuír o texto cando as barras laterais estean abertas." #: cps/templates/read.html:100 msgid "Font Sizes" -msgstr "" +msgstr "Tamaños de letra" #: cps/templates/read.html:105 msgid "Font" -msgstr "" +msgstr "Fonte" #: cps/templates/read.html:106 -#, fuzzy msgid "Default" -msgstr "Borrar" +msgstr "Por defecto" #: cps/templates/read.html:107 msgid "Yahei" -msgstr "" +msgstr "Yahei" #: cps/templates/read.html:108 msgid "SimSun" -msgstr "" +msgstr "SimSun" #: cps/templates/read.html:109 -#, fuzzy msgid "KaiTi" -msgstr "Esperando" +msgstr "KaiTi" #: cps/templates/read.html:110 -#, fuzzy msgid "Arial" -msgstr "Vertical" +msgstr "Arial" #: cps/templates/read.html:113 -#, fuzzy msgid "Spread" -msgstr "Lido" +msgstr "Espallamento" #: cps/templates/read.html:114 msgid "Two columns" -msgstr "" +msgstr "Dúas columnas" #: cps/templates/read.html:115 -#, fuzzy msgid "One column" -msgstr "Columna de lectura non válida" +msgstr "Unha columna" #: cps/templates/readcbr.html:8 msgid "Comic Reader" -msgstr "Lector de Cómics" +msgstr "Lector de cómics" #: cps/templates/readcbr.html:75 msgid "Keyboard Shortcuts" @@ -3164,68 +3117,67 @@ msgstr "Páxina seguinte" #: cps/templates/readcbr.html:80 msgid "Single Page Display" -msgstr "" +msgstr "Visualización dunha soa páxina" #: cps/templates/readcbr.html:81 msgid "Long Strip Display" -msgstr "" +msgstr "Pantalla de tira longa" #: cps/templates/readcbr.html:82 msgid "Scale to Best" -msgstr "Escalar ao mellor" +msgstr "Escala ao mellor" #: cps/templates/readcbr.html:83 msgid "Scale to Width" -msgstr "Escalar ao ancho" +msgstr "Escala ao ancho" #: cps/templates/readcbr.html:84 msgid "Scale to Height" -msgstr "Escalar ao alto" +msgstr "Escala á altura" #: cps/templates/readcbr.html:85 msgid "Scale to Native" -msgstr "Escalado nativo" +msgstr "Escalar a nativo" #: cps/templates/readcbr.html:86 msgid "Rotate Right" -msgstr "Xirar cara a dereita" +msgstr "Xirar á dereita" #: cps/templates/readcbr.html:87 msgid "Rotate Left" -msgstr "Xirar cara a esquerda" +msgstr "Xirar á esquerda" #: cps/templates/readcbr.html:88 msgid "Flip Image" -msgstr "Voltear a imaxe" +msgstr "Voltar imaxe" #: cps/templates/readcbr.html:110 msgid "Display" -msgstr "" +msgstr "Mostrar" #: cps/templates/readcbr.html:113 -#, fuzzy msgid "Single Page" -msgstr "Páxina de administración" +msgstr "Páxina única" #: cps/templates/readcbr.html:114 msgid "Long Strip" -msgstr "" +msgstr "Tira longa" #: cps/templates/readcbr.html:119 msgid "Scale" -msgstr "Escalar" +msgstr "Escala" #: cps/templates/readcbr.html:122 msgid "Best" -msgstr "Mellor" +msgstr "O mellor" #: cps/templates/readcbr.html:123 msgid "Width" -msgstr "Ancho" +msgstr "Anchura" #: cps/templates/readcbr.html:124 msgid "Height" -msgstr "Alto" +msgstr "Altura" #: cps/templates/readcbr.html:125 msgid "Native" @@ -3233,11 +3185,11 @@ msgstr "Nativo" #: cps/templates/readcbr.html:130 msgid "Rotate" -msgstr "Rotar" +msgstr "Xirar" #: cps/templates/readcbr.html:141 msgid "Flip" -msgstr "Voltear" +msgstr "Voltar" #: cps/templates/readcbr.html:144 msgid "Horizontal" @@ -3261,11 +3213,11 @@ msgstr "De dereita a esquerda" #: cps/templates/readcbr.html:162 msgid "Reset to Top" -msgstr "" +msgstr "Restablecer a parte superior" #: cps/templates/readcbr.html:163 msgid "Remember Position" -msgstr "" +msgstr "Lembrar a posición" #: cps/templates/readcbr.html:168 msgid "Scrollbar" @@ -3277,7 +3229,7 @@ msgstr "Mostrar" #: cps/templates/readcbr.html:172 msgid "Hide" -msgstr "Agochar" +msgstr "Ocultar" #: cps/templates/readdjvu.html:5 msgid "DJVU Reader" @@ -3285,15 +3237,15 @@ msgstr "Lector DJVU" #: cps/templates/readpdf.html:31 msgid "PDF Reader" -msgstr "Lector PDF" +msgstr "Lector de PDF" #: cps/templates/readtxt.html:6 msgid "txt Reader" -msgstr "Lector txt" +msgstr "lector txt" #: cps/templates/register.html:4 msgid "Register New Account" -msgstr "Rexistre unha conta nova" +msgstr "Rexistrar unha nova conta" #: cps/templates/register.html:10 msgid "Choose a username" @@ -3301,27 +3253,27 @@ msgstr "Escolla un nome de usuario" #: cps/templates/register.html:15 msgid "Your Email" -msgstr "O teu enderezo de correo" +msgstr "O teu correo electrónico" #: cps/templates/remote_login.html:5 msgid "Magic Link - Authorise New Device" -msgstr "Enlace Máxico - Autorizar un novo dispositivo" +msgstr "Magic Link - Autorizar un novo dispositivo" #: cps/templates/remote_login.html:7 msgid "On another device, login and visit:" -msgstr "Utiliza otro dispositivo, inicia sesión e visita:" +msgstr "Noutro dispositivo, inicia sesión e visita:" #: cps/templates/remote_login.html:11 msgid "Once verified, you will automatically be logged in on this device." -msgstr "Unha vez verificado, iniciará sesión automáticamente neste dispositivo." +msgstr "Unha vez verificado, iniciarase sesión automaticamente neste dispositivo." #: cps/templates/remote_login.html:14 msgid "This verification link will expire in 10 minutes." -msgstr "O enlace de verificación caducará despois de 10 minutos." +msgstr "Esta ligazón de verificación caducará dentro de 10 minutos." #: cps/templates/schedule_edit.html:33 msgid "Generate Series Cover Thumbnails" -msgstr "Xerar miniaturas de cubertas de series" +msgstr "Xerar miniaturas de portada de serie" #: cps/templates/search.html:6 msgid "No Results Found" @@ -3337,7 +3289,7 @@ msgstr "Resultados para:" #: cps/templates/search_form.html:21 msgid "Published Date From" -msgstr "Data de publicación dende" +msgstr "Data de publicación Dende" #: cps/templates/search_form.html:31 msgid "Published Date To" @@ -3345,27 +3297,27 @@ msgstr "Data de publicación ata" #: cps/templates/search_form.html:44 cps/templates/search_form.html:165 msgid "Any" -msgstr "" +msgstr "Calquera" #: cps/templates/search_form.html:45 cps/templates/search_form.html:166 msgid "Empty" -msgstr "" +msgstr "Baleiro" #: cps/templates/search_form.html:60 msgid "Exclude Tags" -msgstr "Excluir etiquetas" +msgstr "Excluír etiquetas" #: cps/templates/search_form.html:78 msgid "Exclude Series" -msgstr "Excluir series" +msgstr "Excluír serie" #: cps/templates/search_form.html:96 msgid "Exclude Shelves" -msgstr "Excluir andeis" +msgstr "Excluír estantes" #: cps/templates/search_form.html:116 msgid "Exclude Languages" -msgstr "Excluir linguas" +msgstr "Excluír idiomas" #: cps/templates/search_form.html:127 msgid "Extensions" @@ -3373,7 +3325,7 @@ msgstr "Extensións" #: cps/templates/search_form.html:135 msgid "Exclude Extensions" -msgstr "Excluir extensións" +msgstr "Excluír extensións" #: cps/templates/search_form.html:145 msgid "Rating Above" @@ -3395,41 +3347,39 @@ msgstr "Para:" #: cps/templates/shelf.html:13 msgid "Delete this Shelf" -msgstr "Borrar este andel" +msgstr "Eliminar este estante" #: cps/templates/shelf.html:14 msgid "Edit Shelf Properties" -msgstr "Editar propiedades do andel" +msgstr "Editar propiedades do estante" #: cps/templates/shelf.html:17 msgid "Arrange books manually" -msgstr "Ordear libros manualmente" +msgstr "Organiza os libros manualmente" #: cps/templates/shelf.html:18 msgid "Disable Change order" -msgstr "Desactivar o cambio de orde" +msgstr "Desactivar Cambiar orde" #: cps/templates/shelf.html:18 msgid "Enable Change order" -msgstr "Activar o cambio de orde" +msgstr "Activar Cambiar orde" #: cps/templates/shelf.html:28 -#, fuzzy msgid "Sort according to book added to shelf, newest first" -msgstr "Ordear pola data do libro, máis recente primeiro" +msgstr "Ordena segundo o libro engadido ao estante, primeiro o máis novo" #: cps/templates/shelf.html:29 -#, fuzzy msgid "Sort according to book added to shelf, oldest first" -msgstr "Ordear pola data do libro, máis antigo primeiro" +msgstr "Ordena segundo o libro engadido ao estante, primeiro o máis antigo" #: cps/templates/shelf_edit.html:14 msgid "Share with Everyone" -msgstr "Compartir con todos" +msgstr "Comparte con todos" #: cps/templates/shelf_edit.html:21 msgid "Sync this shelf with Kobo device" -msgstr "Sincronizar este andel cun dispositivo Kobo" +msgstr "Sincroniza este estante co dispositivo Kobo" #: cps/templates/shelf_order.html:5 msgid "Drag to Rearrange Order" @@ -3437,11 +3387,11 @@ msgstr "Arrastra para reorganizar a orde" #: cps/templates/shelf_order.html:33 msgid "Hidden Book" -msgstr "Libro agochado" +msgstr "Libro oculto" #: cps/templates/stats.html:7 msgid "Library Statistics" -msgstr "Estatísticas da Biblioteca" +msgstr "Estadística da biblioteca" #: cps/templates/stats.html:12 msgid "Books in this Library" @@ -3449,19 +3399,19 @@ msgstr "Libros nesta biblioteca" #: cps/templates/stats.html:16 msgid "Authors in this Library" -msgstr "Autores nesta biblioteca" +msgstr "Autores desta biblioteca" #: cps/templates/stats.html:20 msgid "Categories in this Library" -msgstr "Categorías nesta biblioteca" +msgstr "Categorías desta biblioteca" #: cps/templates/stats.html:24 msgid "Series in this Library" -msgstr "Series nesta biblioteca" +msgstr "Serie nesta biblioteca" #: cps/templates/stats.html:29 msgid "System Statistics" -msgstr "Estadísticas do sistema" +msgstr "Estatística do sistema" #: cps/templates/stats.html:33 msgid "Program" @@ -3492,9 +3442,8 @@ msgid "Run Time" msgstr "Tempo de execución" #: cps/templates/tasks.html:19 -#, fuzzy msgid "Message" -msgstr "Unir" +msgstr "Mensaxe" #: cps/templates/tasks.html:21 msgid "Actions" @@ -3502,39 +3451,39 @@ msgstr "Accións" #: cps/templates/tasks.html:41 msgid "This task will be cancelled. Any progress made by this task will be saved." -msgstr "Esta tarefa cancelarase. Non se gardará ningún progreso feito por esta tarefa." +msgstr "Esta tarefa cancelarase. Calquera progreso realizado nesta tarefa gardarase." #: cps/templates/tasks.html:42 msgid "If this is a scheduled task, it will be re-ran during the next scheduled time." -msgstr "Se esta é unha tarefa programada, volverá a lanzarse na próxima hora programada." +msgstr "Se esta é unha tarefa programada, volverase executar durante a próxima hora programada." #: cps/templates/user_edit.html:20 msgid "Reset user Password" -msgstr "Restablecer contrasinal de usuario" +msgstr "Restablecer o contrasinal do usuario" #: cps/templates/user_edit.html:28 msgid "Send to eReader Email Address. Use comma to separate emails for multiple eReaders" -msgstr "" +msgstr "Enviar ao enderezo de correo electrónico do eReader. Use comas para separar os correos electrónicos para varios eReaders" #: cps/templates/user_edit.html:43 msgid "Language of Books" -msgstr "Linguaxe de libros" +msgstr "Linguaxe dos libros" #: cps/templates/user_edit.html:54 msgid "OAuth Settings" -msgstr "Axustes OAuth" +msgstr "Configuración de OAuth" #: cps/templates/user_edit.html:56 msgid "Link" -msgstr "Ligar" +msgstr "Vincular" #: cps/templates/user_edit.html:58 msgid "Unlink" -msgstr "Desligar" +msgstr "Desvincular" #: cps/templates/user_edit.html:64 msgid "Kobo Sync Token" -msgstr "Token de sincronización de Kobo" +msgstr "Token de sincronización Kobo" #: cps/templates/user_edit.html:66 msgid "Create/View" @@ -3542,27 +3491,27 @@ msgstr "Crear/Ver" #: cps/templates/user_edit.html:70 msgid "Force full kobo sync" -msgstr "Forzar sincronización completa de kobo" +msgstr "Forzar a sincronización completa de kobo" #: cps/templates/user_edit.html:88 msgid "Add allowed/Denied Custom Column Values" -msgstr "Engadir columnas de valores propios de Permitidos/Denegados" +msgstr "Engadir valores de columna personalizados permitidos/denegados" #: cps/templates/user_edit.html:137 msgid "Sync only books in selected shelves with Kobo" -msgstr "Sincronizar con Kobo soamente os libros dos andeis seleccionados" +msgstr "Sincroniza só libros nos estantes seleccionados con Kobo" #: cps/templates/user_edit.html:147 cps/templates/user_table.html:169 msgid "Delete User" -msgstr "Borrar usuario" +msgstr "Eliminar usuario" #: cps/templates/user_edit.html:159 msgid "Generate Kobo Auth URL" -msgstr "Xerar Auth URL de Kobo" +msgstr "Xerar URL de autenticación de Kobo" #: cps/templates/user_table.html:80 cps/templates/user_table.html:103 msgid "Select..." -msgstr "Selección..." +msgstr "Selecciona..." #: cps/templates/user_table.html:131 msgid "Edit User" @@ -3570,26 +3519,23 @@ msgstr "Editar usuario" #: cps/templates/user_table.html:134 msgid "Enter Username" -msgstr "Introduce o nome do usuario" +msgstr "Introduza o nome de usuario" #: cps/templates/user_table.html:135 -#, fuzzy msgid "Enter Email" -msgstr "Comprobar correo electrónico" +msgstr "Introduce o correo electrónico" #: cps/templates/user_table.html:136 -#, fuzzy msgid "Enter eReader Email" -msgstr "Enviar ao enderezo de correo electrónico do Kindle" +msgstr "Introduza o correo electrónico do eReader" #: cps/templates/user_table.html:136 -#, fuzzy msgid "eReader Email" -msgstr "Comprobar o correo electrónico" +msgstr "correo electrónico do eReader" #: cps/templates/user_table.html:137 msgid "Locale" -msgstr "Lingua" +msgstr "Local" #: cps/templates/user_table.html:138 msgid "Visible Book Languages" @@ -3597,54 +3543,52 @@ msgstr "Linguas de libros visibles" #: cps/templates/user_table.html:139 msgid "Edit Allowed Tags" -msgstr "Editar etiquetas Permitidas" +msgstr "Editar etiquetas permitidas" #: cps/templates/user_table.html:139 msgid "Allowed Tags" -msgstr "Etiquetas Permitidas" +msgstr "Etiquetas permitidas" #: cps/templates/user_table.html:140 msgid "Edit Denied Tags" -msgstr "Editar Etiquetas Denegadas" +msgstr "Editar etiquetas denegadas" #: cps/templates/user_table.html:140 msgid "Denied Tags" -msgstr "Etiquetas Denegadas" +msgstr "Etiquetas denegadas" #: cps/templates/user_table.html:141 msgid "Edit Allowed Column Values" -msgstr "Editar valores permitidos para a columna" +msgstr "Editar valores de columna permitidos" #: cps/templates/user_table.html:141 msgid "Allowed Column Values" -msgstr "Valores permitidos da columna" +msgstr "Valores de columna permitidos" #: cps/templates/user_table.html:142 msgid "Edit Denied Column Values" -msgstr "Editar valores non permitidos para a columna" +msgstr "Editar valores de columna denegados" #: cps/templates/user_table.html:142 msgid "Denied Column Values" -msgstr "Valores non permitidos dea columna" +msgstr "Valores de columna denegados" #: cps/templates/user_table.html:144 msgid "Change Password" -msgstr "Cambiar a contrasinal" +msgstr "Cambiar contrasinal" #: cps/templates/user_table.html:147 msgid "View" -msgstr "Vista" +msgstr "Ver" #: cps/templates/user_table.html:150 msgid "Edit Public Shelves" -msgstr "Editar andeis públicos" +msgstr "Editar estanterías públicas" #: cps/templates/user_table.html:152 msgid "Sync selected Shelves with Kobo" -msgstr "sincronizar andeis seleccionados con Kobo" +msgstr "Sincroniza os estantes seleccionados con Kobo" #: cps/templates/user_table.html:156 -#, fuzzy msgid "Show Read/Unread Section" -msgstr "Mostrar selección lidos/non lidos" - +msgstr "Mostrar a sección lida/non lida" From ed600a9aeb638f021903edc9f3b9fa4babc53182 Mon Sep 17 00:00:00 2001 From: Aleksei Besogonov Date: Sun, 8 Dec 2024 17:29:03 -0800 Subject: [PATCH 6/7] Add a title to OPDS links This allows the OPDS consumers to distinguish `epub` and `kepub` files as they have the same MIME-type. --- cps/templates/feed.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/feed.xml b/cps/templates/feed.xml index fb9166d70..eed76051f 100644 --- a/cps/templates/feed.xml +++ b/cps/templates/feed.xml @@ -70,7 +70,7 @@ {% endif %} {% for format in entry.Books.data %} + length="{{format.uncompressed_size}}" title="{{format.format}}" mtime="{{entry.Books.atom_timestamp}}" type="{{format.format|lower|mimetype}}"/> {% endfor %} {% endfor %} From 01215aaa6874a9a2b11e5b5257d118e63b18b826 Mon Sep 17 00:00:00 2001 From: Aleksei Besogonov Date: Sun, 8 Dec 2024 23:30:05 -0800 Subject: [PATCH 7/7] Allow the web reader to use KEPUB files and print file sizes This commit allows the web reader to read the KEPUB (Kobo EPUB) files, and also shows the file sizes. This is especially useful if you have giant EPUB files with built-in audiobooks and media overlays. --- cps/helper.py | 2 +- cps/templates/detail.html | 4 ++-- cps/templates/read.html | 4 ++-- cps/web.py | 12 +++++++++--- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index 0706d40b2..51eedb006 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -199,7 +199,7 @@ def check_send_to_ereader(entry): # Check if a reader is existing for any of the book formats, if not, return empty list, otherwise return # list with supported formats def check_read_formats(entry): - extensions_reader = {'TXT', 'PDF', 'EPUB', 'CBZ', 'CBT', 'CBR', 'DJVU', 'DJV'} + extensions_reader = {'TXT', 'PDF', 'EPUB', 'KEPUB', 'CBZ', 'CBT', 'CBR', 'DJVU', 'DJV'} book_formats = list() if len(entry.data): for ele in iter(entry.data): diff --git a/cps/templates/detail.html b/cps/templates/detail.html index b273ef9ee..08f10ca99 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -88,7 +88,7 @@ @@ -97,7 +97,7 @@ href="{{ url_for('web.read_book', book_id=entry.id, book_format=entry.reader_list[0]) }}" id="readbtn" class="btn btn-primary" role="button"> {{ _('Read in Browser') }} - - {{ entry.reader_list[0] }} + - {{ entry.reader_list[0] }} ({{ entry.reader_list_sizes[entry.reader_list[0]]|filesizeformat }}) {% endif %}
{% endif %} diff --git a/cps/templates/read.html b/cps/templates/read.html index affc8f427..258ab7156 100644 --- a/cps/templates/read.html +++ b/cps/templates/read.html @@ -126,8 +126,8 @@ window.calibre = { filePath: "{{ url_for('static', filename='js/libs/') }}", cssPath: "{{ url_for('static', filename='css/') }}", - bookmarkUrl: "{{ url_for('web.set_bookmark', book_id=bookid, book_format='EPUB') }}", - bookUrl: "{{ url_for('web.serve_book', book_id=bookid, book_format='epub', anyname='file.epub') }}", + bookmarkUrl: "{{ url_for('web.set_bookmark', book_id=bookid, book_format=book_format or 'EPUB') }}", + bookUrl: "{{ url_for('web.serve_book', book_id=bookid, book_format=book_format, anyname='file.epub') }}", bookmark: "{{ bookmark.bookmark_key if bookmark != None }}", useBookmarks: "{{ current_user.is_authenticated | tojson }}" }; diff --git a/cps/web.py b/cps/web.py index e1068c6f4..12e8454d4 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1581,9 +1581,10 @@ def read_book(book_id, book_format): bookmark = ub.session.query(ub.Bookmark).filter(and_(ub.Bookmark.user_id == int(current_user.id), ub.Bookmark.book_id == book_id, ub.Bookmark.format == book_format.upper())).first() - if book_format.lower() == "epub": - log.debug("Start epub reader for %d", book_id) - return render_title_template('read.html', bookid=book_id, title=book.title, bookmark=bookmark) + if book_format.lower() == "epub" or book_format.lower() == "kepub": + log.debug("Start [k]epub reader for %d", book_id) + return render_title_template('read.html', bookid=book_id, title=book.title, bookmark=bookmark, + book_format=book_format) elif book_format.lower() == "pdf": log.debug("Start pdf reader for %d", book_id) return render_title_template('readpdf.html', pdffile=book_id, title=book.title) @@ -1644,6 +1645,11 @@ def show_book(book_id): entry.email_share_list = check_send_to_ereader(entry) entry.reader_list = check_read_formats(entry) + entry.reader_list_sizes = dict() + for data in entry.data: + if data.format.lower() in entry.reader_list: + entry.reader_list_sizes[data.format.lower()] = data.uncompressed_size + entry.audio_entries = [] for media_format in entry.data: if media_format.format.lower() in constants.EXTENSIONS_AUDIO: