Merge branch 'Develop'
Update Requirements Update Teststatus
This commit is contained in:
@@ -25,7 +25,7 @@ import sys
|
|||||||
import os
|
import os
|
||||||
import mimetypes
|
import mimetypes
|
||||||
|
|
||||||
from flask import Flask, request
|
from flask import Flask
|
||||||
from flask.sessions import SecureCookieSessionInterface
|
from flask.sessions import SecureCookieSessionInterface
|
||||||
from .MyLoginManager import MyLoginManager
|
from .MyLoginManager import MyLoginManager
|
||||||
from flask_principal import Principal
|
from flask_principal import Principal
|
||||||
@@ -111,7 +111,8 @@ web_server = WebServer()
|
|||||||
updater_thread = Updater()
|
updater_thread = Updater()
|
||||||
|
|
||||||
if limiter_present:
|
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, in_memory_fallback_enabled=True, default_limits=[],
|
||||||
|
swallow_errors=True)
|
||||||
else:
|
else:
|
||||||
limiter = None
|
limiter = None
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,9 @@
|
|||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
from flask import render_template
|
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
|
from werkzeug.exceptions import default_exceptions
|
||||||
try:
|
try:
|
||||||
from werkzeug.exceptions import FailedDependency
|
from werkzeug.exceptions import FailedDependency
|
||||||
@@ -26,7 +28,10 @@ except ImportError:
|
|||||||
from werkzeug.exceptions import UnprocessableEntity as FailedDependency
|
from werkzeug.exceptions import UnprocessableEntity as FailedDependency
|
||||||
|
|
||||||
from . import config, app, logger, services
|
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()
|
log = logger.create()
|
||||||
|
|
||||||
@@ -85,3 +90,21 @@ def init_errorhandler():
|
|||||||
log.debug('LDAP server not accessible while trying to login to opds feed')
|
log.debug('LDAP server not accessible while trying to login to opds feed')
|
||||||
return error_http(FailedDependency())
|
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 make_response('', 429)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
37
cps/kobo.py
37
cps/kobo.py
@@ -25,6 +25,7 @@ import zipfile
|
|||||||
from time import gmtime, strftime
|
from time import gmtime, strftime
|
||||||
import json
|
import json
|
||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
|
import requests
|
||||||
|
|
||||||
from flask import (
|
from flask import (
|
||||||
Blueprint,
|
Blueprint,
|
||||||
@@ -41,10 +42,9 @@ from werkzeug.datastructures import Headers
|
|||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.sql.expression import and_, or_
|
from sqlalchemy.sql.expression import and_, or_
|
||||||
from sqlalchemy.exc import StatementError
|
from sqlalchemy.exc import StatementError
|
||||||
import requests
|
|
||||||
|
|
||||||
from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status
|
from . import config, logger, kobo_auth, db, calibre_db, helper, shelf as shelf_lib, ub, csrf, kobo_sync_status
|
||||||
from . import isoLanguages
|
from . import isoLanguages, limiter
|
||||||
from .epub import get_epub_layout
|
from .epub import get_epub_layout
|
||||||
from .constants import COVER_THUMBNAIL_SMALL, COVER_THUMBNAIL_MEDIUM, COVER_THUMBNAIL_LARGE, BASE_DIR
|
from .constants import COVER_THUMBNAIL_SMALL, COVER_THUMBNAIL_MEDIUM, COVER_THUMBNAIL_LARGE, BASE_DIR
|
||||||
from .helper import get_download_link
|
from .helper import get_download_link
|
||||||
@@ -140,7 +140,7 @@ def convert_to_kobo_timestamp_string(timestamp):
|
|||||||
|
|
||||||
@kobo.route("/v1/library/sync")
|
@kobo.route("/v1/library/sync")
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
# @download_required
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleSyncRequest():
|
def HandleSyncRequest():
|
||||||
if not current_user.role_download():
|
if not current_user.role_download():
|
||||||
log.info("Users need download permissions for syncing library to Kobo reader")
|
log.info("Users need download permissions for syncing library to Kobo reader")
|
||||||
@@ -336,6 +336,7 @@ def generate_sync_response(sync_token, sync_results, set_cont=False):
|
|||||||
@kobo.route("/v1/library/<book_uuid>/metadata")
|
@kobo.route("/v1/library/<book_uuid>/metadata")
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
@download_required
|
@download_required
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleMetadataRequest(book_uuid):
|
def HandleMetadataRequest(book_uuid):
|
||||||
if not current_app.wsgi_app.is_proxied:
|
if not current_app.wsgi_app.is_proxied:
|
||||||
log.debug('Kobo: Received unproxied request, changed request port to external server port')
|
log.debug('Kobo: Received unproxied request, changed request port to external server port')
|
||||||
@@ -368,7 +369,7 @@ def get_download_url_for_book(book_id, book_format):
|
|||||||
)
|
)
|
||||||
return url_for(
|
return url_for(
|
||||||
"kobo.download_book",
|
"kobo.download_book",
|
||||||
auth_token=kobo_auth.get_auth_token(),
|
auth_token=get_auth_token(),
|
||||||
book_id=book_id,
|
book_id=book_id,
|
||||||
book_format=book_format.lower(),
|
book_format=book_format.lower(),
|
||||||
_external=True,
|
_external=True,
|
||||||
@@ -503,9 +504,11 @@ def get_metadata(book):
|
|||||||
return metadata
|
return metadata
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/tags", methods=["POST", "DELETE"])
|
@kobo.route("/v1/library/tags", methods=["POST", "DELETE"])
|
||||||
@requires_kobo_auth
|
@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.
|
# Creates a Shelf with the given items, and returns the shelf's uuid.
|
||||||
def HandleTagCreate():
|
def HandleTagCreate():
|
||||||
# catch delete requests, otherwise they are handled in the book delete handler
|
# catch delete requests, otherwise they are handled in the book delete handler
|
||||||
@@ -541,6 +544,7 @@ def HandleTagCreate():
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/tags/<tag_id>", methods=["DELETE", "PUT"])
|
@kobo.route("/v1/library/tags/<tag_id>", methods=["DELETE", "PUT"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleTagUpdate(tag_id):
|
def HandleTagUpdate(tag_id):
|
||||||
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.uuid == tag_id,
|
shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.uuid == tag_id,
|
||||||
ub.Shelf.user_id == current_user.id).one_or_none()
|
ub.Shelf.user_id == current_user.id).one_or_none()
|
||||||
@@ -595,6 +599,7 @@ def add_items_to_shelf(items, shelf):
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/tags/<tag_id>/items", methods=["POST"])
|
@kobo.route("/v1/library/tags/<tag_id>/items", methods=["POST"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleTagAddItem(tag_id):
|
def HandleTagAddItem(tag_id):
|
||||||
items = None
|
items = None
|
||||||
try:
|
try:
|
||||||
@@ -625,6 +630,7 @@ def HandleTagAddItem(tag_id):
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/tags/<tag_id>/items/delete", methods=["POST"])
|
@kobo.route("/v1/library/tags/<tag_id>/items/delete", methods=["POST"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleTagRemoveItem(tag_id):
|
def HandleTagRemoveItem(tag_id):
|
||||||
items = None
|
items = None
|
||||||
try:
|
try:
|
||||||
@@ -758,6 +764,7 @@ def create_kobo_tag(shelf):
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/<book_uuid>/state", methods=["GET", "PUT"])
|
@kobo.route("/v1/library/<book_uuid>/state", methods=["GET", "PUT"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleStateRequest(book_uuid):
|
def HandleStateRequest(book_uuid):
|
||||||
book = calibre_db.get_book_by_uuid(book_uuid)
|
book = calibre_db.get_book_by_uuid(book_uuid)
|
||||||
if not book or not book.data:
|
if not book or not book.data:
|
||||||
@@ -907,6 +914,7 @@ def get_current_bookmark_response(current_bookmark):
|
|||||||
@kobo.route("/<book_uuid>/<width>/<height>/<isGreyscale>/image.jpg", defaults={'Quality': ""})
|
@kobo.route("/<book_uuid>/<width>/<height>/<isGreyscale>/image.jpg", defaults={'Quality': ""})
|
||||||
@kobo.route("/<book_uuid>/<width>/<height>/<Quality>/<isGreyscale>/image.jpg")
|
@kobo.route("/<book_uuid>/<width>/<height>/<Quality>/<isGreyscale>/image.jpg")
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleCoverImageRequest(book_uuid, width, height, Quality, isGreyscale):
|
def HandleCoverImageRequest(book_uuid, width, height, Quality, isGreyscale):
|
||||||
try:
|
try:
|
||||||
if int(height) > 1000:
|
if int(height) > 1000:
|
||||||
@@ -943,6 +951,7 @@ def TopLevelEndpoint():
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/library/<book_uuid>", methods=["DELETE"])
|
@kobo.route("/v1/library/<book_uuid>", methods=["DELETE"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleBookDeletionRequest(book_uuid):
|
def HandleBookDeletionRequest(book_uuid):
|
||||||
log.info("Kobo book delete request received for book %s" % book_uuid)
|
log.info("Kobo book delete request received for book %s" % book_uuid)
|
||||||
book = calibre_db.get_book_by_uuid(book_uuid)
|
book = calibre_db.get_book_by_uuid(book_uuid)
|
||||||
@@ -962,6 +971,7 @@ def HandleBookDeletionRequest(book_uuid):
|
|||||||
@kobo.route("/v1/library/<dummy>", methods=["DELETE", "GET", "POST"])
|
@kobo.route("/v1/library/<dummy>", methods=["DELETE", "GET", "POST"])
|
||||||
@kobo.route("/v1/library/<dummy>/preview", methods=["POST"])
|
@kobo.route("/v1/library/<dummy>/preview", methods=["POST"])
|
||||||
def HandleUnimplementedRequest(dummy=None):
|
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)",
|
log.debug("Unimplemented Library Request received: %s (request is forwarded to kobo if configured)",
|
||||||
request.base_url)
|
request.base_url)
|
||||||
return redirect_or_proxy_request()
|
return redirect_or_proxy_request()
|
||||||
@@ -976,6 +986,9 @@ def HandleUnimplementedRequest(dummy=None):
|
|||||||
@kobo.route("/v1/analytics/<dummy>", methods=["GET", "POST"])
|
@kobo.route("/v1/analytics/<dummy>", methods=["GET", "POST"])
|
||||||
@kobo.route("/v1/assets", methods=["GET"])
|
@kobo.route("/v1/assets", methods=["GET"])
|
||||||
def HandleUserRequest(dummy=None):
|
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)
|
log.debug("Unimplemented User Request received: %s (request is forwarded to kobo if configured)", request.base_url)
|
||||||
return redirect_or_proxy_request()
|
return redirect_or_proxy_request()
|
||||||
|
|
||||||
@@ -983,6 +996,7 @@ def HandleUserRequest(dummy=None):
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/user/loyalty/benefits", methods=["GET"])
|
@kobo.route("/v1/user/loyalty/benefits", methods=["GET"])
|
||||||
def handle_benefits():
|
def handle_benefits():
|
||||||
|
[limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits]
|
||||||
if config.config_kobo_proxy:
|
if config.config_kobo_proxy:
|
||||||
return redirect_or_proxy_request()
|
return redirect_or_proxy_request()
|
||||||
else:
|
else:
|
||||||
@@ -992,6 +1006,7 @@ def handle_benefits():
|
|||||||
@csrf.exempt
|
@csrf.exempt
|
||||||
@kobo.route("/v1/analytics/gettests", methods=["GET", "POST"])
|
@kobo.route("/v1/analytics/gettests", methods=["GET", "POST"])
|
||||||
def handle_getests():
|
def handle_getests():
|
||||||
|
[limiter.limiter.clear(limit.limit, *limit.request_args) for limit in limiter.current_limits]
|
||||||
if config.config_kobo_proxy:
|
if config.config_kobo_proxy:
|
||||||
return redirect_or_proxy_request()
|
return redirect_or_proxy_request()
|
||||||
else:
|
else:
|
||||||
@@ -1018,6 +1033,7 @@ def handle_getests():
|
|||||||
@kobo.route("/v1/affiliate", methods=["GET", "POST"])
|
@kobo.route("/v1/affiliate", methods=["GET", "POST"])
|
||||||
@kobo.route("/v1/deals", methods=["GET", "POST"])
|
@kobo.route("/v1/deals", methods=["GET", "POST"])
|
||||||
def HandleProductsRequest(dummy=None):
|
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)",
|
log.debug("Unimplemented Products Request received: %s (request is forwarded to kobo if configured)",
|
||||||
request.base_url)
|
request.base_url)
|
||||||
return redirect_or_proxy_request()
|
return redirect_or_proxy_request()
|
||||||
@@ -1046,7 +1062,10 @@ def make_calibre_web_auth_response():
|
|||||||
@kobo.route("/v1/auth/refresh", methods=["POST"])
|
@kobo.route("/v1/auth/refresh", methods=["POST"])
|
||||||
@kobo.route("/v1/auth/device", methods=["POST"])
|
@kobo.route("/v1/auth/device", methods=["POST"])
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleAuthRequest():
|
def HandleAuthRequest():
|
||||||
|
log.error(limiter.current_limit)
|
||||||
|
log.error(limiter.current_limit)
|
||||||
log.debug('Kobo Auth request')
|
log.debug('Kobo Auth request')
|
||||||
if config.config_kobo_proxy:
|
if config.config_kobo_proxy:
|
||||||
try:
|
try:
|
||||||
@@ -1058,6 +1077,7 @@ def HandleAuthRequest():
|
|||||||
|
|
||||||
@kobo.route("/v1/initialization")
|
@kobo.route("/v1/initialization")
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def HandleInitRequest():
|
def HandleInitRequest():
|
||||||
log.info('Init')
|
log.info('Init')
|
||||||
|
|
||||||
@@ -1088,7 +1108,7 @@ def HandleInitRequest():
|
|||||||
kobo_resources["image_host"] = calibre_web_url
|
kobo_resources["image_host"] = calibre_web_url
|
||||||
kobo_resources["image_url_quality_template"] = unquote(calibre_web_url +
|
kobo_resources["image_url_quality_template"] = unquote(calibre_web_url +
|
||||||
url_for("kobo.HandleCoverImageRequest",
|
url_for("kobo.HandleCoverImageRequest",
|
||||||
auth_token=kobo_auth.get_auth_token(),
|
auth_token=get_auth_token(),
|
||||||
book_uuid="{ImageId}",
|
book_uuid="{ImageId}",
|
||||||
width="{width}",
|
width="{width}",
|
||||||
height="{height}",
|
height="{height}",
|
||||||
@@ -1096,7 +1116,7 @@ def HandleInitRequest():
|
|||||||
isGreyscale='isGreyscale'))
|
isGreyscale='isGreyscale'))
|
||||||
kobo_resources["image_url_template"] = unquote(calibre_web_url +
|
kobo_resources["image_url_template"] = unquote(calibre_web_url +
|
||||||
url_for("kobo.HandleCoverImageRequest",
|
url_for("kobo.HandleCoverImageRequest",
|
||||||
auth_token=kobo_auth.get_auth_token(),
|
auth_token=get_auth_token(),
|
||||||
book_uuid="{ImageId}",
|
book_uuid="{ImageId}",
|
||||||
width="{width}",
|
width="{width}",
|
||||||
height="{height}",
|
height="{height}",
|
||||||
@@ -1104,7 +1124,7 @@ def HandleInitRequest():
|
|||||||
else:
|
else:
|
||||||
kobo_resources["image_host"] = url_for("web.index", _external=True).strip("/")
|
kobo_resources["image_host"] = url_for("web.index", _external=True).strip("/")
|
||||||
kobo_resources["image_url_quality_template"] = unquote(url_for("kobo.HandleCoverImageRequest",
|
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}",
|
book_uuid="{ImageId}",
|
||||||
width="{width}",
|
width="{width}",
|
||||||
height="{height}",
|
height="{height}",
|
||||||
@@ -1112,7 +1132,7 @@ def HandleInitRequest():
|
|||||||
isGreyscale='isGreyscale',
|
isGreyscale='isGreyscale',
|
||||||
_external=True))
|
_external=True))
|
||||||
kobo_resources["image_url_template"] = unquote(url_for("kobo.HandleCoverImageRequest",
|
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}",
|
book_uuid="{ImageId}",
|
||||||
width="{width}",
|
width="{width}",
|
||||||
height="{height}",
|
height="{height}",
|
||||||
@@ -1128,6 +1148,7 @@ def HandleInitRequest():
|
|||||||
@kobo.route("/download/<book_id>/<book_format>")
|
@kobo.route("/download/<book_id>/<book_format>")
|
||||||
@requires_kobo_auth
|
@requires_kobo_auth
|
||||||
@download_required
|
@download_required
|
||||||
|
# @limiter.limit("3/minute", key_func=get_remote_address)
|
||||||
def download_book(book_id, book_format):
|
def download_book(book_id, book_format):
|
||||||
return get_download_link(book_id, book_format, "kobo")
|
return get_download_link(book_id, book_format, "kobo")
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ from functools import wraps
|
|||||||
from flask import g, Blueprint, abort, request
|
from flask import g, Blueprint, abort, request
|
||||||
from .cw_login import login_user, current_user
|
from .cw_login import login_user, current_user
|
||||||
from flask_babel import gettext as _
|
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, limiter
|
||||||
from .render_template import render_title_template
|
from .render_template import render_title_template
|
||||||
@@ -154,13 +153,6 @@ def requires_kobo_auth(f):
|
|||||||
def inner(*args, **kwargs):
|
def inner(*args, **kwargs):
|
||||||
auth_token = get_auth_token()
|
auth_token = get_auth_token()
|
||||||
if auth_token is not None:
|
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 = (
|
user = (
|
||||||
ub.session.query(ub.User)
|
ub.session.query(ub.User)
|
||||||
.join(ub.RemoteAuthToken)
|
.join(ub.RemoteAuthToken)
|
||||||
@@ -169,7 +161,7 @@ def requires_kobo_auth(f):
|
|||||||
)
|
)
|
||||||
if user is not None:
|
if user is not None:
|
||||||
login_user(user)
|
login_user(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 f(*args, **kwargs)
|
return f(*args, **kwargs)
|
||||||
log.debug("Received Kobo request without a recognizable auth token.")
|
log.debug("Received Kobo request without a recognizable auth token.")
|
||||||
return abort(401)
|
return abort(401)
|
||||||
|
|||||||
@@ -66,8 +66,8 @@ def main():
|
|||||||
app.register_blueprint(tasks)
|
app.register_blueprint(tasks)
|
||||||
app.register_blueprint(web)
|
app.register_blueprint(web)
|
||||||
app.register_blueprint(basic)
|
app.register_blueprint(basic)
|
||||||
app.register_blueprint(opds)
|
|
||||||
limiter.limit("3/minute", key_func=request_username)(opds)
|
limiter.limit("3/minute", key_func=request_username)(opds)
|
||||||
|
app.register_blueprint(opds)
|
||||||
app.register_blueprint(jinjia)
|
app.register_blueprint(jinjia)
|
||||||
app.register_blueprint(about)
|
app.register_blueprint(about)
|
||||||
app.register_blueprint(shelf)
|
app.register_blueprint(shelf)
|
||||||
@@ -77,9 +77,9 @@ def main():
|
|||||||
app.register_blueprint(gdrive)
|
app.register_blueprint(gdrive)
|
||||||
app.register_blueprint(editbook)
|
app.register_blueprint(editbook)
|
||||||
if kobo_available:
|
if kobo_available:
|
||||||
|
limiter.limit("3/minute", key_func=get_remote_address)(kobo)
|
||||||
app.register_blueprint(kobo)
|
app.register_blueprint(kobo)
|
||||||
app.register_blueprint(kobo_auth)
|
app.register_blueprint(kobo_auth)
|
||||||
limiter.limit("3/minute", key_func=get_remote_address)(kobo)
|
|
||||||
if oauth_available:
|
if oauth_available:
|
||||||
app.register_blueprint(oauth)
|
app.register_blueprint(oauth)
|
||||||
success = web_server.start()
|
success = web_server.start()
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2025-06-07 14:44+0300\n"
|
||||||
"Last-Translator: UsamaFoad <usamafoad@gmail.com>\n"
|
"Last-Translator: UsamaFoad <usamafoad@gmail.com>\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "فشل تخزين الملف %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "تمت إضافة تنسيق الملف %(ext)s إلى %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "لم يكتمل إعداد Google Drive، حاول إلغاء تنشيط Google Drive ثم تنشيطه مرة أخرى"
|
msgstr "لم يكتمل إعداد Google Drive، حاول إلغاء تنشيط Google Drive ثم تنشيطه مرة أخرى"
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "عفوًا! حدث خطأ أثناء إرسال الكتاب: %(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "عفوًا! يرجى تحديث ملفك الشخصي ببريد إلكتروني صالح للقارئ الإلكتروني."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "عفوًا! خادم البريد الإلكتروني غير مهيأ، يرجى الاتصال بمسؤول النظام."
|
msgstr "عفوًا! خادم البريد الإلكتروني غير مهيأ، يرجى الاتصال بمسؤول النظام."
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "نجاح! تم إرسال بريد إلكتروني للتأكيد."
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "لا يمكن تفعيل مصادقة LDAP"
|
msgstr "لا يمكن تفعيل مصادقة LDAP"
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr "يرجى الانتظار دقيقة واحدة قبل تسجيل الدخول التالي"
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2020-06-09 21:11+0100\n"
|
||||||
"Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n"
|
"Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n"
|
||||||
"Language: cs_CZ\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Formát souboru %(ext)s přidán do %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "E-mailový server není nakonfigurován, kontaktujte svého správce!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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-10-22 19:56+0200\n"
|
"PO-Revision-Date: 2025-10-22 19:56+0200\n"
|
||||||
"Last-Translator: Sebastian Holzer\n"
|
"Last-Translator: Sebastian Holzer\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Fehler beim Speichern der Datei %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Dateiformat %(ext)s zu %(book)s hinzugefügt"
|
msgstr "Dateiformat %(ext)s zu %(book)s hinzugefügt"
|
||||||
|
|
||||||
|
#: cps/error_handler.py:98
|
||||||
|
msgid "Please wait one minute to register next user"
|
||||||
|
msgstr "Bitte eine Minute warten vor der Registrierung des nächsten Benutzers"
|
||||||
|
|
||||||
|
#: 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 "Registrieren"
|
||||||
|
|
||||||
|
#: cps/error_handler.py:103
|
||||||
|
msgid "Please wait one minute before next login"
|
||||||
|
msgstr "Bitte eine Minute vor dem nächsten Loginversuch warten"
|
||||||
|
|
||||||
#: cps/gdrive.py:58
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Google Drive Setup is nicht komplett, bitte versuche Google Drive zu deaktivieren und aktiviere es anschließend erneut"
|
msgstr "Google Drive Setup is nicht komplett, bitte versuche Google Drive zu deaktivieren und aktiviere es anschließend erneut"
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "Beim Senden des Buches trat ein Fehler auf: %(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "Bitte zuerst die E-Reader E-Mailadresse konfigurieren."
|
msgstr "Bitte zuerst die E-Reader E-Mailadresse konfigurieren."
|
||||||
|
|
||||||
#: cps/web.py:1291
|
|
||||||
msgid "Please wait one minute to register next user"
|
|
||||||
msgstr "Bitte eine Minute warten vor der Registrierung des nächsten Benutzers"
|
|
||||||
|
|
||||||
#: 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 "Registrieren"
|
|
||||||
|
|
||||||
#: cps/web.py:1295 cps/web.py:1402
|
|
||||||
msgid "Connection error to limiter backend, please contact your administrator"
|
|
||||||
msgstr "Verbindugnsfehler zu Limiter Backend, bitte Administrator kontaktieren"
|
|
||||||
|
|
||||||
#: cps/web.py:1300 cps/web.py:1351
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Der E-Mail Server ist nicht konfiguriert, bitte den Administrator kontaktieren."
|
msgstr "Der E-Mail Server ist nicht konfiguriert, bitte den Administrator kontaktieren."
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "Eine Bestätigungs-E-Mail wurde an deinen E-Mail Account versendet."
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "LDAP-Authentifizierung kann nicht aktiviert werden"
|
msgstr "LDAP-Authentifizierung kann nicht aktiviert werden"
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr "Bitte eine Minute vor dem nächsten Loginversuch warten"
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: Depountis Georgios\n"
|
"Last-Translator: Depountis Georgios\n"
|
||||||
"Language: el\n"
|
"Language: el\n"
|
||||||
@@ -683,6 +683,22 @@ msgstr "Αποτυχία αποθήκευσης αρχείου %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Μορφή αρχείου %(ext)s προστέθηκε σε %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Η ρύθμιση του Google Drive δεν ολοκληρώθηκε, προσπάθησε να απενεργοποιήσεις και να ενεργοποιήσεις ξανά το Google Drive"
|
msgstr "Η ρύθμιση του Google Drive δεν ολοκληρώθηκε, προσπάθησε να απενεργοποιήσεις και να ενεργοποιήσεις ξανά το Google Drive"
|
||||||
@@ -1434,21 +1450,6 @@ msgstr "Oυπς! Υπήρξε ένα σφάλμα κατά την αποστολ
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Ο διακομιστής E-Mail δεν έχει διαμορφωθεί, παρακαλούμε επικοινώνησε με το διαχειριστή σου!"
|
msgstr "Ο διακομιστής E-Mail δεν έχει διαμορφωθεί, παρακαλούμε επικοινώνησε με το διαχειριστή σου!"
|
||||||
@@ -1465,10 +1466,6 @@ msgstr "Το e-mail επιβεβαίωσης έχει σταλεί στον e-ma
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -10,7 +10,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2024-10-29 15:26+0100\n"
|
||||||
"Last-Translator: adruki <adruki@gmail.com>\n"
|
"Last-Translator: adruki <adruki@gmail.com>\n"
|
||||||
"Language: es\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Archivo con formato %(ext)s añadido a %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
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."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
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."
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "No se puede activar la autenticación LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2020-01-12 13:56+0100\n"
|
||||||
"Last-Translator: Samuli Valavuo <svalavuo@gmail.com>\n"
|
"Last-Translator: Samuli Valavuo <svalavuo@gmail.com>\n"
|
||||||
"Language: fi\n"
|
"Language: fi\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Tiedoston %(file)s tallennus epäonnistui."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Tiedostoformaatti %(ext)s lisätty %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "Vahvistusviesti on lähetetty sähköpostiosoitteeseesi."
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -3,7 +3,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2026-01-15 11:30+0000\n"
|
||||||
"Last-Translator: <thovi98@gmail.com>\n"
|
"Last-Translator: <thovi98@gmail.com>\n"
|
||||||
"Language: fr\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Le format de fichier %(ext)s a été ajouté à %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
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."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
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!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Impossible d'activer l'authentification LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -5,7 +5,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2024-12-08 13:50+0100\n"
|
||||||
"Last-Translator: pollitor@gmx.com\n"
|
"Last-Translator: pollitor@gmx.com\n"
|
||||||
"Language: gl\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Engadiuse o formato de ficheiro %(ext)s a %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
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."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
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."
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Non se pode activar a autenticación LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2019-04-06 23:36+0200\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language: hu\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "A(z) %(ext)s fájlformátum hozzáadva a könyvhez: %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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."
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "Jóváhagyó levél elküldve az email címedre."
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2023-01-21 10:00+0700\n"
|
||||||
"Last-Translator: Arief Hidayat<arihid95@gmail.com>\n"
|
"Last-Translator: Arief Hidayat<arihid95@gmail.com>\n"
|
||||||
"Language: id\n"
|
"Language: id\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Gagal menyimpan berkas %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Format berkas %(ext)s ditambahkan ke %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Server email belum diatur, silakan hubungi 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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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-04 02:22+0100\n"
|
"PO-Revision-Date: 2026-01-04 02:22+0100\n"
|
||||||
"Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n"
|
"Last-Translator: Massimo Pissarello <mapi68@gmail.com>\n"
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Impossibile archiviare il file %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Formato file %(ext)s aggiunto a %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "Per favore aggiorna il tuo profilo con un'e-mail eReader valida."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Il server e-mail non è configurato, per favore contatta l'amministratore"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Impossibile attivare l'autenticazione LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2018-02-07 02:20-0500\n"
|
||||||
"Last-Translator: subdiox <subdiox@gmail.com>\n"
|
"Last-Translator: subdiox <subdiox@gmail.com>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "ファイル %(file)s を保存できません。"
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "ファイル形式 %(ext)s が %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Googleドライブの設定が完了していません。Googleドライブを無効にしてから再度有効にしてみてください"
|
msgstr "Googleドライブの設定が完了していません。Googleドライブを無効にしてから再度有効にしてみてください"
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "%(res)s を送信中にエラーが発生しました"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "メールサーバーが設定されていません。管理者に連絡してください"
|
msgstr "メールサーバーが設定されていません。管理者に連絡してください"
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "確認メールがこのメールアドレスに送信されました。
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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-08-27 17:06+0700\n"
|
"PO-Revision-Date: 2018-08-27 17:06+0700\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language: km_KH\n"
|
"Language: km_KH\n"
|
||||||
@@ -685,6 +685,22 @@ msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។"
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1436,21 +1452,6 @@ msgstr "មានបញ្ហានៅពេលផ្ញើសៀវភៅនេ
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1467,10 +1468,6 @@ msgstr ""
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2024-11-01 17:50+0900\n"
|
||||||
"Last-Translator: limeade23 <admin@limeade.me>\n"
|
"Last-Translator: limeade23 <admin@limeade.me>\n"
|
||||||
"Language: ko\n"
|
"Language: ko\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "%(file)s 파일 저장에 실패했습니다."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "파일 형식 %(ext)s이(가) %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Google 드라이브 설정이 완료되지 않았습니다. Google 드라이브를 비활성화한 후 다시 활성화해 주세요."
|
msgstr "Google 드라이브 설정이 완료되지 않았습니다. Google 드라이브를 비활성화한 후 다시 활성화해 주세요."
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "전송 중 오류가 발생했습니다: %(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "문제가 발생했습니다. 프로필에 유효한 전자책 리더 이메일을 설정해 주세요."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "이메일 서버가 설정되지 않았습니다. 관리자에게 문의하세요."
|
msgstr "이메일 서버가 설정되지 않았습니다. 관리자에게 문의하세요."
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "인증 이메일을 발송했습니다."
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "LDAP 인증을 활성화할 수 없습니다."
|
msgstr "LDAP 인증을 활성화할 수 없습니다."
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr "1분 후 시도해 주세요."
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web (GPLV3)\n"
|
"Project-Id-Version: Calibre-Web (GPLV3)\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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-12-20 22:00+0100\n"
|
"PO-Revision-Date: 2023-12-20 22:00+0100\n"
|
||||||
"Last-Translator: Michiel Cornelissen <michiel.cornelissen+gitbhun at proton.me>\n"
|
"Last-Translator: Michiel Cornelissen <michiel.cornelissen+gitbhun at proton.me>\n"
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
@@ -685,6 +685,22 @@ msgstr "Kan %(file)s niet opslaan."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Bestandsformaat %(ext)s toegevoegd aan %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "E-mailserver is niet geconfigureerd, neem contact op met de beheerder!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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-06 11:00+0000\n"
|
"PO-Revision-Date: 2023-01-06 11:00+0000\n"
|
||||||
"Last-Translator: Vegard Fladby <vegard.fladby@gmail.com>\n"
|
"Last-Translator: Vegard Fladby <vegard.fladby@gmail.com>\n"
|
||||||
"Language: no\n"
|
"Language: no\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Kunne ikke lagre filen %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Filformat %(ext)s lagt til %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1466,10 +1467,6 @@ msgstr ""
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n"
|
"Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2025-12-08 12:51+0100\n"
|
||||||
"Last-Translator: Daniel Szepietowski <daniel@szepi.dev>\n"
|
"Last-Translator: Daniel Szepietowski <daniel@szepi.dev>\n"
|
||||||
"Language: pl\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Format pliku %(ext)s dodany do %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "Ups! Zaktualizuj swój profil używając poprawnego adresu email czytnika."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Serwer e-mail nie jest skonfigurowany, skontaktuj się z administratorem!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Nie udało się aktywować autoryzacji za pomocą LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -4,7 +4,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2023-07-25 11:30+0100\n"
|
||||||
"Last-Translator: horus68 <https://github.com/horus68>\n"
|
"Last-Translator: horus68 <https://github.com/horus68>\n"
|
||||||
"Language: pt\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Formato de ficheiro %(ext)s adicionado a %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
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!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -4,7 +4,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: br\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Formato de arquivo %(ext)s adicionado a %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "Ops! Atualize seu perfil com um e-mail de eReader válido."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
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!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Não foi possível ativar a autenticação LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2020-04-29 01:20+0400\n"
|
||||||
"Last-Translator: ZIZA\n"
|
"Last-Translator: ZIZA\n"
|
||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
@@ -685,6 +685,22 @@ msgstr "Не удалось сохранить файл %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Формат файла %(ext)s добавлен в %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Настройка Google Drive не завершена, попробуйте деактивировать и снова активировать Google Drive"
|
msgstr "Настройка Google Drive не завершена, попробуйте деактивировать и снова активировать Google Drive"
|
||||||
@@ -1436,21 +1452,6 @@ msgstr "При отправке этой книги произошла ошиб
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Сервер электронной почты не настроен, обратитесь к администратору !"
|
msgstr "Сервер электронной почты не настроен, обратитесь к администратору !"
|
||||||
@@ -1467,10 +1468,6 @@ msgstr "Письмо с подтверждением отправлено вам
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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-11-01 06:12+0100\n"
|
"PO-Revision-Date: 2023-11-01 06:12+0100\n"
|
||||||
"Last-Translator: Branislav Hanáček <brango@brango.sk>\n"
|
"Last-Translator: Branislav Hanáček <brango@brango.sk>\n"
|
||||||
"Language: sk_SK\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Súborový formát %(ext)s bol pridaný k %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
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."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Poštový server nie je nastavený, kontaktujte prosím správcu."
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Nie je možné aktivovať LDAP autentifikáciu"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2024-09-18 19:45+0200\n"
|
||||||
"Last-Translator: Andrej Kralj\n"
|
"Last-Translator: Andrej Kralj\n"
|
||||||
"Language: sl\n"
|
"Language: sl\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "Nisem uspel shraniti datoteke %(file)s."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Oblina datotek %(ext)s je dodan v %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "Ups! Posodobite svoj profil z veljavnim e-poštnim naslovom eReaderja."
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "Ups! E-poštni strežnik ni nastavljen, obrnite se na skrbnika."
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "Ni mogoče aktivirati avtentikacije LDAP"
|
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
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2021-05-13 11:00+0000\n"
|
||||||
"Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n"
|
"Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n"
|
||||||
"Language: sv\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "Filformatet %(ext)s lades till %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "E-postservern är inte konfigurerad, kontakta din administratör!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2020-04-23 22:47+0300\n"
|
||||||
"Last-Translator: iz <iz7iz7iz@protonmail.ch>\n"
|
"Last-Translator: iz <iz7iz7iz@protonmail.ch>\n"
|
||||||
"Language: tr\n"
|
"Language: tr\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "%(file)s dosyası kaydedilemedi."
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "%(book)s kitabına %(ext)s dosya biçimi eklendi"
|
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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
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"
|
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."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "E-Posta sunucusu ayarlanmadı, lütfen yöneticinizle iletişime geçin!"
|
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"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -6,7 +6,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-web\n"
|
"Project-Id-Version: Calibre-web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2017-04-30 00:47+0300\n"
|
||||||
"Last-Translator: ABIS Team <biblio.if.abis@gmail.com>\n"
|
"Last-Translator: ABIS Team <biblio.if.abis@gmail.com>\n"
|
||||||
"Language: uk\n"
|
"Language: uk\n"
|
||||||
@@ -696,6 +696,22 @@ msgstr ""
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr ""
|
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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1461,21 +1477,6 @@ msgstr "Помилка при відправці книги: %(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1492,10 +1493,6 @@ msgstr ""
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, fuzzy, python-format
|
#, fuzzy, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -4,7 +4,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-web\n"
|
"Project-Id-Version: Calibre-web\n"
|
||||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/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"
|
"PO-Revision-Date: 2022-09-20 21:36+0700\n"
|
||||||
"Last-Translator: Ha Link <halink0803@gmail.com>\n"
|
"Last-Translator: Ha Link <halink0803@gmail.com>\n"
|
||||||
"Language: vi\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"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr ""
|
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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1432,21 +1448,6 @@ msgstr ""
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1463,10 +1464,6 @@ msgstr ""
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2025-12-06 13:53+0800\n"
|
||||||
"Last-Translator: qx100\n"
|
"Last-Translator: qx100\n"
|
||||||
"Language: zh_CN\n"
|
"Language: zh_CN\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "保存文件 %(file)s 失败。"
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "已添加 %(ext)s 格式到 %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Google Drive 设置未完成,请尝试停用并再次激活 Google 云端硬盘"
|
msgstr "Google Drive 设置未完成,请尝试停用并再次激活 Google 云端硬盘"
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "糟糕!发送这本书籍的时候出现错误:%(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr "请先配置您的 Kindle 邮箱。"
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "邮件服务未配置,请联系网站管理员。"
|
msgstr "邮件服务未配置,请联系网站管理员。"
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "确认邮件已经发送到您的邮箱。"
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr "无法激活 LDAP 认证"
|
msgstr "无法激活 LDAP 认证"
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr "下次登录前请等待一分钟"
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Calibre-Web\n"
|
"Project-Id-Version: Calibre-Web\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: 2025-09-10 03:46+0000\n"
|
||||||
"Last-Translator: finrodchen <me@finrod.xyz>\n"
|
"Last-Translator: finrodchen <me@finrod.xyz>\n"
|
||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
@@ -684,6 +684,22 @@ msgstr "保存文件 %(file)s 失敗。"
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr "已添加 %(ext)s 格式到 %(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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr "Google Drive 設置未完成,請嘗試停用並再次激活Google雲端硬碟"
|
msgstr "Google Drive 設置未完成,請嘗試停用並再次激活Google雲端硬碟"
|
||||||
@@ -1435,21 +1451,6 @@ msgstr "糟糕!發送這本書籍的時候出現錯誤:%(res)s"
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr "郵件服務未配置,請聯繫網站管理員!"
|
msgstr "郵件服務未配置,請聯繫網站管理員!"
|
||||||
@@ -1466,10 +1467,6 @@ msgstr "確認郵件已經發送到您的郵箱。"
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr "請於下一次登入前等待一分鐘"
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ def verify_password(username, password):
|
|||||||
if config.config_login_type == constants.LOGIN_LDAP and services.ldap:
|
if config.config_login_type == constants.LOGIN_LDAP and services.ldap:
|
||||||
login_result, error = services.ldap.bind_user(user.name, password)
|
login_result, error = services.ldap.bind_user(user.name, password)
|
||||||
if login_result:
|
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
|
return user
|
||||||
if error is not None:
|
if error is not None:
|
||||||
log.error(error)
|
log.error(error)
|
||||||
else:
|
else:
|
||||||
limiter.check()
|
# limiter.check()
|
||||||
if check_password_hash(str(user.password), password):
|
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
|
return user
|
||||||
ip_address = request.headers.get('X-Forwarded-For', request.remote_addr)
|
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)
|
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:
|
if rp_header_username:
|
||||||
user = ub.session.query(ub.User).filter(func.lower(ub.User.name) == rp_header_username.lower()).first()
|
user = ub.session.query(ub.User).filter(func.lower(ub.User.name) == rp_header_username.lower()).first()
|
||||||
if user:
|
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 user
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|||||||
24
cps/web.py
24
cps/web.py
@@ -30,7 +30,6 @@ from flask import session as flask_session
|
|||||||
from flask_babel import gettext as _
|
from flask_babel import gettext as _
|
||||||
from flask_babel import get_locale
|
from flask_babel import get_locale
|
||||||
from .cw_login import login_user, logout_user, current_user
|
from .cw_login import login_user, logout_user, current_user
|
||||||
from flask_limiter import RateLimitExceeded
|
|
||||||
from flask_limiter.util import get_remote_address
|
from flask_limiter.util import get_remote_address
|
||||||
from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
|
from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
|
||||||
from sqlalchemy.sql.expression import text, func, false, not_, and_, or_
|
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.datastructures import Headers
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash
|
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 db, ub, config, app
|
||||||
from . import calibre_db, kobo_sync_status
|
from . import calibre_db, kobo_sync_status
|
||||||
from .search import render_search_results, render_adv_search_results
|
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 .kobo_sync_status import remove_synced_book
|
||||||
from .render_template import render_title_template
|
from .render_template import render_title_template
|
||||||
from .kobo_sync_status import change_archived_books
|
from .kobo_sync_status import change_archived_books
|
||||||
from . import limiter
|
|
||||||
from .services.worker import WorkerThread
|
from .services.worker import WorkerThread
|
||||||
from .tasks_status import render_task_status
|
from .tasks_status import render_task_status
|
||||||
from .usermanagement import user_login_required
|
from .usermanagement import user_login_required
|
||||||
@@ -1285,15 +1283,6 @@ def register_post():
|
|||||||
if not config.config_public_reg:
|
if not config.config_public_reg:
|
||||||
abort(404)
|
abort(404)
|
||||||
to_save = request.form.to_dict()
|
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:
|
if current_user is not None and current_user.is_authenticated:
|
||||||
return redirect(url_for('web.index'))
|
return redirect(url_for('web.index'))
|
||||||
if not config.get_mail_server_configured():
|
if not config.get_mail_server_configured():
|
||||||
@@ -1358,7 +1347,7 @@ def register():
|
|||||||
def handle_login_user(user, remember, message, category):
|
def handle_login_user(user, remember, message, category):
|
||||||
login_user(user, remember=remember)
|
login_user(user, remember=remember)
|
||||||
flash(message, category=category)
|
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"))
|
return redirect(get_redirect_location(request.form.get('next', None), "web.index"))
|
||||||
|
|
||||||
|
|
||||||
@@ -1392,15 +1381,6 @@ def login():
|
|||||||
def login_post():
|
def login_post():
|
||||||
form = request.form.to_dict()
|
form = request.form.to_dict()
|
||||||
username = strip_whitespaces(form.get('username', "")).lower().replace("\n","").replace("\r","")
|
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:
|
if current_user is not None and current_user.is_authenticated:
|
||||||
return redirect(url_for('web.index'))
|
return redirect(url_for('web.index'))
|
||||||
if config.config_login_type == constants.LOGIN_LDAP and not services.ldap:
|
if config.config_login_type == constants.LOGIN_LDAP and not services.ldap:
|
||||||
|
|||||||
37
messages.pot
37
messages.pot
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -683,6 +683,22 @@ msgstr ""
|
|||||||
msgid "File format %(ext)s added to %(book)s"
|
msgid "File format %(ext)s added to %(book)s"
|
||||||
msgstr ""
|
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
|
#: cps/gdrive.py:58
|
||||||
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1434,21 +1450,6 @@ msgstr ""
|
|||||||
msgid "Oops! Please update your profile with a valid eReader Email."
|
msgid "Oops! Please update your profile with a valid eReader Email."
|
||||||
msgstr ""
|
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
|
#: cps/web.py:1300 cps/web.py:1351
|
||||||
msgid "Oops! Email server is not configured, please contact your administrator."
|
msgid "Oops! Email server is not configured, please contact your administrator."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1465,10 +1466,6 @@ msgstr ""
|
|||||||
msgid "Cannot activate LDAP authentication"
|
msgid "Cannot activate LDAP authentication"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: cps/web.py:1398
|
|
||||||
msgid "Please wait one minute before next login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: cps/web.py:1417
|
#: cps/web.py:1417
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "you are now logged in as: '%(nickname)s'"
|
msgid "you are now logged in as: '%(nickname)s'"
|
||||||
|
|||||||
@@ -32,27 +32,27 @@ dependencies = [
|
|||||||
"Flask-Principal>=0.3.2,<0.5.1",
|
"Flask-Principal>=0.3.2,<0.5.1",
|
||||||
"Flask>=1.0.2,<3.2.0",
|
"Flask>=1.0.2,<3.2.0",
|
||||||
"iso-639>=0.4.5,<0.5.0;python_version<'3.12'",
|
"iso-639>=0.4.5,<0.5.0;python_version<'3.12'",
|
||||||
"pycountry>=20.0.0,<25.0.0;python_version>='3.12'",
|
"pycountry>=20.0.0,<27.0.0;python_version>='3.12'",
|
||||||
"PyPDF>=6.1.3,<6.5.0",
|
"PyPDF>=6.1.3,<6.8.0",
|
||||||
"pytz>=2016.10",
|
"pytz>=2016.10",
|
||||||
"requests>=2.32.0,<2.33.0",
|
"requests>=2.32.0,<2.33.0",
|
||||||
"SQLAlchemy>=1.3.0,<2.1.0",
|
"SQLAlchemy>=1.3.0,<2.1.0",
|
||||||
"tornado>=6.4.2,<6.6",
|
"tornado>=6.4.2,<6.6",
|
||||||
"Wand>=0.4.4,<0.7.0",
|
"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",
|
"lxml>=4.9.1,<5.4.0",
|
||||||
"flask-wtf>=0.14.2,<1.3.0",
|
"flask-wtf>=0.14.2,<1.3.0",
|
||||||
"chardet>=3.0.0,<5.3.0",
|
"chardet>=3.0.0,<5.3.0",
|
||||||
"netifaces-plus>=0.12.0,<0.13.0",
|
"netifaces-plus>=0.12.0,<0.13.0",
|
||||||
"urllib3>=1.22,<3.0",
|
"urllib3>=1.22,<3.0",
|
||||||
"Flask-Limiter>=2.3.0,<3.13.0",
|
"Flask-Limiter>=2.3.0,<4.2.0",
|
||||||
"regex>=2022.3.2,<2025.3.20",
|
"regex>=2022.3.2,<2026.1.16",
|
||||||
"bleach>=6.0.0,<6.3.0",
|
"bleach>=6.0.0,<6.4.0",
|
||||||
"python-magic>=0.4.27,<0.5.0",
|
"python-magic>=0.4.27,<0.5.0",
|
||||||
"python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32'",
|
"python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32'",
|
||||||
"flask-httpAuth>=4.4.0,<5.0.0",
|
"flask-httpAuth>=4.4.0,<5.0.0",
|
||||||
"cryptography>=39.0.0,<45.0.0",
|
"cryptography>=39.0.0,<47.0.0",
|
||||||
"certifi>=2024.7.4,<2025.8.24",
|
"certifi>=2024.7.4,<2026.1.5",
|
||||||
]
|
]
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
@@ -70,9 +70,9 @@ content-type = "text/markdown"
|
|||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
gdrive = [
|
gdrive = [
|
||||||
"google-api-python-client>=2.73.00,<2.200.0",
|
"google-api-python-client>=2.73.00,<2.200.0",
|
||||||
"gevent>20.6.0,<24.12.0",
|
"gevent>20.6.0,<25.9.2",
|
||||||
"greenlet>=0.4.17,<3.3.0",
|
"greenlet>=0.4.17,<3.4.0",
|
||||||
"httplib2>=0.9.2,<0.23.0",
|
"httplib2>=0.9.2,<0.32.0",
|
||||||
"oauth2client>=4.0.0,<4.1.4",
|
"oauth2client>=4.0.0,<4.1.4",
|
||||||
"uritemplate>=3.0.0,<4.3.0",
|
"uritemplate>=3.0.0,<4.3.0",
|
||||||
"pyasn1-modules>=0.0.8,<0.7.0",
|
"pyasn1-modules>=0.0.8,<0.7.0",
|
||||||
@@ -91,19 +91,19 @@ goodreads = [
|
|||||||
]
|
]
|
||||||
ldap = [
|
ldap = [
|
||||||
"python-ldap>=3.0.0,<3.5.0",
|
"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 = [
|
oauth = [
|
||||||
"Flask-Dance>=2.0.0,<7.2.0",
|
"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 = [
|
metadata = [
|
||||||
"rarfile>=3.2,<5.0",
|
"rarfile>=3.2,<5.0",
|
||||||
"scholarly>=1.2.0,<1.8",
|
"scholarly>=1.2.0,<1.8",
|
||||||
"markdown2>=2.0.0,<2.6.0",
|
"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",
|
"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",
|
"faust-cchardet>=2.1.18,<2.1.20",
|
||||||
"py7zr>=0.15.0,<0.21.0",
|
"py7zr>=0.15.0,<0.21.0",
|
||||||
"mutagen>=1.40.0,<1.50.0",
|
"mutagen>=1.40.0,<1.50.0",
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ Flask-Babel>=3.0.0,<4.1.0
|
|||||||
Flask-Principal>=0.3.2,<0.5.1
|
Flask-Principal>=0.3.2,<0.5.1
|
||||||
Flask>=1.0.2,<3.2.0
|
Flask>=1.0.2,<3.2.0
|
||||||
iso-639>=0.4.5,<0.5.0;python_version<'3.12'
|
iso-639>=0.4.5,<0.5.0;python_version<'3.12'
|
||||||
pycountry>=20.0.0,<25.0.0;python_version>='3.12'
|
pycountry>=20.0.0,<27.0.0;python_version>='3.12'
|
||||||
PyPDF>=6.1.3,<6.7.0
|
PyPDF>=6.1.3,<6.8.0
|
||||||
pytz>=2016.10
|
pytz>=2016.10
|
||||||
requests>=2.32.0,<2.33.0
|
requests>=2.32.0,<2.33.0
|
||||||
SQLAlchemy>=1.3.0,<2.1.0
|
SQLAlchemy>=1.3.0,<2.1.0
|
||||||
@@ -17,7 +17,7 @@ flask-wtf>=0.14.2,<1.3.0
|
|||||||
chardet>=3.0.0,<5.3.0
|
chardet>=3.0.0,<5.3.0
|
||||||
netifaces-plus>=0.12.0,<0.13.0
|
netifaces-plus>=0.12.0,<0.13.0
|
||||||
urllib3>=1.22,<3.0
|
urllib3>=1.22,<3.0
|
||||||
Flask-Limiter>=2.3.0,<3.1.3
|
Flask-Limiter>=2.3.0,<4.2.0
|
||||||
regex>=2022.3.2,<2026.1.16
|
regex>=2022.3.2,<2026.1.16
|
||||||
bleach>=6.0.0,<6.4.0
|
bleach>=6.0.0,<6.4.0
|
||||||
python-magic>=0.4.27,<0.5.0
|
python-magic>=0.4.27,<0.5.0
|
||||||
|
|||||||
@@ -37,20 +37,20 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-6 col-md-6 col-sm-offset-3" style="margin-top:50px;">
|
<div class="col-xs-6 col-md-6 col-sm-offset-3" style="margin-top:50px;">
|
||||||
|
|
||||||
<p class='text-justify attribute'><strong>Start Time: </strong>2026-01-24 20:50:12</p>
|
<p class='text-justify attribute'><strong>Start Time: </strong>2026-02-18 19:25:49</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
||||||
|
|
||||||
<p class='text-justify attribute'><strong>Stop Time: </strong>2026-01-25 04:15:44</p>
|
<p class='text-justify attribute'><strong>Stop Time: </strong>2026-02-19 02:59:10</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
<div class="col-xs-6 col-md-6 col-sm-offset-3">
|
||||||
<p class='text-justify attribute'><strong>Duration: </strong>6h 13 min</p>
|
<p class='text-justify attribute'><strong>Duration: </strong>6h 16 min</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -2039,13 +2039,13 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr id="su" class="errorClass">
|
<tr id="su" class="failClass">
|
||||||
<td>TestLoadMetadata</td>
|
<td>TestLoadMetadata</td>
|
||||||
<td class="text-center">1</td>
|
<td class="text-center">1</td>
|
||||||
<td class="text-center">0</td>
|
<td class="text-center">0</td>
|
||||||
<td class="text-center">0</td>
|
|
||||||
<td class="text-center">1</td>
|
<td class="text-center">1</td>
|
||||||
<td class="text-center">0</td>
|
<td class="text-center">0</td>
|
||||||
|
<td class="text-center">0</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<a onclick="showClassDetail('c18', 1)">Detail</a>
|
<a onclick="showClassDetail('c18', 1)">Detail</a>
|
||||||
</td>
|
</td>
|
||||||
@@ -2053,27 +2053,26 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr id="et18.1" class="none bg-info">
|
<tr id="ft18.1" class="none bg-danger">
|
||||||
<td>
|
<td>
|
||||||
<div class='testcase'>TestLoadMetadata - test_load_metadata</div>
|
<div class='testcase'>TestLoadMetadata - test_load_metadata</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan='6'>
|
<td colspan='6'>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et18.1')">ERROR</a>
|
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft18.1')">FAIL</a>
|
||||||
</div>
|
</div>
|
||||||
<!--css div popup start-->
|
<!--css div popup start-->
|
||||||
<div id="div_et18.1" class="popup_window test_output" style="display:block;">
|
<div id="div_ft18.1" class="popup_window test_output" style="display:block;">
|
||||||
<div class='close_button pull-right'>
|
<div class='close_button pull-right'>
|
||||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
||||||
onclick="document.getElementById('div_et18.1').style.display='none'"><span
|
onclick="document.getElementById('div_ft18.1').style.display='none'"><span
|
||||||
aria-hidden="true">×</span></button>
|
aria-hidden="true">×</span></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-left pull-left">
|
<div class="text-left pull-left">
|
||||||
<pre class="text-left">Traceback (most recent call last):
|
<pre class="text-left">Traceback (most recent call last):
|
||||||
File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 87, in test_load_metadata
|
File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_metadata.py", line 220, in test_load_metadata
|
||||||
if results[cont]['source'] == 'https://comicvine.gamespot.com/':
|
self.assertLessEqual(diff(BytesIO(cover), BytesIO(new_cover), delete_diff_file=True), 0.025)
|
||||||
~~~~~~~^^^^^^
|
AssertionError: 0.04218017335689641 not less than or equal to 0.025</pre>
|
||||||
IndexError: list index out of range</pre>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4684,11 +4683,11 @@ AssertionError: 30 != 20</pre>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr id="su" class="failClass">
|
<tr id="su" class="skipClass">
|
||||||
<td>TestThumbnails</td>
|
<td>TestThumbnails</td>
|
||||||
<td class="text-center">8</td>
|
<td class="text-center">8</td>
|
||||||
<td class="text-center">6</td>
|
<td class="text-center">7</td>
|
||||||
<td class="text-center">1</td>
|
<td class="text-center">0</td>
|
||||||
<td class="text-center">0</td>
|
<td class="text-center">0</td>
|
||||||
<td class="text-center">1</td>
|
<td class="text-center">1</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@@ -4761,31 +4760,11 @@ AssertionError: 30 != 20</pre>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr id="ft52.8" class="none bg-danger">
|
<tr id='pt52.8' class='hiddenRow bg-success'>
|
||||||
<td>
|
<td>
|
||||||
<div class='testcase'>TestThumbnails - test_sideloaded_book</div>
|
<div class='testcase'>TestThumbnails - test_sideloaded_book</div>
|
||||||
</td>
|
</td>
|
||||||
<td colspan='6'>
|
<td colspan='6' align='center'>PASS</td>
|
||||||
<div class="text-center">
|
|
||||||
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft52.8')">FAIL</a>
|
|
||||||
</div>
|
|
||||||
<!--css div popup start-->
|
|
||||||
<div id="div_ft52.8" class="popup_window test_output" style="display:block;">
|
|
||||||
<div class='close_button pull-right'>
|
|
||||||
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
|
|
||||||
onclick="document.getElementById('div_ft52.8').style.display='none'"><span
|
|
||||||
aria-hidden="true">×</span></button>
|
|
||||||
</div>
|
|
||||||
<div class="text-left pull-left">
|
|
||||||
<pre class="text-left">Traceback (most recent call last):
|
|
||||||
File "/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py", line 317, in test_sideloaded_book
|
|
||||||
self.assertAlmostEqual(diff(BytesIO(list_cover), BytesIO(old_list_cover), delete_diff_file=True), 0.0,
|
|
||||||
AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182775 difference)</pre>
|
|
||||||
</div>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</div>
|
|
||||||
<!--css div popup end-->
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
@@ -5992,9 +5971,9 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
<tr id='total_row' class="text-center bg-grey">
|
<tr id='total_row' class="text-center bg-grey">
|
||||||
<td>Total</td>
|
<td>Total</td>
|
||||||
<td>538</td>
|
<td>538</td>
|
||||||
<td>528</td>
|
<td>529</td>
|
||||||
<td>2</td>
|
<td>2</td>
|
||||||
<td>1</td>
|
<td>0</td>
|
||||||
<td>7</td>
|
<td>7</td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -6023,7 +6002,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Platform</th>
|
<th>Platform</th>
|
||||||
<td>Linux 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64 x86_64</td>
|
<td>Linux 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64 x86_64</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6041,19 +6020,19 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>babel</th>
|
<th>babel</th>
|
||||||
<td>2.17.0</td>
|
<td>2.18.0</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>bleach</th>
|
<th>bleach</th>
|
||||||
<td>6.2.0</td>
|
<td>6.3.0</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>certifi</th>
|
<th>certifi</th>
|
||||||
<td>2025.8.3</td>
|
<td>2026.1.4</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6065,7 +6044,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>cryptography</th>
|
<th>cryptography</th>
|
||||||
<td>44.0.3</td>
|
<td>46.0.5</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6089,7 +6068,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Flask-Limiter</th>
|
<th>Flask-Limiter</th>
|
||||||
<td>3.12</td>
|
<td>4.1.1</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6131,13 +6110,13 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>pycountry</th>
|
<th>pycountry</th>
|
||||||
<td>24.6.1</td>
|
<td>26.2.16</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>pypdf</th>
|
<th>pypdf</th>
|
||||||
<td>6.4.2</td>
|
<td>6.7.1</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6155,7 +6134,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>regex</th>
|
<th>regex</th>
|
||||||
<td>2024.11.6</td>
|
<td>2026.1.15</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6179,7 +6158,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Unidecode</th>
|
<th>Unidecode</th>
|
||||||
<td>1.3.8</td>
|
<td>1.4.0</td>
|
||||||
<td>Basic</td>
|
<td>Basic</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6203,7 +6182,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestBackupMetadataGdrive</td>
|
<td>TestBackupMetadataGdrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6233,7 +6212,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestCliGdrivedb</td>
|
<td>TestCliGdrivedb</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6263,7 +6242,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestEbookConvertCalibreGDrive</td>
|
<td>TestEbookConvertCalibreGDrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6293,7 +6272,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestEbookConvertGDriveKepubify</td>
|
<td>TestEbookConvertGDriveKepubify</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6335,7 +6314,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestEditAuthorsGdrive</td>
|
<td>TestEditAuthorsGdrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6371,7 +6350,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestEditBooksOnGdrive</td>
|
<td>TestEditBooksOnGdrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6413,7 +6392,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestEmbedMetadataGdrive</td>
|
<td>TestEmbedMetadataGdrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6443,7 +6422,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>google-api-python-client</th>
|
<th>google-api-python-client</th>
|
||||||
<td>2.188.0</td>
|
<td>2.190.0</td>
|
||||||
<td>TestSetupGdrive</td>
|
<td>TestSetupGdrive</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6496,8 +6475,8 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<th>Flask-SimpleLDAP</th>
|
<th>flask-simpleldap</th>
|
||||||
<td>2.0.0</td>
|
<td>2.1.0</td>
|
||||||
<td>TestLdapLogin</td>
|
<td>TestLdapLogin</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -6545,7 +6524,7 @@ AssertionError: 0.01731210309182775 != 0.0 within 0.0001 delta (0.01731210309182
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
drawCircle(528, 2, 1, 7);
|
drawCircle(529, 2, 0, 7);
|
||||||
showCase(5);
|
showCase(5);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user