From 0ed4d81da22a0c535b3762815132d45c27280052 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 6 Apr 2026 15:12:09 +0200 Subject: [PATCH 01/22] Better error handling on order parameter for sorting of user and books table --- cps/admin.py | 3 ++- cps/web.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index 0e0a61018..1a1b1389c 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -349,8 +349,9 @@ def list_users(): if sort not in ub.User.__table__.columns.keys(): sort = "id" order = request.args.get("order", "").lower() - if sort != "state" and order: + if not order in ["asc", "desc"]: + order = "asc" order = text(sort + " " + order) elif not state: order = ub.User.id.asc() diff --git a/cps/web.py b/cps/web.py index f65728ef1..cc261b8dd 100644 --- a/cps/web.py +++ b/cps/web.py @@ -842,7 +842,8 @@ def list_books(): order = request.args.get("order", "").lower() state = None join = tuple() - + if not order in ["asc", "desc", ""]: + order = "asc" if sort_param == "state": state = json.loads(request.args.get("state", "[]")) elif sort_param == "tags": From 088778969d75b26080d4f019c76b3b92d8244675 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 6 Apr 2026 15:28:10 +0200 Subject: [PATCH 02/22] Better error handling on series display in basic view --- cps/basic.py | 1 - cps/templates/basic_detail.html | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cps/basic.py b/cps/basic.py index b01210109..fdf453a04 100644 --- a/cps/basic.py +++ b/cps/basic.py @@ -19,7 +19,6 @@ # along with this program. If not, see . -from cps.pagination import Pagination from flask import Blueprint from flask_babel import gettext as _ from flask_babel import get_locale diff --git a/cps/templates/basic_detail.html b/cps/templates/basic_detail.html index dc8242536..c5a77c952 100644 --- a/cps/templates/basic_detail.html +++ b/cps/templates/basic_detail.html @@ -31,7 +31,7 @@

Details

{% if entry.series|length > 0 %} -

{{ _("Book %(index)s of %(range)s", index=entry.series_index | formatfloat(2), range=(entry.series[0].name)|safe) }}

+

{{ _("Book %(index)s of %(range)s", index=entry.series_index|formatfloat(2), range=entry.series[0].name|e) }}

{% endif %} {% if entry.languages|length > 0 %} From d598054195219755381dc080111a6602d6adfc9e Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:10:30 +0200 Subject: [PATCH 03/22] Fix an IDOR in kobo tokens Authenticated users shouldn't be able to generate/delete kobo auth tokens for other users if they're not admin. --- cps/kobo_auth.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cps/kobo_auth.py b/cps/kobo_auth.py index ae9d1c12b..9559f4f3a 100644 --- a/cps/kobo_auth.py +++ b/cps/kobo_auth.py @@ -81,6 +81,8 @@ kobo_auth = Blueprint("kobo_auth", __name__, url_prefix="/kobo_auth") @kobo_auth.route("/generate_auth_token/") @user_login_required def generate_auth_token(user_id): + if current_user.id != user_id and not current_user.role_admin(): + abort(403) warning = False host_list = request.host.rsplit(':') if len(host_list) == 1: @@ -123,6 +125,8 @@ def generate_auth_token(user_id): @kobo_auth.route("/deleteauthtoken/", methods=["POST"]) @user_login_required def delete_auth_token(user_id): + if current_user.id != user_id and not current_user.role_admin(): + abort(403) # Invalidate any previously generated Kobo Auth token for this user ub.session.query(ub.RemoteAuthToken).filter(ub.RemoteAuthToken.user_id == user_id)\ .filter(ub.RemoteAuthToken.token_type==1).delete() From 224915bba1d372b207d68240f2766ea07486fb8e Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:12:57 +0200 Subject: [PATCH 04/22] Prevent XXE in epub/fb2/goodreads API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lxml.etree.fromstring() function use the default XML parser, which resolves external entities because XML handling defaults in Python sucks. There is no need for such dangerous misfeatures in calibre-web, so let's disable it. A user able to upload epub/fb2 could add something like this to the file: ```xml ]> ``` and obtain the content of the `/etc/passwd` file, which is bad™. --- cps/epub.py | 2 +- cps/epub_helper.py | 8 ++++++-- cps/fb2.py | 5 ++++- cps/services/goodreads_support.py | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index 3947cee65..638462f09 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -175,7 +175,7 @@ def parse_epub_cover(ns, tree, epub_zip, cover_path, tmp_file_path): for cs in cover_section: if cs.endswith('.xhtml') or cs.endswith('.html'): markup = epub_zip.read(os.path.join(cover_path, cs)) - markup_tree = etree.fromstring(markup) + markup_tree = etree.fromstring(markup, parser=etree.XMLParser(resolve_entities=False, no_network=True)) # no matter xhtml or html with no namespace img_src = markup_tree.xpath("//*[local-name() = 'img']/@src") # Alternative image source diff --git a/cps/epub_helper.py b/cps/epub_helper.py index 4517f2c60..252fad313 100644 --- a/cps/epub_helper.py +++ b/cps/epub_helper.py @@ -53,16 +53,20 @@ def updateEpub(src, dest, filename, data, ): zf.writestr(filename, data) +# Safe parser: disable entity resolution and network access to prevent XXE attacks +_safe_parser = etree.XMLParser(resolve_entities=False, no_network=True) + + def get_content_opf(file_path, ns=None): if ns is None: ns = default_ns epubZip = zipfile.ZipFile(file_path) txt = epubZip.read('META-INF/container.xml') - tree = etree.fromstring(txt) + tree = etree.fromstring(txt, parser=_safe_parser) cf_name = tree.xpath('n:rootfiles/n:rootfile/@full-path', namespaces=ns)[0] cf = epubZip.read(cf_name) - return etree.fromstring(cf), cf_name + return etree.fromstring(cf, parser=_safe_parser), cf_name def create_new_metadata_backup(book, custom_columns, export_language, translated_cover_name, lang_type=3): diff --git a/cps/fb2.py b/cps/fb2.py index 81eae579f..12ccbc1ca 100644 --- a/cps/fb2.py +++ b/cps/fb2.py @@ -20,6 +20,9 @@ from lxml import etree from .constants import BookMeta +# Safe parser: disable entity resolution and network access to prevent XXE attacks +_safe_parser = etree.XMLParser(resolve_entities=False, no_network=True) + def get_fb2_info(tmp_file_path, original_file_extension): @@ -29,7 +32,7 @@ def get_fb2_info(tmp_file_path, original_file_extension): } fb2_file = open(tmp_file_path, encoding="utf-8") - tree = etree.fromstring(fb2_file.read().encode()) + tree = etree.fromstring(fb2_file.read().encode(), parser=_safe_parser) authors = tree.xpath('/fb:FictionBook/fb:description/fb:title-info/fb:author', namespaces=ns) diff --git a/cps/services/goodreads_support.py b/cps/services/goodreads_support.py index 06b218bf8..eec85b5b2 100644 --- a/cps/services/goodreads_support.py +++ b/cps/services/goodreads_support.py @@ -92,7 +92,7 @@ class my_GoodreadsRequest(GoodreadsRequest): if resp.status_code != 200: raise GoodreadsRequestException(resp.reason, self.path) if self.req_format == 'xml': - root = etree.fromstring(resp.content) + root = etree.fromstring(resp.content, parser=etree.XMLParser(resolve_entities=False, no_network=True)) data_dict = etree_to_dict(root) return data_dict['GoodreadsResponse'] From c451daad3cbe0a134dc5fda5ea6c233e0fbbefab Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:25:36 +0200 Subject: [PATCH 05/22] Don't allow users to edit shelves they don't have permission to edit. --- cps/shelf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cps/shelf.py b/cps/shelf.py index e5fb46707..95ae783c6 100644 --- a/cps/shelf.py +++ b/cps/shelf.py @@ -308,6 +308,9 @@ def order_shelf(shelf_id): shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.id == shelf_id).first() if shelf and check_shelf_view_permissions(shelf): if request.method == "POST": + if not check_shelf_edit_permissions(shelf): + flash(_("Sorry you are not allowed to edit this shelf"), category="error") + return redirect(url_for('web.index')) to_save = request.form.to_dict() books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by( ub.BookShelf.order.asc()).all() From 387678a771c91ab70bb2e6eb493382c41265c63d Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:28:06 +0200 Subject: [PATCH 06/22] Prevent OAuth relinking. When an OAuth provider_user_id is already linked to User A, and User B authenticates with the same OAuth identity, User B is silently logged in as User A. This is by design for single-user OAuth, but in a multi-user environment it means: if an attacker gains access to the same OAuth provider account (e.g., a shared GitHub org account, or by compromising the OAuth provider), they can log in as the linked Calibre-Web user with no password needed. --- cps/oauth_bb.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cps/oauth_bb.py b/cps/oauth_bb.py index 7ec813bdc..0ac47c391 100644 --- a/cps/oauth_bb.py +++ b/cps/oauth_bb.py @@ -134,6 +134,14 @@ def bind_oauth_or_register(provider_id, provider_user_id, redirect_url, provider oauth_entry = query.first() # already bind with user, just login if oauth_entry.user: + # If a user is already logged in and it's a different account, reject the link + # to prevent account takeover via shared OAuth identities + if current_user and current_user.is_authenticated and oauth_entry.user_id != current_user.id: + flash(_("This %(oauth)s account is already linked to a different user", + oauth=provider_name), category="error") + log.warning("User %s tried to link OAuth account already bound to user %s", + current_user.id, oauth_entry.user_id) + return redirect(url_for('web.profile')) login_user(oauth_entry.user) log.debug("You are now logged in as: '%s'", oauth_entry.user.name) flash(_("Success! You are now logged in as: %(nickname)s", nickname=oauth_entry.user.name), From cde3888e175895f01bf8ce341c3c824a6da6dc19 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:35:13 +0200 Subject: [PATCH 07/22] Prevent LDAP injection in bind_user>get_object_details --- cps/services/simpleldap.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/cps/services/simpleldap.py b/cps/services/simpleldap.py index 3ae048b5d..fecc9c5fa 100644 --- a/cps/services/simpleldap.py +++ b/cps/services/simpleldap.py @@ -31,6 +31,16 @@ except ImportError: log = logger.create() +def _escape_ldap_filter(s): + """Escape special characters for safe use in LDAP filter strings (RFC 4515).""" + s = s.replace('\\', '\\5c') + s = s.replace('*', '\\2a') + s = s.replace('(', '\\28') + s = s.replace(')', '\\29') + s = s.replace('\x00', '\\00') + return s + + class LDAPLogger(object): @staticmethod @@ -148,9 +158,11 @@ def bind_user(username, password): :returns: True if login succeeded, False if login failed, None if server unavailable. ''' + # Escape LDAP special characters to prevent LDAP injection in search filters + safe_username = _escape_ldap_filter(username) try: - if _ldap.get_object_details(username): - result = _ldap.bind_user(username, password) + if _ldap.get_object_details(safe_username): + result = _ldap.bind_user(safe_username, password) log.debug("LDAP login '%s': %r", username, result) return result is not None, None return None, None # User not found From 8ad9f4e3b79cc69e0a6008361dc4d577e262c78b Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:51:36 +0200 Subject: [PATCH 08/22] Fix a dumb type condition in gdrive.py hashlib.md5(dbpath) returns a hash object, not a hex string. Comparing a string (md5Checksum) to a hash object with != always returns True. This means the DB-replacement code path is always entered, allowing an attacker who sends a forged notification (with the known static token) to trigger an arbitrary metadata.db download from GDrive, replacing the live database. --- cps/gdrive.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/gdrive.py b/cps/gdrive.py index 07795b51c..366354efb 100644 --- a/cps/gdrive.py +++ b/cps/gdrive.py @@ -140,7 +140,7 @@ try: if response: dbpath = os.path.join(config.config_calibre_dir, "metadata.db").encode() if not response['deleted'] and response['file']['title'] == 'metadata.db' \ - and response['file']['md5Checksum'] != hashlib.md5(dbpath): # nosec + and response['file']['md5Checksum'] != hashlib.md5(dbpath).hexdigest(): # nosec tmp_dir = get_temp_dir() log.info('Database file updated') From d85bef6c38bcda788ad9bbc0d4a076c6b3350f6c Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 22:55:08 +0200 Subject: [PATCH 09/22] Don't leak credentials in debug_info No need to dump Gmail OAuth client_secret, refresh_token, and access_token in the debug ZIP in plaintext. --- cps/config_sql.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cps/config_sql.py b/cps/config_sql.py index 8f0ab0857..5760e56e2 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -326,7 +326,9 @@ class ConfigSQL(object): def to_dict(self): storage = {} for k, v in self.__dict__.items(): - if k[0] != '_' and not k.endswith("_e") and not k == "cli" and 'api' not in k.lower(): + if k[0] != '_' and not k.endswith("_e") and not k == "cli" \ + and 'api' not in k.lower() and 'token' not in k.lower() \ + and 'secret' not in k.lower() storage[k] = v return storage From 84777319d75c87e701c7ac00f9f4cba1cda75dc9 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 23:05:18 +0200 Subject: [PATCH 10/22] Fix access bypass on /show/ (serve_book) The `serve_book` function uses `get_book()` which performs no access filtering: it simply fetches by ID. Compare with `read_book` at web.py:1562 which correctly uses `get_filtered_book()`. The `common_filters()` function enforces per-user tag restrictions, language restrictions, and hidden-book rules. --- cps/web.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cps/web.py b/cps/web.py index cc261b8dd..6c3f1f76c 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1195,7 +1195,9 @@ def get_robots(): @viewer_required def serve_book(book_id, book_format, anyname): book_format = book_format.split(".")[0] - book = calibre_db.get_book(book_id) + book = calibre_db.get_filtered_book(book_id) + if not book: + return "File not in Database" data = calibre_db.get_book_format(book_id, book_format.upper()) if not data: return "File not in Database" From 0959f84fd54c7a7f1ebfb1d8fbc74409c5b8b241 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 23:08:35 +0200 Subject: [PATCH 11/22] Use a sane permission for the encryption key file The typical Linux umask of 0022, meaning the encrypted file is world-readable (-rw-r--r--). Any OS-level user on the same system can read the key and decrypt the encrypted credentials from app.db. --- cps/config_sql.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cps/config_sql.py b/cps/config_sql.py index 8f0ab0857..d7208b37d 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -583,6 +583,7 @@ def get_encryption_key(key_path): try: with open(key_file, "wb") as f: f.write(key) + os.chmod(key_file, 0o600) except PermissionError as e: error = e return key, error From b5da0df42ad9b4f7525f39e065eee35dcf838098 Mon Sep 17 00:00:00 2001 From: jvoisin Date: Tue, 14 Apr 2026 23:23:12 +0200 Subject: [PATCH 12/22] Prevent SQLI via dbpath This is reachable only by the admin users, but is still a straightforward RCE vector, if only via SQLite's `ATTACH DATABASE` trick --- cps/db.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cps/db.py b/cps/db.py index 15032026d..74b25c891 100644 --- a/cps/db.py +++ b/cps/db.py @@ -640,8 +640,8 @@ class CalibreDB: connect_args={'check_same_thread': False}, poolclass=StaticPool) with check_engine.begin() as connection: - connection.execute(text("attach database '{}' as calibre;".format(dbpath))) - connection.execute(text("attach database '{}' as app_settings;".format(app_db_path))) + connection.execute(text("attach database '{}' as calibre;".format(dbpath.replace("'", "''")))) + connection.execute(text("attach database '{}' as app_settings;".format(app_db_path.replace("'", "''")))) local_session = scoped_session(sessionmaker()) local_session.configure(bind=connection) database_uuid = local_session().query(Library_Id).one_or_none() @@ -694,8 +694,8 @@ class CalibreDB: poolclass=StaticPool) with engine.begin() as connection: connection.execute(text('PRAGMA cache_size = 10000;')) - connection.execute(text("attach database '{}' as calibre;".format(dbpath))) - connection.execute(text("attach database '{}' as app_settings;".format(app_db_path))) + connection.execute(text("attach database '{}' as calibre;".format(dbpath.replace("'", "''")))) + connection.execute(text("attach database '{}' as app_settings;".format(app_db_path.replace("'", "''")))) conn = engine.connect() # conn.text_factory = lambda b: b.decode(errors = 'ignore') possible fix for #1302 From fca580505c70071e07be7f9dbb49960f8b9450d5 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 15 Apr 2026 20:31:40 +0200 Subject: [PATCH 13/22] Fix typo --- cps/config_sql.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/config_sql.py b/cps/config_sql.py index c64addfb1..7638afcce 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -328,7 +328,7 @@ class ConfigSQL(object): for k, v in self.__dict__.items(): if k[0] != '_' and not k.endswith("_e") and not k == "cli" \ and 'api' not in k.lower() and 'token' not in k.lower() \ - and 'secret' not in k.lower() + and 'secret' not in k.lower(): storage[k] = v return storage From fd744af75d06d1264c7f04e6f994bc15dc90b1ea Mon Sep 17 00:00:00 2001 From: jvoisin Date: Wed, 15 Apr 2026 23:28:27 +0200 Subject: [PATCH 14/22] Don't give non-admin users a full stacktrace on 500 As `traceback.format_exc()` might contain internal file paths, library versions, function names, and variable values. --- cps/error_handler.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cps/error_handler.py b/cps/error_handler.py index 3bc885dd3..ca24ced23 100644 --- a/cps/error_handler.py +++ b/cps/error_handler.py @@ -22,6 +22,8 @@ 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 .cw_login import current_user try: from werkzeug.exceptions import FailedDependency except ImportError: @@ -62,6 +64,13 @@ def internal_error(error): error_stack="", instance=config.config_calibre_web_title ), 500 + log.error("500 Internal Server Error: %s", traceback.format_exc()) + error_stack = "" + try: + if current_user.is_authenticated and current_user.role_admin(): + error_stack = traceback.format_exc().split("\n") + except Exception: + pass return render_template('http_error.html', error_code="500 Internal Server Error", error_name='The server encountered an internal error and was unable to complete your ' @@ -69,7 +78,7 @@ def internal_error(error): issue=True, goto_admin=False, unconfigured=False, - error_stack=traceback.format_exc().split("\n"), + error_stack=error_stack, instance=config.config_calibre_web_title ), 500 From 674b47bdbd0206ddabbef000de4516e4ef7710c9 Mon Sep 17 00:00:00 2001 From: haraldpdl Date: Sat, 18 Apr 2026 06:28:58 +0200 Subject: [PATCH 15/22] Remove staged download from /tmp/calibre_web after response is sent When config_embed_metadata is enabled with config_binariesdir or config_kepubifypath set, do_download_file stages a copy of every downloaded book under get_temp_dir() but never removes it. A bulk OPDS or Kobo sync can fill the host filesystem in minutes; the effect is amplified for comic formats (CBZ/CBR), where each staged file can run to hundreds of MB or several GB. Once the disk fills, downloads silently 404 and a container restart does not recover the space. Add an after_this_request hook that removes the staged copy after the response is sent, gated on filename == get_temp_dir() so the non-embed and gdrive-direct paths are untouched. --- cps/helper.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cps/helper.py b/cps/helper.py index f85e6fa17..0dfb761c6 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -30,7 +30,7 @@ import requests import unidecode from uuid import uuid4 -from flask import send_from_directory, make_response, abort, url_for, Response, request +from flask import send_from_directory, make_response, abort, url_for, Response, request, after_this_request from flask_babel import gettext as _ from flask_babel import lazy_gettext as N_ from flask_babel import get_locale @@ -956,6 +956,17 @@ def do_download_file(book, book_format, client, data, headers): else: download_name = book_name + # Clean up staged copies in /tmp/calibre_web after the response is sent + # (kepubify / calibre-export branches) so the temp dir does not grow unbounded. + if filename == get_temp_dir(): + _tmp_path = os.path.join(filename, download_name + "." + book_format) + @after_this_request + def _cleanup_staged_download(resp): + try: + os.remove(_tmp_path) + except OSError as ex: + log.warning('Failed to remove staged download %s: %s', _tmp_path, ex) + return resp response = make_response(send_from_directory(filename, download_name + "." + book_format)) # ToDo Check headers parameter for element in headers: From 570371cc826c760f6800796ff5d11572468ed460 Mon Sep 17 00:00:00 2001 From: haraldpdl Date: Sat, 18 Apr 2026 07:27:33 +0200 Subject: [PATCH 16/22] Don't write a cover sibling per download (--dont-save-cover) calibredb export writes .jpg next to . by default, leaving an unused cover image in /tmp/calibre_web for every download that goes through do_calibre_export. The cover file is never read by calibre-web (cover serving uses a separate path), so it is pure waste of disk space and IO. Pass --dont-save-cover, paired with the existing --dont-write-opf, to skip the unwanted side-effect at the source. Verified that none of the three do_calibre_export call sites (download via do_download_file, email via tasks/mail.py, kepubify via tasks/convert.py) read the cover sibling. --- cps/embed_helper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cps/embed_helper.py b/cps/embed_helper.py index f222bcd05..6a815889e 100644 --- a/cps/embed_helper.py +++ b/cps/embed_helper.py @@ -36,7 +36,8 @@ def do_calibre_export(book_id, book_format): if config.config_calibre_split: my_env['CALIBRE_OVERRIDE_DATABASE_PATH'] = os.path.join(config.config_calibre_dir, "metadata.db") library_path = config.get_book_path() - opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', '--with-library', library_path, + opf_command = [calibredb_binarypath, 'export', '--dont-write-opf', '--dont-save-cover', + '--with-library', library_path, '--to-dir', tmp_dir, '--formats', book_format, "--template", "{}".format(temp_file_name), str(book_id)] p = process_open(opf_command, quotes, my_env) From ab17992ebb8ea5d95bb1584d25484879bcacaadd Mon Sep 17 00:00:00 2001 From: haraldpdl Date: Sun, 19 Apr 2026 10:51:45 +0200 Subject: [PATCH 17/22] fix(opds): atom:updated reflects last modification, not date added Books.atom_timestamp returned Books.timestamp (date added), which is set at import and never changes. OPDS clients use atom:updated to decide whether a book has changed on the server, so cover swaps, metadata edits, and any other post-import change were invisible to sync clients; they would keep serving the stale cover and title until a manual refresh. Atom RFC 4287 defines updated as "the most recent instant in time when an entry or feed was modified", and Calibre already tracks that field as last_modified, bumping it on every metadata and cover edit. Switching the property to return last_modified (with a fallback to timestamp when last_modified is NULL) aligns Calibre-Web's behaviour with the Atom contract. This change only affects the OPDS feed's atom:updated element. Kobo sync uses its own last_modified comparison path, so it is unaffected. --- cps/db.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cps/db.py b/cps/db.py index 74b25c891..08cdba906 100644 --- a/cps/db.py +++ b/cps/db.py @@ -449,7 +449,16 @@ class Books(Base): @property def atom_timestamp(self): - return self.timestamp.strftime('%Y-%m-%dT%H:%M:%S+00:00') or '' + # OPDS atom:updated is defined as "the most recent instant in time + # when the entry was modified". Books.timestamp is the date added and + # never changes after import, so metadata and cover edits were + # invisible to OPDS sync clients. Use last_modified, which Calibre + # updates on every metadata or cover change; fall back to timestamp + # only if last_modified happens to be missing. + t = self.last_modified or self.timestamp + if t is None: + return '' + return t.strftime('%Y-%m-%dT%H:%M:%S+00:00') or '' class CustomColumns(Base): From 0ca6e86177d20bca8d3b96a0b1f0a6ea4aa91c04 Mon Sep 17 00:00:00 2001 From: walrusec Date: Sun, 19 Apr 2026 08:54:47 -0400 Subject: [PATCH 18/22] Fix metadata search crash when ComicVine or Douban return None on error Both comicvine.py and douban.py return None instead of [] when an HTTP error occurs during a metadata search. The consumer in search_metadata.py iterates the result directly, which raises TypeError: 'NoneType' object is not iterable and crashes the server on single-threaded deployments. Fixes #3606 --- cps/metadata_provider/comicvine.py | 2 +- cps/metadata_provider/douban.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/metadata_provider/comicvine.py b/cps/metadata_provider/comicvine.py index b4d8d34ce..52c16d39c 100644 --- a/cps/metadata_provider/comicvine.py +++ b/cps/metadata_provider/comicvine.py @@ -57,7 +57,7 @@ class ComicVine(Metadata): result.raise_for_status() except Exception as e: log.warning(e) - return None + return [] for result in result.json()["results"]: match = self._parse_search_result( result=result, generic_cover=generic_cover, locale=locale diff --git a/cps/metadata_provider/douban.py b/cps/metadata_provider/douban.py index 1dd12d8ae..11f88996c 100644 --- a/cps/metadata_provider/douban.py +++ b/cps/metadata_provider/douban.py @@ -155,7 +155,7 @@ class Douban(Metadata): r.raise_for_status() except Exception as e: log.warning(e) - return None + return [] match = MetaRecord( id=id, From f10b680b0effe0ac619eb53a2a300771506e868a Mon Sep 17 00:00:00 2001 From: limeade23 Date: Thu, 23 Apr 2026 17:41:46 +0900 Subject: [PATCH 19/22] Update Korean language --- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 66029 -> 71161 bytes cps/translations/ko/LC_MESSAGES/messages.po | 361 ++++++++++---------- 2 files changed, 180 insertions(+), 181 deletions(-) diff --git a/cps/translations/ko/LC_MESSAGES/messages.mo b/cps/translations/ko/LC_MESSAGES/messages.mo index 0cdc6758e3ba104a5e534671468220df00db7875..c7289f2613316ec362f9c0c78db9eb5bf7f6ef2c 100644 GIT binary patch delta 22345 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 delta 17535 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 gl`-z-VWx$wZf>lX;e?u-mnE(I) diff --git a/cps/translations/ko/LC_MESSAGES/messages.po b/cps/translations/ko/LC_MESSAGES/messages.po index 6e628c7b0..275f8dd47 100644 --- a/cps/translations/ko/LC_MESSAGES/messages.po +++ b/cps/translations/ko/LC_MESSAGES/messages.po @@ -24,11 +24,11 @@ msgstr "통계" #: cps/admin.py:151 msgid "Server restarted, please reload page." -msgstr "서버가 재시작 되었습니다. 페이지를 새로고침 해주세요." +msgstr "서버가 재시작되었습니다. 페이지를 새로고침 해주세요." #: cps/admin.py:153 msgid "Performing Server shutdown, please close window." -msgstr "서버를 종료하고 있습니다. 창을 닫아주세요." +msgstr "서버를 종료합니다. 창을 닫아주세요." #: cps/admin.py:161 msgid "Success! Database Reconnected" @@ -50,7 +50,7 @@ msgstr "알 수 없음" #: cps/admin.py:233 msgid "Admin page" -msgstr "관리자 페이지" +msgstr "관리 페이지" #: cps/admin.py:253 msgid "Basic Configuration" @@ -64,7 +64,7 @@ msgstr "UI 설정" #: cps/web.py:751 #, python-format msgid "Custom Column No.%(column)d does not exist in calibre database" -msgstr "사용자 정의 열 번호 %(column)d이(가) calibre 데이터베이스에 없습니다." +msgstr "사용자 정의 항목 %(column)d이(가) calibre 데이터베이스에 없습니다." #: cps/admin.py:333 cps/templates/admin.html:51 msgid "Edit Users" @@ -99,7 +99,7 @@ msgstr "게스트 이름은 변경할 수 없습니다." #: cps/admin.py:488 msgid "Guest can't have this role" -msgstr "게스트는 이 권한을 가질 수 없습니다." +msgstr "게스트는 가질 수 없는 권한입니다." #: cps/admin.py:500 cps/admin.py:2031 msgid "No admin user remaining, can't remove admin role" @@ -123,7 +123,7 @@ msgstr "잘못된 설정입니다." #: cps/admin.py:523 msgid "Guest's Locale is determined automatically and can't be set" -msgstr "게스트의 언어는 자동으로 설정되며 변경할 수 없습니다." +msgstr "게스트 언어는 자동으로 설정되며 변경할 수 없습니다." #: cps/admin.py:527 msgid "No Valid Locale Given" @@ -140,15 +140,15 @@ msgstr "매개변수를 찾을 수 없습니다." #: cps/admin.py:577 msgid "Invalid Read Column" -msgstr "읽기 항목이 유효하지 않습니다." +msgstr "읽음 상태가 올바르지 않습니다." #: cps/admin.py:583 msgid "Invalid Restricted Column" -msgstr "제한된 항목이 유효하지 않습니다." +msgstr "표시 제한이 올바르지 않습니다." #: cps/admin.py:603 cps/admin.py:1902 msgid "Calibre-Web configuration updated" -msgstr "Calibre-Web 설정이 업데이트되었습니다." +msgstr "Calibre-Web 설정이 변경되었습니다." #: cps/admin.py:615 msgid "Do you really want to delete the Kobo Token?" @@ -184,11 +184,11 @@ msgstr "선택한 사용자의 권한을 변경하시겠습니까?" #: cps/admin.py:631 msgid "Are you sure you want to change the archive status for the selected book(s)?" -msgstr "선택한 책(들)에 대해 아카이브 상태를 변경하시겠습니까?" +msgstr "선택한 책의 숨김 상태를 변경하시겠습니까?" #: cps/admin.py:633 msgid "Are you sure you want to change the read status for the selected book(s)?" -msgstr "선택한 책(들)에 대해 읽음 상태를 변경하시겠습니까?" +msgstr "선택한 책의 읽음 상태를 변경하시겠습니까?" #: cps/admin.py:635 msgid "Are you sure you want to change the selected restrictions for the selected user(s)?" @@ -196,11 +196,11 @@ msgstr "선택한 사용자의 제한을 변경하시겠습니까?" #: cps/admin.py:637 msgid "Are you sure you want to change the selected visibility restrictions for the selected user(s)?" -msgstr "선택한 사용자의 보기 제한을 변경하시겠습니까?" +msgstr "선택한 사용자의 표시 제한을 변경하시겠습니까?" #: cps/admin.py:640 msgid "Are you sure you want to change shelf sync behavior for the selected user(s)?" -msgstr "선택한 사용자의 책장 동기화 설정을 변경하시겠습니까?" +msgstr "선택한 사용자의 서재 동기화 설정을 변경하시겠습니까?" #: cps/admin.py:642 msgid "Are you sure you want to change Calibre library location?" @@ -208,7 +208,7 @@ msgstr "Calibre 라이브러리 경로를 변경하시겠습니까?" #: cps/admin.py:644 msgid "Calibre-Web will search for updated Covers and update Cover Thumbnails, this may take a while?" -msgstr "Calibre-Web이 업데이트된 표지를 검색하고 표지 미리보기를 업데이트합니다. 시간이 걸릴 수 있습니다." +msgstr "Calibre-Web이 새로운 썸네일로 갱신합니다. 시간이 걸릴 수 있습니다." #: cps/admin.py:647 msgid "Are you sure you want delete Calibre-Web's sync database to force a full sync with your Kobo Reader?" @@ -241,15 +241,15 @@ msgstr "잘못된 작업입니다." #: cps/admin.py:1137 msgid "client_secrets.json Is Not Configured For Web Application" -msgstr "client_secrets.json이 설정되지 않았습니다." +msgstr "client_secrets.json이 웹 애플리케이션용으로 설정되지 않았습니다." #: cps/admin.py:1182 msgid "Logfile Location is not Valid, Please Enter Correct Path" -msgstr "올바른 로그 파일의 경로를 입력해주세요." +msgstr "로그 파일의 경로를 확인해주세요." #: cps/admin.py:1188 msgid "Access Logfile Location is not Valid, Please Enter Correct Path" -msgstr "올바른 액섹스 로그 파일의 경로를 입력해주세요." +msgstr "액세스 로그 파일의 경로를 확인해주세요." #: cps/admin.py:1222 msgid "Please Enter a LDAP Provider, Port, DN and User Object Identifier" @@ -331,7 +331,7 @@ msgstr "이메일 주소를 설정해주세요." #: cps/admin.py:1356 msgid "Email Server Settings updated" -msgstr "이메일 서버 설정이 업데이트되었습니다." +msgstr "이메일 서버 설정이 변경되었습니다." #: cps/admin.py:1379 cps/templates/admin.html:195 msgid "Edit Scheduled Tasks Settings" @@ -343,11 +343,11 @@ msgstr "작업 시작 시간이 올바르지 않습니다." #: cps/admin.py:1396 msgid "Invalid duration for task specified" -msgstr "작업 종료 시간이 올바르지 않습니다." +msgstr "작업 실행 시간이 올바르지 않습니다." #: cps/admin.py:1406 msgid "Scheduled tasks settings updated" -msgstr "예약 작업 설정이 업데이트되었습니다." +msgstr "예약 작업 설정이 변경되었습니다." #: cps/admin.py:1416 cps/admin.py:1465 cps/admin.py:2101 cps/web.py:1323 msgid "Oops! An unknown error occurred. Please try again later." @@ -355,7 +355,7 @@ msgstr "알 수 없는 오류가 발생했습니다. 잠시 후 다시 시도해 #: cps/admin.py:1420 msgid "Settings DB is not Writeable" -msgstr "설정 데이터베이스에 저장할 수 없습니다." +msgstr "설정 데이터베이스에 반영할 수 없습니다." #: cps/admin.py:1450 cps/admin.py:2093 #, python-format @@ -389,7 +389,7 @@ msgstr "업데이트 패키지 압축 해제 중" #: cps/admin.py:1548 msgid "Replacing files" -msgstr "파일 적용 중" +msgstr "파일 반영 중" #: cps/admin.py:1549 msgid "Database connections are closed" @@ -422,7 +422,7 @@ msgstr "연결 시도 중 시간이 초과되었습니다." #: cps/admin.py:1555 cps/updater.py:397 cps/updater.py:634 msgid "General error" -msgstr "일반 오류가 발생했습니다." +msgstr "오류가 발생했습니다." #: cps/admin.py:1556 msgid "Update file could not be saved in temp dir" @@ -484,7 +484,7 @@ msgstr "비밀번호는 1~40자 사이로 입력해주세요." #: cps/admin.py:1925 msgid "Database Settings updated" -msgstr "데이터베이스 설정이 업데이트되었습니다." +msgstr "데이터베이스 설정이 변경되었습니다." #: cps/admin.py:1933 msgid "Database Configuration" @@ -531,7 +531,7 @@ msgstr "이메일 주소는 비워둘 수 없고, 올바른 형식이어야 합 #: cps/admin.py:2097 #, python-format msgid "User '%(nick)s' updated" -msgstr "사용자 '%(nick)s의 정보를 수정했습니다." +msgstr "사용자 '%(nick)s'의 정보를 수정했습니다." #: cps/basic.py:67 cps/search.py:50 cps/search.py:441 #: cps/templates/basic_layout.html:23 cps/templates/book_edit.html:242 @@ -555,7 +555,7 @@ msgstr "실행 권한이 없습니다." #: cps/web.py:998 cps/web.py:1028 cps/web.py:1073 cps/web.py:1101 #: cps/web.py:1140 msgid "None" -msgstr "None" +msgstr "없음" #: cps/editbooks.py:155 #, python-format @@ -564,7 +564,7 @@ msgstr "파일 %(file)s이(가) 업로드되었습니다." #: cps/editbooks.py:184 msgid "Source or destination format for conversion missing" -msgstr "변환할 원본 또는 대상 형식이 지정되지 않았습니다." +msgstr "변환할 원본 또는 대상 파일 형식이 지정되지 않았습니다." #: cps/editbooks.py:192 #, python-format @@ -578,11 +578,11 @@ msgstr "책 변환 중 오류가 발생했습니다: %(res)s" #: cps/editbooks.py:297 msgid "Changes successfully applied" -msgstr "변경이 성공적으로 반영되었습니다." +msgstr "변경 사항이 저장되었습니다." #: cps/editbooks.py:317 msgid "Value is missing on request" -msgstr "요청에서 값이 누락되었습니다." +msgstr "요청에서 누락된 값이 있습니다." #: cps/editbooks.py:319 cps/editbooks.py:326 cps/editbooks.py:627 #: cps/editbooks.py:1146 cps/web.py:533 cps/web.py:1565 cps/web.py:1611 @@ -596,7 +596,7 @@ msgstr "표지 업로드 권한이 없습니다." #: cps/editbooks.py:694 cps/editbooks.py:938 msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" -msgstr "식별자는 대소문자 구분 없어 덮어씁니다." +msgstr "식별자는 대소문자 구분 없이 덮어씁니다." #: cps/editbooks.py:709 cps/editbooks.py:912 cps/editbooks.py:1273 #, python-format @@ -641,7 +641,7 @@ msgstr "표지 파일 %(file)s을(를) 이동하지 못했습니다 :%(error)s" #: cps/editbooks.py:1041 msgid "Book Format Successfully Deleted" -msgstr "책 형식이 삭제되었습니다." +msgstr "해당 파일 형식이 삭제되었습니다." #: cps/editbooks.py:1044 cps/editbooks.py:1061 msgid "Book Successfully Deleted" @@ -649,7 +649,7 @@ msgstr "책이 삭제되었습니다." #: cps/editbooks.py:1065 msgid "You are missing permissions to delete books" -msgstr "책을 삭제할 권한이 없습니다." +msgstr "삭제 권한이 없습니다." #: cps/editbooks.py:1139 #, python-brace-format @@ -686,7 +686,7 @@ msgstr "파일 형식 %(ext)s이(가) %(book)s에 추가되었습니다" #: cps/error_handler.py:98 msgid "Please wait one minute to register next user" -msgstr "다음 사용자를 등록은 1분 뒤 가능합니다." +msgstr "추가 사용자를 등록은 1분 뒤 가능합니다." #: cps/error_handler.py:99 cps/templates/layout.html:69 #: cps/templates/layout.html:104 cps/templates/login.html:27 @@ -694,11 +694,11 @@ msgstr "다음 사용자를 등록은 1분 뒤 가능합니다." #: cps/web.py:1300 cps/web.py:1324 cps/web.py:1328 cps/web.py:1341 #: cps/web.py:1344 msgid "Register" -msgstr "등록" +msgstr "가입" #: cps/error_handler.py:103 msgid "Please wait one minute before next login" -msgstr "1분 후 시도해 주세요." +msgstr "1분 뒤 시도해 주세요." #: cps/gdrive.py:58 msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" @@ -746,7 +746,7 @@ msgstr "Calibre-Web 시작하기" #: cps/helper.py:146 #, python-format msgid "Registration Email for user: %(name)s" -msgstr "사용자 %(name)s의 등록 이메일" +msgstr "사용자 %(name)s 가입 안내 이메일" #: cps/helper.py:157 cps/helper.py:163 #, python-format @@ -790,7 +790,7 @@ msgstr "데이터베이스 경로가 올바르지 않아 책 %(id)s을(를) 데 #: cps/helper.py:404 #, python-format msgid "Moving book path of Book %(book_id)s to: '%(src)s' failed with error: %(error)s" -msgstr "도서 %(book_id)s의 경로를 '%(src)s'로 이동하는데 실패했습니다: %(error)s" +msgstr "책 %(book_id)s의 경로를 '%(src)s'로 이동하는데 실패했습니다: %(error)s" #: cps/helper.py:443 #, python-format @@ -842,7 +842,7 @@ msgstr "표지 형식 오류입니다." #: cps/helper.py:849 msgid "You are not allowed to access localhost or the local network for cover uploads" -msgstr "표지 업로드를 위해 로컬 호스트나 로컬 네트워크에 접근할 수 없습니다." +msgstr "표지 업로드를 위해 localhost나 내부 네트워크에 접근할 수 없습니다." #: cps/helper.py:859 msgid "Failed to create path for cover" @@ -908,7 +908,7 @@ msgstr "메타데이터 백업이 작업에 추가되었습니다." #: cps/kobo_auth.py:91 msgid "Please access Calibre-Web from non localhost to get valid api_endpoint for kobo device" -msgstr "Kobo 장치에 대한 유효한 api_endpoint를 얻으려면 로컬 호스트가 아닌 곳에서 Calibre-Web에 접근하세요." +msgstr "Kobo 장치에 사용할 유효한 api_endpoint를 얻으려면 localhost가 아닌 주소로 Calibre-Web에 접속하세요." #: cps/kobo_auth.py:117 msgid "Kobo Setup" @@ -917,7 +917,7 @@ msgstr "Kobo 설정" #: cps/oauth_bb.py:78 #, python-format msgid "Register with %(provider)s" -msgstr "%(provider)s에 등록" +msgstr "%(provider)s로 가입" #: cps/oauth_bb.py:139 cps/remotelogin.py:131 #, python-format @@ -954,7 +954,7 @@ msgstr "GitHub 로그인에 실패했습니다." #: cps/oauth_bb.py:269 msgid "Failed to fetch user info from GitHub." -msgstr "GitHub에서 사용자 정보를 불러오지 못했습니다." +msgstr "GitHub에서 사용자 정보를 가져오지 못했습니다." #: cps/oauth_bb.py:281 msgid "Failed to log in with Google." @@ -962,25 +962,25 @@ msgstr "Google 로그인에 실패했습니다." #: cps/oauth_bb.py:287 msgid "Failed to fetch user info from Google." -msgstr "Google에서 사용자 정보를 불러오지 못했습니다." +msgstr "Google에서 사용자 정보를 가져오지 못했습니다." #: cps/oauth_bb.py:335 msgid "GitHub Oauth error, please retry later." -msgstr "GitHub Oauth 오류입니다. 잠시 후 다시 시도해 주세요." +msgstr "GitHub OAuth 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." #: cps/oauth_bb.py:338 #, python-brace-format msgid "GitHub Oauth error: {}" -msgstr "GitHub 인증 오류가 발생했습니다: {}" +msgstr "GitHub OAuth 오류가 발생했습니다: {}" #: cps/oauth_bb.py:359 msgid "Google Oauth error, please retry later." -msgstr "Google 인증 오류입니다. 잠시 후 다시 시도해 주세요." +msgstr "Google OAuth 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." #: cps/oauth_bb.py:362 #, python-brace-format msgid "Google Oauth error: {}" -msgstr "Google 인증 오류가 발생했습니다: {}" +msgstr "Google OAuth 오류가 발생했습니다: {}" #: cps/opds.py:307 #, python-brace-format @@ -1023,12 +1023,12 @@ msgstr "인기 책 보기" #: cps/render_template.py:48 cps/render_template.py:53 msgid "Downloaded Books" -msgstr "받은 적 있는" +msgstr "다운로드한" #: cps/render_template.py:50 cps/render_template.py:55 #: cps/templates/user_table.html:167 msgid "Show Downloaded Books" -msgstr "다운로드 받은 적 있는 책 보기" +msgstr "다운로드했던 책 보기" #: cps/render_template.py:58 cps/templates/index.xml:36 cps/web.py:437 msgid "Top Rated Books" @@ -1045,7 +1045,7 @@ msgstr "읽음" #: cps/render_template.py:63 msgid "Show Read and Unread" -msgstr "읽은 책과 안 읽은 책 보기" +msgstr "읽은 책과 읽지 않은 책 보기" #: cps/render_template.py:65 cps/templates/index.xml:70 #: cps/templates/index.xml:74 cps/web.py:773 @@ -1130,11 +1130,11 @@ msgstr "파일 형식 보기" #: cps/render_template.py:95 cps/web.py:796 msgid "Archived Books" -msgstr "보관함" +msgstr "숨긴 책" #: cps/render_template.py:97 cps/templates/user_table.html:166 msgid "Show Archived Books" -msgstr "보관된 책 보기" +msgstr "숨긴 책 보기" #: cps/render_template.py:100 cps/web.py:832 msgid "Books List" @@ -1146,11 +1146,11 @@ msgstr "책 목록 보기" #: cps/search.py:214 msgid "Published after " -msgstr "발행일 이후" +msgstr "출간일 이후" #: cps/search.py:221 msgid "Published before " -msgstr "발행일 이전" +msgstr "출간일 이전" #: cps/search.py:243 #, python-format @@ -1169,7 +1169,7 @@ msgstr "읽은 상태 = %(status)s" #: cps/search.py:366 msgid "Error on search for custom columns, please restart Calibre-Web" -msgstr "사용자 정의 열을 검색하는 동안 오류가 발생했습니다. Calibre-Web을 다시 시작해 주세요." +msgstr "사용자 정의 항목 검색 중 오류가 발생했습니다. Calibre-Web을 다시 시작해 주세요." #: cps/search.py:385 cps/search.py:417 cps/templates/layout.html:57 msgid "Advanced Search" @@ -1200,36 +1200,36 @@ msgstr "책이 등록되었습니다: %(sname)s" #: cps/shelf.py:116 msgid "You are not allowed to remove a book from the shelf" -msgstr "" +msgstr "제거할 권한이 없습니다." #: cps/shelf.py:129 #, python-format msgid "No Books are part of the shelf: %(name)s" -msgstr "" +msgstr "서재에 포함되어 있지 않습니다: %(name)s" #: cps/shelf.py:140 #, python-format msgid "Books have been removed from shelf: %(sname)s" -msgstr "" +msgstr "서재에서 제거되었습니다: %(sname)s" #: cps/shelf.py:147 #, python-format msgid "Could not remove books from shelf: %(sname)s" -msgstr "" +msgstr "서재에서 제거할 수 없습니다: %(sname)s" #: cps/shelf.py:162 msgid "You are not allowed to add a book to the shelf" -msgstr "책을 추가할 권한이 없습니다." +msgstr "추가할 권한이 없습니다." #: cps/shelf.py:178 #, python-format msgid "Books are already part of the shelf: %(name)s" -msgstr "이미 등록된 책입니다: %(name)s" +msgstr "이미 추가된 책입니다: %(name)s" #: cps/shelf.py:190 #, python-format msgid "Books have been added to shelf: %(sname)s" -msgstr "책들이 등록되었습니다: %(sname)s" +msgstr "책이 추가되었습니다: %(sname)s" #: cps/shelf.py:197 #, python-format @@ -1239,11 +1239,11 @@ msgstr "책을 추가할 수 없습니다: %(sname)s" #: cps/shelf.py:243 #, python-format msgid "Book has been removed from shelf: %(sname)s" -msgstr "책이 서재에서 삭제되었습니다: %(sname)s" +msgstr "서재에서 제거되었습니다: %(sname)s" #: cps/shelf.py:252 msgid "Sorry you are not allowed to remove a book from this shelf" -msgstr "서재에서 책을 삭제할 권한이 없습니다." +msgstr "제거할 권한이 없습니다." #: cps/shelf.py:262 cps/templates/layout.html:159 msgid "Create a Shelf" @@ -1251,7 +1251,7 @@ msgstr "서재 생성" #: cps/shelf.py:270 msgid "Sorry you are not allowed to edit this shelf" -msgstr "서재를 수정할 권한이 없습니다." +msgstr "수정할 권한이 없습니다." #: cps/shelf.py:272 msgid "Edit a shelf" @@ -1268,7 +1268,7 @@ msgstr "서재가 삭제되었습니다." #: cps/shelf.py:333 #, python-format msgid "Change order of Shelf: '%(name)s'" -msgstr "서재 순서가 변경되었습니다: '%(name)s'" +msgstr "순서를 변경합니다: '%(name)s'" #: cps/shelf.py:368 msgid "Sorry you are not allowed to create a public shelf" @@ -1277,12 +1277,12 @@ msgstr "공개 서재를 생성할 권한이 없습니다." #: cps/shelf.py:385 #, python-format msgid "Shelf %(title)s created" -msgstr "서재 %(title)s가 생성되었습니다." +msgstr "서재 %(title)s이(가) 생성되었습니다." #: cps/shelf.py:388 #, python-format msgid "Shelf %(title)s changed" -msgstr "서재 %(title)s가 변경되었습니다." +msgstr "서재 %(title)s이(가) 변경되었습니다." #: cps/shelf.py:402 msgid "There was an error" @@ -1296,7 +1296,7 @@ msgstr "'%(title)s' 공개 서재가 이미 존재합니다." #: cps/shelf.py:435 #, python-format msgid "A private shelf with the name '%(title)s' already exists." -msgstr "'%(title)s' 개인 서재가 이미 존재합니다." +msgstr "'%(title)s' 비공개 서재가 이미 존재합니다." #: cps/shelf.py:525 #, python-format @@ -1314,7 +1314,7 @@ msgstr "작업" #: cps/tasks_status.py:63 msgid "Waiting" -msgstr "대기 중" +msgstr "대기" #: cps/tasks_status.py:65 msgid "Failed" @@ -1322,23 +1322,23 @@ msgstr "실패" #: cps/tasks_status.py:67 msgid "Started" -msgstr "시작됨" +msgstr "시작" #: cps/tasks_status.py:69 msgid "Finished" -msgstr "종료됨" +msgstr "완료" #: cps/tasks_status.py:71 msgid "Ended" -msgstr "종료됨" +msgstr "종료" #: cps/tasks_status.py:73 msgid "Cancelled" -msgstr "취소됨" +msgstr "취소" #: cps/tasks_status.py:75 msgid "Unknown Status" -msgstr "알 수 없는 상태" +msgstr "알 수 없음" #: cps/updater.py:433 cps/updater.py:444 cps/updater.py:545 cps/updater.py:560 msgid "Unexpected data while reading update information" @@ -1346,7 +1346,7 @@ msgstr "업데이트 정보를 읽는 중 알 수 없는 문제가 발생했습 #: cps/updater.py:440 cps/updater.py:552 msgid "No update available. You already have the latest version installed" -msgstr "업데이트가 없습니다. 최신 버전이 설치되어 있습니다." +msgstr "업데이트가 없습니다. 이미 최신 버전이 설치되어 있습니다." #: cps/updater.py:459 msgid "A new update is available. Click on the button below to update to the latest version." @@ -1435,7 +1435,7 @@ msgstr "파일 형식 목록" #: cps/web.py:1262 msgid "Please configure the SMTP mail settings first..." -msgstr "SMTP 메일 설정을 해주세요." +msgstr "SMTP 설정을 해주세요." #: cps/web.py:1268 #, python-format @@ -1488,7 +1488,7 @@ msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다." #: cps/web.py:1420 msgid "New Password was sent to your email address" -msgstr "새 비밀번호가 이메일로 전송되었습니다" +msgstr "새로운 비밀번호가 이메일로 전송되었습니다" #: cps/web.py:1424 msgid "An unknown error occurred. Please try again later." @@ -1527,7 +1527,7 @@ msgstr "임시 폴더 비우기" #: cps/tasks/convert.py:112 #, python-format msgid "%(book)s send to E-Reader" -msgstr "%(book)s을 전자책 리더로 전송" +msgstr "%(book)s을(를) 전자책 리더로 전송" #: cps/tasks/convert.py:177 #, python-format @@ -1582,21 +1582,21 @@ msgstr "메타데이터를 백업하고 있습니다." #: cps/tasks/thumbnail.py:97 #, python-format msgid "Generated %(count)s cover thumbnails" -msgstr "%(count)s개의 표지 섬네일을 생성했습니다." +msgstr "%(count)s개의 표지 썸네일을 생성했습니다." #: cps/tasks/thumbnail.py:233 cps/tasks/thumbnail.py:448 #: cps/tasks/thumbnail.py:518 msgid "Cover Thumbnails" -msgstr "표지 섬네일" +msgstr "표지 썸네일" #: cps/tasks/thumbnail.py:294 #, python-brace-format msgid "Generated {0} series thumbnails" -msgstr "{0}개의 시리즈 섬네일을 생성했습니다." +msgstr "{0}개의 시리즈 썸네일을 생성했습니다." #: cps/tasks/thumbnail.py:459 msgid "Clearing cover thumbnail cache" -msgstr "표지 섬네일 캐시를 삭제합니다." +msgstr "표지 썸네일 캐시를 삭제합니다." #: cps/tasks/upload.py:39 cps/templates/admin.html:20 #: cps/templates/layout.html:82 cps/templates/user_table.html:145 @@ -1625,7 +1625,7 @@ msgstr "전자책 리더로 보낼 이메일" #: cps/templates/admin.html:17 cps/templates/layout.html:93 #: cps/templates/user_table.html:143 msgid "Admin" -msgstr "관리자" +msgstr "관리" #: cps/templates/admin.html:18 cps/templates/login.html:13 #: cps/templates/login.html:14 cps/templates/user_edit.html:23 @@ -1693,7 +1693,7 @@ msgstr "이메일 서비스" #: cps/templates/admin.html:91 msgid "Gmail via Oauth2" -msgstr "Gmail via Oauth2" +msgstr "Gmail via OAuth2" #: cps/templates/admin.html:106 msgid "Configuration" @@ -1729,7 +1729,7 @@ msgstr "익명 보기" #: cps/templates/admin.html:141 msgid "Public Registration" -msgstr "공개 등록" +msgstr "공개 가입" #: cps/templates/admin.html:145 msgid "Magic Link Remote Login" @@ -1766,15 +1766,15 @@ msgstr "시작 시간" #: cps/templates/admin.html:174 cps/templates/schedule_edit.html:20 msgid "Maximum Duration" -msgstr "최대 기간" +msgstr "최대 실행 시간" #: cps/templates/admin.html:178 cps/templates/schedule_edit.html:29 msgid "Generate Thumbnails" -msgstr "섬네일 생성" +msgstr "썸네일 생성" #: cps/templates/admin.html:182 msgid "Generate series cover thumbnails" -msgstr "시리즈 표지 섬네일 생성" +msgstr "시리즈 표지 썸네일 생성" #: cps/templates/admin.html:186 cps/templates/admin.html:208 #: cps/templates/schedule_edit.html:37 @@ -1787,7 +1787,7 @@ msgstr "메타데이터 백업" #: cps/templates/admin.html:197 msgid "Refresh Thumbnail Cache" -msgstr "섬네일 캐시 새로 고침" +msgstr "썸네일 캐시 갱신" #: cps/templates/admin.html:203 msgid "Administration" @@ -1862,7 +1862,7 @@ msgstr "종료하시겠습니까?" #: cps/templates/admin.html:283 msgid "Updating, please do not reload this page" -msgstr "업데이트 중입니다. 이 페이지를 새로고침 하지 마세요." +msgstr "업데이트 중입니다. 이 페이지를 새로고침하지 마세요." #: cps/templates/author.html:15 msgid "via" @@ -1885,22 +1885,22 @@ msgstr "등록 오래된 순" #: cps/templates/author.html:28 cps/templates/index.html:76 #: cps/templates/search.html:47 cps/templates/shelf.html:22 msgid "Sort title in alphabetical order" -msgstr "이름순" +msgstr "제목순" #: cps/templates/author.html:29 cps/templates/index.html:77 #: cps/templates/search.html:48 cps/templates/shelf.html:23 msgid "Sort title in reverse alphabetical order" -msgstr "이름 역순" +msgstr "제목 역순" #: cps/templates/author.html:30 cps/templates/index.html:80 #: cps/templates/search.html:51 cps/templates/shelf.html:26 msgid "Sort according to publishing date, newest first" -msgstr "발행일 최신순" +msgstr "출간일 최신순" #: cps/templates/author.html:31 cps/templates/index.html:81 #: cps/templates/search.html:52 cps/templates/shelf.html:27 msgid "Sort according to publishing date, oldest first" -msgstr "발행일 오래된 순" +msgstr "출간일 오래된 순" #: cps/templates/author.html:56 cps/templates/author.html:113 #: cps/templates/index.html:30 cps/templates/index.html:113 @@ -1934,7 +1934,7 @@ msgstr "출판사" #: cps/templates/basic_detail.html:70 cps/templates/detail.html:209 #: cps/templates/listenmp3.html:111 msgid "Published" -msgstr "발행일" +msgstr "출간일" #: cps/templates/basic_detail.html:76 cps/templates/detail.html:286 #: cps/templates/listenmp3.html:177 @@ -1978,15 +1978,15 @@ msgstr "책 삭제" #: cps/templates/book_edit.html:14 msgid "Delete formats:" -msgstr "형식 삭제:" +msgstr "파일 형식 삭제:" #: cps/templates/book_edit.html:25 msgid "Convert book format:" -msgstr "책 형식 변경:" +msgstr "파일 형식 변환:" #: cps/templates/book_edit.html:30 msgid "Convert from:" -msgstr "변환 전 유형:" +msgstr "변환 전:" #: cps/templates/book_edit.html:32 cps/templates/book_edit.html:39 msgid "select an option" @@ -1994,11 +1994,11 @@ msgstr "옵션 선택" #: cps/templates/book_edit.html:37 msgid "Convert to:" -msgstr "변환 후 유형:" +msgstr "변환 후:" #: cps/templates/book_edit.html:46 msgid "Convert book" -msgstr "책 변환" +msgstr "형식 변환" #: cps/templates/book_edit.html:53 cps/templates/layout.html:79 #: cps/templates/layout.html:136 @@ -2021,7 +2021,7 @@ msgstr "업로드 완료, 처리 중입니다. 잠시만 기다려 주세요." #: cps/templates/book_edit.html:58 msgid "Upload Format" -msgstr "다른 형식 업로드" +msgstr "다른 파일 형식 업로드" #: cps/templates/book_edit.html:71 cps/templates/search_form.html:8 msgid "Book Title" @@ -2042,7 +2042,7 @@ msgstr "시리즈 ID" #: cps/templates/book_edit.html:93 msgid "Published Date" -msgstr "발행일" +msgstr "출간일" #: cps/templates/book_edit.html:110 msgid "Rating" @@ -2094,7 +2094,7 @@ msgstr "아니오" #: cps/templates/book_edit.html:215 msgid "View Book on Save" -msgstr "저장 후 상세정보로" +msgstr "저장 후 상세 페이지로 이동" #: cps/templates/book_edit.html:218 cps/templates/book_edit.html:236 msgid "Fetch Metadata" @@ -2118,7 +2118,7 @@ msgstr "키워드 검색" #: cps/templates/book_edit.html:246 msgid "Click the cover to load metadata to the form" -msgstr "검색 결과를 사용하려면 표지를 클릭하세요." +msgstr "사용할 검색 결과의 표지를 클릭하세요." #: cps/templates/book_edit.html:253 cps/templates/book_edit.html:292 msgid "Loading..." @@ -2144,19 +2144,19 @@ msgstr "이 항목은 필수입니다." #: cps/templates/book_table.html:25 msgid "Archive selected books" -msgstr "선택한 책 보관" +msgstr "선택한 책 숨김" #: cps/templates/book_table.html:28 msgid "Unarchive selected books" -msgstr "선택한 책 보관 해제" +msgstr "선택한 책 숨김 해제" #: cps/templates/book_table.html:34 msgid "Mark selected books as read" -msgstr "선택한 책 읽음으로 표시" +msgstr "선택한 책 읽음 표시" #: cps/templates/book_table.html:37 msgid "Mark selected books as unread" -msgstr "선택한 책 읽지 않음으로 표시" +msgstr "선택한 책 읽지 표시 해제" #: cps/templates/book_table.html:57 msgid "Merge selected books" @@ -2229,7 +2229,7 @@ msgstr "언어 입력" #: cps/templates/book_table.html:97 msgid "Publishing Date" -msgstr "발행일" +msgstr "출간일" #: cps/templates/book_table.html:98 msgid "Enter Publishers" @@ -2245,11 +2245,11 @@ msgstr "설명" #: cps/templates/book_table.html:101 msgid "Archive Status" -msgstr "보관 상태" +msgstr "숨김" #: cps/templates/book_table.html:103 cps/templates/search_form.html:42 msgid "Read Status" -msgstr "읽은 상태" +msgstr "읽음" #: cps/templates/book_table.html:106 cps/templates/book_table.html:108 #: cps/templates/book_table.html:110 cps/templates/book_table.html:112 @@ -2260,7 +2260,7 @@ msgstr "입력 " #: cps/templates/book_table.html:128 msgid "Delete selected books" -msgstr "선택된 책 삭제제" +msgstr "선택한 책 삭제" #: cps/templates/book_table.html:148 cps/templates/book_table.html:172 #: cps/templates/book_table.html:192 cps/templates/book_table.html:212 @@ -2283,39 +2283,39 @@ msgstr "병합" #: cps/templates/book_table.html:176 msgid "The following books will be deleted:" -msgstr "아래의 책들이 삭제될 예정입니다:" +msgstr "다음 책이 삭제됩니다:" #: cps/templates/book_table.html:196 msgid "The following books will be archived:" -msgstr "아래의 책들이 보관될 예정입니다:" +msgstr "다음 책이 숨겨집니다:" #: cps/templates/book_table.html:200 cps/templates/detail.html:275 msgid "Archive" -msgstr "보관" +msgstr "숨김" #: cps/templates/book_table.html:216 msgid "The following books will be unarchived:" -msgstr "아래의 책들이 보관해제될 예정입니다:" +msgstr "다음 책의 숨김이 해제됩니다:" #: cps/templates/book_table.html:220 msgid "Unarchive" -msgstr "보관 해제" +msgstr "숨김 해제" #: cps/templates/book_table.html:236 msgid "The following books will be marked read:" -msgstr "아래의 책들이읽음표시될 예정입니다 :" +msgstr "다음 책을 읽음으로 변경합니다:" #: cps/templates/book_table.html:240 msgid "Mark as read" -msgstr "읽음처리" +msgstr "읽음" #: cps/templates/book_table.html:256 msgid "The following books will be marked unread:" -msgstr "아래의 책들이읽지 않음 표시될 예정입니다 :" +msgstr "다음 책을 읽지 않음으로 변경합니다:" #: cps/templates/book_table.html:260 msgid "Mark as unread" -msgstr "읽음 처리 취소" +msgstr "읽음 해제" #: cps/templates/book_table.html:272 cps/templates/detail.html:348 msgid "Edit Metadata" @@ -2323,7 +2323,7 @@ msgstr "메타데이터 편집" #: cps/templates/book_table.html:275 msgid "Edit the fields you want changed. Blank fields will be ignored:" -msgstr "바꾸고 싶은 필드를 바꿔주세요. 공백필드는 무시됩니다: " +msgstr "변경할 필드만 수정하세요. 빈 필드는 무시됩니다: " #: cps/templates/config_db.html:12 msgid "Location of Calibre Database" @@ -2339,7 +2339,7 @@ msgstr "Google 드라이브 사용" #: cps/templates/config_db.html:39 msgid "Authenticate Google Drive" -msgstr "Google 드라이브 인증" +msgstr "Google 드라이브 계정 인증" #: cps/templates/config_db.html:44 msgid "Google Drive Calibre folder" @@ -2355,7 +2355,7 @@ msgstr "취소" #: cps/templates/config_db.html:80 msgid "New db location is invalid, please enter valid path" -msgstr "데이터베이스 경로가 올바르지 않습니다. 유효한 경로를 입력해주세요." +msgstr "데이터베이스 경로가 올바르지 않습니다. 경로를 확인해주세요." #: cps/templates/config_edit.html:18 msgid "Server Configuration" @@ -2371,7 +2371,7 @@ msgstr "SSL 인증서 파일 경로 (미사용 시 공란)" #: cps/templates/config_edit.html:35 msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" -msgstr "SSL 키 파일 경로 (미사용시 공란)" +msgstr "SSL 키 파일 경로 (미사용 시 공란)" #: cps/templates/config_edit.html:43 msgid "Update Channel" @@ -2415,7 +2415,7 @@ msgstr "제목과 저자가 영문이 아닐 경우 영문(발음 그대로)으 #: cps/templates/config_edit.html:108 msgid "Embed Metadata to Ebook File on Download/Conversion/e-mail (needs Calibre/Kepubify binaries)" -msgstr "다운로드/변환/이메일 전송 시 전자책 파일에 메타데이터 포함 (Calibre/Kepubify 필요)" +msgstr "다운로드/변환/이메일 전송 시 파일에 메타데이터 포함 (Calibre/Kepubify 필요)" #: cps/templates/config_edit.html:112 msgid "Enable Uploads" @@ -2431,11 +2431,11 @@ msgstr "허용할 업로드 파일 형식" #: cps/templates/config_edit.html:122 msgid "Enable Anonymous Browsing" -msgstr "익명 탐색 사용" +msgstr "익명 탐색 허용" #: cps/templates/config_edit.html:126 msgid "Enable Public Registration" -msgstr "공개 등록 사용" +msgstr "가입 허용" #: cps/templates/config_edit.html:131 msgid "Use Email as Username" @@ -2447,11 +2447,11 @@ msgstr "매직 링크 원격 로그인 사용" #: cps/templates/config_edit.html:141 msgid "Enable Kobo sync" -msgstr "Kobo sync 사용" +msgstr "Kobo 동기화 사용" #: cps/templates/config_edit.html:146 msgid "Proxy unknown requests to Kobo Store" -msgstr "Kobo 스토어에 알 수 없는 요청 프록시 전달" +msgstr "알 수 없는 요청을 Kobo 스토어로 프록시 전달" #: cps/templates/config_edit.html:149 msgid "Server External Port (for port forwarded API calls)" @@ -2467,7 +2467,7 @@ msgstr "Goodreads API 키" #: cps/templates/config_edit.html:167 msgid "Google Books API Key" -msgstr "Google Books API 키키" +msgstr "Google Books API 키" #: cps/templates/config_edit.html:172 msgid "Allow Reverse Proxy Authentication" @@ -2479,7 +2479,7 @@ msgstr "로그인 방식" #: cps/templates/config_edit.html:185 msgid "Use Standard Authentication" -msgstr "기본 인증 사용" +msgstr "일반 인증 사용" #: cps/templates/config_edit.html:187 msgid "Use LDAP Authentication" @@ -2575,7 +2575,7 @@ msgstr "LDAP 그룹 구성원 필드" #: cps/templates/config_edit.html:281 msgid "LDAP Member User Filter Detection" -msgstr "LDAP 사용자 감지 필터" +msgstr "LDAP 구성원 사용자 감지 필터" #: cps/templates/config_edit.html:283 msgid "Autodetect" @@ -2642,7 +2642,7 @@ msgstr "Flask-Limiter 옵션" #: cps/templates/config_edit.html:386 msgid "Check if file extensions matches file content on upload" -msgstr "업로드 시 파일 형식 일치 검사" +msgstr "업로드 시 파일 확장자 검사" #: cps/templates/config_edit.html:389 msgid "Session protection" @@ -2678,7 +2678,7 @@ msgstr "대문자 필수" #: cps/templates/config_edit.html:418 msgid "Enforce characters (needed For Chinese/Japanese/Korean Characters)" -msgstr "한자/일본어/한국어 문자 필수" +msgstr "문자 포함 필수 (중국어/일본어/한국어 사용 시 필요)" #: cps/templates/config_edit.html:422 msgid "Enforce special characters" @@ -2686,11 +2686,11 @@ msgstr "특수문자 필수" #: cps/templates/config_view_edit.html:17 msgid "View Configuration" -msgstr "환경 설정" +msgstr "기본 설정" #: cps/templates/config_view_edit.html:32 msgid "No. of Random Books to Display" -msgstr "랜덤 보기시 표시할 책 수" +msgstr "랜덤 보기 시 표시할 책 수" #: cps/templates/config_view_edit.html:36 msgid "No. of Authors to Display Before Hiding (0=Disable Hiding)" @@ -2710,15 +2710,15 @@ msgstr "caliBlur! 다크 테마" #: cps/templates/config_view_edit.html:47 msgid "Regular Expression for Ignoring Columns" -msgstr "열을 무시하는 정규식" +msgstr "무시할 항목 정규식" #: cps/templates/config_view_edit.html:51 msgid "Link Read/Unread Status to Calibre Column" -msgstr "읽음/읽지 않음 상태를 Calibre 데이터에 저장" +msgstr "읽음 여부를 Calibre 데이터베이스에 저장" #: cps/templates/config_view_edit.html:60 msgid "View Restrictions based on Calibre column" -msgstr "Calibre 데이터 기반 화면 표시 제한" +msgstr "Calibre 사용자 정의 항목 기준 표시 제한" #: cps/templates/config_view_edit.html:69 msgid "Regular Expression for Title Sorting" @@ -2766,16 +2766,16 @@ msgstr "기본 언어" #: cps/templates/config_view_edit.html:131 msgid "Default Visible Language of Books" -msgstr "책의 기본 표시 언어" +msgstr "기본으로 표시할 책 언어" #: cps/templates/config_view_edit.html:147 msgid "Default Visibilities for New Users" -msgstr "새 사용자 기본 기능" +msgstr "새 사용자 기본 표시 항목" #: cps/templates/config_view_edit.html:163 cps/templates/user_edit.html:84 #: cps/templates/user_table.html:154 msgid "Show Random Books in Detail View" -msgstr "목록 보기에서 무작위 추천 표시" +msgstr "상세 보기에서 무작위 추천 표시" #: cps/templates/config_view_edit.html:166 cps/templates/user_edit.html:87 msgid "Add Allowed/Denied Tags" @@ -2783,7 +2783,7 @@ msgstr "허용/거부 태그 추가" #: cps/templates/config_view_edit.html:167 msgid "Add Allowed/Denied custom column values" -msgstr "허용/거부 사용자 정의 열 값 추가" +msgstr "허용/거부 사용자 정의 항목 추가" #: cps/templates/detail.html:85 cps/templates/detail.html:99 msgid "Read in Browser" @@ -2811,15 +2811,15 @@ msgstr "읽음" #: cps/templates/detail.html:272 cps/templates/listenmp3.html:166 msgid "Restore from archive" -msgstr "보관함에서 복원" +msgstr "숨김 해제" #: cps/templates/detail.html:273 cps/templates/listenmp3.html:166 msgid "Add to archive" -msgstr "보관함에 추가" +msgstr "숨김" #: cps/templates/detail.html:275 msgid "Mark Book as archived or not, to hide it in Calibre-Web and delete it from Kobo Reader" -msgstr "책을 보관하면 Calibre-Web에서 숨겨지고 Kobo 리더에서 삭제됩니다." +msgstr "책을 숨기면 Calibre-Web에서 숨겨지고 Kobo 리더에서 삭제됩니다." #: cps/templates/detail.html:301 cps/templates/listenmp3.html:190 #: cps/templates/search.html:16 @@ -2921,7 +2921,7 @@ msgstr "이슈 생성" #: cps/templates/http_error.html:52 msgid "Return to Database config" -msgstr "데이터베이스 설정으로 복귀" +msgstr "데이터베이스 설정으로 돌아가기" #: cps/templates/http_error.html:54 msgid "Return to Home" @@ -2959,7 +2959,7 @@ msgstr "시리즈 순서 내림차순 정렬" #: cps/templates/index.xml:7 msgid "Start" -msgstr "시작하기" +msgstr "시작" #: cps/templates/index.xml:19 msgid "Alphabetical Books" @@ -3032,7 +3032,7 @@ msgstr "메뉴 열기/닫기" #: cps/templates/layout.html:58 msgid "Simple Theme" -msgstr "간단한 테마" +msgstr "심플 테마" #: cps/templates/layout.html:66 cps/templates/layout.html:96 msgid "Account" @@ -3065,7 +3065,7 @@ msgstr "그리드" #: cps/templates/listenmp3.html:167 msgid "Archived" -msgstr "보관됨" +msgstr "숨김" #: cps/templates/login.html:18 msgid "Remember Me" @@ -3117,7 +3117,7 @@ msgstr "사용자의 허용/거부 태그 선택" #: cps/templates/modal_dialogs.html:9 msgid "Select Allowed/Denied Custom Column Values of User" -msgstr "사용자 정의 항목 허용/거부 선택" +msgstr "사용자의 허용/거부 사용자 정의 항목 선택" #: cps/templates/modal_dialogs.html:15 msgid "Enter Tag" @@ -3125,7 +3125,7 @@ msgstr "태그 입력" #: cps/templates/modal_dialogs.html:24 msgid "Add View Restriction" -msgstr "보기 제한 추가" +msgstr "표시 제한 추가" #: cps/templates/modal_dialogs.html:50 msgid "This book format will be permanently erased from database" @@ -3133,7 +3133,7 @@ msgstr "이 책의 형식은 데이터베이스에서 삭제됩니다." #: cps/templates/modal_dialogs.html:51 msgid "This book will be permanently erased from database and hard disk" -msgstr "" +msgstr "이 책은 데이터베이스와 디스크에서 삭제되며 복구할 수 없습니다." #: cps/templates/modal_dialogs.html:55 msgid "Important Kobo Note: deleted books will remain on any paired Kobo device." @@ -3141,7 +3141,7 @@ msgstr "Kobo 알림: 삭제된 책은 연결된 Kobo 기기에 남아있습니 #: cps/templates/modal_dialogs.html:56 msgid "Books must first be archived and the device synced before a book can safely be deleted." -msgstr "책을 안전하게 삭제하려면 먼저 보관 처리 후 기기 동기화가 필요합니다." +msgstr "책을 안전하게 삭제하려면 먼저 숨김 처리한 뒤 기기를 동기화해야 합니다." #: cps/templates/modal_dialogs.html:75 msgid "Choose File Location" @@ -3185,11 +3185,11 @@ msgstr "테마를 선택해주세요:" #: cps/templates/read.html:89 cps/templates/readcbr.html:104 msgid "Light" -msgstr "밝은색" +msgstr "라이트" #: cps/templates/read.html:91 cps/templates/readcbr.html:105 msgid "Dark" -msgstr "어두운색" +msgstr "다크" #: cps/templates/read.html:93 msgid "Sepia" @@ -3197,11 +3197,11 @@ msgstr "세피아" #: cps/templates/read.html:95 msgid "Amber" -msgstr "" +msgstr "앰버" #: cps/templates/read.html:97 msgid "Black" -msgstr "검은색" +msgstr "블랙" #: cps/templates/read.html:109 msgid "Reflow text when sidebars are open." @@ -3209,11 +3209,11 @@ msgstr "사이드바가 열릴 경우 텍스트를 재정렬합니다." #: cps/templates/read.html:114 msgid "Show pages count" -msgstr "" +msgstr "페이지 수 표시" #: cps/templates/read.html:118 msgid "Font Size" -msgstr "" +msgstr "글자 크기" #: cps/templates/read.html:126 msgid "Font" @@ -3245,11 +3245,11 @@ msgstr "페이지 보기" #: cps/templates/read.html:135 msgid "Two columns" -msgstr "두쪽 보기" +msgstr "두 쪽 보기" #: cps/templates/read.html:136 msgid "One column" -msgstr "한쪽 보기" +msgstr "한 쪽 보기" #: cps/templates/readcbr.html:8 msgid "Comic Reader" @@ -3257,7 +3257,7 @@ msgstr "만화 리더" #: cps/templates/readcbr.html:75 msgid "Keyboard Shortcuts" -msgstr "키보드 단축키" +msgstr "단축키" #: cps/templates/readcbr.html:78 msgid "Previous Page" @@ -3397,7 +3397,7 @@ msgstr "텍스트 리더" #: cps/templates/register.html:4 msgid "Register New Account" -msgstr "새 사용자 등록" +msgstr "새 사용자 가입" #: cps/templates/register.html:10 msgid "Choose a username" @@ -3417,15 +3417,15 @@ msgstr "다른 기기에서 로그인하여 방문하세요:" #: cps/templates/remote_login.html:11 msgid "Once verified, you will automatically be logged in on this device." -msgstr "승인되면 자동으로 로그인 됩니다." +msgstr "승인되면 자동으로 로그인됩니다." #: cps/templates/remote_login.html:14 msgid "This verification link will expire in 10 minutes." -msgstr "인증 링크는 10분 후 만료됩니다." +msgstr "인증 링크는 10분 뒤 만료됩니다." #: cps/templates/schedule_edit.html:33 msgid "Generate Series Cover Thumbnails" -msgstr "시리즈 미리보기 표지 생성" +msgstr "시리즈 표지 썸네일 생성" #: cps/templates/search.html:7 msgid "Search Term:" @@ -3437,15 +3437,15 @@ msgstr "결과:" #: cps/templates/search.html:29 msgid "Remove from shelf" -msgstr "" +msgstr "서재에서 제거" #: cps/templates/search_form.html:21 msgid "Published Date From" -msgstr "발행일(시작)" +msgstr "출간일(시작)" #: cps/templates/search_form.html:31 msgid "Published Date To" -msgstr "발행일(종료)" +msgstr "출간일(종료)" #: cps/templates/search_form.html:44 cps/templates/search_form.html:165 msgid "Any" @@ -3527,7 +3527,7 @@ msgstr "추가된 기준으로 오래된 순" #: cps/templates/shelf_edit.html:14 msgid "Share with Everyone" -msgstr "모두와 공유" +msgstr "공개 서재로 설정" #: cps/templates/shelf_edit.html:21 msgid "Sync this shelf with Kobo device" @@ -3603,19 +3603,19 @@ msgstr "작업" #: cps/templates/tasks.html:41 msgid "This task will be cancelled. Any progress made by this task will be saved." -msgstr "작업이 취소됩니다. 진행된 부분은 저장됩니다." +msgstr "이 작업은 취소됩니다. 지금까지 진행된 내용은 저장됩니다." #: cps/templates/tasks.html:42 msgid "If this is a scheduled task, it will be re-ran during the next scheduled time." -msgstr "예약된 작업일 경우, 다음 예약 시간에 이어서 실행됩니다." +msgstr "예약된 작업은 다음 예약 시 다시 실행됩니다." #: cps/templates/user_edit.html:20 msgid "Reset user Password" -msgstr "사용자 비밀번호 초기화" +msgstr "사용자 비밀번호 재설정" #: cps/templates/user_edit.html:28 msgid "Send to eReader Email Address. Use comma to separate emails for multiple eReaders" -msgstr "eReader 이메일주소로 보내기. 콤마(,)를 사용하여 이메일을 분리해주세요" +msgstr "전자책 리더 이메일 주소 (여러 주소는 콤마(,)로 구분하여 입력)" #: cps/templates/user_edit.html:43 msgid "Language of Books" @@ -3647,7 +3647,7 @@ msgstr "강제 Kobo 전체 동기화" #: cps/templates/user_edit.html:88 msgid "Add allowed/Denied Custom Column Values" -msgstr "허용/거부할 사용자 정의 항목 추가" +msgstr "허용/거부 사용자 정의 항목 값 추가" #: cps/templates/user_edit.html:137 msgid "Sync only books in selected shelves with Kobo" @@ -3711,7 +3711,7 @@ msgstr "제외 태그" #: cps/templates/user_table.html:141 msgid "Edit Allowed Column Values" -msgstr "허용 항목 편집" +msgstr "허용 항목 값 편집" #: cps/templates/user_table.html:141 msgid "Allowed Column Values" @@ -3719,11 +3719,11 @@ msgstr "허용 항목" #: cps/templates/user_table.html:142 msgid "Edit Denied Column Values" -msgstr "제외 항목 편집" +msgstr "거부 항목 값 편집" #: cps/templates/user_table.html:142 msgid "Denied Column Values" -msgstr "제외 항목" +msgstr "거부 항목" #: cps/templates/user_table.html:144 msgid "Change Password" @@ -3744,4 +3744,3 @@ msgstr "선택한 서재 Kobo 동기화" #: cps/templates/user_table.html:156 msgid "Show Read/Unread Section" msgstr "읽음/읽지 않음 표시" - From 46811219cae7966926da6106f16cb8b59ff637d8 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 25 Apr 2026 13:20:25 +0200 Subject: [PATCH 20/22] Updated Requirements --- cps/translations/de/LC_MESSAGES/messages.po | 2 +- requirements.txt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index 0b80678f0..d02849481 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -2460,7 +2460,7 @@ msgstr "Unbekannte Anfragen an kobo.com weiterleiten" #: cps/templates/config_edit.html:149 msgid "Server External Port (for port forwarded API calls)" -msgstr "Externer Server Port (für Portweiterleitung von API-Aufrufen)" +msgstr "Externer Server Port (für Portweiterleitung von Kobo-API-Aufrufen)" #: cps/templates/config_edit.html:157 msgid "Use Goodreads" diff --git a/requirements.txt b/requirements.txt index 43a4c6cc8..8ac124e2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,12 +5,12 @@ Flask-Principal>=0.3.2,<0.5.1 Flask>=1.0.2,<3.2.0 iso-639>=0.4.5,<0.5.0;python_version<'3.12' pycountry>=20.0.0,<27.0.0;python_version>='3.12' -PyPDF>=6.1.3,<6.8.0 +PyPDF>=6.1.3,<6.11.0 pytz>=2016.10 requests>=2.32.0,<2.33.0 SQLAlchemy>=1.3.0,<2.1.0 tornado>=6.4.2,<6.6 -Wand>=0.4.4,<0.7.0 +Wand>=0.4.4,<0.8.0 unidecode>=0.04.19,<1.5.0 lxml>=4.9.1,<5.4.0 flask-wtf>=0.14.2,<1.3.0 @@ -23,5 +23,5 @@ bleach>=6.0.0,<6.4.0 python-magic>=0.4.27,<0.5.0 python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32' flask-httpAuth>=4.4.0,<5.0.0 -cryptography>=39.0.0,<47.0.0 +cryptography>=39.0.0,<48.0.0 certifi>=2024.7.4,<2026.1.5 From ea567fcbf0a2d696cb2b51f87dd7563bc23015fc Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 25 Apr 2026 13:26:40 +0200 Subject: [PATCH 21/22] Updated translation --- cps/translations/ar/LC_MESSAGES/messages.mo | Bin 75354 -> 75354 bytes cps/translations/ar/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/cs/LC_MESSAGES/messages.mo | Bin 35143 -> 35143 bytes cps/translations/cs/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/de/LC_MESSAGES/messages.mo | Bin 66875 -> 66880 bytes cps/translations/de/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/el/LC_MESSAGES/messages.mo | Bin 51454 -> 51454 bytes cps/translations/el/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/es/LC_MESSAGES/messages.mo | Bin 68672 -> 68672 bytes cps/translations/es/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/fi/LC_MESSAGES/messages.mo | Bin 24224 -> 24224 bytes cps/translations/fi/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/fr/LC_MESSAGES/messages.mo | Bin 71404 -> 71404 bytes cps/translations/fr/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 68031 -> 68031 bytes cps/translations/gl/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/hu/LC_MESSAGES/messages.mo | Bin 22150 -> 22150 bytes cps/translations/hu/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/id/LC_MESSAGES/messages.mo | Bin 52769 -> 52769 bytes cps/translations/id/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/it/LC_MESSAGES/messages.mo | Bin 68454 -> 68454 bytes cps/translations/it/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/ja/LC_MESSAGES/messages.mo | Bin 58319 -> 58319 bytes cps/translations/ja/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/km/LC_MESSAGES/messages.mo | Bin 21926 -> 21926 bytes cps/translations/km/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 66518 -> 66518 bytes cps/translations/ko/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/nl/LC_MESSAGES/messages.mo | Bin 53703 -> 53703 bytes cps/translations/nl/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/no/LC_MESSAGES/messages.mo | Bin 35671 -> 35671 bytes cps/translations/no/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/pl/LC_MESSAGES/messages.mo | Bin 67607 -> 67607 bytes cps/translations/pl/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/pt/LC_MESSAGES/messages.mo | Bin 57707 -> 57707 bytes cps/translations/pt/LC_MESSAGES/messages.po | 22 +++++++++--------- .../pt_BR/LC_MESSAGES/messages.mo | Bin 67888 -> 67888 bytes .../pt_BR/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/ru/LC_MESSAGES/messages.mo | Bin 42528 -> 42528 bytes cps/translations/ru/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/sk/LC_MESSAGES/messages.mo | Bin 61313 -> 61313 bytes cps/translations/sk/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/sl/LC_MESSAGES/messages.mo | Bin 63171 -> 63171 bytes cps/translations/sl/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/sv/LC_MESSAGES/messages.mo | Bin 43915 -> 43915 bytes cps/translations/sv/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/tr/LC_MESSAGES/messages.mo | Bin 20029 -> 20029 bytes cps/translations/tr/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/uk/LC_MESSAGES/messages.mo | Bin 22242 -> 22242 bytes cps/translations/uk/LC_MESSAGES/messages.po | 22 +++++++++--------- cps/translations/vi/LC_MESSAGES/messages.mo | Bin 29285 -> 29285 bytes cps/translations/vi/LC_MESSAGES/messages.po | 22 +++++++++--------- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 60715 -> 60715 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 22 +++++++++--------- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 52248 -> 52248 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 22 +++++++++--------- messages.pot | 22 +++++++++--------- 57 files changed, 319 insertions(+), 319 deletions(-) diff --git a/cps/translations/ar/LC_MESSAGES/messages.mo b/cps/translations/ar/LC_MESSAGES/messages.mo index 6856b393ce24f9ebff1a28fa02ccbb193b2430a7..2b98fd94b51c8a5ae9bdfdce74c74c4f1929d36e 100644 GIT binary patch delta 17 Zcmcb0hUL~7mJNlyOh%@gi+i8X002(%2%Z1{ delta 17 Zcmcb0hUL~7mJNlyOa_*li+i8X002(>2%rD} diff --git a/cps/translations/ar/LC_MESSAGES/messages.po b/cps/translations/ar/LC_MESSAGES/messages.po index 120be81eb..440324ee6 100644 --- a/cps/translations/ar/LC_MESSAGES/messages.po +++ b/cps/translations/ar/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2025-06-07 14:44+0300\n" "Last-Translator: UsamaFoad \n" "Language: ar\n" @@ -864,45 +864,45 @@ msgstr "محتوى ملف الغلاف غير صالح" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "ملفات jpg/jpeg فقط مدعومة كملفات غلاف" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "الغلاف" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "ملف UnRar الثنائي غير موجود" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "خطأ في تنفيذ UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "تعذر العثور على الدليل المحدد" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "الرجاء تحديد دليل، وليس ملف" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "ملفات Calibre الثنائية غير قابلة للاستخدام" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "ملفات Calibre الثنائية مفقودة: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "أذونات التنفيذ مفقودة: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "خطأ في تنفيذ Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "وضع جميع الكتب في قائمة الانتظار لنسخ البيانات الوصفية احتياطيًا" diff --git a/cps/translations/cs/LC_MESSAGES/messages.mo b/cps/translations/cs/LC_MESSAGES/messages.mo index 39cba279275261cc53375973d2c94784143db833..c3f8d271e9f4e7a4d475f1ce1341e286789dd5fd 100644 GIT binary patch delta 17 YcmX>;iRt(xrVU2^Oh%@gP5gze06l#L)Bpeg delta 17 YcmX>;iRt(xrVU2^Oa_*lP5gze06m8V)&Kwi diff --git a/cps/translations/cs/LC_MESSAGES/messages.po b/cps/translations/cs/LC_MESSAGES/messages.po index 55effb6e3..d97a0d262 100644 --- a/cps/translations/cs/LC_MESSAGES/messages.po +++ b/cps/translations/cs/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2020-06-09 21:11+0100\n" "Last-Translator: Lukas Heroudek \n" "Language: cs_CZ\n" @@ -863,45 +863,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Pouze jpg/jpeg jsou podporované soubory pro obal" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar binární soubor nenalezen" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 890e96b2103beb838b226e50be5b94b1b732bec4..af366ea5ea475818c5cb98da0b33a9d0baa39f44 100644 GIT binary patch delta 1697 zcmXZcSx8h-9LMo9ZY`$SVvXBqMQMv!(k7VNW|&4vm?e=B1wB*)8WAMi7FrZa>mi~d zLMf1l7JVoJv5hhxlnU};iqJNw87s@O()#}9-lxyG=W@>Zpa1`V@7gyVRO$9Nox z^8>~*aSZa9(8gsr7Ar6XkDwM@K^<@p6Y&jBz(LeO<9lt>9rH1r`EpFa6R1ENQRlRy z*7x*U_KV+4=-|XJ#!STw)W#(^4tHY&9>QT*jWKu%qp==!k(*e6?YIhKzp@u@!9uLV zJoMobOtQWilg6MNmD1y=$Zz3neB;cI?z1zJg_Tw*lp)&CbSKzRpEW*{On;pQhcnw3b)p>r1VLZP?mB@#~ z@hvKFKkmZ;RK_ZP8I#KS<~#!(@BoR(^rLPxbAZOeQY^-us8qJ#1bl?q=))Y0`)#Lq z1FA`nquyUe^+GqQ=IMXzOn5Pk^GzKCb@v@q3cFCHc#XPI0AsNa70`&k_E+J-1fH`{ z>q~GH?m>0?K}^C1RFmFAeV&~-2K&%bGldV@wVsDcZH{9x>ZaQ;75Ae`(BQo9L>JiV*Q0K}3m4;coPqu!@~@P-|Je(YF^1;?R4K|Z7i&=)cc7ZmhspRJ zb(09=3LfM}T_6M1oJ&zRUW@95N=(8kOu=);as_L3mkFh)3l-r9oQqRkuHX-&6cvCM zwQ&`Cum*L*MpVOh|}{|dA(``=`cJoP Q3@`L<^`{Ri2aTUAB_p{oQ7#QA17lij>8~k<3${g_tA$DOhi}Im^e(r3>=L^ zu^?(Jlg?lc6WX{2N8x77!QH3@=TQf=VJ1GuRQ!cHD5=-h?^urc%-7-=+>Z+M0_vPj z)cTjbmi^*86FNBUlQ9!9fZDhUlW`Nq<1QSGLGq6a5Yxo zL7azSEJvU9#TY+>T2xA#P?2B7srcNPANtkKNFi#z24`aswf+{4#rLQZ#(y)W2xp=K zuSW&46_xt)&b)Pnffj}^3A<6XdWQ+vHk|HIDIax65|zmCBqUYx;X>_BDWDK0|yPh)1_64cFh;3&L=gRs?kzJnf~pP)(< z#v%9$6?g=<<2O{sHvcjvm-EdD20Gw25|R0gy3wTH#-!j1tj3L~o3~&pwqpr~QD0F? zpPk~Bs3vVfy+4QQg%_xr`}^%o)T5vC%|Qn0?i;8ScB4x140WR(9F0*_K%PJLSCNim zcrHY(ufpND1=a04F$>S4nzRk|c|O3A7)49XWCrY7PeY})*s&6I({-4O+fXGq>%4z} z3iKr^V^LH98Gr2(=AzbDqi$Y@rFaMi|!nZgbb6l?2AI1t) z0QIPi8!;RAq7J@*YPwcb6W>D}7)@(?Sr4@+?IAXhBKK~&FNLmzfv8NNUTVr6;ki1Sf@4CSb%t3;)? z+L>RE3bX+g*dA0V4xm26V~!_LpYLhs{e4sk9-}_kl0++OWo5P#pSk M^!BPy%ZGiw|6x%k5dZ)H diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index d02849481..08f7950af 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2025-10-22 19:56+0200\n" "Last-Translator: Sebastian Holzer\n" "Language: de\n" @@ -864,45 +864,45 @@ msgstr "Ungültiger Coverdatei-Inhalt" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Es werden nur jpg/jpeg Dateien als Cover unterstützt" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Titelbild" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar Programm nicht gefunden" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Fehler beim Ausführen von UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Angegebener Ordner konnte nicht gefunden werden" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Bitte keine Datei sondern einen Ordner angeben" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Calibre Programm ist nicht nutzbar" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Fehlende Calibre Binärdateien: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Ausführberechtigung fehlt: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Fehler beim Ausführen von Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Alle Bücher für Metadaten Backup einreihen" diff --git a/cps/translations/el/LC_MESSAGES/messages.mo b/cps/translations/el/LC_MESSAGES/messages.mo index 5fda72376128d90030a87bb6807dc5f9cdb7bc72..85bdd3d0990dc8723c8986f58bd8661e717a5a25 100644 GIT binary patch delta 17 Zcmex2k@??5<_!}wgXO>smJLCZn2by}hfI1?2>?W02ebeH delta 17 ZcmX>wgXO>smJLCZm<%j8hfI1?2>?WA2etqJ diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index b56fb7891..166736616 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2024-10-29 15:26+0100\n" "Last-Translator: adruki \n" "Language: es\n" @@ -867,45 +867,45 @@ msgstr "Contenido del archivo de la portada no válido" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Sólo se admiten como portada los archivos jpg/jpeg" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Portada" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "No se encontró el archivo binario de UnRar." -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Error ejecutando UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "No se pudo encontrar el directorio especificado" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Por favor, especifica un directorio, no un archivo" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Los binarios de Calibre no son viables" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Faltan los binarios de Calibre: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Faltan permisos de ejecución: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Error ejecutando Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Poner en cola todos los libros para la copia de seguridad de metadatos" diff --git a/cps/translations/fi/LC_MESSAGES/messages.mo b/cps/translations/fi/LC_MESSAGES/messages.mo index 1a336e4a591fc7075935ffc41d504c68d0538329..adb7535dd6d59e80abb720dbedce950bcaaf2177 100644 GIT binary patch delta 17 YcmZ3mmvO;f#tr%wOh%@g4K4E306gvm?f?J) delta 17 YcmZ3mmvO;f#tr%wOa_*l4K4E306h2w@Bjb+ diff --git a/cps/translations/fi/LC_MESSAGES/messages.po b/cps/translations/fi/LC_MESSAGES/messages.po index dc6d7f983..5e1fed231 100644 --- a/cps/translations/fi/LC_MESSAGES/messages.po +++ b/cps/translations/fi/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2020-01-12 13:56+0100\n" "Last-Translator: Samuli Valavuo \n" "Language: fi\n" @@ -864,45 +864,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index 390900aaf3775f2fa651dba6d76dce0d4d2b23e1..35a73f15d944d81234c5eed44ffbea6825006f5c 100644 GIT binary patch delta 17 ZcmaE}mgUV_mJPQiF&UX|zB5Un1prai2z3Ae delta 17 ZcmaE}mgUV_mJPQiF&S8HzB5Un1pras2zLMg diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index f56453de9..e6be7c543 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2026-01-15 11:30+0000\n" "Last-Translator: \n" "Language: fr\n" @@ -860,45 +860,45 @@ msgstr "Contenu du fichier de couverture invalide" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Seuls les fichiers jpg/jpeg sont supportés comme fichier de couverture" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Couverture" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Fichier binaire UnRar non trouvé" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Erreur lors de l'exécution de UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Impossible de trouver le répertoire spécifié." -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Veuillez spécifier un répertoire, pas un fichier." -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Les binaires Calibre ne sont pas viables" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Binaires de calibre manquants : %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Autorisations d'exécution manquantes : %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Erreur lors de l'exécution de Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Mettre tous les livres en file d'attente pour la sauvegarde des métadonnées" diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index 0dc31ad2885add056845253aad36aa098244bee4..ed25853315dae96f08ec7f365d0229099e23bb8a 100644 GIT binary patch delta 17 Zcmdl#nPvZEmJLCZn2by}hfK;Y2LM8;2PFUi delta 17 Zcmdl#nPvZEmJLCZm<%j8hfK;Y2LM8|2PXgk diff --git a/cps/translations/gl/LC_MESSAGES/messages.po b/cps/translations/gl/LC_MESSAGES/messages.po index 6020e3fec..64117bed3 100644 --- a/cps/translations/gl/LC_MESSAGES/messages.po +++ b/cps/translations/gl/LC_MESSAGES/messages.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2024-12-08 13:50+0100\n" "Last-Translator: pollitor@gmx.com\n" "Language: gl\n" @@ -862,45 +862,45 @@ msgstr "Contido do ficheiro de portada non válido" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Só se admiten ficheiros jpg/jpeg como ficheiro de portada" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Portada" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Non se atopou o ficheiro binario UnRar" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Erro ao executar UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Non se puido atopar o directorio especificado" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Especifique un directorio, non un ficheiro" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Os binarios de calibre non son viables" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Faltan binarios de calibre: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Faltan permisos executables: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Erro ao executar Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Pon todos os libros en cola para a copia de seguridade dos metadatos" diff --git a/cps/translations/hu/LC_MESSAGES/messages.mo b/cps/translations/hu/LC_MESSAGES/messages.mo index dc466d0060cd0c89bb2f8d7b8e84fccff2858f5e..4edd3ff6bbed60ce78124b5ef32088cbe975f0ce 100644 GIT binary patch delta 17 YcmZo$%h2Gjrm delta 17 ZcmZ2Dhk4-~<_!v!Oa_*ll`8*-002E02G#%o diff --git a/cps/translations/id/LC_MESSAGES/messages.po b/cps/translations/id/LC_MESSAGES/messages.po index 3ea7395b2..00bb8da42 100644 --- a/cps/translations/id/LC_MESSAGES/messages.po +++ b/cps/translations/id/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2023-01-21 10:00+0700\n" "Last-Translator: Arief Hidayat\n" "Language: id\n" @@ -864,45 +864,45 @@ msgstr "Konten berkas sampul tidak valid" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Hanya berkas jpg/jpeg yang didukung sebagai berkas sampul" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Berkas biner unrar tidak ditemukan" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Antrian semua buku untuk cadangan metadata" diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo index 14c48f39197eeaa8f4c7fb40a8a8121bd0787d3b..c92481933df9c539649584d4042f5c7dc597178c 100644 GIT binary patch delta 17 ZcmaDhjpf-imJMGfGZ~p~{x-Rw8~{+O2*dyY delta 17 ZcmaDhjpf-imJMGfGZ|QJ{x-Rw8~{+Y2*v;a diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 643bac703..375fa6c0c 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2026-03-05 06:42+0100\n" "Last-Translator: Massimo Pissarello \n" "Language: it\n" @@ -864,45 +864,45 @@ msgstr "Contenuto del file di copertina non valido" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Solo i file jpg/jpeg sono supportati come file di copertina" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Copertina" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "File binario UnRar non trovato" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Errore nell'eseguire UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Impossibile trovare la cartella specificata" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Specifica una cartella, non un file" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Eseguibili di Calibre non validi" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "File eseguibili di Calibre mancanti: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Permessi di esecuzione mancanti: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Errore durante l'esecuzione di Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Metti in coda tutti i libri per il backup dei metadati" diff --git a/cps/translations/ja/LC_MESSAGES/messages.mo b/cps/translations/ja/LC_MESSAGES/messages.mo index 63532befc8fca620084bce496f0aebd2a35a318c..800b87097d29550745f342e8a5b2665143fcd6f0 100644 GIT binary patch delta 17 ZcmX?qoca85<_)VWn2by}udPtZ1^`WJ2h;!n delta 17 ZcmX?qoca85<_)VWm<%j8udPtZ1^`WT2i5=p diff --git a/cps/translations/ja/LC_MESSAGES/messages.po b/cps/translations/ja/LC_MESSAGES/messages.po index 091269e7a..b2ae19a26 100644 --- a/cps/translations/ja/LC_MESSAGES/messages.po +++ b/cps/translations/ja/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n" "Last-Translator: subdiox \n" "Language: ja\n" @@ -864,45 +864,45 @@ msgstr "表紙ファイルの内容が無効です" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "表紙ファイルは jpg/jpeg のみ対応しています" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRarのバイナリファイルが見つかりません" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/km/LC_MESSAGES/messages.mo b/cps/translations/km/LC_MESSAGES/messages.mo index 99cb217171b45fc2b8142ca1e917e1acabb6af01..a8e88f8a1517a6294004b35fa6552473d057511d 100644 GIT binary patch delta 17 ZcmZ3snsM1`#tnBBn2by}-&Z(p0sut72WS8Q delta 17 ZcmZ3snsM1`#tnBBm<%j8-&Z(p0sutH2WkKS diff --git a/cps/translations/km/LC_MESSAGES/messages.po b/cps/translations/km/LC_MESSAGES/messages.po index ae2ae7f68..b5d8bca43 100644 --- a/cps/translations/km/LC_MESSAGES/messages.po +++ b/cps/translations/km/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2018-08-27 17:06+0700\n" "Last-Translator: \n" "Language: km_KH\n" @@ -865,45 +865,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/ko/LC_MESSAGES/messages.mo b/cps/translations/ko/LC_MESSAGES/messages.mo index b07a65d0563c396e898ab6cf3c6290dca589d4f6..a3a9abd8b61db58f80d24a5d00cf49010b4d677b 100644 GIT binary patch delta 17 ZcmccC&T_4tWdq+7CL`0$0#lCV0{}rJ2MPcH delta 17 ZcmccC&T_4tWdq+7CIidO0#lCV0{}rT2MhoJ diff --git a/cps/translations/ko/LC_MESSAGES/messages.po b/cps/translations/ko/LC_MESSAGES/messages.po index d742cc386..0cee64227 100644 --- a/cps/translations/ko/LC_MESSAGES/messages.po +++ b/cps/translations/ko/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2024-11-01 17:50+0900\n" "Last-Translator: limeade23 \n" "Language: ko\n" @@ -864,45 +864,45 @@ msgstr "올바르지 않은 표지 파일입니다." msgid "Only jpg/jpeg files are supported as coverfile" msgstr "표지 파일은 jpg/jpeg 형식만 지원합니다." -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "표지" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar 바이너리 파일을 찾을 수 없습니다." -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "UnRar 실행 중 오류가 발생했습니다." -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "지정된 디렉토리를 찾을 수 없습니다." -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "파일이 아닌 폴더를 지정하세요." -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Calibre 바이너리 파일을 사용할 수 없습니다." -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Calibre 바이너리 파일이 누락되었습니다: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "실행 권한이 없습니다: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Calibre 실행 오류" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "메타데이터 백업이 작업에 추가되었습니다." diff --git a/cps/translations/nl/LC_MESSAGES/messages.mo b/cps/translations/nl/LC_MESSAGES/messages.mo index a3d313398a6b5fdd817f45a9f9b910aa87c72449..7f6f2c97202f28e0c449a735914d1f2bcb75037a 100644 GIT binary patch delta 17 YcmX@UnECi(<_!rIOh%@glPXdp0Ytb57XSbN delta 17 YcmX@UnECi(<_!rIOa_*llPXdp0Yt(F82|tP diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 74daef1d3..1edf4bd89 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web (GPLV3)\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2023-12-20 22:00+0100\n" "Last-Translator: Michiel Cornelissen \n" "Language: nl\n" @@ -865,45 +865,45 @@ msgstr "Ongeldig omslagbestand" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Alleen jpg/jpeg bestanden zijn toegestaan als omslag" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar executable niet gevonden" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Opgegeven map kon niet worden gevonden" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Geef een map op, geen bestand" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Ontbrekende calibre-programmabestanden: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Voeg alle boeken toe aan de wachtrij voor het maken van een metagegevens backup" diff --git a/cps/translations/no/LC_MESSAGES/messages.mo b/cps/translations/no/LC_MESSAGES/messages.mo index 25761cf7ff55ca64a7e4812475454056bdf8865d..7d6962cbf6593986f01b68ff8ab3ddf5f010f0d6 100644 GIT binary patch delta 17 ZcmcaUjp_O{rVW*WOh%@gs{`*?0suv92UY+8 delta 17 ZcmcaUjp_O{rVW*WOa_*ls{`*?0suvJ2Uq|A diff --git a/cps/translations/no/LC_MESSAGES/messages.po b/cps/translations/no/LC_MESSAGES/messages.po index 84895a127..e889dcc89 100644 --- a/cps/translations/no/LC_MESSAGES/messages.po +++ b/cps/translations/no/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2023-01-06 11:00+0000\n" "Last-Translator: Vegard Fladby \n" "Language: no\n" @@ -864,45 +864,45 @@ msgstr "Ugyldig omslagsfilinnhold" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Bare jpg/jpeg-filer støttes som coverfile" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Dekke" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar binær fil ikke funnet" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Feil ved kjøring av UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Sett alle bøker i kø for sikkerhetskopiering av metadata" diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index ef1972220170ce995a837283b5586ec0047d5ac2..e925b61f15ffdde4368ed1c574de26b47c3136fa 100644 GIT binary patch delta 17 ZcmbO}fo1vxmJPoqF&UX|{xeCs6aYpD2h9Kg delta 17 ZcmbO}fo1vxmJPoqF&S8H{xeCs6aYpN2hRWi diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index f57379d93..2b4b55d35 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2021-06-12 08:52)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2025-12-08 12:51+0100\n" "Last-Translator: Daniel Szepietowski \n" "Language: pl\n" @@ -871,45 +871,45 @@ msgstr "Nieprawidłowa zawartość pliku z okładką" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Jako plik okładki dopuszczalne są jedynie pliki jpg/jpeg" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Okładka" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Plik wykonywalny programu unrar nie znaleziony" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Błąd podczas uruchamiania UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Nie udało się nie udało się znaleźć wskazanego folderu" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Proszę wskaż folder a nie plik." -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Pliki binarne Calibre są nieprawidłowe" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Brakuje plików binarnych calibre: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Brakuje uprawnień do wykonywania: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Błąd podczas uruchamiania Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Zaplanuj backup metadanych dla wszystkich książek" diff --git a/cps/translations/pt/LC_MESSAGES/messages.mo b/cps/translations/pt/LC_MESSAGES/messages.mo index 1c44175c23b93466aae5fe3a8d9424b5bb7a2b20..79e768b450361886bac4c333e405e8420e569182 100644 GIT binary patch delta 17 ZcmaETi23y)<_&E%Oh%@gJ8B-M002+o2zmej delta 17 ZcmaETi23y)<_&E%Oa_*lJ8B-M002+y2z&ql diff --git a/cps/translations/pt/LC_MESSAGES/messages.po b/cps/translations/pt/LC_MESSAGES/messages.po index 17c26872f..db02c69d4 100644 --- a/cps/translations/pt/LC_MESSAGES/messages.po +++ b/cps/translations/pt/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2023-07-25 11:30+0100\n" "Last-Translator: horus68 \n" "Language: pt\n" @@ -861,45 +861,45 @@ msgstr "Conteúdo do ficheiro de capa inválido" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Apenas ficheiros jpg/jpeg são suportados como ficheiros de capa" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Binário UnRar não encontrado" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Enviar todos os livros para lista de espera para cópia de segurança de metadados" diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.mo b/cps/translations/pt_BR/LC_MESSAGES/messages.mo index 50b81f22319497d9a26b4c15232e75de84ca68be..2f5738b687ee0046f48bcb2af5716e6c390b5b6c 100644 GIT binary patch delta 17 XcmdlmiDd&2eV@!^WV-q1Wb;x0Nn;2b delta 17 XcmdlmiDd&2eV@!^V7d9{Wb;x0No@!n diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.po b/cps/translations/pt_BR/LC_MESSAGES/messages.po index 425f17092..82593db1c 100644 --- a/cps/translations/pt_BR/LC_MESSAGES/messages.po +++ b/cps/translations/pt_BR/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: br\n" @@ -861,45 +861,45 @@ msgstr "Conteúdo do arquivo de capa inválido" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Apenas arquivos jpg/jpeg são suportados como arquivos de capa" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Capa" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Binário UnRar não encontrado" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Erro ao executar UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Não foi possível encontrar o diretório especificado" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Por favor, especifique um diretório, não um arquivo" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Binários do Calibre não são utilizáveis" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Binários do Calibre ausentes: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Permissões de execução ausentes: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Erro ao executar Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Enfileirar todos os livros para backup de Metadados" diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo index 057733b2ee2d8d41a9923543cc16339a2d35e71c..d333f0a04640858ef0bf4968ee1bf132edcda0c6 100644 GIT binary patch delta 17 ZcmZ2*hH1eWrVV\n" "Language: sk_SK\n" @@ -864,45 +864,45 @@ msgstr "Neplatný obsah súboru obalky knihy" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Obálka knihy" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Binárny súbor pre UnRar sa nenašiel" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Chyba pri spustení UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Zaradiť všetky knihy na zálohovanie metadát" diff --git a/cps/translations/sl/LC_MESSAGES/messages.mo b/cps/translations/sl/LC_MESSAGES/messages.mo index 900dea7bb11769753755bb46f7656eb3f1dfa5ef..9f2b76ab2aac458d8d9873eda64c7fe51ff54be3 100644 GIT binary patch delta 17 ZcmX^7mih2o<_*t#n2by}zwEh{2>?~<30?pI delta 17 ZcmX^7mih2o<_*t#m<%j8zwEh{2>?~}319#K diff --git a/cps/translations/sl/LC_MESSAGES/messages.po b/cps/translations/sl/LC_MESSAGES/messages.po index 1f0c828fc..1cd5d8c58 100644 --- a/cps/translations/sl/LC_MESSAGES/messages.po +++ b/cps/translations/sl/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2024-09-18 19:45+0200\n" "Last-Translator: Andrej Kralj\n" "Language: sl\n" @@ -864,45 +864,45 @@ msgstr "Nepravilna vsebina datoteke z naslovnico" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Samo datoteke jpg/jpeg so podprte kot datoteke naslovnic" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "Naslovnica" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "Binarna datoteka UnRar ni bila najdena" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "Napaka pri izvajanju UnRar" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "Ni bilo mogoče najti določenega imenika" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "Navedite imenik in ne datoteke" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Binarne datoteke Calibre niso izvedljive" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "Manjkajoče binarne datoteke Calibre: %(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "Manjkajoča dovoljenja za izvršilni program: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "Napaka pri izvajanju programa Calibre" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "Vse knjige v vrsti za varnostno kopiranje metapodatkov" diff --git a/cps/translations/sv/LC_MESSAGES/messages.mo b/cps/translations/sv/LC_MESSAGES/messages.mo index 8c340ec71b5621c959bfceb24ad0944d780fafb8..ea5c9a4d77924b7fc975a91112051683c6719e46 100644 GIT binary patch delta 17 ZcmeCa&eVOKX~XdpCL`0$CsPi&0RTvr2lW5| delta 17 ZcmeCa&eVOKX~XdpCIidOCsPi&0RTv#2loH~ diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po index d698876f6..08bad5ce0 100644 --- a/cps/translations/sv/LC_MESSAGES/messages.po +++ b/cps/translations/sv/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2021-05-13 11:00+0000\n" "Last-Translator: Jonatan Nyberg \n" "Language: sv\n" @@ -864,45 +864,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "Endast jpg/jpeg-filer stöds som omslagsfil" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "UnRar binär fil hittades inte" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/tr/LC_MESSAGES/messages.mo b/cps/translations/tr/LC_MESSAGES/messages.mo index 88a44b0893492e3eb89a4a8f182fc0397a526305..1bd25449cf6323d7d194b953956747bc57f7ed0e 100644 GIT binary patch delta 17 ZcmdlxhjH&5#tn~knT$*~Kh=#;002eQ2O9tY delta 17 ZcmdlxhjH&5#tn~knG7s9Kh=#;002ea2OR(a diff --git a/cps/translations/tr/LC_MESSAGES/messages.po b/cps/translations/tr/LC_MESSAGES/messages.po index 81a1eee81..9582efbee 100644 --- a/cps/translations/tr/LC_MESSAGES/messages.po +++ b/cps/translations/tr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2020-04-23 22:47+0300\n" "Last-Translator: iz \n" "Language: tr\n" @@ -864,45 +864,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo index 34e92d941ef726503e646566d68edc540da73f04..f884debaed7b19bda36ce33e6c461a5a586207a2 100644 GIT binary patch delta 17 ZcmaE~mhsVA#toM>n2by}U)A8%0{}{x2Ot0d delta 17 ZcmaE~mhsVA#toM>m<%j8U)A8%0{}{*2O\n" "Language: uk\n" @@ -877,46 +877,46 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 #, fuzzy msgid "Cover" msgstr "Огляд" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/vi/LC_MESSAGES/messages.mo b/cps/translations/vi/LC_MESSAGES/messages.mo index 797b1c9c07c483461c9b82c9e83b8ddc50b1fc63..528ae744b6782343139aca03e1fd704c7cb71426 100644 GIT binary patch delta 17 YcmaF*gz@PU#tjDcOh%@gjqHt$0ZFR{rvLx| delta 17 YcmaF*gz@PU#tjDcOa_*ljqHt$0ZFw6sQ>@~ diff --git a/cps/translations/vi/LC_MESSAGES/messages.po b/cps/translations/vi/LC_MESSAGES/messages.po index 62a2275e6..05fa644c6 100644 --- a/cps/translations/vi/LC_MESSAGES/messages.po +++ b/cps/translations/vi/LC_MESSAGES/messages.po @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2022-09-20 21:36+0700\n" "Last-Translator: Ha Link \n" "Language: vi\n" @@ -861,45 +861,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index b92cab7ea85640cb9c6881ea19d83b9deb27ea8b..2820a0ad544899974896ddb4dc924a9a52365186 100644 GIT binary patch delta 17 ZcmZ2|i+S}e<_%vaGZ~p~{x;b(5&%$(2zvkk delta 17 ZcmZ2|i+S}e<_%vaGZ|QJ{x;b(5&%$@2z>wm diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 830816f86..7b07e712b 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2025-12-06 13:53+0800\n" "Last-Translator: qx100\n" "Language: zh_CN\n" @@ -864,45 +864,45 @@ msgstr "封面文件内容无效" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "仅将 jpg、jpeg 文件作为封面文件" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "封面" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "找不到 UnRar 执行文件" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "执行 UnRar 时出错" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "无法找到指定目录" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "请指定目录,而不是文件" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "Calibre 程序无法运行" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "缺失的 calibre 程序:%(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "缺少执行权限: %(missing)s" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "执行 Calibre 时出错" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "将所有书籍加入元数据备份队列" diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 880f5a2e4697c2617cee5d9a353e6e9a5fc1ad1f..ade86697d9bd01b8ac370290f8a174deb57bee69 100644 GIT binary patch delta 17 ZcmbO+gL%db<_)jwnT$*~zpdBy0RTlc2Y>(o delta 17 ZcmbO+gL%db<_)jwnG7s9zpdBy0RTlm2Z8_q diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 141a45b35..49ef291a5 100644 --- a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: 2025-09-10 03:46+0000\n" "Last-Translator: finrodchen \n" "Language: zh_TW\n" @@ -864,45 +864,45 @@ msgstr "無效的封面檔案" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "僅將jpg、jpeg文件作為封面文件" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "找不到UnRar執行文件" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "找不到指定的目錄" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "請指定資料夾目錄,而非檔案" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "缺少 Calibre 執行檔:%(missing)s" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "將所有書籍排入元數據備份佇列" diff --git a/messages.pot b/messages.pot index eb58acb92..46e9cb4f2 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-04-25 13:09+0200\n" +"POT-Creation-Date: 2026-04-25 13:25+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -863,45 +863,45 @@ msgstr "" msgid "Only jpg/jpeg files are supported as coverfile" msgstr "" -#: cps/helper.py:975 cps/helper.py:1138 +#: cps/helper.py:986 cps/helper.py:1149 msgid "Cover" msgstr "" -#: cps/helper.py:992 +#: cps/helper.py:1003 msgid "UnRar binary file not found" msgstr "" -#: cps/helper.py:1003 +#: cps/helper.py:1014 msgid "Error executing UnRar" msgstr "" -#: cps/helper.py:1011 +#: cps/helper.py:1022 msgid "Could not find the specified directory" msgstr "" -#: cps/helper.py:1014 +#: cps/helper.py:1025 msgid "Please specify a directory, not a file" msgstr "" -#: cps/helper.py:1028 +#: cps/helper.py:1039 msgid "Calibre binaries not viable" msgstr "" -#: cps/helper.py:1037 +#: cps/helper.py:1048 #, python-format msgid "Missing calibre binaries: %(missing)s" msgstr "" -#: cps/helper.py:1039 +#: cps/helper.py:1050 #, python-format msgid "Missing executable permissions: %(missing)s" msgstr "" -#: cps/helper.py:1044 +#: cps/helper.py:1055 msgid "Error executing Calibre" msgstr "" -#: cps/helper.py:1140 cps/templates/admin.html:216 +#: cps/helper.py:1151 cps/templates/admin.html:216 msgid "Queue all books for metadata backup" msgstr "" From f4ed816f6efc0f914f4ce51ecdd11bd185d697ef Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 26 Apr 2026 06:49:19 +0200 Subject: [PATCH 22/22] Fixes from testrun --- cps/db.py | 2 +- pyproject.toml | 6 +- test/Calibre-Web TestSummary_Linux.html | 2506 ++++++++++++++++++++--- 3 files changed, 2216 insertions(+), 298 deletions(-) diff --git a/cps/db.py b/cps/db.py index 989731e53..feee7a8fc 100644 --- a/cps/db.py +++ b/cps/db.py @@ -1115,7 +1115,7 @@ class CalibreDB: .group_by(text('books_languages_link.lang_code')).all() tags = list() for lang in languages: - tag = Category(isoLanguages.get_language_name(get_locale(), None, lang[0].lang_code), lang[0].lang_code) + tag = Category(isoLanguages.get_language_name(get_locale(), lang[0].lang_code), lang[0].lang_code) tags.append([tag, lang[1]]) # Append all books without language to list if not return_all_languages: diff --git a/pyproject.toml b/pyproject.toml index 24b5a3cd3..67a7acca7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,12 +33,12 @@ dependencies = [ "Flask>=1.0.2,<3.2.0", "iso-639>=0.4.5,<0.5.0;python_version<'3.12'", "pycountry>=20.0.0,<27.0.0;python_version>='3.12'", - "PyPDF>=6.1.3,<6.8.0", + "PyPDF>=6.1.3,<6.11.0", "pytz>=2016.10", "requests>=2.32.0,<2.33.0", "SQLAlchemy>=1.3.0,<2.1.0", "tornado>=6.4.2,<6.6", - "Wand>=0.4.4,<0.7.0", + "Wand>=0.4.4,<0.8.0", "unidecode>=0.04.19,<1.5.0", "lxml>=4.9.1,<5.4.0", "flask-wtf>=0.14.2,<1.3.0", @@ -51,7 +51,7 @@ dependencies = [ "python-magic>=0.4.27,<0.5.0", "python-magic-bin>=0.4.0,<0.5.0;sys_platform=='win32'", "flask-httpAuth>=4.4.0,<5.0.0", - "cryptography>=39.0.0,<47.0.0", + "cryptography>=39.0.0,<48.0.0", "certifi>=2024.7.4,<2026.1.5", ] dynamic = ["version"] diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 11271fe2c..7a0eb6695 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2026-02-18 19:25:49

+

Start Time: 2026-04-25 16:06:06

-

Stop Time: 2026-02-19 02:59:10

+

Stop Time: 2026-04-25 23:02:36

-

Duration: 6h 16 min

+

Duration: 5h 43 min

@@ -102,15 +102,15 @@ - + TestAnonymous - 13 - 13 - 0 - 0 + 21 + 5 + 6 + 10 0 - Detail + Detail @@ -161,74 +161,476 @@ - +
TestAnonymous - test_guest_change_visibility_language
- PASS + +
+ ERROR +
+ + + + - + + +
TestAnonymous - test_guest_change_visibility_language
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_change_visibility_publisher
- PASS + +
+ FAIL +
+ + + + - + + +
TestAnonymous - test_guest_change_visibility_publisher
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_change_visibility_rated
- PASS + +
+ FAIL +
+ + + + - + + +
TestAnonymous - test_guest_change_visibility_rated
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_change_visibility_rating
- PASS + +
+ FAIL +
+ + + + - + + +
TestAnonymous - test_guest_change_visibility_rating
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_change_visibility_series
- PASS + +
+ FAIL +
+ + + + - + + +
TestAnonymous - test_guest_change_visibility_series
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_random_books_available
- PASS + +
+ FAIL +
+ + + + - + + +
TestAnonymous - test_guest_random_books_available
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_restricted_settings_visibility
- PASS + +
+ ERROR +
+ + + + - + + +
TestAnonymous - test_guest_restricted_settings_visibility
+ + +
+ ERROR +
+ + + + + + + + +
TestAnonymous - test_guest_visibility_sidebar
- PASS + +
+ FAIL +
+ + + + + + + + + + +
TestAnonymous - test_guest_visibility_sidebar
+ + +
+ ERROR +
+ + + + @@ -1200,13 +1602,13 @@ - + TestEditBooks 38 - 37 - 0 + 36 0 1 + 1 Detail @@ -1331,11 +1733,32 @@ - +
TestEditBooks - test_edit_language
- PASS + +
+ ERROR +
+ + + + @@ -1844,12 +2267,12 @@ - + TestEditBooksList 20 - 20 - 0 - 0 + 12 + 3 + 5 0 Detail @@ -1966,113 +2389,234 @@ - +
TestEditBooksList - test_bookslist_edit_languages
- PASS - - - - - - -
TestEditBooksList - test_bookslist_edit_publisher
- - PASS - - - - - - -
TestEditBooksList - test_bookslist_edit_series
- - PASS - - - - - - -
TestEditBooksList - test_bookslist_edit_seriesindex
- - PASS - - - - - - -
TestEditBooksList - test_bookslist_edit_title
- - PASS - - - - - - -
TestEditBooksList - test_list_visibility
- - PASS - - - - - - -
TestEditBooksList - test_restricted_rights
- - PASS - - - - - - -
TestEditBooksList - test_search_books_list
- - PASS - - - - - - - TestLoadMetadata - 1 - 0 - 1 - 0 - 0 - - Detail - - - - - - - -
TestLoadMetadata - test_load_metadata
-
- FAIL + FAIL
-