From 8bdd95fc452b819281eea48b610a8c56398c8593 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 14 Feb 2026 10:08:32 +0100 Subject: [PATCH 1/5] Fixes for flask_limiter > 4 --- cps/__init__.py | 4 ++-- cps/error_handler.py | 27 +++++++++++++++++++++++++-- cps/kobo_auth.py | 14 +++++++------- cps/main.py | 4 ++-- cps/usermanagement.py | 2 +- cps/web.py | 38 +++++++++++++++++++------------------- 6 files changed, 56 insertions(+), 33 deletions(-) diff --git a/cps/__init__.py b/cps/__init__.py index 890d5867d..9f0f307b0 100644 --- a/cps/__init__.py +++ b/cps/__init__.py @@ -25,7 +25,7 @@ import sys import os import mimetypes -from flask import Flask, request +from flask import Flask from flask.sessions import SecureCookieSessionInterface from .MyLoginManager import MyLoginManager from flask_principal import Principal @@ -111,7 +111,7 @@ web_server = WebServer() updater_thread = Updater() if limiter_present: - limiter = Limiter(key_func=True, headers_enabled=True, auto_check=False, swallow_errors=False) + limiter = Limiter(key_func=True, headers_enabled=True, default_limits=[], swallow_errors=False) else: limiter = None diff --git a/cps/error_handler.py b/cps/error_handler.py index 54942ec22..679a86921 100644 --- a/cps/error_handler.py +++ b/cps/error_handler.py @@ -18,7 +18,9 @@ import traceback -from flask import render_template +from flask import render_template, request, flash, abort +from flask_limiter import RateLimitExceeded +from flask_babel import gettext as _ from werkzeug.exceptions import default_exceptions try: from werkzeug.exceptions import FailedDependency @@ -26,7 +28,10 @@ except ImportError: from werkzeug.exceptions import UnprocessableEntity as FailedDependency from . import config, app, logger, services - +from .render_template import render_title_template +from .web import render_login +from .usermanagement import auth +from cps.string_helper import strip_whitespaces log = logger.create() @@ -85,3 +90,21 @@ def init_errorhandler(): log.debug('LDAP server not accessible while trying to login to opds feed') return error_http(FailedDependency()) + + +@app.errorhandler(RateLimitExceeded) +def handle_rate_limit(__): + log.error("Rate limit exceeded {}".format(request.endpoint)) + if "register" in request.endpoint: + flash(_(u"Please wait one minute to register next user"), category="error") + return render_title_template('register.html', config=config, title=_("Register"), page="register") + elif "login" in request.endpoint: + form = request.form.to_dict() + username = strip_whitespaces(form.get('username', "")).lower().replace("\n", "").replace("\r", "") + flash(_("Please wait one minute before next login"), category="error") + return render_login(username, form.get("password", "")) + elif "opds" in request.endpoint: + return auth.auth_error_callback(429) + else: + return abort(429) + diff --git a/cps/kobo_auth.py b/cps/kobo_auth.py index 53f35dcc5..9a5b47fc1 100644 --- a/cps/kobo_auth.py +++ b/cps/kobo_auth.py @@ -154,13 +154,13 @@ def requires_kobo_auth(f): def inner(*args, **kwargs): auth_token = get_auth_token() if auth_token is not None: - try: - limiter.check() - except RateLimitExceeded: - return abort(429) - except (ConnectionError, Exception) as e: - log.error("Connection error to limiter backend: %s", e) - return abort(429) + #try: + # limiter.check() + #except RateLimitExceeded: + # return abort(429) + #except (ConnectionError, Exception) as e: + # log.error("Connection error to limiter backend: %s", e) + # return abort(429) user = ( ub.session.query(ub.User) .join(ub.RemoteAuthToken) diff --git a/cps/main.py b/cps/main.py index 44e563f93..b0f56b6d4 100644 --- a/cps/main.py +++ b/cps/main.py @@ -66,8 +66,8 @@ def main(): app.register_blueprint(tasks) app.register_blueprint(web) app.register_blueprint(basic) - app.register_blueprint(opds) limiter.limit("3/minute", key_func=request_username)(opds) + app.register_blueprint(opds) app.register_blueprint(jinjia) app.register_blueprint(about) app.register_blueprint(shelf) @@ -77,9 +77,9 @@ def main(): app.register_blueprint(gdrive) app.register_blueprint(editbook) if kobo_available: + limiter.limit("3/minute", key_func=get_remote_address)(kobo) app.register_blueprint(kobo) app.register_blueprint(kobo_auth) - limiter.limit("3/minute", key_func=get_remote_address)(kobo) if oauth_available: app.register_blueprint(oauth) success = web_server.start() diff --git a/cps/usermanagement.py b/cps/usermanagement.py index 31c37a933..c7fdf9492 100644 --- a/cps/usermanagement.py +++ b/cps/usermanagement.py @@ -48,7 +48,7 @@ def verify_password(username, password): if error is not None: log.error(error) else: - limiter.check() + # limiter.check() if check_password_hash(str(user.password), password): [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] return user diff --git a/cps/web.py b/cps/web.py index dc75754e6..ce09ac1dc 100644 --- a/cps/web.py +++ b/cps/web.py @@ -30,7 +30,7 @@ from flask import session as flask_session from flask_babel import gettext as _ from flask_babel import get_locale from .cw_login import login_user, logout_user, current_user -from flask_limiter import RateLimitExceeded +# from flask_limiter import RateLimitExceeded from flask_limiter.util import get_remote_address from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError from sqlalchemy.sql.expression import text, func, false, not_, and_, or_ @@ -1285,15 +1285,15 @@ def register_post(): if not config.config_public_reg: abort(404) to_save = request.form.to_dict() - try: - limiter.check() - except RateLimitExceeded: - flash(_(u"Please wait one minute to register next user"), category="error") - return render_title_template('register.html', config=config, title=_("Register"), page="register") - except (ConnectionError, Exception) as e: - log.error("Connection error to limiter backend: %s", e) - flash(_("Connection error to limiter backend, please contact your administrator"), category="error") - return render_title_template('register.html', config=config, title=_("Register"), page="register") + #try: + # limiter.check() + #except RateLimitExceeded: + # flash(_(u"Please wait one minute to register next user"), category="error") + # return render_title_template('register.html', config=config, title=_("Register"), page="register") + #except (ConnectionError, Exception) as e: + # log.error("Connection error to limiter backend: %s", e) + # flash(_("Connection error to limiter backend, please contact your administrator"), category="error") + # return render_title_template('register.html', config=config, title=_("Register"), page="register") if current_user is not None and current_user.is_authenticated: return redirect(url_for('web.index')) if not config.get_mail_server_configured(): @@ -1388,15 +1388,15 @@ def login(): def login_post(): form = request.form.to_dict() username = strip_whitespaces(form.get('username', "")).lower().replace("\n","").replace("\r","") - try: - limiter.check() - except RateLimitExceeded: - flash(_("Please wait one minute before next login"), category="error") - return render_login(username, form.get("password", "")) - except (ConnectionError, Exception) as e: - log.error("Connection error to limiter backend: %s", e) - flash(_("Connection error to limiter backend, please contact your administrator"), category="error") - return render_login(username, form.get("password", "")) + #try: + # limiter.check() + #except RateLimitExceeded: + # flash(_("Please wait one minute before next login"), category="error") + # return render_login(username, form.get("password", "")) + #except (ConnectionError, Exception) as e: + # log.error("Connection error to limiter backend: %s", e) + # flash(_("Connection error to limiter backend, please contact your administrator"), category="error") + # return render_login(username, form.get("password", "")) if current_user is not None and current_user.is_authenticated: return redirect(url_for('web.index')) if config.config_login_type == constants.LOGIN_LDAP and not services.ldap: From cabcace3f02c070c2522eaeb05267d518299afc8 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 14 Feb 2026 11:24:29 +0100 Subject: [PATCH 2/5] Update translation Fixes for flask_limiter version >4 --- cps/__init__.py | 3 +- cps/error_handler.py | 6 +-- cps/translations/ar/LC_MESSAGES/messages.mo | Bin 75567 -> 75354 bytes cps/translations/ar/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/cs/LC_MESSAGES/messages.mo | Bin 35143 -> 35143 bytes cps/translations/cs/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/de/LC_MESSAGES/messages.mo | Bin 67032 -> 66874 bytes cps/translations/de/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/el/LC_MESSAGES/messages.mo | Bin 51454 -> 51454 bytes cps/translations/el/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/es/LC_MESSAGES/messages.mo | Bin 68845 -> 68672 bytes cps/translations/es/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/fi/LC_MESSAGES/messages.mo | Bin 24224 -> 24224 bytes cps/translations/fi/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/fr/LC_MESSAGES/messages.mo | Bin 71576 -> 71404 bytes cps/translations/fr/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 68215 -> 68031 bytes cps/translations/gl/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/hu/LC_MESSAGES/messages.mo | Bin 22150 -> 22150 bytes cps/translations/hu/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/id/LC_MESSAGES/messages.mo | Bin 52769 -> 52769 bytes cps/translations/id/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/it/LC_MESSAGES/messages.mo | Bin 68103 -> 67942 bytes cps/translations/it/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/ja/LC_MESSAGES/messages.mo | Bin 58319 -> 58319 bytes cps/translations/ja/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/km/LC_MESSAGES/messages.mo | Bin 21926 -> 21926 bytes cps/translations/km/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 66213 -> 66029 bytes cps/translations/ko/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/nl/LC_MESSAGES/messages.mo | Bin 53703 -> 53703 bytes cps/translations/nl/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/no/LC_MESSAGES/messages.mo | Bin 35671 -> 35671 bytes cps/translations/no/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/pl/LC_MESSAGES/messages.mo | Bin 67771 -> 67607 bytes cps/translations/pl/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/pt/LC_MESSAGES/messages.mo | Bin 57707 -> 57707 bytes cps/translations/pt/LC_MESSAGES/messages.po | 37 ++++++++---------- .../pt_BR/LC_MESSAGES/messages.mo | Bin 68057 -> 67888 bytes .../pt_BR/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/ru/LC_MESSAGES/messages.mo | Bin 42528 -> 42528 bytes cps/translations/ru/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/sk/LC_MESSAGES/messages.mo | Bin 61313 -> 61313 bytes cps/translations/sk/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/sl/LC_MESSAGES/messages.mo | Bin 63335 -> 63171 bytes cps/translations/sl/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/sv/LC_MESSAGES/messages.mo | Bin 43915 -> 43915 bytes cps/translations/sv/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/tr/LC_MESSAGES/messages.mo | Bin 20029 -> 20029 bytes cps/translations/tr/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/uk/LC_MESSAGES/messages.mo | Bin 22242 -> 22242 bytes cps/translations/uk/LC_MESSAGES/messages.po | 37 ++++++++---------- cps/translations/vi/LC_MESSAGES/messages.mo | Bin 29285 -> 29285 bytes cps/translations/vi/LC_MESSAGES/messages.po | 37 ++++++++---------- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 60851 -> 60715 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 37 ++++++++---------- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 52248 -> 52248 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 37 ++++++++---------- messages.pot | 37 ++++++++---------- requirements.txt | 2 +- 60 files changed, 499 insertions(+), 585 deletions(-) diff --git a/cps/__init__.py b/cps/__init__.py index 9f0f307b0..ddd5de65c 100644 --- a/cps/__init__.py +++ b/cps/__init__.py @@ -111,7 +111,8 @@ web_server = WebServer() updater_thread = Updater() if limiter_present: - limiter = Limiter(key_func=True, headers_enabled=True, default_limits=[], swallow_errors=False) + limiter = Limiter(key_func=True, headers_enabled=True, in_memory_fallback_enabled=True, default_limits=[], + swallow_errors=True) else: limiter = None diff --git a/cps/error_handler.py b/cps/error_handler.py index 679a86921..3bc885dd3 100644 --- a/cps/error_handler.py +++ b/cps/error_handler.py @@ -18,7 +18,7 @@ import traceback -from flask import render_template, request, flash, abort +from flask import render_template, request, flash, make_response from flask_limiter import RateLimitExceeded from flask_babel import gettext as _ from werkzeug.exceptions import default_exceptions @@ -91,7 +91,6 @@ def init_errorhandler(): return error_http(FailedDependency()) - @app.errorhandler(RateLimitExceeded) def handle_rate_limit(__): log.error("Rate limit exceeded {}".format(request.endpoint)) @@ -106,5 +105,6 @@ def handle_rate_limit(__): elif "opds" in request.endpoint: return auth.auth_error_callback(429) else: - return abort(429) + return make_response('', 429) + diff --git a/cps/translations/ar/LC_MESSAGES/messages.mo b/cps/translations/ar/LC_MESSAGES/messages.mo index 62900ec3a67cfc4b8c72ac1df864ce3f874726d1..72c8194d8005ada2606870aebc0cd957a3b2a1f9 100644 GIT binary patch delta 13655 zcmYM)3wY1v|Htvqn9a;)8^&hiyMxVU80NIu7&*n3^Vu}#kwZB}+6NuxkP=Bk$tgls zE22UnIgHBTSL6_-gK{Q0{-3Yi_jUcduHWx*zwgiCzVG+_zCRn6&4;~D9`bh2gm^D< z_^)GW$BDoR;fntMze6dG6Gm8!Rq=OB*X2fzQy(%g2FGC%zJYqrR~Uk4YSPjpiW_};FOMa>5zF2HP+ywn_r0t)8 znot2MQ*%)hUWm&0N_5q+fkq|VjzjPWGKQ0q<~Yr93})d5?1ukgN6g}44lcn?cn51^ z8ww-}pGGZgAu1zVFciN))ymOy@~;&-8K%fW(T6Y@{jmuKVQbV1x}#FsACTAJr-U>)K_Ou*i#1wWE_kAaRrt^_W=#fymV(X)5@p`)x#icjVhMzsF{z)KztQ7k>#ittwTN`&WBi% zTGV}kUCeWlsQ#v?%=W-wo&WwcG{Z3%gwxO;=V1k0V*A&lR=gdRk$tH9zPHy;qXxWe zePH{`Q<+*&Bx<7dQCr*uOMd=8K|{qc#9nv~OFlTLsR%6J>IuzXMQubK9xp#k$ynRp#F@H*t{>YTuu7}3k5t`%xU zeNihOj)^!08{ulyX*r2Hj^4e^X$e5BJOuUr$lmO~j!{QCDq&|-4GhI(oP>Je`=|#` zqxSF*48Y5%3ExMpv|=CgqqR;`_*iTxT;4 zt!O)HB?nL|Jz>3$no!_C^GjzmQdiCx)XKg=O+4sH^PW0bl{nqTJ#9P;8_@5fesA~~ z+c3U!lZIB3%C9y0ws*z)I00MYTGYyaN2T0Hnc<-p6@g1MRCS_r$mDfPkLK-GuOWQxv_P>mJ@m$oNE=Lv9I!wpSn1=tLGLtaG zOt>v-0s~P+n}@E7U^)%$&6}uNID$H6XRsdriW;cWP%}^s)KoE*7*jA2N1=}4o2Z)Dj9T&csLY+iOvZPD$C#CNLtU7Rs)= z^62%nDV9JCB(93O9*@D8hC!HR;~exO9*4SbDk^iYVg+1+9dJFy==|THp@FJAW2!b5 zRsFTCEm7BdSO=j}JJ!at(3g0TjhCZV`~hm<&FGKYQJ?Z}P!stDT^*-uG&Ep^@#cnD zRDTOp5e`6A?F>{3m!R%niF)By)G_=4YiZ zjP9Y%x&K77;+j~IxB+T~ZLtz&+v|f-_m4wu%^VvqK|NQ58gQSD52N<}yzRd_k^Cz) z|I(opm!4!+7=*ep43)xo8#h4hZA&bTk7F~;Mit#G)I@iqGIbEO6~|Cp_7j%D>!|nN zacOAfK9h~1sFlRoxDk4Y+n@#>hFZ}$)P0jt6Mq@?!iBc~JygmIQTKn1I+pvf0p3Jy zog4qG`O|AF)BrvQ(SxO?n3cq!21r0XpNyJNDu!Y^)I@SnADnTh zE!>0+b^gDmp)I(LDxy+T%@31Ws1&B5KEaQn_B7Wz5vvf-w!Vkq#M@8<9z$)#Mbs8t zw*5Cy?=AD3-pBq2mNdu$YQ>FFGjEGp`2g#93?rV6O8qL^|1s+RZ&3rEMGsy>tu$ns zF&?WDH%Bd`hx&E?^JwV7d{idpqh`1amD)Adji}TXq3+v-deI?lgy&Fu8~VKY5_Z5; z;z>xVosX=)VFGbjKKWOpHH~^W+PWN7EX7z0?_e}WFiMPU!M&*aFQO)1 zVY(SO6cs;i?Sjf!@9E@UsT@m(jzvD|xV?zlyVp?hV$=&(qPA!~M&UM8|0&c8&trQG zona$Ubq^o z;}xurfiIaAwM4ym7-|AfVQHLo$+n}m?9ICih zp${Iy2t10~imMop53xJO%`yW%hrYzKP{(;b>i)GDtn>c~4Sh(yK|ef$TJay~jo!1( zbw6vAwHfMscfk}KhS9hbwSXO17K^bAodXVir5VnxPxO3g7hhN1?nf!eEBEQgIz zHIj*b*c}rv2X%~Qp$YN1(aOB~Ggc32)aptkBW)QS&cV?2SHP{14J zlil4q!lmKi!Zg$jm!odnZu`9!nd{N0J#CGFn1jmDXzNS1e>n!zzY(>N9oBtVkN7+E zp!25rg1S*Ol=9Zt5Oc8+F0wZqMAg7QSO?=5n+f*7IO1iPj=NE(#_KJ<>llg3z$8@v z3{T_h<9RIiZyFpxrQ!sHUzy089B+E|i zWyYP@g1Fmq^Czf<))S~x684UcEBjxA#%MZPp|+q9Jy?v|)62+AoqHIH72h@0ortxG z(=ZH&qf$NtTj3m328uBTe?-0SKI%Td73L?Z6GB5TNI@OPY}5nKqXvEto8dNWf;Uhp zul=6+Yxg`HN&E$B!1$HsOVZ#qua8<-2I~F8*1H@f8qd+; z!IP*5?%6o*1NM`+9jZ3=ql)yRjZ1AXTTlc0(Ekh$#6wsPlc?ZmY=ZhO^hF)t(Wot% z=F(8=K0!Tj1P9VGDc%wUT4#gMmfnlUW&+kpxu6GO-@^$54C)>*6Zp zBj@~pQ*p#6W+E3*#aHfA^L^=rK05znXejj)(I2N{5Wa$%>2g$6Z$#bqJt}oSqbB$W zYopH=^95~y+S_5M``^LpxE>?%Th#LxF^usYzpZ8^F{lgOFa#&r{@EBtybYD1qu2>6 zer8htBx<1Ln1buDKAy%ztgy{|(o<0x8;41_0^P@G6w}a+A=}ML)3FKhAk@s?M!j$w zsunJxGUEHW`IRjRD-d_WDD02AKOdW6A$GvOP~)V0VLs&pzaalV(Q%ay70rP!&45Qy z#d94sP}mN0{4(%y;(n<9wWyRHL~YfdSPt)C4wl|&GCBw=6TgHWTx$Ej*y);Ism|I9 ze_|Lnl-p$By?WXQ&UVh#Gs>@oMd zHEHNmn2ma1FeammnqeVk;8tvew=olw_L?FZgRO{{Vk(}ohJ9mdsJrzQjN|$qT!5F5 zOuA0~KJ$rv3w1;Ix8{40i7~{pQN^V4f>L z)y8S`!9TF%&;M6wbf=^AK~sdiQ3K~9>oN_hLf?{5%b(a)N>cH zELQx^6mJA-3)@*=Mon-py8bl6zBgaInix#n7?rB_w!a(dg+ovi9gX@v6ky53P{nu@ zgYZwx$Gi9*ZEKNB9Js=w_q(?1yN66a$I zZo*JJkFoe4HpA-2O@D9H7L7%1=|oJ#C8#akbDaF^9LJw9U$7QfmG}uPk0US&C!$`k z7=!V1?1{yw6~_M0q;x&1h##Q7h_OGK=TcDb?QP?yQO_@OX$+?EH}=KOKbZkHpjKLp z9q~TqV*8Wkcz%GP#HTPCucIbd`ILEaGt_(Mqqg!UYT}Qu5(fWl7U;&&P}Md>eHi+n z_Ie7o#F?n$vKzG}2hf8dr_GBSqT&n;$APHKO+~G+0K4KD)E3u2W45Xp?nU#(%SCO$ zR;-7CznctYU>I>{bUidi(oj*%MHR~mY=awYd<`>+@8eL+_`|$tHEP9M@Nv9}8nDHm z=7-grsQ3YD3%dWsPfmOTmARlxBs`5q$4mTa2McgAmigOE;CXCKyc-9g?>{C3Ls2Px z7n5-#R>9LqQ8~A882Vo}Mf?mV5f@=|Jcr6aNPL(uyM+l+ari65~3&!tg~j$bhdotx%{ zV0?_QI%=ka(I1~jt#G#WUDPT06m@#O!$ADUdLK2Q|1I;qsEQh=9_l@AOB#7JdZJRl z%U)=D+q@_n_2L26sn*4)fj_|*Jc5yU14A(QUlYfoYN{1#p;=f3^Ds^aZU&9&bgV`1)G`U~pCb^bFGY>L|B9;o|fqN@I|^&u(~b?=&$r(roA_%1ZY zbD=*@#P3imX?xF1YzQV0zkp3~6IRBH7>)N)DXnqeRCO}O5|2XF$b4*wpP?rFx4r%^ z*3|ircwke6Rfw~!Ls0`gkCkvCD%I;S6c1qlUcl0L4ZGqkYx{@h?**4)S^8I@4{pTf zScI--bd^SRyoXv*_#+diV+3)3jKnFZ2N$CzdJOf#zfsTMKus*f@hZ8VfE9@|u^RS3 zjrTP6#A%L~>kOxHl#W)I=H*rLFO~99)qWT=@FXgQVWqrEK1^A7iFhF46{@(lpk7qU z$E#%J5va_iS#z)k@eI_~y@x8kEvO9aMrHP}OG7ETgnGdvR4Su=%?+8T)a76}PDKwc z!rHjS#^>$z(q+x_)lo&5j{0;DLJzLSI=B}bqkDsfW|HVio4%)av1#N{(h11Xr!=s5Mb$on?Pc8GC0 zW)XjkebK3CR?-jkMVpU0j=NCj{tW8Nc^>s43a(@(7;UYGy51ZQ;V9IWHLdLBxV>p~ zqM@o>g8^8GEpZ3t;v?*YxuK>eK1B5&#Hm=PirI>F*p2uX)Sfr0YL4RsR1Lj=zPKEf zxiwWe|El^g=}5$L7>E90=6lcpmFkJ8>oZYXwFy;hr?5NTMr~Eca5KRHSe1Ax>Nqb% zjk6wgY7W`>PB`a3hK_30%m=0gYG&iH5za+@(Z0fV_#-YrPlQ=%5h`=Ok!FiRP%CYR z*_ex4un;xj;nmG|WG1#HUgXlyOn*k5*IVep@EWGr(okQx&Zxbef%>7c0JW0s){Cgj zgm}D4eoJnNDzdjw&!0vuEHKKvHx6}b+%y{cWIl^3ssb#j1ynT`VoltNO7Uq_O0QVU zM4JyuHB^ebqVAiBdQSnS;{qFhhkEZRxN^p^>p>i_%g3 zxu{y$U_F5#dC|a{=&XoTH5$dsj delta 13744 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 diff --git a/cps/translations/ar/LC_MESSAGES/messages.po b/cps/translations/ar/LC_MESSAGES/messages.po index a36fe3a47..7765186a2 100644 --- a/cps/translations/ar/LC_MESSAGES/messages.po +++ b/cps/translations/ar/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2025-06-07 14:44+0300\n" "Last-Translator: UsamaFoad \n" "Language: ar\n" @@ -684,6 +684,22 @@ msgstr "فشل تخزين الملف %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "تمت إضافة تنسيق الملف %(ext)s إلى %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "يرجى الانتظار دقيقة واحدة لتسجيل مستخدم آخر" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "تسجيل" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "يرجى الانتظار دقيقة واحدة قبل تسجيل الدخول التالي" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "لم يكتمل إعداد Google Drive، حاول إلغاء تنشيط Google Drive ثم تنشيطه مرة أخرى" @@ -1435,21 +1451,6 @@ msgstr "عفوًا! حدث خطأ أثناء إرسال الكتاب: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "عفوًا! يرجى تحديث ملفك الشخصي ببريد إلكتروني صالح للقارئ الإلكتروني." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "يرجى الانتظار دقيقة واحدة لتسجيل مستخدم آخر" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "تسجيل" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "خطأ في الاتصال بالواجهة الخلفية للمُحدد، يرجى الاتصال بمسؤول النظام" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "عفوًا! خادم البريد الإلكتروني غير مهيأ، يرجى الاتصال بمسؤول النظام." @@ -1466,10 +1467,6 @@ msgstr "نجاح! تم إرسال بريد إلكتروني للتأكيد." msgid "Cannot activate LDAP authentication" msgstr "لا يمكن تفعيل مصادقة LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "يرجى الانتظار دقيقة واحدة قبل تسجيل الدخول التالي" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/cs/LC_MESSAGES/messages.mo b/cps/translations/cs/LC_MESSAGES/messages.mo index bad9411ac438b73e84d578c96d5289f3578900be..0391a86c6f4da5cb1559b766d80f284b26c3ae78 100644 GIT binary patch delta 22 dcmX>;iRt(xrVYCO>?R6^hE_(#n@#+MtpHj)2EqUU delta 22 dcmX>;iRt(xrVYCO?8XX)mR5%5n@#+MtpHky2Fw5e diff --git a/cps/translations/cs/LC_MESSAGES/messages.po b/cps/translations/cs/LC_MESSAGES/messages.po index 1bbeeba33..d3f9c834d 100644 --- a/cps/translations/cs/LC_MESSAGES/messages.po +++ b/cps/translations/cs/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2020-06-09 21:11+0100\n" "Last-Translator: Lukas Heroudek \n" "Language: cs_CZ\n" @@ -683,6 +683,22 @@ msgstr "Uložení souboru %(file)s se nezdařilo." msgid "File format %(ext)s added to %(book)s" msgstr "Formát souboru %(ext)s přidán do %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registrovat" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Drive nastavení nebylo dokončeno, zkuste znovu deaktivovat a aktivovat Google Drive" @@ -1434,21 +1450,6 @@ msgstr "Při odesílání této knihy došlo k chybě: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registrovat" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "E-mailový server není nakonfigurován, kontaktujte svého správce!" @@ -1465,10 +1466,6 @@ msgstr "Potvrzovací e-mail byl odeslán na váš účet." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 033101d8c34f7e1902b0a9a919e916635da9d31f..4a19e059e9d54104e1d427f428cb1f1e133af4fb 100644 GIT binary patch delta 14114 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

G0 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 OT~H=?>!J-Udj220=2$=g delta 14206 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 PvUW~~kS!h8&Fk@h8h0k~ delta 14142 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 Uajk`U)4Z+g;<7hwTJXmI0kNG@SpWb4 diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index 52aa59fb2..6b38422bb 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2024-10-29 15:26+0100\n" "Last-Translator: adruki \n" "Language: es\n" @@ -687,6 +687,22 @@ msgstr "Error al guardar el archivo %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Archivo con formato %(ext)s añadido a %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Por favor, espera un minuto para registrar el siguiente usuario" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registro" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Por favor, espera un minuto antes de iniciar sesión de nuevo" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "La configuración de Google Drive no se ha completado, intente desactivar y activar Google Drive nuevamente" @@ -1438,21 +1454,6 @@ msgstr "Hubo un error en el envío del libro: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Por favor, actualiza tu perfil con un correo electrónico de eReader válido." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Por favor, espera un minuto para registrar el siguiente usuario" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registro" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Error de conexión con el backend de Limiter, por favor contacta con tu administrador" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "El servidor de correo no está configurado, por favor contacta con tu administrador." @@ -1469,10 +1470,6 @@ msgstr "Se ha enviado un correo electrónico de verificación a su cuenta de cor msgid "Cannot activate LDAP authentication" msgstr "No se puede activar la autenticación LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Por favor, espera un minuto antes de iniciar sesión de nuevo" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/fi/LC_MESSAGES/messages.mo b/cps/translations/fi/LC_MESSAGES/messages.mo index 9155f5d06d204f6eecaf257a4a4a0fb0c0246f3a..a03b182242c25e10673c1fe4d731b07341c6f8fd 100644 GIT binary patch delta 22 dcmZ3mmvO;f#tm8)>?R6^hE_(#n++}U)c{#Z2HXGu delta 22 dcmZ3mmvO;f#tm8)?8XX)mR5%5n++}U)c{$R2Ic?& diff --git a/cps/translations/fi/LC_MESSAGES/messages.po b/cps/translations/fi/LC_MESSAGES/messages.po index e8f3eb94d..65835cabe 100644 --- a/cps/translations/fi/LC_MESSAGES/messages.po +++ b/cps/translations/fi/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2020-01-12 13:56+0100\n" "Last-Translator: Samuli Valavuo \n" "Language: fi\n" @@ -684,6 +684,22 @@ msgstr "Tiedoston %(file)s tallennus epäonnistui." msgid "File format %(ext)s added to %(book)s" msgstr "Tiedostoformaatti %(ext)s lisätty %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Rekisteröi" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Drive asetukset ei ole valmiit. Koita poistaa Google Drive käytöstä ja ottaa se uudelleen käyttöön" @@ -1435,21 +1451,6 @@ msgstr "Kirjan: %(res)s lähettämisessa tapahtui virhe" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Rekisteröi" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1466,10 +1467,6 @@ msgstr "Vahvistusviesti on lähetetty sähköpostiosoitteeseesi." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index 697d317387623cc2e5ce11caf7bf9f6478968444..6eb297abcc53b6ecbed03199e581759e049b74c3 100644 GIT binary patch delta 14114 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 diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index f3af48a06..c9d8bd406 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2026-01-15 11:30+0000\n" "Last-Translator: \n" "Language: fr\n" @@ -680,6 +680,22 @@ msgstr "Échec de la sauvegarde du fichier %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Le format de fichier %(ext)s a été ajouté à %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Veuillez patienter une minute pour enregistrer le prochain utilisateur." + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Créer un compte" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Veuillez patienter une minute avant de vous reconnecter." + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "La configuration de Google Drive n’est pas terminée, essayez de désactiver et d’activer à nouveau Google Drive" @@ -1431,21 +1447,6 @@ msgstr "Oups ! Une erreur est survenue lors de l'envoi du livre : %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Oups ! Veuillez mettre à jour votre profil avec une adresse e-mail valide pour votre liseuse." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Veuillez patienter une minute pour enregistrer le prochain utilisateur." - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Créer un compte" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Erreur de connexion au backend du limiteur, veuillez contacter votre administrateur." - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Oups ! Le serveur de courriel n'est pas configuré, veuillez contacter votre administrateur!" @@ -1462,10 +1463,6 @@ msgstr "Succès ! Le courriel de confirmation a été envoyé à votre adresse." msgid "Cannot activate LDAP authentication" msgstr "Impossible d'activer l'authentification LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Veuillez patienter une minute avant de vous reconnecter." - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index 8db1456e3344b755f0eeb418325bd8b8387b5687..b9c0a10bce0c614050f401edf8271c18ca7524a0 100644 GIT binary patch delta 14042 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 Qmi6JkMwIJ>6FVJr_9qFT=xe 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 diff --git a/cps/translations/gl/LC_MESSAGES/messages.po b/cps/translations/gl/LC_MESSAGES/messages.po index c3994040b..97185809d 100644 --- a/cps/translations/gl/LC_MESSAGES/messages.po +++ b/cps/translations/gl/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2024-12-08 13:50+0100\n" "Last-Translator: pollitor@gmx.com\n" "Language: gl\n" @@ -682,6 +682,22 @@ msgstr "Produciuse un erro ao almacenar o ficheiro %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Engadiuse o formato de ficheiro %(ext)s a %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Agarde un minuto para rexistrar o seguinte usuario" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Rexístrate" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Agarde un minuto antes do próximo inicio de sesión" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Non se completou a configuración de Google Drive, tenta desactivalo e activalo de novo" @@ -1433,21 +1449,6 @@ msgstr "Vaia! Produciuse un erro ao enviar o libro: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Vaia! Actualiza o teu perfil cun correo electrónico de eReader válido." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Agarde un minuto para rexistrar o seguinte usuario" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Rexístrate" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Produciuse un erro de conexión ao back-end do limitador. Ponte en contacto co teu administrador" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Vaia! O servidor de correo electrónico non está configurado, póñase en contacto co seu administrador." @@ -1464,10 +1465,6 @@ msgstr "Éxito! Enviouse o correo electrónico de confirmación." msgid "Cannot activate LDAP authentication" msgstr "Non se pode activar a autenticación LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Agarde un minuto antes do próximo inicio de sesión" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/hu/LC_MESSAGES/messages.mo b/cps/translations/hu/LC_MESSAGES/messages.mo index bbfac0997e04d59af391e18ed121baae484e08f8..5977c147a00fefda96eb9a6ff0f274ba922d9156 100644 GIT binary patch delta 22 dcmZo$%hayNQCKp_P&GW_JU7H2_m-26O-b delta 22 dcmZo$%hayRm|yrIn%iW_JU7H2_n#27Ukl diff --git a/cps/translations/hu/LC_MESSAGES/messages.po b/cps/translations/hu/LC_MESSAGES/messages.po index c5742e98a..cc6dccd36 100644 --- a/cps/translations/hu/LC_MESSAGES/messages.po +++ b/cps/translations/hu/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2019-04-06 23:36+0200\n" "Last-Translator: \n" "Language: hu\n" @@ -684,6 +684,22 @@ msgstr "Nem sikerült elmenteni a %(file)s fájlt." msgid "File format %(ext)s added to %(book)s" msgstr "A(z) %(ext)s fájlformátum hozzáadva a könyvhez: %(book)s." +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Regisztrálás" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "A Google Drive beállítása nem fejeződött be, próbáld kikapcsolni és újra aktíválni a Google Drive-ot." @@ -1435,21 +1451,6 @@ msgstr "Hiba történt a könyv küldésekor: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Regisztrálás" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1466,10 +1467,6 @@ msgstr "Jóváhagyó levél elküldve az email címedre." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/id/LC_MESSAGES/messages.mo b/cps/translations/id/LC_MESSAGES/messages.mo index cd1933bcdf14024afb3d021d029430711b0e6545..3f3cf3979f57943dae4b738ff421de776b672275 100644 GIT binary patch delta 22 ecmZ2Dhk4-~<_*%7>?R6^hE_(#o0Tg6hX4RsHwVH1 delta 22 ecmZ2Dhk4-~<_*%7?8XX)mR5%5o0Tg6hX4Rsga^z3 diff --git a/cps/translations/id/LC_MESSAGES/messages.po b/cps/translations/id/LC_MESSAGES/messages.po index 8148a0a70..d8d022349 100644 --- a/cps/translations/id/LC_MESSAGES/messages.po +++ b/cps/translations/id/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2023-01-21 10:00+0700\n" "Last-Translator: Arief Hidayat\n" "Language: id\n" @@ -684,6 +684,22 @@ msgstr "Gagal menyimpan berkas %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Format berkas %(ext)s ditambahkan ke %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Daftar" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Pengaturan Google Drive belum selesai, coba nonaktifkan dan aktifkan kembali Google Drive" @@ -1435,21 +1451,6 @@ msgstr "Oops! Terjadi kesalahan saat mengirim buku: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Daftar" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Server email belum diatur, silakan hubungi administrator!" @@ -1466,10 +1467,6 @@ msgstr "E-mail konfirmasi telah dikirimkan ke alamat email Anda." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo index 9979eda30d908beef8eb5d4592342456c40cf17d..5216ee16dc04c9fbcdd46deb149801ce90a20901 100644 GIT binary patch delta 14114 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 LkS*2M9qaOcBdtc} delta 14162 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\n" "Language: it\n" @@ -684,6 +684,22 @@ msgstr "Impossibile archiviare il file %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Formato file %(ext)s aggiunto a %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Attendi un minuto per registrare il prossimo utente" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registrati" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Attendi un minuto prima del prossimo accesso" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Configurazione di Google Drive non completata, prova a disattivare e attivare nuovamente Google Drive" @@ -1435,21 +1451,6 @@ msgstr "Si è verificato un errore durante l'invio del libro: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Per favore aggiorna il tuo profilo con un'e-mail eReader valida." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Attendi un minuto per registrare il prossimo utente" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registrati" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Il server e-mail non è configurato, per favore contatta l'amministratore" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Il server e-mail non è configurato, per favore contatta l'amministratore" @@ -1466,10 +1467,6 @@ msgstr "Tutto OK! L'e-mail di conferma è stata inviata." msgid "Cannot activate LDAP authentication" msgstr "Impossibile attivare l'autenticazione LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Attendi un minuto prima del prossimo accesso" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/ja/LC_MESSAGES/messages.mo b/cps/translations/ja/LC_MESSAGES/messages.mo index 3fd8e6788509e07585301dba04cc9079d50adb94..f352f65394b86126f77e415289f230db8adf43db 100644 GIT binary patch delta 22 ecmX?qoca85<_*g#*i94+4XuofH?OTw$_4;$zX-wr delta 22 ecmX?qoca85<_*g#*o_qoEv*dAH?OTw$_4;%3<%5s diff --git a/cps/translations/ja/LC_MESSAGES/messages.po b/cps/translations/ja/LC_MESSAGES/messages.po index fec6d0380..4a27b68c8 100644 --- a/cps/translations/ja/LC_MESSAGES/messages.po +++ b/cps/translations/ja/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n" "Last-Translator: subdiox \n" "Language: ja\n" @@ -684,6 +684,22 @@ msgstr "ファイル %(file)s を保存できません。" msgid "File format %(ext)s added to %(book)s" msgstr "ファイル形式 %(ext)s が %(book)s に追加されました" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "登録" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Googleドライブの設定が完了していません。Googleドライブを無効にしてから再度有効にしてみてください" @@ -1435,21 +1451,6 @@ msgstr "%(res)s を送信中にエラーが発生しました" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "登録" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "メールサーバーが設定されていません。管理者に連絡してください" @@ -1466,10 +1467,6 @@ msgstr "確認メールがこのメールアドレスに送信されました。 msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/km/LC_MESSAGES/messages.mo b/cps/translations/km/LC_MESSAGES/messages.mo index 84b71b8dfe3f73b6a9a43838c4ff14b8eae23242..b6f353ce29ea31bf4f907489e99d20490bba387c 100644 GIT binary patch delta 22 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 aU)!+$`l31Wm));2-|x4GjRC7qb^AYquZ~6l diff --git a/cps/translations/ko/LC_MESSAGES/messages.po b/cps/translations/ko/LC_MESSAGES/messages.po index a368958ad..5ae337351 100644 --- a/cps/translations/ko/LC_MESSAGES/messages.po +++ b/cps/translations/ko/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2024-11-01 17:50+0900\n" "Last-Translator: limeade23 \n" "Language: ko\n" @@ -684,6 +684,22 @@ msgstr "%(file)s 파일 저장에 실패했습니다." msgid "File format %(ext)s added to %(book)s" msgstr "파일 형식 %(ext)s이(가) %(book)s에 추가되었습니다" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "다음 사용자를 등록은 1분 뒤 가능합니다." + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "등록" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "1분 후 시도해 주세요." + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google 드라이브 설정이 완료되지 않았습니다. Google 드라이브를 비활성화한 후 다시 활성화해 주세요." @@ -1435,21 +1451,6 @@ msgstr "전송 중 오류가 발생했습니다: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "문제가 발생했습니다. 프로필에 유효한 전자책 리더 이메일을 설정해 주세요." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "다음 사용자를 등록은 1분 뒤 가능합니다." - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "등록" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Flask-Limiter 시스템 연결에 문제가 발생했습니다. 관리자에게 문의하세요." - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "이메일 서버가 설정되지 않았습니다. 관리자에게 문의하세요." @@ -1466,10 +1467,6 @@ msgstr "인증 이메일을 발송했습니다." msgid "Cannot activate LDAP authentication" msgstr "LDAP 인증을 활성화할 수 없습니다." -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "1분 후 시도해 주세요." - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/nl/LC_MESSAGES/messages.mo b/cps/translations/nl/LC_MESSAGES/messages.mo index f359f031bf15709cb10d5df2b427a94a9046569b..d0e3208879beb6bddf5fd1ccd4f8c788685859c6 100644 GIT binary patch delta 22 dcmX@UnECi(<_*ym>?R6^hE_(#o0BS1BLQRH2n7HD delta 22 dcmX@UnECi(<_*ym?8XX)mR5%5o0BS1BLQS92oC@N diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 607f85803..1e5dcc74e 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web (GPLV3)\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2023-12-20 22:00+0100\n" "Last-Translator: Michiel Cornelissen \n" "Language: nl\n" @@ -685,6 +685,22 @@ msgstr "Kan %(file)s niet opslaan." msgid "File format %(ext)s added to %(book)s" msgstr "Bestandsformaat %(ext)s toegevoegd aan %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Wacht alstublieft één minuut voor het registreren van de volgende gebruiker" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registreren" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Wacht alstublieft één minuut voor de volgende inlogpoging" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Het instellen van Google Drive is niet afgerond, heractiveer Google Drive" @@ -1436,21 +1452,6 @@ msgstr "Fout opgetreden bij het versturen van dit boek: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Wacht alstublieft één minuut voor het registreren van de volgende gebruiker" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registreren" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "E-mailserver is niet geconfigureerd, neem contact op met de beheerder!" @@ -1467,10 +1468,6 @@ msgstr "Er is een bevestigings-e-mail verstuurd naar je e-mailadres." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Wacht alstublieft één minuut voor de volgende inlogpoging" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/no/LC_MESSAGES/messages.mo b/cps/translations/no/LC_MESSAGES/messages.mo index e42b87ba679a475f83ee0888d22fbcd7cbbb2c30..adf45e31b4cad28ca299be0642fbb9eedb59f21b 100644 GIT binary patch delta 22 ecmcaUjp_O{rVS;5>?R6^hE_(#o2vuwSONfKU\n" "Language: no\n" @@ -684,6 +684,22 @@ msgstr "Kunne ikke lagre filen %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Filformat %(ext)s lagt til %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registrere" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Disk-konfigurasjonen er ikke fullført. Prøv å deaktivere og aktivere Google Disk på nytt" @@ -1435,21 +1451,6 @@ msgstr "" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registrere" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1466,10 +1467,6 @@ msgstr "" msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index dfcf240458f42f6c87b06c2a238199fc981afe21..50d644d2d08e7c65b8aa039f19134e8df51cb618 100644 GIT binary patch delta 14114 zcmYM)33!dyzQ^$wAp;2_h6u5fNFpRMnqo{1F(nQnX62Y_o~pFyt4eDqrKqD$6^BO6 zV-2mLrlOQ0)YuwJl_;uI%l-bc*7Mx+oacPjf9-d#;s0Oj-D&UrYL3@}*o zdB}fVr%Y|f@u4FVJ77o5#<6P!4^Fc29Mr^%Q3EZvu17t$6N}>!)B?_rExlj;1blzzsB--1ohkv)P#Rx68?j}m{8Ar zo{Cyn1}bB1Q48;kZW$V{(NGCo`@vKUB3^)fa1D}0rzC}^>9oQOoQkdSEVjUi29DDn zhhQuG2791C_0n^Lu^R5cFud82{A=gljm!?Jq85~Zv6zm^!0Q-{)3FFH$D+6zOW-!t z&JLqeeiBux+vtUluoON;WvW=3i38KfzaEI9LmyPb5KKg+Is-k}1+{>2sDbCB&dd_j zjt*l2K1MA(@)gIS+)g{xEt!cLe-G;W2Qdy$x-?>Fyg===N@H#SHbCvcNstSq#QuWz5EO z9ET-wKdMx@sPFxTT3A3cQ}Zg=i}-!iM($t{EWjW-oIV(#`yWU{DXEECNE+%?cf&e3 z40Ub3Kuxp*E8s;`?Vn;T^lff-oQBF|Hfo`RQO~`Nq4*)D;W~`f{eM8CFdY>+!m4=$ z`d|X;I@Up@Ivq7oU-ZT|P}l8k)b}=`QobAYz0=6roU5qA8q?BosFqU$qw!4)XMSfX zjVL^T+Sy&yf_z$;Oa!1N4ntkPB-Dh%Fu%4~lz0XzQwxxr=j5Okato93G3pjnX>Fdb zhprbL&1tBX8K@fe!AkfxYNv})3-}zB!fhCiXHg}2hN^8yh8Z~AS{=2ZR8&b?qRv)N zRB6U%kpC()X3^0Ow;|bb{4z}{vruPZ02al`s0Giq@q8>sycD(2b?A#vrJOTB^6{wW0!*aL}m8pxUj66h@tkA#ALOrMj)J09$ z6qT9osEqc(7@UmC+&Y(rc61W8(_B<)9-t;H*w*~KhM-E*5KCZZ)bj(;AE%%eIu~_V zb5JQiXuXJ9*zc&@^&I`s4IuAIVK8cdC~SzSs6+S`2I552fOAn3e1V$yTTH-Q?1n|! zoA33;lEed03m=E2a6W1SUm$16b#~IwPR?ThK1QvqP?i}e0C_n&L8w%BL_PO9>U;0n z{>7+Ne}$TOA8LVTP!nE5ouNlq9AD=5Q~%-}Oa?rt6vd$)tcChwW7LFM*50;%B$lH8 zT~wwPplbdp2H{rJSvhL^uVQK9XQ=C0JR6zc$)uq#%)}&IhDup324Ws+M+G~Yg#@8? z5P>RPGO8qvP?_t2+W7#~_r{moekw*0_qI+)O|a2= z0`(rahg<-sSZA}dZkRzl5|y#Ns0mMC8T=D9aX=St2G;9B{Ud2iqN6OXMD1uVYURhV zD*l8u(66hxK8;Y2}l# zk75Y^gj@vYIck75J`wgvb6B>H3 z1u9ipsDXQ+4%u6%l}<+uum~Gq4rbyl)COwwG_US-)Od4H{r^Rs`gN!?aR4jeX(WTL z^MFP$9bUc6PC}7C44gWsv(O!NHU?t;S+V^qQKj07O8r-;+wwEk#z*LlvHvy;NwW?2&?rqJ0FZn`E1k#OHp6kiHUd$8=+S}a|@cHQk{v)Ku=UD zN1+be1lvCY3llF!m3TSk|Nif#5ktp8`#~Oh5f|-m1}=fBX*d?aIINE;sKYiARnv8- z1%HQHzzx)?zmGZtgTBd*E9y;0JPtrjv=BAXa#XEW+x~5+9qvP=Fc+1X zKT#PdKERxrFw_LqQ9G@V+1S~BzQKOJYXJGz1IOs7h__LxFEY@isx0bSRzz=1LLJsr z)bm-W1&qWnT!jU36Dl)XQ470? zO7#;|N=pqkZ^#%-AkIP$PQh33b4bpLnE4uGF=Dql4eg)tVKKvRq{jVqx=6I z4Szg?s{J*6fWM+j@CZv`xzVO(v8c0B2LrG%>hpG368oVtG1kV@P|q(yJ+}f?x*g~i zr*VKr3p|6`dFUHvqE}F-whabhwsnyGe4=$GDz%^3cr$7vdu@Cewc}jW#22tA-h6}n z>(}ddI<$~tW6ZUxfSNEB^?4iHKM=LRsaO`*pfYs;_55+v^Vd+<@gI!Fh_NP}X4FFO zqsDoHD#c4IhpyK+^QNnanjiwT^F(VJYA0=N+!H;-!%-8@LG5S}>bYg8g>OWSx7+p~ zL#6y8>iK)fwRD}wG?M73G~U#%9flJRK}|5*_J4v}*j6l!2eB<)L=VPIFdNB4O^}89 zepl3j`eGRziCV}stf%|Gh=ywTBPQcLR0+b~Hisw<1Bu(CQrHhG;4oB8Kd>&rvcy}g z$FMx{4b+4$QKcx!oGL*us_lgGKN>gzHDDcU25QH>P%9sS+WA!LVhkqUf=d1Ow*NBf z`A4XU{U(|WRX}aDzO@~?It2Y`XyS>e2j-z(AYY&c*on%>G1NkTM5Xwu^)@QSd8p_9 zMvdq5j`{1l0;kf*e$O1bcvNXRpfWHN<8U!n z!ei*c-%us;f8X5yN|=9*(Tn~>YfUUnTo<*GG;E1(YZ{R>7GP!Eg;nqxYNbV|npbE| z)S2jk4R9E0z;&qGu>}+GTU2VFqBaye&15ti^Y5e&(CjD@eTY*~C903gL}Szhy-*9AfTeH>>iLDJiI<^DnDZg| z_oK0c4jrNcsFj|>7`%$Qjzwpi0mD%fRz;N{!N#pnXQM4v!w#5rrQ57nZ;S_VZlSz!z+M6SbgUQ4`-sWuWXw zCQ}|%#v8b{BO7lP;NNPYYTsp^aSV1Lo`>}?4|RBA=bPKo5yOb5p}x1;dKf*#H&GcV z^0E1c*&3*g&BVUwE~L?q#!F1WehbVydl70!KVT=kgi3vl{}}69(=dYmbgY4cP?=nc zs{MM@kJNtj;APZvFHFDdq%1UtArqC-o*0B9P&<9k#v4(m{*d)FDy2VL@1V}aL)81k z{}Xd|Vo?iejJib~QRBM#pHu%;G_-?nusq&GrOa7mPJ29Rzy??byQ3z49aC`v>P&3M zvbYCz`p=_N&!2#F;k6;rl zwU{3i?1Y_gHR?I9&&>bXt`9~LAHf8CfXYDF5>vt!=z8dALqh`(#}M3!!FU!`^9QKX zJi+4Vz0~ZmthExVG|{L`q+n&NYvZ1%%=AZHZ`bxuTgv^{J)ccSY21lAgeS2A7G7p1 z4##-nWK6`~sORQm13Ze#gzx{%&ull;L@Q7WUXLp29_xMkdBx=}fBW-6^m4P}FEO0> zB8K4$j6}~0)87mg4?unXA$o8lD%Gb@8GL5r(x01!*F&9!!KgDf7AxXhmxf*t8?i24 zz&I?EWA1$u)S>$fRgy1JwLFO$pukG=?+GhmU*b_1h3BydI$xMfcw;TXk~VH(b=%X> z>FkbeaRloA?#CGX0i*Fbszed1%!GANJDG{9?Ml?n_oAM=geu`f%)sKS&6~D6dJ`|e zk{ku+Ga7z$Y(yQRuhD}?Pz(DNeeng>L7z3|{qPEE!j7o#jlyi4h}yt8?20#0XC`f} z`QvjG)+1hm(fa+rOv8tc!t2cMcK~WZ(bxu)FaRf^ZowSX!j{?iOKe8`E$YP;u-^Rp z!wB>c55rQ?|TTzGTCMMxSduj|^lWdrqWS6$+Qkd)pVA16NV9=#SDCk%5<}@O({OW1l|8-G_-@$ z7=(9GD|dF8otHp;9*SB}O^n2J)J}%j{UvGG{l`!X$we*r7V6ad?Kg+d zgAIvWqcZxze)3<4#&S9|;7ZgNwqbQVj-mKBsx%=7Oq_sW#BER+8i5{MfXTQWHNkJF zL+y3Y9NH47!x@3WSnHr`25d{m5ITmV2DpM6An=emY*jIeI1$6K6IQ};*a{b+Ci(^S zB720�xBp#lJOYsWj@18i6`1)m$1iXw*mTd=#oS(@+^%hOgpAd<{z;Huw20>`c4> zbqIe)W#|Q}_N9)P9acpxxCts_{V@WkVJy09X(-hfP^s}fYBEw0m5F+&frq1ZG6fTH zhV9>lt%*;e&QPWA%+BIbaT+Q!ZLvIdN2Pu&vSHWxh{gaqR^lWKJZAp?0Ow-`;=8C+ z`W!a{1f${<8#hJ05qn}f&c$rJh#pM(-t4qJ)*+sVTJTPc)cyB9VOAW6N_|6A?K`2q zFdQ>+6&Ar~sGT?`%|b%Zn=lsjN=-ps&vaDA`eHR4gg&?cyWtY`Gr#i>4Lun1gIPd4 z`V%)tO_+_1u{$=xrKrPq4J%{8Q)VI2ScSMY>J0S4HaHfwp~F}Ve@4A;?x9W!lZNNM{5RZ zJA4&aqe@Wpym=EQpi1=?YT>)l3vZ&v z`xUi;r>F%4xfiG(jYy2dDmKnUt-LL!;bhbRhcFe-U{fr9(fpH82W&t*9c$weR3-~v zG7Aesy$1$iGS0%5=a0vgWndk8Fc(YX6I4cv{gi(TTql)=9$bJr6uWUE-p5)v>}T`GVh&a!K7}>$A?l45 zbJgsq6*eJuu^t{kWvak6Q-XTvOPq!!u@!pj{&&xBa8FSS8G>5rJk*1$P>1Vl>oE)@ zzGTfqWuoA9^9C)2dLKliz8`PnG}JgPFdI8#GV?ndXlQ^NsQ17hSPGw8i{CJDgtZoy z=kr#mThb5py^*L1#@ha=)_E8}{}K$x^;iZ^p{o?#p%ILgZ<-fK1JoJlk1EMr)aUzA z3%!gQ;67Hw!ne#dj6mJ*cBmS=sOQ&W5bnmpcp97F`CH__JB`p^Ov=ZjYWxu@1DjBX z>X7w1sx;1Rv-2|OAq+=lq%mqiJ+Lf}M`dUp>d-Dhm2L+X!DF|{zfyCW4yEoIDt>4m zEO5sR6oeWm7FE;QSO{C94r3XK1q$=uz zR;Ud0LX}`NYT^~B0k@$_up9MG&qa-M4YkuhQ5h+5*DRNX{#Qa=bI(cM5pFPgLH zhrYj=6b7Ldkc6szGaP_DQC~cYs^tUg6V#6X#$s6bo>^cZDzh=z0PCO@Iu=_nzcZ7D zzHkne!W*azcNG*nGTp%yd)E8`05Q4Ar@Lp@hC&+I$`m9c85j3l8BWd_FR z{`a7vFHE&AK^>y)s8pV{=Ann!=Ye^{#h^ZKk6O@R8^4Fui9bVS@O#ukuVD;&|86pn zh*fp}o7s*L7)|^hDg*1R2T(h>V7-bZh;O4#^E1@Wi#;?yK2@+j@nBTVS79T(hNRqy zcx2xFL(tXf-A+Rf=2@d3n;(%^u^RpVLDl>KY6rh!4Gj9j-1n9kMLY(p;9^X|Z_yY3 zLe1m##GH}3Se&@Y6Y^h%Miw0+n*Gw{?=QMvBZC)HWc&J{%SrY|Ju=XI#ly5s1lq)W#lhZEt8%Zdto5)Y}Eb#9|mC# z>hyn&y8j2Q$59)|#X)!-6R^!+W+4+@8v3pPrS>dpg3G8K=Aj0BgxZPk z3lo<`Wg-r%Vk6Ww9)x9aEGl!eZT}uDLwpSNz3Z5!`~QT7Qdj$>ITUHA2il?zPallO zp{M~DV*nn<2)txJ=a)YJx+S2VYl50^6sF^JY=);$;{_Kez*%#-5;QbW7HZ(JSO?$7 z-uMk_=aB{V1zw@3+t2`Yiu<6>!0Q--(@@W?K;8QdSQK+nx8o|tpmI zOy?CT;O3|B1s%HY0p4bUN~l8^Y2#X`FVsivtTk$ZS*V5dL@lfjM&m&H`A0ThY(0c3 s!F_ZhtNeS|u+7VA{t~$PWQ*}Fyi+`hiK$7+o7>MV7`%Den&58#2Wat5ng9R* delta 14206 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 U*GaEMO|M3JBy9h0W4Y}A0nYtqO8@`> diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index f84f31690..970b9b868 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2025-12-08 12:51+0100\n" "Last-Translator: Daniel Szepietowski \n" "Language: pl\n" @@ -689,6 +689,22 @@ msgstr "Nie można zapisać pliku %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Format pliku %(ext)s dodany do %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Proszę poczekać minutę przed rejestracją kolejnego użytkownika." + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Zarejestruj się" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Proszę poczekać minutę przed kolejnym logowaniem" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Konfiguracja Google Drive nie została zakończona, spróbuj dezaktywować i ponownie aktywować Google Drive" @@ -1443,21 +1459,6 @@ msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Ups! Zaktualizuj swój profil używając poprawnego adresu email czytnika." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Proszę poczekać minutę przed rejestracją kolejnego użytkownika." - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Zarejestruj się" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Błąd połączenia z backendem limitera, skontaktuj się z administratorem." - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Serwer e-mail nie jest skonfigurowany, skontaktuj się z administratorem!" @@ -1474,10 +1475,6 @@ msgstr "Wiadomość e-mail z potwierdzeniem została wysłana na Twoje konto e-m msgid "Cannot activate LDAP authentication" msgstr "Nie udało się aktywować autoryzacji za pomocą LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Proszę poczekać minutę przed kolejnym logowaniem" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/pt/LC_MESSAGES/messages.mo b/cps/translations/pt/LC_MESSAGES/messages.mo index 4752c43ec6e7e3e46674ef57299754b964ae457c..900d72d33a695a183cb1238a506d022b2cc70f1f 100644 GIT binary patch delta 22 ecmaETi23y)<_(QC>?R6^hE_(#n>%VArvLzQcnN3# delta 22 ecmaETi23y)<_(QC?8XX)mR5%5n>%VArvLzQ#R+l% diff --git a/cps/translations/pt/LC_MESSAGES/messages.po b/cps/translations/pt/LC_MESSAGES/messages.po index ed530425e..bdc4e1348 100644 --- a/cps/translations/pt/LC_MESSAGES/messages.po +++ b/cps/translations/pt/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2023-07-25 11:30+0100\n" "Last-Translator: horus68 \n" "Language: pt\n" @@ -681,6 +681,22 @@ msgstr "Falha ao armazenar o ficheiro %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Formato de ficheiro %(ext)s adicionado a %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Por favor, aguarde um minuto para registar o próximo utilizador" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registar" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Por favor, aguarde um minuto antes de nova autenticação" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Configuração do Google Drive não concluída, tente desativar e ativar o Google Drive novamente" @@ -1432,21 +1448,6 @@ msgstr "Ops! Ocorreu um erro ao enviar este livro: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Por favor, aguarde um minuto para registar o próximo utilizador" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registar" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Ops! O servidor de email não está configurado. Por favor, contacte o seu administrador!" @@ -1463,10 +1464,6 @@ msgstr "Sucesso! O email de confirmação foi enviado para a sua conta de email. msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Por favor, aguarde um minuto antes de nova autenticação" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.mo b/cps/translations/pt_BR/LC_MESSAGES/messages.mo index 30c1f5da90a07b811781a028a2fbfc112651155f..feeb1d15e2ad9ac838b037f3515ce9be7f3eb8d3 100644 GIT binary patch delta 14186 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\n" "Language: br\n" @@ -681,6 +681,22 @@ msgstr "Falha ao armazenar o arquivo %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Formato de arquivo %(ext)s adicionado a %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Aguarde um minuto para registrar o próximo usuário" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registe-se" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Aguarde um minuto antes do próximo login" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Configuração do Google Drive não concluída, tente desativar e ativar o Google Drive novamente" @@ -1432,21 +1448,6 @@ msgstr "Ops! Ocorreu um erro ao enviar este livro: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Ops! Atualize seu perfil com um e-mail de eReader válido." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Aguarde um minuto para registrar o próximo usuário" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registe-se" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Erro de conexão com o backend do limitador; entre em contato com o administrador" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "O servidor de E-Mail não está configurado, por favor contacte o seu administrador!" @@ -1463,10 +1464,6 @@ msgstr "O e-mail de confirmação foi enviado para a sua conta de e-mail." msgid "Cannot activate LDAP authentication" msgstr "Não foi possível ativar a autenticação LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Aguarde um minuto antes do próximo login" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo index 3591639e9ec6ebae07f42c7bb9d3c9e6046b707d..74aa0db6e5b317d03f1ee3dd86665a78ba4d1806 100644 GIT binary patch delta 22 ecmZ2*hH1eWrVW~&>?R6^hE_(#n+-fa!~g(Y{Rh(k delta 22 ecmZ2*hH1eWrVW~&?8XX)mR5%5n+-fa!~g(ZN(bEl diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index 808c69cd5..fb4c53d03 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2020-04-29 01:20+0400\n" "Last-Translator: ZIZA\n" "Language: ru\n" @@ -685,6 +685,22 @@ msgstr "Не удалось сохранить файл %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Формат файла %(ext)s добавлен в %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Зарегистрироваться" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Настройка Google Drive не завершена, попробуйте деактивировать и снова активировать Google Drive" @@ -1436,21 +1452,6 @@ msgstr "При отправке этой книги произошла ошиб msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Зарегистрироваться" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Сервер электронной почты не настроен, обратитесь к администратору !" @@ -1467,10 +1468,6 @@ msgstr "Письмо с подтверждением отправлено вам msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/sk/LC_MESSAGES/messages.mo b/cps/translations/sk/LC_MESSAGES/messages.mo index 03edaf1c6e8b84f2009987a825eb81fd748ed906..11c36e1d6400e2c0951e4e121851e40bd713ee0e 100644 GIT binary patch delta 22 ecmZp?&)j&QdBee0b`u3dLn|ZW%_mxSW&!|e^9efu delta 22 ecmZp?&)j&QdBee0c4GxYODjY3%_mxSW&!|fKnX\n" "Language: sk_SK\n" @@ -684,6 +684,22 @@ msgstr "Zlyhalo uloženie súboru: %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Súborový formát %(ext)s bol pridaný k %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Počkajte, prosím minútku pred registráciou ďalšieho používateľa" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registrovať" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Počkajte, prosím minútku pred opätovným prihlásením" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Nastavenie Google Drive nie je dokončené, skúste deaktivovať a znovu aktivovať Google Drive" @@ -1435,21 +1451,6 @@ msgstr "Vyskytla sa chyba pri posielaní knihy: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Nastavte vo vašom profile platnú e-mailovú adresu pre vašu čítačku." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Počkajte, prosím minútku pred registráciou ďalšieho používateľa" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registrovať" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Poštový server nie je nastavený, kontaktujte prosím správcu." @@ -1466,10 +1467,6 @@ msgstr "Úspech! Potvrdzujúci e-mail bol odoslaný." msgid "Cannot activate LDAP authentication" msgstr "Nie je možné aktivovať LDAP autentifikáciu" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Počkajte, prosím minútku pred opätovným prihlásením" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/sl/LC_MESSAGES/messages.mo b/cps/translations/sl/LC_MESSAGES/messages.mo index cee5866324a9be6e09d00215d6e30f1e394dda11..846592563b3f7dd6b7c6967367a7b2e969761cc6 100644 GIT binary patch delta 13602 zcmYM)cX*XW+Q;!Dq!Q9d0tqP`(nvy0A(SL^LMR(4fdE3-P(%blr3r`!5m0)UA_fHo zRNB5QRjMo{AW~gW0qFvU-V_w}`^(IAz5CB+W}bPb+;h)!qV8|E%kI5Z)^)yu+k6NA zYgN|ah`_wcs{Q}}rlmO?VN|DMD6YgT+>Ocj9AmIfU5BFv=Ap)UA1h#yt^W(1)PKNu zyo2=|4ws{1y2If`LoRm4eC&d2umQT!t3EbDcN~e0aV&b`4(mQ-4~`>P36Ennyn*E~ zkU{(~0?T7{3}${ueG2OM5Bp#^s^fTDpN*Qh2sO|b)^(_U+t442Q49D9)&Cr7A(v5+ zc!uid$F4L^6h<(=BauQhW}`0-K)o;$LvRX)<7cRqZ%3U{F{n9u{CXY=>L0I=Yh} zRWTX0u}-LnjKGTcE-F{%W)Xkwa5oKM_+RwEyXb>YFaXOoGCK%Hg){;c!ZdWl#u$Vx zP!n~v^#c3+ZQDK)70I!vNG@tb{GAk5(4YkzKn;8ml@leX9R-tdb+8F)RuaTK8@ z{0a5muUHdrVj_k%F-O=8^Qm`5ZD2iC#)B@~a2d6LXBdegO-+YX)C;+`{wnII-bWqX z$EY2BiE+3G6~W(76WqqC=-tfptBwiOTVX7^-lWiq!h8(GbEq@AgL=`Uxmj2O7Eo`7 zh4?vYVP#vG3Bysz7mYDk0~L|>sD-?OO4bqB04F22!R6RXK@*)so%JKEhaN4>P8*>X z)(NAqA2!7asH51A?)U(8rhlTc+aufDCVx~!BT?gLpl(AuOws+%qo5Z*M1^)9>KcB9 zip*wIGQL1I?eL+o8orFtI1=M=F-G7X)Pl}q>GecS`~D-$0jMN%qK+aH6EGJ$;z;Bb$01Y%gWH-jPehH^0^P8^t#?L6ys$0t z*9r&I;Ef|t1B^p2oR3PfB2>Rks59S*iTFEK!;p5Se-(J&6v5|Dk;+ExI*QY%iSMEM zm&r9p8i`tHbr%I?XJgctu%~q>YGIR6Ni-MB;R-B||3W3%PW${nsP|8!#=C{S=<~Aq zaD`zH>TOW(twb%{wT6OLx(l_UpHM5lg-Vv^sFg>yHy@n(sD-pb4b&0&R5-d~X=u@p z`WDoC2Wx%I_D-lB_eDkIEmXfT_W6gX2^U&d z+V)MT4IMx&^cU0-Uqt2DpIA}%-;Wg5gE&+OvryNslXVX2h2xll*H94)>tv256$7bf zqZZN?wSoSqg^xrX$plp7mZ6Sj4F)p5<68;}%@I^KpTe5>7p7uTo=L_6)U|sL<8h_+ z2h;?QtU;a4(Iq3N=V*`G*k?!{IyRve>ehwx*Mvb7bWJi)6L-XxI1b}*KPo~cs2#cG zn;i#Y67?9Yi@B)VG68jc*P?FAX4KBNqsBjA+aKi<|6m%P(x4ph?`pEui5jp2>ctOH zXE+CaaUoX36{sZLflfS&LHM_=2X-^Raw(|moR3Pqh)F&~_R$@JZA{E~3u# zKI+To*4_N&<3znU4E5d;)DAbG`fb6=c*=SQGpLt)#cU)Sb<`bDN!-;%K?C%)4nXaA zFe=+eVK{z(N~)!(1+GI4up5=E-(xQNaLKjs?${a!p~l-}+xK7y^^>R^aNVE~LE#Tn z=t6p$>`p}Oq&ez~R)9MD@mL9GqH<%UZ9jrKqMtDqFJJ|9FED?;hoUF-4yXlnLpJ1c z^rfJk48w37XI+9?&=zcq-y><_2<>Hd_9klK+fb1?jiLCPtvmi{>H(;0n~3_mp$E3a zBCMqQe}#g+?SEl1MiugR9=1pAd^RfN8&MPNM@8UQRR1T~1QUCktbZMK1Vd2~n20*c zg{T}`X4}`JJM%mCQqazeQMqsxb&YP?_TWCIy$)*Nx~LGgLM2m2%))M%feTQPIf+{E zUDN`+`R zg{Gl$CL1+=C)7rJBcBq-d;N&NLi-~P?syILJt#pX%S*4CWc0>J>M^JZnqnMw!|Lcl z_5TJvaD#2%hN;xAp&M52Zz53z)jzR6@h?LmnFj4R4Yi=Ys1OcEg=!8a;VP_yC((&+ zubE%JIBZD$HH^aLs0qJAE%*Q`0>7f>yN$7U&t)4b4lv0UhRt}8g$n&Rtc6oiXS)rx z(8s8wi+|nN3!T&#Vh(Oa9Z8vi=KWaAq}~bJ;Vj$kI!D1tL-|4G15y)pM(<)dT!^}c z%TbZpj9z#U)A2Yaq1PKG*-}vxw?plCFe+kWu_>;_7`$uR`Th?!$d-UDNG|NBwU4yRywEJAPm z2K{iOef}TR^*e(Bc+=LOq5Av2WyYz5id=Q{$8>Cs*{Ge*Le2AU^w9m^LqS=8(0a~x zxNm)dy2s_;HZR7Zc9LT24N=L~3N>*%^uc`8C%g}8A@8AX(G1jltI?$nd+dX=s1-g% zWo^_@6T)=V3yo3z^HA4s2v)=SsBGSWn)nh1;%(G*bPO{|>4~kVwnr^!;V|MKMqw2V z3dwgEghx?3yo|y4JL zWgE7jlZJz+iEp5G^Z?cIDQe~3Bh7#nQSGs)P^Y5$w?tjXc9?=AQAhSQM&mxz_}6W_ z>plgo%=aDhrHjN4)Kk%k6Hz-^ftp}7YJd%>1?|9!cnGzSi>MFH1Ju#g8D&1fEm21> z3Y9w(v4Vd8zoDQI?nHfZ51`KUiuDhyM7{iIV=QV%nWzc#QMobzbp&tO_7SLYKSGT+ z+xjJH!&|ZR@Bd;7Av9dDKE^QW<;R#1$D^LtMeVdLYU1AL#9^qN&bNMzq11PwCO%`^ zOHl8<^sb3S5PIqUSD~QLCRl6R4(X@?nqgh+f;!V_SOa%qLoC5mtTxv83MNvYY2Avo zsb97Ry=QWyIl2;fFqndpV}X6J4XabXiW*4&l;Xq;RR12R1y4jxJk8d3TMwWj^#dwN zucC73A?lVrMID*@IL==UzT?b*p{TQ|f>p6LYN8IPiMnDAPD5q+j~I!L_ss&MPz!F1 zO0of{qnL?`z$&bXXRr!-jAtcI3i0F3*|b94_im_r+Y^;k1FdhOb}}5b@G;m1C!u~5 zj$}gp^oG+ zR>r?kM-V#6d=Ju5A#aXO?16fJENTJMY<)E*>HdF9L0Nqbm0V#TnhBa=1ohUaqj(jo z;V{g@C8!V3J@mxqsB7x+k?9|SibxXb`;m#>n1|YM0lG22W3=tyvM#W$L*45Gn1*LD z8UrVr9i^cc_2%e~?NE{Eh+5E_7=-Vj`b|SOoR3=AVl2n}j@11Xo0%6Ihc#Xuomvc1iX*sFnp@nSUkFvbQu&B;^Ed0(1-eL z)QUf~?aR=E`g&CIY_`u2q6R)<>t|34I)|G0A}RvqrkMx@p^hYZ8u3@iTGKG~CH|EO z>dYTZH`yOB!`%1Us2q6*WAPiTkH=8`y=R)_jYlO}I>uucbmCZSibbeMUcguI`b^@l zLW@}@>p#O<)Q_Wf)}*XWcH%Y{uCFCM@_sKHNkS!f;OTevlX?mU09kM zsD5WK7;hq{=W@KD(42-D^Uc4lI)Q_zM}N%617~74EWy_>djWqy;ySE@j)f+q$*40Q zgj&E{ROA+68m>b{^a|F%7wE40Ut^KEW+|v6XpN<3jA7IZQ7ayU8h92u@nclK%~%0< zp>}!#)$bfCVwX|xI~JSd48f{Y>!L67JMt+cVLw#z&BAK93-x328@9&yPfQZNiOP|Y zs1MQv)cY$@--{F26K`M@Y_-JLA9d6pqLTJYbSY%T6g1FX)C)nMnoy-;DD_;_eeI7* zA{Xi!7NKs%UW~*;sPV320{Ryj>!bP?VgsCnipcIF;vY`oM;f%Ed#HNIQj-J8*oS%% z>Uo*Z%oj2q73w;ui85@xFIJ{L1U11F%*3UrqdkjSUK+OUtugBLq+xxs-OSL(g^bJ z|0!rC38ul3iBZ(sp{~_HOvCrEA8tTJCTx|tUT>gwI0f}Z`x+IIZ_y3+qdOi(MfSLD zKZnt}|CcD}1^2J)j}CfJuZ{7Tj@m&_Ov3T#iEB_H--t@4BN&5MPz&+;+AJ^(wexh; zd+kyEx?<_y|L;=JjwhnNOkdaz$5AVPgj&cm)I`zWn1LIhlC%rz`2^JSZ!ihJLwx~n zS<9|A$r*-PP&0H@r_h6fR{Rl0;38BKZ9--FVf4aZP%mD=s`woB!E&xK-}aYLNm_^# za2_g>VQWn;IZ;Q|0G-%vE%DdRN7Imsi%|6=sIxCYAAEsYfX_Pf?{0%pN!T5gq{C4I z&p>TpEo$P!wtfPAsoz0u^l$V-zxAAdc?yy1&4VOVJpp(6J?YUfW-@4Ig>$sUDusJjv==*!j}GjIVW;7P2Ff1wsqVQIYr@b=Jk`#OtU~dv7z}i-xEi>xiZQ{jV2=U>e>+ zg=P{K;4;*JFMVrXOhoOZDOSZC49C||$uP1)=zr~h#4-2r~cjhV@%`gHy33p2BFXyx$~c7V68{ z3!OL^qi`lR!nLUWw~*xIzyBOC4?xbFXX+wiosfv^^vKe4K!&bTcmV?S(w3(ymfqZj^!sdx$X zL8^Gj{E^xgbtIj!bVFE%`XJ22AsEj5j@1;jql1`;cd!kH9X7uWeNiD>i3<54R8j_f zZ*rp-YJv$^38$iN&vM)TZ`8Qo+WJ+jPQ3(6|NCF)5fhRQSf2+yum#S?YWOqO#xg&c z_7qh6NNkKtQIYx;wUIwD8=Xf@|Nf}Rt;VW&4SS*2G2*X*UOQ&8covpsEoukr(H-|- z9Xx=s_y<Z zzOxNSPy_sIy@|fmpW3?Dk7lA!45B?6^?o{Pz^2$9b5W64ih=lFR3xvX-n(semHDrk zprSPvb(SgUgY8f+cD3~a)XrWFnkp?;5gJZoQDeeC#bVtgNo2@RKKIP zei=*u`TsrzouT6w^M{8IY6t$9hy73!ZbR+xJJdvnQIR`=O1_6!5uc+b3OQ?zA`w+@ zWa}MKN!=e^ns^=sO|TSoRx42}-hq1Yd#sEXP-puLwSa(g=4dKmGwLs+eq83DBDM*& zu&b!txPuzc@4PwM=<~$C4-HLd(Ea=Zm28Jl6CA_RBe7mb?eI@jhy#8#6Gx*K-Val8 z4C=jg*cf-CHsrWqBJGcgT;&Tc^M^ww4Z1#^u?qIaa2${7ScE#u-Kd3~L>lOmrO|0Q2qL#-W!dI z++wVRyRj;svGu2@kXN{D79MY{i8>lrnk_U!g)|3~u{$bBreQVQiVE#TY>OdR_%>i6 z*2T408?T`H1z$D4hB=r*eJm;`)}y`yznXUb`_DD=Y0N_1>w(t!sDe=db;G_0}@j$s4pr?DRfUN^sr zBT*4qj|%-ctb>1}6KmZtXZkWGP#=Jb%p8oygQ$6aN8O^Jn_PDng#-#Z(;BFiHAgRO zW9@|6Sq~hBgHXwM5nJIyRD?2rHv>0CP22_lfzz-V{*20n$P)A0kc_SlG`vP32DhO? zejc^bfLmrk^-&9KjAgM4YM}0@Bpr-_I1NLw2y5bI^uepB2;9SX48CppXWZugXVCBu z8a#0_`r&NUi=Ux(z8b6JcI$Q2gu!>rQN&{{>e;B!4!89wsD*FEEIfuy(eJKF&h~eS zzb2kYLmW;=f82nI#9l1GM_3;7?wM;-i0VHO193L$J}*a2xC3<^PoWlGg5DT<-{eX( zD&oyu6rw2fw@$)L>R+OEbP2Vizz61w7LVnq*F)X&X13lJ75X8li9WLJb5P0pDF)&W z48o(f?z&7NiH1k^f%BmWeHtnQ2j$6nJ-@^22<~d z`Wf$U+m{+$j*S!)+QX>iI)lD=7PXU`s3UoZx)pAZ%>sQ<3ktJVK}{Toico8e#XMBf yjY1{iXXuDa=sje}z{H`>4J*>N25wl9JvZAk&6%9sFePIVFwlf delta 13720 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 J-VeRH{U4(nC=>ty diff --git a/cps/translations/sl/LC_MESSAGES/messages.po b/cps/translations/sl/LC_MESSAGES/messages.po index 36d0680ef..4b63217d5 100644 --- a/cps/translations/sl/LC_MESSAGES/messages.po +++ b/cps/translations/sl/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2024-09-18 19:45+0200\n" "Last-Translator: Andrej Kralj\n" "Language: sl\n" @@ -684,6 +684,22 @@ msgstr "Nisem uspel shraniti datoteke %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Oblina datotek %(ext)s je dodan v %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "Počakajte eno minuto za registracijo naslednjega uporabnika" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registriraj" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "Pred naslednjo prijavo počakajte eno minuto" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Nastavitev Google Drive ni dokončana, poskusite deaktivirati in znova aktivirati Google Drive" @@ -1435,21 +1451,6 @@ msgstr "Ups! Pri pošiljanju knjige je prišlo do napake: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "Ups! Posodobite svoj profil z veljavnim e-poštnim naslovom eReaderja." -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "Počakajte eno minuto za registracijo naslednjega uporabnika" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registriraj" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "Napaka pri povezavi z zalednim strežnikom limiterja, obrnite se na skrbnika" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "Ups! E-poštni strežnik ni nastavljen, obrnite se na skrbnika." @@ -1466,10 +1467,6 @@ msgstr "Uspeh! Potrditveno e-poštno sporočilo je bilo poslano." msgid "Cannot activate LDAP authentication" msgstr "Ni mogoče aktivirati avtentikacije LDAP" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "Pred naslednjo prijavo počakajte eno minuto" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/sv/LC_MESSAGES/messages.mo b/cps/translations/sv/LC_MESSAGES/messages.mo index 038ccccc4284f9a90a56dd0173eb6b2031c80c12..f08fcafe67db595610d290dc1b4c00c3d02d77fd 100644 GIT binary patch delta 22 ecmeCa&eVOKX~Urub`u3dLn|ZW%_mb1xd8xa0SMy& delta 22 ecmeCa&eVOKX~Uruc4GxYODjY3%_mb1xd8xaP6+J) diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po index 9a12eba30..63e7be99d 100644 --- a/cps/translations/sv/LC_MESSAGES/messages.po +++ b/cps/translations/sv/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2021-05-13 11:00+0000\n" "Last-Translator: Jonatan Nyberg \n" "Language: sv\n" @@ -684,6 +684,22 @@ msgstr "Det gick inte att lagra filen %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "Filformatet %(ext)s lades till %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Registrera" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Installationen av Google Drive är inte klar, försök att inaktivera och aktivera Google Drive igen" @@ -1435,21 +1451,6 @@ msgstr "Det gick inte att skicka den här boken: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Registrera" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "E-postservern är inte konfigurerad, kontakta din administratör!" @@ -1466,10 +1467,6 @@ msgstr "Bekräftelsemail skickades till ditt e-postkonto." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/tr/LC_MESSAGES/messages.mo b/cps/translations/tr/LC_MESSAGES/messages.mo index 474e9bedf2177352201122b9ea89e7d7ac3912f6..91fd81cec02ae440bf2e1a6c9b77627548a5ba0c 100644 GIT binary patch delta 22 ecmdlxhjH&5#trv$*-aD-4XuofH$T;lPyhgBR0s(G delta 22 ecmdlxhjH&5#trv$*^LzpEv*dAH$T;lPyhgBp$HQI diff --git a/cps/translations/tr/LC_MESSAGES/messages.po b/cps/translations/tr/LC_MESSAGES/messages.po index fc9e05a7c..82b842d3d 100644 --- a/cps/translations/tr/LC_MESSAGES/messages.po +++ b/cps/translations/tr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2020-04-23 22:47+0300\n" "Last-Translator: iz \n" "Language: tr\n" @@ -684,6 +684,22 @@ msgstr "%(file)s dosyası kaydedilemedi." msgid "File format %(ext)s added to %(book)s" msgstr "%(book)s kitabına %(ext)s dosya biçimi eklendi" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Kayıt ol" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Drive kurulumu tamamlanmadı, Google Drive'ı devre dışı bırakmayı ve tekrar etkinleştirmeyi deneyin" @@ -1435,21 +1451,6 @@ msgstr "" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Kayıt ol" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "E-Posta sunucusu ayarlanmadı, lütfen yöneticinizle iletişime geçin!" @@ -1466,10 +1467,6 @@ msgstr "Onay e-Postası hesabınıza gönderildi." msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo index 55a4a235b98104b1d3188292f4bd0028ce20cb76..572a30f645fcb7dfed890b3e09f4e5a6b154763a 100644 GIT binary patch delta 22 ecmaE~mhsVA#tr8**i94+4XuofH(%A@)dK))%Lont delta 22 ecmaE~mhsVA#tr8**o_qoEv*dAH(%A@)dK)*7zh{u diff --git a/cps/translations/uk/LC_MESSAGES/messages.po b/cps/translations/uk/LC_MESSAGES/messages.po index 6a63c1d0f..0245c99e1 100644 --- a/cps/translations/uk/LC_MESSAGES/messages.po +++ b/cps/translations/uk/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: ABIS Team \n" "Language: uk\n" @@ -696,6 +696,22 @@ msgstr "" msgid "File format %(ext)s added to %(book)s" msgstr "" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Зареєструватись" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "" @@ -1461,21 +1477,6 @@ msgstr "Помилка при відправці книги: %(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Зареєструватись" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1492,10 +1493,6 @@ msgstr "" msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, fuzzy, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/vi/LC_MESSAGES/messages.mo b/cps/translations/vi/LC_MESSAGES/messages.mo index 0cc4b13f06c918be67e4da7166125fe832cd1c3c..a12db662fd91b019be57e778826b36f30deaeddb 100644 GIT binary patch delta 22 dcmaF*gz@PU#tqu`>?R6^hE_(#n~m&^jR9(A2bBN- delta 22 dcmaF*gz@PU#tqu`?8XX)mR5%5n~m&^jR9)22cG}{ diff --git a/cps/translations/vi/LC_MESSAGES/messages.po b/cps/translations/vi/LC_MESSAGES/messages.po index 3fd9412ff..963a53cfb 100644 --- a/cps/translations/vi/LC_MESSAGES/messages.po +++ b/cps/translations/vi/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2022-09-20 21:36+0700\n" "Last-Translator: Ha Link \n" "Language: vi\n" @@ -681,6 +681,22 @@ msgstr "Lưu file thất bại %(file)s." msgid "File format %(ext)s added to %(book)s" msgstr "" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "Đăng ký" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "" @@ -1432,21 +1448,6 @@ msgstr "" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "Đăng ký" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1463,10 +1464,6 @@ msgstr "" msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index 6f3f26fb541233a24a3c7de0b16cf6449b09ec3c..5095ac47765e6139293fe1e52d59ba94110d5d90 100644 GIT binary patch delta 14186 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 delta 14287 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 D$&iiT diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index fc9843f1b..76edf5de4 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2025-12-06 13:53+0800\n" "Last-Translator: qx100\n" "Language: zh_CN\n" @@ -684,6 +684,22 @@ msgstr "保存文件 %(file)s 失败。" msgid "File format %(ext)s added to %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "请等待一分钟注册下一个用户" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "注册" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "下次登录前请等待一分钟" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Drive 设置未完成,请尝试停用并再次激活 Google 云端硬盘" @@ -1435,21 +1451,6 @@ msgstr "糟糕!发送这本书籍的时候出现错误:%(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "请先配置您的 Kindle 邮箱。" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "请等待一分钟注册下一个用户" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "注册" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "限制器后台连接错误,请联系管理员" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "邮件服务未配置,请联系网站管理员。" @@ -1466,10 +1467,6 @@ msgstr "确认邮件已经发送到您的邮箱。" msgid "Cannot activate LDAP authentication" msgstr "无法激活 LDAP 认证" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "下次登录前请等待一分钟" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 13d1a366a6cebf8a00373ae238badb3577049177..6c040c0c7997851d0405b57f08e6852a27dd23a7 100644 GIT binary patch delta 22 ecmbO+gL%db<_*v4*-aD-4XuofH@~gd_5lE7@d$1J delta 22 ecmbO+gL%db<_*v4*^LzpEv*dAH@~gd_5lE8J_vXK diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po index eba101f38..348cd13d0 100644 --- a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: 2025-09-10 03:46+0000\n" "Last-Translator: finrodchen \n" "Language: zh_TW\n" @@ -684,6 +684,22 @@ msgstr "保存文件 %(file)s 失敗。" msgid "File format %(ext)s added to %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "請等待一分鐘後再註冊下一位使用者" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "註冊" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "請於下一次登入前等待一分鐘" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "Google Drive 設置未完成,請嘗試停用並再次激活Google雲端硬碟" @@ -1435,21 +1451,6 @@ msgstr "糟糕!發送這本書籍的時候出現錯誤:%(res)s" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "請等待一分鐘後再註冊下一位使用者" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "註冊" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "郵件服務未配置,請聯繫網站管理員!" @@ -1466,10 +1467,6 @@ msgstr "確認郵件已經發送到您的郵箱。" msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "請於下一次登入前等待一分鐘" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/messages.pot b/messages.pot index a020a01cd..9131a48bf 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-02-13 19:17+0100\n" +"POT-Creation-Date: 2026-02-14 11:23+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -683,6 +683,22 @@ msgstr "" msgid "File format %(ext)s added to %(book)s" msgstr "" +#: cps/error_handler.py:98 +msgid "Please wait one minute to register next user" +msgstr "" + +#: cps/error_handler.py:99 cps/templates/layout.html:69 +#: cps/templates/layout.html:104 cps/templates/login.html:27 +#: cps/templates/register.html:17 cps/web.py:1301 cps/web.py:1305 +#: cps/web.py:1311 cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 +#: cps/web.py:1355 +msgid "Register" +msgstr "" + +#: cps/error_handler.py:103 +msgid "Please wait one minute before next login" +msgstr "" + #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" msgstr "" @@ -1434,21 +1450,6 @@ msgstr "" msgid "Oops! Please update your profile with a valid eReader Email." msgstr "" -#: cps/web.py:1291 -msgid "Please wait one minute to register next user" -msgstr "" - -#: cps/templates/layout.html:69 cps/templates/layout.html:104 -#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1292 -#: cps/web.py:1296 cps/web.py:1301 cps/web.py:1305 cps/web.py:1311 -#: cps/web.py:1335 cps/web.py:1339 cps/web.py:1352 cps/web.py:1355 -msgid "Register" -msgstr "" - -#: cps/web.py:1295 cps/web.py:1402 -msgid "Connection error to limiter backend, please contact your administrator" -msgstr "" - #: cps/web.py:1300 cps/web.py:1351 msgid "Oops! Email server is not configured, please contact your administrator." msgstr "" @@ -1465,10 +1466,6 @@ msgstr "" msgid "Cannot activate LDAP authentication" msgstr "" -#: cps/web.py:1398 -msgid "Please wait one minute before next login" -msgstr "" - #: cps/web.py:1417 #, python-format msgid "you are now logged in as: '%(nickname)s'" diff --git a/requirements.txt b/requirements.txt index 0644d14d6..60ceea4b6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ flask-wtf>=0.14.2,<1.3.0 chardet>=3.0.0,<5.3.0 netifaces-plus>=0.12.0,<0.13.0 urllib3>=1.22,<3.0 -Flask-Limiter>=2.3.0,<4.0.0 +Flask-Limiter>=2.3.0,<4.2.0 regex>=2022.3.2,<2026.1.16 bleach>=6.0.0,<6.4.0 python-magic>=0.4.27,<0.5.0 From e3bf369ad635f7232772d13695220ece6085e6de Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Tue, 17 Feb 2026 18:30:47 +0100 Subject: [PATCH 3/5] Fix for flask limiter 4.0 Fix reseting flask_limiter keys --- cps/kobo.py | 82 +++++++++++---- cps/kobo_auth.py | 40 +------- cps/main.py | 4 +- cps/usermanagement.py | 6 +- cps/web.py | 24 +---- pyproject.toml | 28 +++--- test/Calibre-Web TestSummary_Linux.html | 127 ++++++++---------------- 7 files changed, 128 insertions(+), 183 deletions(-) diff --git a/cps/kobo.py b/cps/kobo.py index da9c9bc55..5f9db85a6 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -19,38 +19,30 @@ import base64 from datetime import datetime, timezone +from functools import wraps import os import uuid import zipfile from time import gmtime, strftime import json from urllib.parse import unquote +import requests -from flask import ( - Blueprint, - request, - make_response, - jsonify, - current_app, - url_for, - redirect, - abort -) -from .cw_login import current_user +from flask import Blueprint, request, make_response, jsonify, current_app, url_for, redirect, abort, g from werkzeug.datastructures import Headers from sqlalchemy import func from sqlalchemy.sql.expression import and_, or_ from sqlalchemy.exc import StatementError -import requests +from flask_limiter.util import get_remote_address +from .cw_login import current_user, login_user from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status -from . import isoLanguages from .epub import get_epub_layout from .constants import COVER_THUMBNAIL_SMALL, COVER_THUMBNAIL_MEDIUM, COVER_THUMBNAIL_LARGE, BASE_DIR from .helper import get_download_link from .services import SyncToken as SyncToken from .web import download_required -from .kobo_auth import requires_kobo_auth, get_auth_token +from . import isoLanguages, limiter KOBO_FORMATS = {"KEPUB": ["KEPUB"], "EPUB": ["EPUB3", "EPUB"]} KOBO_STOREAPI_URL = "https://storeapi.kobo.com" @@ -65,6 +57,33 @@ kobo_auth.register_url_value_preprocessor(kobo) log = logger.create() +def get_auth_token(): + if "auth_token" in g: + return g.get("auth_token") + else: + return None + + +def requires_kobo_auth(f): + @wraps(f) + def inner(*args, **kwargs): + auth_token = get_auth_token() + if auth_token is not None: + user = ( + ub.session.query(ub.User) + .join(ub.RemoteAuthToken) + .filter(ub.RemoteAuthToken.auth_token == auth_token).filter(ub.RemoteAuthToken.token_type==1) + .first() + ) + if user is not None: + login_user(user) + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] + return f(*args, **kwargs) + log.debug("Received Kobo request without a recognizable auth token.") + return abort(401) + return inner + + def get_store_url_for_current_request(): # Programmatically modify the current url to point to the official Kobo store __, __, request_path_with_auth_token = request.full_path.rpartition("/kobo/") @@ -140,7 +159,7 @@ def convert_to_kobo_timestamp_string(timestamp): @kobo.route("/v1/library/sync") @requires_kobo_auth -# @download_required +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleSyncRequest(): if not current_user.role_download(): log.info("Users need download permissions for syncing library to Kobo reader") @@ -336,6 +355,7 @@ def generate_sync_response(sync_token, sync_results, set_cont=False): @kobo.route("/v1/library//metadata") @requires_kobo_auth @download_required +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleMetadataRequest(book_uuid): if not current_app.wsgi_app.is_proxied: log.debug('Kobo: Received unproxied request, changed request port to external server port') @@ -368,7 +388,7 @@ def get_download_url_for_book(book_id, book_format): ) return url_for( "kobo.download_book", - auth_token=kobo_auth.get_auth_token(), + auth_token=get_auth_token(), book_id=book_id, book_format=book_format.lower(), _external=True, @@ -503,9 +523,11 @@ def get_metadata(book): return metadata + @csrf.exempt @kobo.route("/v1/library/tags", methods=["POST", "DELETE"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) # Creates a Shelf with the given items, and returns the shelf's uuid. def HandleTagCreate(): # catch delete requests, otherwise they are handled in the book delete handler @@ -541,6 +563,7 @@ def HandleTagCreate(): @csrf.exempt @kobo.route("/v1/library/tags/", methods=["DELETE", "PUT"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleTagUpdate(tag_id): shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.uuid == tag_id, ub.Shelf.user_id == current_user.id).one_or_none() @@ -595,6 +618,7 @@ def add_items_to_shelf(items, shelf): @csrf.exempt @kobo.route("/v1/library/tags//items", methods=["POST"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleTagAddItem(tag_id): items = None try: @@ -625,6 +649,7 @@ def HandleTagAddItem(tag_id): @csrf.exempt @kobo.route("/v1/library/tags//items/delete", methods=["POST"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleTagRemoveItem(tag_id): items = None try: @@ -758,6 +783,7 @@ def create_kobo_tag(shelf): @csrf.exempt @kobo.route("/v1/library//state", methods=["GET", "PUT"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleStateRequest(book_uuid): book = calibre_db.get_book_by_uuid(book_uuid) if not book or not book.data: @@ -907,6 +933,7 @@ def get_current_bookmark_response(current_bookmark): @kobo.route("/////image.jpg", defaults={'Quality': ""}) @kobo.route("//////image.jpg") @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleCoverImageRequest(book_uuid, width, height, Quality, isGreyscale): try: if int(height) > 1000: @@ -943,6 +970,7 @@ def TopLevelEndpoint(): @csrf.exempt @kobo.route("/v1/library/", methods=["DELETE"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleBookDeletionRequest(book_uuid): log.info("Kobo book delete request received for book %s" % book_uuid) book = calibre_db.get_book_by_uuid(book_uuid) @@ -962,6 +990,7 @@ def HandleBookDeletionRequest(book_uuid): @kobo.route("/v1/library/", methods=["DELETE", "GET", "POST"]) @kobo.route("/v1/library//preview", methods=["POST"]) def HandleUnimplementedRequest(dummy=None): + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] log.debug("Unimplemented Library Request received: %s (request is forwarded to kobo if configured)", request.base_url) return redirect_or_proxy_request() @@ -976,6 +1005,9 @@ def HandleUnimplementedRequest(dummy=None): @kobo.route("/v1/analytics/", methods=["GET", "POST"]) @kobo.route("/v1/assets", methods=["GET"]) def HandleUserRequest(dummy=None): + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] + log.error("Key: {}".format(limiter.current_limit.key)) + log.error("Remaining: {}".format(limiter.current_limit.remaining)) log.debug("Unimplemented User Request received: %s (request is forwarded to kobo if configured)", request.base_url) return redirect_or_proxy_request() @@ -983,6 +1015,7 @@ def HandleUserRequest(dummy=None): @csrf.exempt @kobo.route("/v1/user/loyalty/benefits", methods=["GET"]) def handle_benefits(): + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] if config.config_kobo_proxy: return redirect_or_proxy_request() else: @@ -992,6 +1025,7 @@ def handle_benefits(): @csrf.exempt @kobo.route("/v1/analytics/gettests", methods=["GET", "POST"]) def handle_getests(): + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] if config.config_kobo_proxy: return redirect_or_proxy_request() else: @@ -1018,6 +1052,7 @@ def handle_getests(): @kobo.route("/v1/affiliate", methods=["GET", "POST"]) @kobo.route("/v1/deals", methods=["GET", "POST"]) def HandleProductsRequest(dummy=None): + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] log.debug("Unimplemented Products Request received: %s (request is forwarded to kobo if configured)", request.base_url) return redirect_or_proxy_request() @@ -1046,7 +1081,10 @@ def make_calibre_web_auth_response(): @kobo.route("/v1/auth/refresh", methods=["POST"]) @kobo.route("/v1/auth/device", methods=["POST"]) @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleAuthRequest(): + log.error(limiter.current_limit) + log.error(limiter.current_limit) log.debug('Kobo Auth request') if config.config_kobo_proxy: try: @@ -1058,6 +1096,7 @@ def HandleAuthRequest(): @kobo.route("/v1/initialization") @requires_kobo_auth +# @limiter.limit("3/minute", key_func=get_remote_address) def HandleInitRequest(): log.info('Init') @@ -1088,7 +1127,7 @@ def HandleInitRequest(): kobo_resources["image_host"] = calibre_web_url kobo_resources["image_url_quality_template"] = unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest", - auth_token=kobo_auth.get_auth_token(), + auth_token=get_auth_token(), book_uuid="{ImageId}", width="{width}", height="{height}", @@ -1096,7 +1135,7 @@ def HandleInitRequest(): isGreyscale='isGreyscale')) kobo_resources["image_url_template"] = unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest", - auth_token=kobo_auth.get_auth_token(), + auth_token=get_auth_token(), book_uuid="{ImageId}", width="{width}", height="{height}", @@ -1104,7 +1143,7 @@ def HandleInitRequest(): else: kobo_resources["image_host"] = url_for("web.index", _external=True).strip("/") kobo_resources["image_url_quality_template"] = unquote(url_for("kobo.HandleCoverImageRequest", - auth_token=kobo_auth.get_auth_token(), + auth_token=get_auth_token(), book_uuid="{ImageId}", width="{width}", height="{height}", @@ -1112,7 +1151,7 @@ def HandleInitRequest(): isGreyscale='isGreyscale', _external=True)) kobo_resources["image_url_template"] = unquote(url_for("kobo.HandleCoverImageRequest", - auth_token=kobo_auth.get_auth_token(), + auth_token=get_auth_token(), book_uuid="{ImageId}", width="{width}", height="{height}", @@ -1128,6 +1167,7 @@ def HandleInitRequest(): @kobo.route("/download//") @requires_kobo_auth @download_required +# @limiter.limit("3/minute", key_func=get_remote_address) def download_book(book_id, book_format): return get_download_link(book_id, book_format, "kobo") @@ -1299,3 +1339,5 @@ def NATIVE_KOBO_RESOURCES(): "userguide_host": "https://ereaderfiles.kobo.com", "wishlist_page": "https://www.kobo.com/{region}/{language}/account/wishlist" } + +limiter.limit("3/minute", key_func=get_remote_address)(kobo) diff --git a/cps/kobo_auth.py b/cps/kobo_auth.py index 9a5b47fc1..042fb1c24 100644 --- a/cps/kobo_auth.py +++ b/cps/kobo_auth.py @@ -62,14 +62,12 @@ particular calls to non-Kobo specific endpoints such as the CalibreWeb book down from binascii import hexlify from datetime import datetime from os import urandom -from functools import wraps -from flask import g, Blueprint, abort, request -from .cw_login import login_user, current_user +from flask import g, Blueprint, request +from .cw_login import current_user from flask_babel import gettext as _ -from flask_limiter import RateLimitExceeded -from . import logger, config, calibre_db, db, helper, ub, lm, limiter +from . import logger, config, calibre_db, db, helper, ub, lm from .render_template import render_title_template from .usermanagement import user_login_required @@ -135,13 +133,6 @@ def disable_failed_auth_redirect_for_blueprint(bp): lm.blueprint_login_views[bp.name] = None -def get_auth_token(): - if "auth_token" in g: - return g.get("auth_token") - else: - return None - - def register_url_value_preprocessor(kobo): @kobo.url_value_preprocessor # pylint: disable=unused-variable @@ -149,28 +140,3 @@ def register_url_value_preprocessor(kobo): g.auth_token = values.pop("auth_token") -def requires_kobo_auth(f): - @wraps(f) - def inner(*args, **kwargs): - auth_token = get_auth_token() - if auth_token is not None: - #try: - # limiter.check() - #except RateLimitExceeded: - # return abort(429) - #except (ConnectionError, Exception) as e: - # log.error("Connection error to limiter backend: %s", e) - # return abort(429) - user = ( - ub.session.query(ub.User) - .join(ub.RemoteAuthToken) - .filter(ub.RemoteAuthToken.auth_token == auth_token).filter(ub.RemoteAuthToken.token_type==1) - .first() - ) - if user is not None: - login_user(user) - [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] - return f(*args, **kwargs) - log.debug("Received Kobo request without a recognizable auth token.") - return abort(401) - return inner diff --git a/cps/main.py b/cps/main.py index b0f56b6d4..4b0e5440e 100644 --- a/cps/main.py +++ b/cps/main.py @@ -46,11 +46,10 @@ def main(): try: from .kobo import kobo, get_kobo_activated from .kobo_auth import kobo_auth - from flask_limiter.util import get_remote_address kobo_available = get_kobo_activated() except (ImportError, AttributeError): # Catch also error for not installed flask-WTF (missing csrf decorator) kobo_available = False - kobo = kobo_auth = get_remote_address = None + kobo = kobo_auth = None try: from .oauth_bb import oauth @@ -77,7 +76,6 @@ def main(): app.register_blueprint(gdrive) app.register_blueprint(editbook) if kobo_available: - limiter.limit("3/minute", key_func=get_remote_address)(kobo) app.register_blueprint(kobo) app.register_blueprint(kobo_auth) if oauth_available: diff --git a/cps/usermanagement.py b/cps/usermanagement.py index c7fdf9492..e9f0776be 100644 --- a/cps/usermanagement.py +++ b/cps/usermanagement.py @@ -43,14 +43,14 @@ def verify_password(username, password): if config.config_login_type == constants.LOGIN_LDAP and services.ldap: login_result, error = services.ldap.bind_user(user.name, password) if login_result: - [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] return user if error is not None: log.error(error) else: # limiter.check() if check_password_hash(str(user.password), password): - [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] return user ip_address = request.headers.get('X-Forwarded-For', request.remote_addr) log.warning('OPDS Login failed for user "%s" IP-address: %s', username, ip_address) @@ -120,7 +120,7 @@ def load_user_from_reverse_proxy_header(req): if rp_header_username: user = ub.session.query(ub.User).filter(func.lower(ub.User.name) == rp_header_username.lower()).first() if user: - [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] return user return None diff --git a/cps/web.py b/cps/web.py index 5ee7621f2..961e1df7f 100644 --- a/cps/web.py +++ b/cps/web.py @@ -30,7 +30,6 @@ from flask import session as flask_session from flask_babel import gettext as _ from flask_babel import get_locale from .cw_login import login_user, logout_user, current_user -# from flask_limiter import RateLimitExceeded from flask_limiter.util import get_remote_address from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError from sqlalchemy.sql.expression import text, func, false, not_, and_, or_ @@ -39,7 +38,7 @@ from sqlalchemy.sql.functions import coalesce from werkzeug.datastructures import Headers from werkzeug.security import generate_password_hash, check_password_hash -from . import constants, logger, isoLanguages, services +from . import constants, logger, isoLanguages, services, limiter from . import db, ub, config, app from . import calibre_db, kobo_sync_status from .search import render_search_results, render_adv_search_results @@ -55,7 +54,6 @@ from .usermanagement import login_required_if_no_ano from .kobo_sync_status import remove_synced_book from .render_template import render_title_template from .kobo_sync_status import change_archived_books -from . import limiter from .services.worker import WorkerThread from .tasks_status import render_task_status from .usermanagement import user_login_required @@ -1285,15 +1283,6 @@ def register_post(): if not config.config_public_reg: abort(404) to_save = request.form.to_dict() - #try: - # limiter.check() - #except RateLimitExceeded: - # flash(_(u"Please wait one minute to register next user"), category="error") - # return render_title_template('register.html', config=config, title=_("Register"), page="register") - #except (ConnectionError, Exception) as e: - # log.error("Connection error to limiter backend: %s", e) - # flash(_("Connection error to limiter backend, please contact your administrator"), category="error") - # return render_title_template('register.html', config=config, title=_("Register"), page="register") if current_user is not None and current_user.is_authenticated: return redirect(url_for('web.index')) if not config.get_mail_server_configured(): @@ -1358,7 +1347,7 @@ def register(): def handle_login_user(user, remember, message, category): login_user(user, remember=remember) flash(message, category=category) - [limiter.limiter.storage.clear(k.key) for k in limiter.current_limits] + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] return redirect(get_redirect_location(request.form.get('next', None), "web.index")) @@ -1392,15 +1381,6 @@ def login(): def login_post(): form = request.form.to_dict() username = strip_whitespaces(form.get('username', "")).lower().replace("\n","").replace("\r","") - #try: - # limiter.check() - #except RateLimitExceeded: - # flash(_("Please wait one minute before next login"), category="error") - # return render_login(username, form.get("password", "")) - #except (ConnectionError, Exception) as e: - # log.error("Connection error to limiter backend: %s", e) - # flash(_("Connection error to limiter backend, please contact your administrator"), category="error") - # return render_login(username, form.get("password", "")) if current_user is not None and current_user.is_authenticated: return redirect(url_for('web.index')) if config.config_login_type == constants.LOGIN_LDAP and not services.ldap: diff --git a/pyproject.toml b/pyproject.toml index b5d54ad4e..42b912285 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,26 +33,26 @@ dependencies = [ "Flask>=1.0.2,<3.2.0", "iso-639>=0.4.5,<0.5.0;python_version<'3.12'", "pycountry>=20.0.0,<25.0.0;python_version>='3.12'", - "PyPDF>=6.1.3,<6.5.0", + "PyPDF>=6.1.3,<6.7.0", "pytz>=2016.10", "requests>=2.32.0,<2.33.0", "SQLAlchemy>=1.3.0,<2.1.0", "tornado>=6.4.2,<6.6", "Wand>=0.4.4,<0.7.0", - "unidecode>=0.04.19,<1.4.0", + "unidecode>=0.04.19,<1.5.0", "lxml>=4.9.1,<5.4.0", "flask-wtf>=0.14.2,<1.3.0", "chardet>=3.0.0,<5.3.0", "netifaces-plus>=0.12.0,<0.13.0", "urllib3>=1.22,<3.0", - "Flask-Limiter>=2.3.0,<3.13.0", - "regex>=2022.3.2,<2025.3.20", - "bleach>=6.0.0,<6.3.0", + "Flask-Limiter>=2.3.0,<4.2.0", + "regex>=2022.3.2,<2026.1.16", + "bleach>=6.0.0,<6.4.0", "python-magic>=0.4.27,<0.5.0", "python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32'", "flask-httpAuth>=4.4.0,<5.0.0", - "cryptography>=39.0.0,<45.0.0", - "certifi>=2024.7.4,<2025.8.24", + "cryptography>=39.0.0,<47.0.0", + "certifi>=2024.7.4,<2026.1.5", ] dynamic = ["version"] @@ -70,9 +70,9 @@ content-type = "text/markdown" [project.optional-dependencies] gdrive = [ "google-api-python-client>=2.73.00,<2.200.0", - "gevent>20.6.0,<24.12.0", - "greenlet>=0.4.17,<3.3.0", - "httplib2>=0.9.2,<0.23.0", + "gevent>20.6.0,<25.9.2", + "greenlet>=0.4.17,<3.4.0", + "httplib2>=0.9.2,<0.32.0", "oauth2client>=4.0.0,<4.1.4", "uritemplate>=3.0.0,<4.3.0", "pyasn1-modules>=0.0.8,<0.7.0", @@ -91,19 +91,19 @@ goodreads = [ ] ldap = [ "python-ldap>=3.0.0,<3.5.0", - "Flask-SimpleLDAP>=1.4.0,<2.1.0", + "Flask-SimpleLDAP>=1.4.0,<2.2.0", ] oauth = [ "Flask-Dance>=2.0.0,<7.2.0", - "SQLAlchemy-Utils>=0.33.5,<0.42.0", + "SQLAlchemy-Utils>=0.33.5,<0.43.0", ] metadata = [ "rarfile>=3.2,<5.0", "scholarly>=1.2.0,<1.8", "markdown2>=2.0.0,<2.6.0", - "html2text>=2020.1.16,<2025.2.26", + "html2text>=2020.1.16,<2025.4.16", "python-dateutil>=2.1,<2.10.0", - "beautifulsoup4>=4.0.1,<4.14.0", + "beautifulsoup4>=4.0.1,<4.15.0", "faust-cchardet>=2.1.18,<2.1.20", "py7zr>=0.15.0,<0.21.0", "mutagen>=1.40.0,<1.50.0", diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 962374c38..029fa4d88 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@

-

Start Time: 2026-01-24 20:50:12

+

Start Time: 2026-02-17 19:21:22

-

Stop Time: 2026-01-25 04:15:44

+

Stop Time: 2026-02-18 02:50:40

-

Duration: 6h 13 min

+

Duration: 6h 14 min

@@ -2039,13 +2039,13 @@ - + TestLoadMetadata 1 0 - 0 1 0 + 0
Detail @@ -2053,27 +2053,26 @@ - +
TestLoadMetadata - test_load_metadata
- ERROR + FAIL
- From fbed304df85c697b75887017846a16826c813ea2 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 18 Feb 2026 19:11:38 +0100 Subject: [PATCH 4/5] Better Fix for flask limiter 4.0 --- cps/kobo.py | 47 +++++++++++++---------------------------------- cps/kobo_auth.py | 32 +++++++++++++++++++++++++++++--- cps/main.py | 4 +++- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/cps/kobo.py b/cps/kobo.py index 5f9db85a6..688c11f0d 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -19,7 +19,6 @@ import base64 from datetime import datetime, timezone -from functools import wraps import os import uuid import zipfile @@ -28,21 +27,30 @@ import json from urllib.parse import unquote import requests -from flask import Blueprint, request, make_response, jsonify, current_app, url_for, redirect, abort, g +from flask import ( + Blueprint, + request, + make_response, + jsonify, + current_app, + url_for, + redirect, + abort +) +from .cw_login import current_user from werkzeug.datastructures import Headers from sqlalchemy import func from sqlalchemy.sql.expression import and_, or_ from sqlalchemy.exc import StatementError -from flask_limiter.util import get_remote_address -from .cw_login import current_user, login_user from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status +from . import isoLanguages, limiter from .epub import get_epub_layout from .constants import COVER_THUMBNAIL_SMALL, COVER_THUMBNAIL_MEDIUM, COVER_THUMBNAIL_LARGE, BASE_DIR from .helper import get_download_link from .services import SyncToken as SyncToken from .web import download_required -from . import isoLanguages, limiter +from .kobo_auth import requires_kobo_auth, get_auth_token KOBO_FORMATS = {"KEPUB": ["KEPUB"], "EPUB": ["EPUB3", "EPUB"]} KOBO_STOREAPI_URL = "https://storeapi.kobo.com" @@ -57,33 +65,6 @@ kobo_auth.register_url_value_preprocessor(kobo) log = logger.create() -def get_auth_token(): - if "auth_token" in g: - return g.get("auth_token") - else: - return None - - -def requires_kobo_auth(f): - @wraps(f) - def inner(*args, **kwargs): - auth_token = get_auth_token() - if auth_token is not None: - user = ( - ub.session.query(ub.User) - .join(ub.RemoteAuthToken) - .filter(ub.RemoteAuthToken.auth_token == auth_token).filter(ub.RemoteAuthToken.token_type==1) - .first() - ) - if user is not None: - login_user(user) - [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] - return f(*args, **kwargs) - log.debug("Received Kobo request without a recognizable auth token.") - return abort(401) - return inner - - def get_store_url_for_current_request(): # Programmatically modify the current url to point to the official Kobo store __, __, request_path_with_auth_token = request.full_path.rpartition("/kobo/") @@ -1339,5 +1320,3 @@ def NATIVE_KOBO_RESOURCES(): "userguide_host": "https://ereaderfiles.kobo.com", "wishlist_page": "https://www.kobo.com/{region}/{language}/account/wishlist" } - -limiter.limit("3/minute", key_func=get_remote_address)(kobo) diff --git a/cps/kobo_auth.py b/cps/kobo_auth.py index 042fb1c24..ae9d1c12b 100644 --- a/cps/kobo_auth.py +++ b/cps/kobo_auth.py @@ -62,12 +62,13 @@ particular calls to non-Kobo specific endpoints such as the CalibreWeb book down from binascii import hexlify from datetime import datetime from os import urandom +from functools import wraps -from flask import g, Blueprint, request -from .cw_login import current_user +from flask import g, Blueprint, abort, request +from .cw_login import login_user, current_user from flask_babel import gettext as _ -from . import logger, config, calibre_db, db, helper, ub, lm +from . import logger, config, calibre_db, db, helper, ub, lm, limiter from .render_template import render_title_template from .usermanagement import user_login_required @@ -133,6 +134,13 @@ def disable_failed_auth_redirect_for_blueprint(bp): lm.blueprint_login_views[bp.name] = None +def get_auth_token(): + if "auth_token" in g: + return g.get("auth_token") + else: + return None + + def register_url_value_preprocessor(kobo): @kobo.url_value_preprocessor # pylint: disable=unused-variable @@ -140,3 +148,21 @@ def register_url_value_preprocessor(kobo): g.auth_token = values.pop("auth_token") +def requires_kobo_auth(f): + @wraps(f) + def inner(*args, **kwargs): + auth_token = get_auth_token() + if auth_token is not None: + user = ( + ub.session.query(ub.User) + .join(ub.RemoteAuthToken) + .filter(ub.RemoteAuthToken.auth_token == auth_token).filter(ub.RemoteAuthToken.token_type==1) + .first() + ) + if user is not None: + login_user(user) + [limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits] + return f(*args, **kwargs) + log.debug("Received Kobo request without a recognizable auth token.") + return abort(401) + return inner diff --git a/cps/main.py b/cps/main.py index 4b0e5440e..b0f56b6d4 100644 --- a/cps/main.py +++ b/cps/main.py @@ -46,10 +46,11 @@ def main(): try: from .kobo import kobo, get_kobo_activated from .kobo_auth import kobo_auth + from flask_limiter.util import get_remote_address kobo_available = get_kobo_activated() except (ImportError, AttributeError): # Catch also error for not installed flask-WTF (missing csrf decorator) kobo_available = False - kobo = kobo_auth = None + kobo = kobo_auth = get_remote_address = None try: from .oauth_bb import oauth @@ -76,6 +77,7 @@ def main(): app.register_blueprint(gdrive) app.register_blueprint(editbook) if kobo_available: + limiter.limit("3/minute", key_func=get_remote_address)(kobo) app.register_blueprint(kobo) app.register_blueprint(kobo_auth) if oauth_available: From 8cef72b84726dbf8c0775795769079ffa4de5b16 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 18 Feb 2026 19:24:23 +0100 Subject: [PATCH 5/5] Updated requirements --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 60ceea4b6..43a4c6cc8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,8 +4,8 @@ Flask-Babel>=3.0.0,<4.1.0 Flask-Principal>=0.3.2,<0.5.1 Flask>=1.0.2,<3.2.0 iso-639>=0.4.5,<0.5.0;python_version<'3.12' -pycountry>=20.0.0,<25.0.0;python_version>='3.12' -PyPDF>=6.1.3,<6.7.0 +pycountry>=20.0.0,<27.0.0;python_version>='3.12' +PyPDF>=6.1.3,<6.8.0 pytz>=2016.10 requests>=2.32.0,<2.33.0 SQLAlchemy>=1.3.0,<2.1.0