From 074e6117050916bc4752dae0daf2078f202ae1d5 Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Wed, 23 Aug 2023 20:52:05 -0700 Subject: [PATCH 01/21] Add support for systemd socket-activation --- cps/server.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cps/server.py b/cps/server.py index ed3b7716..652c009c 100644 --- a/cps/server.py +++ b/cps/server.py @@ -27,6 +27,7 @@ try: from gevent.pywsgi import WSGIServer from .gevent_wsgi import MyWSGIHandler from gevent.pool import Pool + from gevent.socket import socket as GeventSocket from gevent import __version__ as _version from greenlet import GreenletExit import ssl @@ -95,6 +96,11 @@ class WebServer(object): log.warning('Cert path: %s', certfile_path) log.warning('Key path: %s', keyfile_path) + def _make_gevent_socket_activated(self): + # Reuse an already open socket on fd=SD_LISTEN_FDS_START + SD_LISTEN_FDS_START = 3 + return GeventSocket(fileno=SD_LISTEN_FDS_START) + def _make_gevent_unix_socket(self, socket_file): # the socket file must not exist prior to bind() if os.path.exists(socket_file): @@ -115,6 +121,10 @@ class WebServer(object): def _make_gevent_socket(self): if os.name != 'nt': + socket_activated = os.environ.get("LISTEN_FDS") + if socket_activated: + sock = self._make_gevent_socket_activated() + return sock, sock.getsockname() unix_socket_file = os.environ.get("CALIBRE_UNIX_SOCKET") if unix_socket_file: return self._make_gevent_unix_socket(unix_socket_file), "unix:" + unix_socket_file From 3b1d0b4013d28629400d177d71bc64e1e01d6ae7 Mon Sep 17 00:00:00 2001 From: bacpd Date: Wed, 25 Oct 2023 15:08:10 +0700 Subject: [PATCH 02/21] Update messages.po --- cps/translations/vi/LC_MESSAGES/messages.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/translations/vi/LC_MESSAGES/messages.po b/cps/translations/vi/LC_MESSAGES/messages.po index 4b6c4b50..02d4c056 100644 --- a/cps/translations/vi/LC_MESSAGES/messages.po +++ b/cps/translations/vi/LC_MESSAGES/messages.po @@ -2834,7 +2834,7 @@ msgstr "Tài khoản" #: cps/templates/layout.html:71 cps/templates/layout.html:96 msgid "Logout" -msgstr "Đăng suất" +msgstr "Đăng xuất" #: cps/templates/layout.html:78 cps/templates/layout.html:134 msgid "Uploading..." From a2a431802a8668d97ce00916ca5eccf88af1f4c9 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 28 Oct 2023 13:49:16 +0200 Subject: [PATCH 03/21] Added prc to supported convert from formats (#2801) Improved error message for not able to listen to ipv6 address with gevent --- cps/constants.py | 2 +- cps/server.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/constants.py b/cps/constants.py index 18c4f1b1..b5f40b11 100644 --- a/cps/constants.py +++ b/cps/constants.py @@ -149,7 +149,7 @@ del env_CALIBRE_PORT EXTENSIONS_AUDIO = {'mp3', 'mp4', 'ogg', 'opus', 'wav', 'flac', 'm4a', 'm4b'} EXTENSIONS_CONVERT_FROM = ['pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', - 'txt', 'htmlz', 'rtf', 'odt', 'cbz', 'cbr'] + 'txt', 'htmlz', 'rtf', 'odt', 'cbz', 'cbr', 'prc'] EXTENSIONS_CONVERT_TO = ['pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'htmlz', 'rtf', 'odt'] EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'kepub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'cb7', 'djvu', 'djv', diff --git a/cps/server.py b/cps/server.py index ed5913bb..6b4e8a9b 100644 --- a/cps/server.py +++ b/cps/server.py @@ -131,7 +131,7 @@ class WebServer(object): sock = WSGIServer.get_listener(address, family=socket.AF_INET6) except socket.error as ex: log.error('%s', ex) - log.warning('Unable to listen on "", trying on IPv4 only...') + log.warning('Unable to listen on {}, trying on IPv4 only...'.format(address)) address = ('', self.listen_port) sock = WSGIServer.get_listener(address, family=socket.AF_INET) From d55bafdfa9728a7a82ae912dfbcff1a3e4cef6d5 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sat, 28 Oct 2023 19:10:44 +0200 Subject: [PATCH 04/21] Added hint for beta release format --- cps/constants.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cps/constants.py b/cps/constants.py index b5f40b11..87ce6f59 100644 --- a/cps/constants.py +++ b/cps/constants.py @@ -168,6 +168,7 @@ def selected_roles(dictionary): BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, description, tags, series, ' 'series_id, languages, publisher, pubdate, identifiers') +# python build process likes to have x.y.zbw -> b for beta and w a counting number STABLE_VERSION = {'version': '0.6.22 Beta'} NIGHTLY_VERSION = dict() From d26e60724a72083836a0717608904f1e553f8510 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Sun, 29 Oct 2023 16:45:09 +0100 Subject: [PATCH 05/21] Socket listening and socket activation enabled on tornado Refactoring of server code Updates requirements Improved requirements parsing for versions containing letters --- cps/dep_check.py | 2 +- cps/server.py | 84 +++++++++++++++++++++++++++++++----------------- requirements.txt | 6 ++-- 3 files changed, 59 insertions(+), 33 deletions(-) diff --git a/cps/dep_check.py b/cps/dep_check.py index bc015756..34d0e24b 100644 --- a/cps/dep_check.py +++ b/cps/dep_check.py @@ -61,7 +61,7 @@ def dependency_check(optional=False): deps = load_dependencies(optional) for dep in deps: try: - dep_version_int = [int(x) for x in dep[0].split('.')] + dep_version_int = [int(x) if x.isnumeric() else 0 for x in dep[0].split('.')] low_check = [int(x) for x in dep[3].split('.')] high_check = [int(x) for x in dep[5].split('.')] except AttributeError: diff --git a/cps/server.py b/cps/server.py index 193be9d5..79b342d5 100644 --- a/cps/server.py +++ b/cps/server.py @@ -21,10 +21,9 @@ import os import errno import signal import socket -import subprocess # nosec try: - from gevent.pywsgi import WSGIServer + from gevwent.pywsgi import WSGIServer from .gevent_wsgi import MyWSGIHandler from gevent.pool import Pool from gevent.socket import socket as GeventSocket @@ -37,6 +36,7 @@ except ImportError: from .tornado_wsgi import MyWSGIContainer from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop + from tornado.netutil import bind_unix_socket from tornado import version as _version VERSION = 'Tornado ' + _version _GEVENT = False @@ -101,7 +101,7 @@ class WebServer(object): SD_LISTEN_FDS_START = 3 return GeventSocket(fileno=SD_LISTEN_FDS_START) - def _make_gevent_unix_socket(self, socket_file): + def _prepare_unix_socket(self, socket_file): # the socket file must not exist prior to bind() if os.path.exists(socket_file): # avoid nuking regular files and symbolic links (could be a mistype or security issue) @@ -109,32 +109,34 @@ class WebServer(object): raise OSError(errno.EEXIST, os.strerror(errno.EEXIST), socket_file) os.remove(socket_file) - unix_sock = WSGIServer.get_listener(socket_file, family=socket.AF_UNIX) self.unix_socket_file = socket_file - # ensure current user and group have r/w permissions, no permissions for other users - # this way the socket can be shared in a semi-secure manner - # between the user running calibre-web and the user running the fronting webserver - os.chmod(socket_file, 0o660) - - return unix_sock - - def _make_gevent_socket(self): + def _make_gevent_listener(self): if os.name != 'nt': socket_activated = os.environ.get("LISTEN_FDS") if socket_activated: sock = self._make_gevent_socket_activated() - return sock, sock.getsockname() + sock_info = sock.getsockname() + return sock, "systemd-socket:" + _readable_listen_address(sock_info[0], sock_info[1]) unix_socket_file = os.environ.get("CALIBRE_UNIX_SOCKET") if unix_socket_file: - return self._make_gevent_unix_socket(unix_socket_file), "unix:" + unix_socket_file + self._prepare_unix_socket(unix_socket_file) + unix_sock = WSGIServer.get_listener(unix_socket_file, family=socket.AF_UNIX) + # ensure current user and group have r/w permissions, no permissions for other users + # this way the socket can be shared in a semi-secure manner + # between the user running calibre-web and the user running the fronting webserver + os.chmod(unix_socket_file, 0o660) + + return unix_sock, "unix:" + unix_socket_file if self.listen_address: - return (self.listen_address, self.listen_port), None + return ((self.listen_address, self.listen_port), + _readable_listen_address(self.listen_address, self.listen_port)) if os.name == 'nt': self.listen_address = '0.0.0.0' - return (self.listen_address, self.listen_port), None + return ((self.listen_address, self.listen_port), + _readable_listen_address(self.listen_address, self.listen_port)) try: address = ('::', self.listen_port) @@ -211,9 +213,7 @@ class WebServer(object): ssl_args = self.ssl_args or {} try: - sock, output = self._make_gevent_socket() - if output is None: - output = _readable_listen_address(self.listen_address, self.listen_port) + sock, output = self._make_gevent_listener() log.info('Starting Gevent server on %s', output) self.wsgiserver = WSGIServer(sock, self.app, log=self.access_logger, handler_class=MyWSGIHandler, error_log=log, @@ -238,17 +238,43 @@ class WebServer(object): if os.name == 'nt' and sys.version_info > (3, 7): import asyncio asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) - log.info('Starting Tornado server on %s', _readable_listen_address(self.listen_address, self.listen_port)) + try: + # Max Buffersize set to 200MB + http_server = HTTPServer(MyWSGIContainer(self.app), + max_buffer_size=209700000, + ssl_options=self.ssl_args) - # Max Buffersize set to 200MB - http_server = HTTPServer(MyWSGIContainer(self.app), - max_buffer_size=209700000, - ssl_options=self.ssl_args) - http_server.listen(self.listen_port, self.listen_address) - self.wsgiserver = IOLoop.current() - self.wsgiserver.start() - # wait for stop signal - self.wsgiserver.close(True) + unix_socket_file = os.environ.get("CALIBRE_UNIX_SOCKET") + if os.environ.get("LISTEN_FDS") and os.name != 'nt': + SD_LISTEN_FDS_START = 3 + sock = socket.socket(fileno=SD_LISTEN_FDS_START) + http_server.add_socket(sock) + sock.setblocking(0) + socket_name =sock.getsockname() + output = "systemd-socket:" + _readable_listen_address(socket_name[0], socket_name[1]) + # log.error("Tornado server isn't supporting socket activation, normal port is used") + elif unix_socket_file and os.name != 'nt': + self._prepare_unix_socket(unix_socket_file) + output = "unix:" + unix_socket_file + unix_socket = bind_unix_socket(self.unix_socket_file) + http_server.add_socket(unix_socket) + # ensure current user and group have r/w permissions, no permissions for other users + # this way the socket can be shared in a semi-secure manner + # between the user running calibre-web and the user running the fronting webserver + os.chmod(self.unix_socket_file, 0o660) + else: + output = _readable_listen_address(self.listen_address, self.listen_port) + http_server.listen(self.listen_port, self.listen_address) + log.info('Starting Tornado server on %s', output) + + self.wsgiserver = IOLoop.current() + self.wsgiserver.start() + # wait for stop signal + self.wsgiserver.close(True) + finally: + if self.unix_socket_file: + os.remove(self.unix_socket_file) + self.unix_socket_file = None def start(self): try: diff --git a/requirements.txt b/requirements.txt index e384ed87..f1e5b712 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ Werkzeug<3.0.0 APScheduler>=3.6.3,<3.11.0 Babel>=1.3,<3.0 -Flask-Babel>=0.11.1,<3.2.0 +Flask-Babel>=0.11.1,<4.1.0 Flask-Login>=0.3.2,<0.6.3 Flask-Principal>=0.3.2,<0.5.1 Flask>=1.0.2,<2.4.0 @@ -14,7 +14,7 @@ tornado>=6.3,<6.4 Wand>=0.4.4,<0.7.0 unidecode>=0.04.19,<1.4.0 lxml>=3.8.0,<5.0.0 -flask-wtf>=0.14.2,<1.2.0 +flask-wtf>=0.14.2,<1.3.0 chardet>=3.0.0,<4.1.0 advocate>=1.0.0,<1.1.0 -Flask-Limiter>=2.3.0,<3.5.0 +Flask-Limiter>=2.3.0,<3.6.0 From 40a16f47175b743dc2cf1c061288366ca5ac324e Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Wed, 1 Nov 2023 07:47:29 +0100 Subject: [PATCH 06/21] Reenabled gevent as server --- cps/server.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cps/server.py b/cps/server.py index 79b342d5..0b6d2fb3 100644 --- a/cps/server.py +++ b/cps/server.py @@ -23,7 +23,7 @@ import signal import socket try: - from gevwent.pywsgi import WSGIServer + from gevent.pywsgi import WSGIServer from .gevent_wsgi import MyWSGIHandler from gevent.pool import Pool from gevent.socket import socket as GeventSocket @@ -252,7 +252,6 @@ class WebServer(object): sock.setblocking(0) socket_name =sock.getsockname() output = "systemd-socket:" + _readable_listen_address(socket_name[0], socket_name[1]) - # log.error("Tornado server isn't supporting socket activation, normal port is used") elif unix_socket_file and os.name != 'nt': self._prepare_unix_socket(unix_socket_file) output = "unix:" + unix_socket_file From 55deca1ec8048e0eb5095a301c98401f066a2cbb Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Thu, 2 Nov 2023 16:34:04 +0100 Subject: [PATCH 07/21] Catch additional errors on logfile Fix error on exception in session management --- cps/logger.py | 4 ++-- cps/ub.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cps/logger.py b/cps/logger.py index 13535efb..74f7fb39 100644 --- a/cps/logger.py +++ b/cps/logger.py @@ -150,7 +150,7 @@ def setup(log_file, log_level=None): else: try: file_handler = RotatingFileHandler(log_file, maxBytes=100000, backupCount=2, encoding='utf-8') - except IOError: + except (IOError, PermissionError): if log_file == DEFAULT_LOG_FILE: raise file_handler = RotatingFileHandler(DEFAULT_LOG_FILE, maxBytes=100000, backupCount=2, encoding='utf-8') @@ -177,7 +177,7 @@ def create_access_log(log_file, log_name, formatter): access_log.setLevel(logging.INFO) try: file_handler = RotatingFileHandler(log_file, maxBytes=50000, backupCount=2, encoding='utf-8') - except IOError: + except (IOError, PermissionError): if log_file == DEFAULT_ACCESS_LOG: raise file_handler = RotatingFileHandler(DEFAULT_ACCESS_LOG, maxBytes=50000, backupCount=2, encoding='utf-8') diff --git a/cps/ub.py b/cps/ub.py index db8dba03..3e478f99 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -104,7 +104,7 @@ def check_user_session(user_id, session_key): try: return bool(session.query(User_Sessions).filter(User_Sessions.user_id==user_id, User_Sessions.session_key==session_key).one_or_none()) - except (exc.OperationalError, exc.InvalidRequestError): + except (exc.OperationalError, exc.InvalidRequestError) as e: session.rollback() log.exception(e) From fad6550ff17307f8c5289d1dcb5991575da69717 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 6 Nov 2023 16:35:39 +0100 Subject: [PATCH 08/21] Show "all" opds feed entries only if there is at least one entry --- cps/opds.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/opds.py b/cps/opds.py index 4067712f..b13b0570 100644 --- a/cps/opds.py +++ b/cps/opds.py @@ -502,7 +502,7 @@ def render_element_index(database_column, linked_table, folder): entries = entries.join(linked_table).join(db.Books) entries = entries.filter(calibre_db.common_filters()).group_by(func.upper(func.substr(database_column, 1, 1))).all() elements = [] - if off == 0: + if off == 0 and entries: elements.append({'id': "00", 'name': _("All")}) shift = 1 for entry in entries[ From 2fbc3da451d1448fe2e3310ef3c637cdf7c21d6a Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 6 Nov 2023 16:51:08 +0100 Subject: [PATCH 09/21] Added Slovak translation --- cps/iso_language_names.py | 378 ++ .../locales/bootstrap-datepicker.sk.min.js | 1 + cps/translations/cs/LC_MESSAGES/messages.mo | Bin 35581 -> 35581 bytes cps/translations/cs/LC_MESSAGES/messages.po | 2 +- cps/translations/de/LC_MESSAGES/messages.mo | Bin 61561 -> 61561 bytes cps/translations/de/LC_MESSAGES/messages.po | 2 +- cps/translations/el/LC_MESSAGES/messages.mo | Bin 52107 -> 52107 bytes cps/translations/el/LC_MESSAGES/messages.po | 2 +- cps/translations/es/LC_MESSAGES/messages.mo | Bin 46435 -> 46435 bytes cps/translations/es/LC_MESSAGES/messages.po | 2 +- cps/translations/fi/LC_MESSAGES/messages.mo | Bin 24553 -> 24553 bytes cps/translations/fi/LC_MESSAGES/messages.po | 2 +- cps/translations/fr/LC_MESSAGES/messages.mo | Bin 50590 -> 50590 bytes cps/translations/fr/LC_MESSAGES/messages.po | 2 +- cps/translations/gl/LC_MESSAGES/messages.mo | Bin 55813 -> 55813 bytes cps/translations/gl/LC_MESSAGES/messages.po | 2 +- cps/translations/hu/LC_MESSAGES/messages.mo | Bin 22520 -> 22520 bytes cps/translations/hu/LC_MESSAGES/messages.po | 2 +- cps/translations/id/LC_MESSAGES/messages.mo | Bin 53517 -> 53517 bytes cps/translations/id/LC_MESSAGES/messages.po | 2 +- cps/translations/it/LC_MESSAGES/messages.mo | Bin 63148 -> 63148 bytes cps/translations/it/LC_MESSAGES/messages.po | 2 +- cps/translations/ja/LC_MESSAGES/messages.mo | Bin 59143 -> 59143 bytes cps/translations/ja/LC_MESSAGES/messages.po | 2 +- cps/translations/km/LC_MESSAGES/messages.mo | Bin 22267 -> 22267 bytes cps/translations/km/LC_MESSAGES/messages.po | 2 +- cps/translations/ko/LC_MESSAGES/messages.mo | Bin 56305 -> 56305 bytes cps/translations/ko/LC_MESSAGES/messages.po | 2 +- cps/translations/nl/LC_MESSAGES/messages.mo | Bin 45724 -> 45724 bytes cps/translations/nl/LC_MESSAGES/messages.po | 2 +- cps/translations/no/LC_MESSAGES/messages.mo | Bin 36099 -> 36099 bytes cps/translations/no/LC_MESSAGES/messages.po | 2 +- cps/translations/pl/LC_MESSAGES/messages.mo | Bin 47333 -> 47333 bytes cps/translations/pl/LC_MESSAGES/messages.po | 2 +- cps/translations/pt/LC_MESSAGES/messages.mo | Bin 58533 -> 58533 bytes cps/translations/pt/LC_MESSAGES/messages.po | 2 +- .../pt_BR/LC_MESSAGES/messages.mo | Bin 55997 -> 55997 bytes .../pt_BR/LC_MESSAGES/messages.po | 2 +- cps/translations/ru/LC_MESSAGES/messages.mo | Bin 42944 -> 42944 bytes cps/translations/ru/LC_MESSAGES/messages.po | 2 +- cps/translations/sk/LC_MESSAGES/messages.mo | Bin 0 -> 62125 bytes cps/translations/sk/LC_MESSAGES/messages.po | 3452 +++++++++++++++++ cps/translations/sv/LC_MESSAGES/messages.mo | Bin 44473 -> 44473 bytes cps/translations/sv/LC_MESSAGES/messages.po | 2 +- cps/translations/tr/LC_MESSAGES/messages.mo | Bin 20150 -> 20150 bytes cps/translations/tr/LC_MESSAGES/messages.po | 2 +- cps/translations/uk/LC_MESSAGES/messages.mo | Bin 22473 -> 22473 bytes cps/translations/uk/LC_MESSAGES/messages.po | 2 +- cps/translations/vi/LC_MESSAGES/messages.mo | Bin 29512 -> 29512 bytes cps/translations/vi/LC_MESSAGES/messages.po | 2 +- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 55418 -> 55418 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 2 +- .../zh_Hant_TW/LC_MESSAGES/messages.mo | Bin 44351 -> 44351 bytes .../zh_Hant_TW/LC_MESSAGES/messages.po | 2 +- messages.pot | 2 +- 55 files changed, 3857 insertions(+), 26 deletions(-) create mode 100644 cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js create mode 100644 cps/translations/sk/LC_MESSAGES/messages.mo create mode 100644 cps/translations/sk/LC_MESSAGES/messages.po diff --git a/cps/iso_language_names.py b/cps/iso_language_names.py index 00adedcf..4b9a8ef9 100644 --- a/cps/iso_language_names.py +++ b/cps/iso_language_names.py @@ -7760,6 +7760,384 @@ LANGUAGE_NAMES = { "zxx": "Нет языкового содержимого", "zza": "Зазаки" }, + "sk": { + "abk": "Abkhazian", + "ace": "Achinese", + "ach": "Acoli", + "ada": "Adangme", + "ady": "Adyghe", + "aar": "Afar", + "afh": "Afrihili", + "afr": "Afrikánsky", + "ain": "Ainu (Japan)", + "aka": "Akan", + "akk": "Akkadian", + "sqi": "Albanian", + "ale": "Aleut", + "amh": "Amharic", + "anp": "Angika", + "ara": "Arabská", + "arg": "Aragonese", + "arp": "Arapaho", + "arw": "Arawak", + "hye": "Arménčina", + "asm": "Assamese", + "ast": "Asturian", + "ava": "Avaric", + "ave": "Avestan", + "awa": "Awadhi", + "aym": "Aymara", + "aze": "Ázerbajdžánsky", + "ban": "Balinese", + "bal": "Baluchi", + "bam": "Bambara", + "bas": "Basa (Cameroon)", + "bak": "Bashkir", + "eus": "Baskitský", + "bej": "Beja", + "bel": "Belarusian", + "bem": "Bemba (Zambia)", + "ben": "Bengali", + "bit": "Berinomo", + "bho": "Bhojpuri", + "bik": "Bikol", + "byn": "Bilin", + "bin": "Bini", + "bis": "Bislama", + "zbl": "Blissymbols", + "bos": "Bosnian", + "bra": "Braj", + "bre": "Bretónsky", + "bug": "Buginese", + "bul": "Bulharský", + "bua": "Buriat", + "mya": "Burmese", + "cad": "Caddo", + "cat": "Katalánsky", + "ceb": "Cebuano", + "chg": "Chagatai", + "cha": "Chamorro", + "che": "Chechen", + "chr": "Cherokee", + "chy": "Cheyenne", + "chb": "Chibcha", + "zho": "Čínsky", + "chn": "Chinook jargon", + "chp": "Chipewyan", + "cho": "Choctaw", + "cht": "Cholón", + "chk": "Chuukese", + "chv": "Chuvash", + "cop": "Coptic", + "cor": "Cornish", + "cos": "Corsican", + "cre": "Cree", + "mus": "Creek", + "hrv": "Chorvátsky", + "ces": "Český", + "dak": "Dakota", + "dan": "Dánsky", + "dar": "Dargwa", + "del": "Delaware", + "div": "Dhivehi", + "din": "Dinka", + "doi": "Dogri (macrolanguage)", + "dgr": "Dogrib", + "dua": "Duala", + "nld": "Holandský", + "dse": "Dutch Sign Language", + "dyu": "Dyula", + "dzo": "Dzongkha", + "efi": "Efik", + "egy": "Egyptian (Ancient)", + "eka": "Ekajuk", + "elx": "Elamite", + "eng": "Angličtina", + "enu": "Enu", + "myv": "Erzya", + "epo": "Esperanto", + "est": "Estónsky", + "ewe": "Ewe", + "ewo": "Ewondo", + "fan": "Fang (Equatorial Guinea)", + "fat": "Fanti", + "fao": "Faroese", + "fij": "Fijian", + "fil": "Filipino", + "fin": "Fínsky", + "fon": "Fon", + "fra": "Francúzsky", + "fur": "Friulian", + "ful": "Fulah", + "gaa": "Ga", + "glg": "Galician", + "lug": "Ganda", + "gay": "Gayo", + "gba": "Gbaya (Central African Republic)", + "hmj": "Ge", + "gez": "Geez", + "kat": "Georgian", + "deu": "Nemecký", + "gil": "Gilbertese", + "gon": "Gondi", + "gor": "Gorontalo", + "got": "Gothic", + "grb": "Grebo", + "grn": "Guarani", + "guj": "Gujarati", + "gwi": "Gwichʼin", + "hai": "Haida", + "hau": "Hausa", + "haw": "Hawaiian", + "heb": "Hebrejský", + "her": "Herero", + "hil": "Hiligaynon", + "hin": "Hindi", + "hmo": "Hiri Motu", + "hit": "Hittite", + "hmn": "Hmong", + "hun": "Maďarský", + "hup": "Hupa", + "iba": "Iban", + "isl": "Islandský", + "ido": "Ido", + "ibo": "Igbo", + "ilo": "Iloko", + "ind": "Indonézsky", + "inh": "Ingush", + "ina": "Interlingua (International Auxiliary Language Association)", + "ile": "Interlingue", + "iku": "Inuktitut", + "ipk": "Inupiaq", + "gle": "Írsky", + "ita": "Taliansky", + "jpn": "Japonský", + "jav": "Javanese", + "jrb": "Judeo-Arabic", + "jpr": "Judeo-Persian", + "kbd": "Kabardian", + "kab": "Kabyle", + "kac": "Kachin", + "kal": "Kalaallisut", + "xal": "Kalmyk", + "kam": "Kamba (Kenya)", + "kan": "Kannada", + "kau": "Kanuri", + "kaa": "Kara-Kalpak", + "krc": "Karachay-Balkar", + "krl": "Karelian", + "kas": "Kashmiri", + "csb": "Kashubian", + "kaw": "Kawi", + "kaz": "Kazakh", + "kha": "Khasi", + "kho": "Khotanese", + "kik": "Kikuyu", + "kmb": "Kimbundu", + "kin": "Kinyarwanda", + "kir": "Kirghiz", + "tlh": "Klingon", + "kom": "Komi", + "kon": "Kongo", + "kok": "Konkani (macrolanguage)", + "kor": "Kórejský", + "kos": "Kosraean", + "kpe": "Kpelle", + "kua": "Kuanyama", + "kum": "Kumyk", + "kur": "Kurdský", + "kru": "Kurukh", + "kut": "Kutenai", + "lad": "Ladino", + "lah": "Lahnda", + "lam": "Lamba", + "lao": "Lao", + "lat": "Latin", + "lav": "Latvian", + "lez": "Lezghian", + "lim": "Limburgan", + "lin": "Lingala", + "lit": "Lotyšský", + "jbo": "Lojban", + "loz": "Lozi", + "lub": "Luba-Katanga", + "lua": "Luba-Lulua", + "lui": "Luiseno", + "smj": "Lule Sami", + "lun": "Lunda", + "luo": "Luo (Kenya and Tanzania)", + "lus": "Lushai", + "ltz": "Luxembourgish", + "mkd": "Macedónsky", + "mad": "Madurese", + "mag": "Magahi", + "mai": "Maithili", + "mak": "Makasar", + "mlg": "Malagasy", + "msa": "Malay (macrolanguage)", + "mal": "Malayalam", + "mlt": "Maltézsky", + "mnc": "Manchu", + "mdr": "Mandar", + "man": "Mandingo", + "mni": "Manipuri", + "glv": "Manx", + "mri": "Maori", + "arn": "Mapudungun", + "mar": "Marathi", + "chm": "Mari (Russia)", + "mah": "Marshallese", + "mwr": "Marwari", + "mas": "Masai", + "men": "Mende (Sierra Leone)", + "mic": "Mi'kmaq", + "min": "Minangkabau", + "mwl": "Mirandese", + "moh": "Mohawk", + "mdf": "Moksha", + "lol": "Mongo", + "mon": "Mongolian", + "mos": "Mossi", + "mul": "Multiple languages", + "nqo": "N'Ko", + "nau": "Nauru", + "nav": "Navajo", + "ndo": "Ndonga", + "nap": "Neapolitan", + "nia": "Nias", + "niu": "Niuean", + "zxx": "No linguistic content", + "nog": "Nogai", + "nor": "Norwegian", + "nob": "Norwegian Bokmål", + "nno": "Norwegian Nynorsk", + "nym": "Nyamwezi", + "nya": "Nyanja", + "nyn": "Nyankole", + "nyo": "Nyoro", + "nzi": "Nzima", + "oci": "Occitan (post 1500)", + "oji": "Ojibwa", + "orm": "Oromo", + "osa": "Osage", + "oss": "Ossetian", + "pal": "Pahlavi", + "pau": "Palauan", + "pli": "Pali", + "pam": "Pampanga", + "pag": "Pangasinan", + "pan": "Panjabi", + "pap": "Papiamento", + "fas": "Persian", + "phn": "Phoenician", + "pon": "Pohnpeian", + "pol": "Poľský", + "por": "Portugalský", + "pus": "Pashto", + "que": "Quechua", + "raj": "Rajasthani", + "rap": "Rapanui", + "ron": "Rumunský", + "roh": "Romansh", + "rom": "Romany", + "run": "Rundi", + "rus": "Ruský", + "smo": "Samoan", + "sad": "Sandawe", + "sag": "Sango", + "san": "Sanskrit", + "sat": "Santali", + "srd": "Sardinian", + "sas": "Sasak", + "sco": "Scots", + "sel": "Selkup", + "srp": "Srbský", + "srr": "Serer", + "shn": "Shan", + "sna": "Shona", + "scn": "Sicilian", + "sid": "Sidamo", + "bla": "Siksika", + "snd": "Sindhi", + "sin": "Sinhala", + "den": "Slave (Athapascan)", + "slk": "Slovenský", + "slv": "Slovinský", + "sog": "Sogdian", + "som": "Somali", + "snk": "Soninke", + "spa": "Španielsky", + "srn": "Sranan Tongo", + "suk": "Sukuma", + "sux": "Sumerian", + "sun": "Sundanese", + "sus": "Susu", + "swa": "Swahili (macrolanguage)", + "ssw": "Swati", + "swe": "Švédsky", + "syr": "Syriac", + "tgl": "Tagalog", + "tah": "Tahitian", + "tgk": "Tajik", + "tmh": "Tamashek", + "tam": "Tamilský", + "tat": "Tatar", + "tel": "Telugu", + "ter": "Tereno", + "tet": "Tetum", + "tha": "Thajský", + "bod": "Tibetan", + "tig": "Tigre", + "tir": "Tigrinya", + "tem": "Timne", + "tiv": "Tiv", + "tli": "Tlingit", + "tpi": "Tok Pisin", + "tkl": "Tokelau", + "tog": "Tonga (Nyasa)", + "ton": "Tonga (Tonga Islands)", + "tsi": "Tsimshian", + "tso": "Tsonga", + "tsn": "Tswana", + "tum": "Tumbuka", + "tur": "Turecký", + "tuk": "Turkmen", + "tvl": "Tuvalu", + "tyv": "Tuvinian", + "twi": "Twi", + "udm": "Udmurt", + "uga": "Ugaritic", + "uig": "Uighur", + "ukr": "Ukrainian", + "umb": "Umbundu", + "mis": "Uncoded languages", + "und": "Undetermined", + "urd": "Urdu", + "uzb": "Uzbek", + "vai": "Vai", + "ven": "Venda", + "vie": "Vietnamský", + "vol": "Volapük", + "vot": "Votic", + "wln": "Vallónsky", + "war": "Waray (Philippines)", + "was": "Washo", + "cym": "Welšský", + "wal": "Wolaytta", + "wol": "Wolof", + "xho": "Xhosa", + "sah": "Yakut", + "yao": "Yao", + "yap": "Yapese", + "yid": "Yiddish", + "yor": "Yoruba", + "zap": "Zapotec", + "zza": "Zaza", + "zen": "Zenaga", + "zha": "Zhuang", + "zul": "Zulu", + "zun": "Zuni" + }, "sv": { "aar": "Afar", "abk": "Abchaziska", diff --git a/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js new file mode 100644 index 00000000..79a9267f --- /dev/null +++ b/cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.sk.min.js @@ -0,0 +1 @@ +!function(a){a.fn.datepicker.dates.sk={days:["Nedeľa","Pondelok","Utorok","Streda","Štvrtok","Piatok","Sobota"],daysShort:["Ned","Pon","Uto","Str","Štv","Pia","Sob"],daysMin:["Ne","Po","Ut","St","Št","Pia","So"],months:["Január","Február","Marec","Apríl","Máj","Jún","Júl","August","September","Október","November","December"],monthsShort:["Jan","Feb","Mar","Apr","Máj","Jún","Júl","Aug","Sep","Okt","Nov","Dec"],today:"Dnes",clear:"Vymazať",weekStart:1,format:"d.m.yyyy"}}(jQuery); \ No newline at end of file diff --git a/cps/translations/cs/LC_MESSAGES/messages.mo b/cps/translations/cs/LC_MESSAGES/messages.mo index e4197c9364889acaf10388b18271c6264dbed9f8..ce80a2bbb932426300cf036e5f060865e5863581 100644 GIT binary patch delta 22 ecmex6mFe$PrVaW5>}CpvW>zNVo6Q1_TLA!NVF&vF delta 22 ecmex6mFe$PrVaW5>_!TPW>&_go6Q1_TLA!N9tZRQ diff --git a/cps/translations/cs/LC_MESSAGES/messages.po b/cps/translations/cs/LC_MESSAGES/messages.po index 0db42896..606ed54b 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-06-09 21:11+0100\n" "Last-Translator: Lukas Heroudek \n" "Language: cs_CZ\n" diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index b6233b1b39e9b0df14aac07c1b767965371440df..3768b49d6682271abd3616b5dcb0e4fedd0baa3c 100644 GIT binary patch delta 22 ecmezQfcfVG<_)vj+07IT&8$q!H!p0zkpTdFHwq2_ delta 22 ecmezQfcfVG<_)vj*^Lwo&8&<~H!p0zkpTdE^a=+6 diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index e1d6c13a..58dda669 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2023-10-21 15:45+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" diff --git a/cps/translations/el/LC_MESSAGES/messages.mo b/cps/translations/el/LC_MESSAGES/messages.mo index 9e59c326cfe0ef70bc02f7aecd97c87fe94ddb67..6997438ad6fc88949bfd08d4b66169b636a8d6c7 100644 GIT binary patch delta 22 ecmeC4&fGnndBgfpb~6P-Gbz6fvt delta 22 ecmeC4&fGnndBgfpb|VEtGb>}$&D%n+mI44>dkAR& diff --git a/cps/translations/el/LC_MESSAGES/messages.po b/cps/translations/el/LC_MESSAGES/messages.po index 71ac4782..2407ebcd 100644 --- a/cps/translations/el/LC_MESSAGES/messages.po +++ b/cps/translations/el/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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Depountis Georgios\n" "Language: el\n" diff --git a/cps/translations/es/LC_MESSAGES/messages.mo b/cps/translations/es/LC_MESSAGES/messages.mo index 6f2e5f2ae86136f67e6a25d99591e7757f456d6d..6af47c3080da3b347abfd15dbc4e2f96bbcf33e0 100644 GIT binary patch delta 22 ecmaF-is|tyrVYKR>}CpvW>zNVo2R6n_XhxWt_gGi delta 22 ecmaF-is|tyrVYKR>_!TPW>&_go2R6n_XhxWYYA-t diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index c164010d..7fc13e08 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-05-25 17:22+0200\n" "Last-Translator: minakmostoles \n" "Language: es\n" diff --git a/cps/translations/fi/LC_MESSAGES/messages.mo b/cps/translations/fi/LC_MESSAGES/messages.mo index 491d6d700033e275f9b9b86d12812aeab58756ef..06e025fbefefe8bc34f449e5f6a162c0e19382de 100644 GIT binary patch delta 22 ecmaF4pYi2>#tpwM*v%9S&8$q!H#1p2R|5cYDF~VX delta 22 ecmaF4pYi2>#tpwM*o_nn&8&<~H#1p2R|5cX<_MDj diff --git a/cps/translations/fi/LC_MESSAGES/messages.po b/cps/translations/fi/LC_MESSAGES/messages.po index f5327354..ec98d1eb 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-01-12 13:56+0100\n" "Last-Translator: Samuli Valavuo \n" "Language: fi\n" diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index 0ce06e15929d03e22ff0af983fac60a44bcf9df2..16307b50d6fc4b06c76b0c0cca3a0f10b94df3bf 100644 GIT binary patch delta 22 dcmbQ&%{;H0c>{AMyP1NanU#t8X0FUBF#uBP2J`>` delta 22 dcmbQ&%{;H0c>{AMyODySnU%5WX0FUBF#uAh2JHX< diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 679164da..d3e3faff 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-06-07 06:47+0200\n" "Last-Translator: \n" "Language: fr\n" diff --git a/cps/translations/gl/LC_MESSAGES/messages.mo b/cps/translations/gl/LC_MESSAGES/messages.mo index 29bc59f9e3f5edf939b132428b9a152ffeb05e74..f091827898ec4c3631ca443ec22d51bcfa3b3b68 100644 GIT binary patch delta 22 dcmZqO!rZ!rc|%tfyP1NanU#t8=807$@c>{E2qypl delta 22 dcmZqO!rZ!rc|%tfyODySnU%5W=807$@c>`W2p|9e diff --git a/cps/translations/gl/LC_MESSAGES/messages.po b/cps/translations/gl/LC_MESSAGES/messages.po index e68c61a9..e573c269 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2022-08-11 16:46+0200\n" "Last-Translator: pollitor \n" "Language: gl\n" diff --git a/cps/translations/hu/LC_MESSAGES/messages.mo b/cps/translations/hu/LC_MESSAGES/messages.mo index ed4766cb6edfc556911adbbe7988bc56b30b3a5d..26433772a6d0c8ac998ffa2ccf0699421445a4d6 100644 GIT binary patch delta 22 ecmeydp7F}CpvW>zNVn_!TPW>&_gnrb~6P-Gbrb|VEtGb>}$%@3+{!vJHR2wDID diff --git a/cps/translations/id/LC_MESSAGES/messages.po b/cps/translations/id/LC_MESSAGES/messages.po index dc12d44a..3252a66e 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2023-01-21 10:00+0700\n" "Last-Translator: Arief Hidayat\n" "Language: id\n" diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo index 1552f06b809b13b7d165029017277df96f16c97d..737b62c9c622d88d5184e92b6022d414df89af44 100644 GIT binary patch delta 22 ecmZ4UmU+!v<_)vj+07IT&8$q!H!p1G&IbT+N(jgR delta 22 ecmZ4UmU+!v<_)vj*^Lwo&8&<~H!p1G&IbT+2MECc diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 0f191d03..2c326c65 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: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2023-10-21 15:27+0200\n" "Last-Translator: Massimo Pissarello \n" "Language: it\n" diff --git a/cps/translations/ja/LC_MESSAGES/messages.mo b/cps/translations/ja/LC_MESSAGES/messages.mo index c93c1be91e8bc03a04039c83c299537bda8876d2..7bb1c52363159a9112ea1223dc2a4584d65a46c5 100644 GIT binary patch delta 22 dcmZoa$J~C7c|%GSyP1NanU#t8=Ip9DIRIhg2uJ_` delta 22 dcmZoa$J~C7c|%GSyODySnU%5W=Ip9DIRIgy2tfb< diff --git a/cps/translations/ja/LC_MESSAGES/messages.po b/cps/translations/ja/LC_MESSAGES/messages.po index 65a971e9..d0a52739 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n" "Last-Translator: subdiox \n" "Language: ja\n" diff --git a/cps/translations/km/LC_MESSAGES/messages.mo b/cps/translations/km/LC_MESSAGES/messages.mo index 7be4a21b9f345f5ab1a8c6c00ba630121f6ede83..5fe412c650b491fe9d0a486d4584b0db078b3292 100644 GIT binary patch delta 22 dcmeypmhtym#tjXM>}CpvW>zNVo7)vjOaW@k2oV4P delta 22 dcmeypmhtym#tjXM>_!TPW>&_go7)vjOaW?$2nqlI diff --git a/cps/translations/km/LC_MESSAGES/messages.po b/cps/translations/km/LC_MESSAGES/messages.po index 12bc544f..1ba55d43 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2018-08-27 17:06+0700\n" "Last-Translator: \n" "Language: km_KH\n" diff --git a/cps/translations/ko/LC_MESSAGES/messages.mo b/cps/translations/ko/LC_MESSAGES/messages.mo index 24ff2fcd2d60afa37103a7c0e0c89a3dd55b2004..63cb22b5c3614fd3d1552dc083b3ce6b68ec9ec2 100644 GIT binary patch delta 22 ecmeyko%!Q-<_$+{*v%9S&8$q!H=n6djRydAw+S!+ delta 22 ecmeyko%!Q-<_$+{*o_nn&8&<~H=n6djRydAbO|W{ diff --git a/cps/translations/ko/LC_MESSAGES/messages.po b/cps/translations/ko/LC_MESSAGES/messages.po index a83d90b1..258509e4 100644 --- a/cps/translations/ko/LC_MESSAGES/messages.po +++ b/cps/translations/ko/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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2022-01-10 11:30+0900\n" "Last-Translator: 내맘대로의 EPUBGUIDE.NET \n" "Language: ko\n" diff --git a/cps/translations/nl/LC_MESSAGES/messages.mo b/cps/translations/nl/LC_MESSAGES/messages.mo index f5ada2b095c1c1d8f7197ae464c6290529b52736..6d98033606dae107052640a1f4b96383991fb821 100644 GIT binary patch delta 22 dcmbR9lxfaWrVYI5>}CpvW>zNVn?=$)ya8aG2bBN- delta 22 dcmbR9lxfaWrVYI5>_!TPW>&_gn?=$)ya8ZY2aW&$ diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 4591055d..3aa4fb8f 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-12-12 08:20+0100\n" "Last-Translator: Marcel Maas \n" "Language: nl\n" diff --git a/cps/translations/no/LC_MESSAGES/messages.mo b/cps/translations/no/LC_MESSAGES/messages.mo index 8d7d4d73155853e3e54a93229f8c261237e689cc..708a59768dc99092a7b63ed00b2f9f8c01275add 100644 GIT binary patch delta 22 dcmZpk#ne2DX+wDsyP1NanU#t8=DMI(D*#uJ2V(#L delta 22 dcmZpk#ne2DX+wDsyODySnU%5W=DMI(D*#tb2V4LE diff --git a/cps/translations/no/LC_MESSAGES/messages.po b/cps/translations/no/LC_MESSAGES/messages.po index 4c7cc430..79cfbf56 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2023-01-06 11:00+0000\n" "Last-Translator: Vegard Fladby \n" "Language: no\n" diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index c6424207a13bb89830f2e25b719fdfd1566e154f..060e6f65010ebaf948606390c07337473993dacf 100644 GIT binary patch delta 22 ecmaF*k?HA2rVR(u+07IT&8$q!Hy=-z3j_dqoC!ey delta 22 ecmaF*k?HA2rVR(u*^Lwo&8&<~Hy=-z3j_dqSqVA- diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index 82cd8ff0..d7db57ec 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2021-06-12 15:35+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" diff --git a/cps/translations/pt/LC_MESSAGES/messages.mo b/cps/translations/pt/LC_MESSAGES/messages.mo index a66867862ba3b0fc61eb3b765ca195b375ce9f4d..dfe995ff3fd3738a454b46e2a513fa7e4e273b67 100644 GIT binary patch delta 22 dcmZ2_l6mP#<_%GG>}CpvW>zNVn-l9?(g0+?2oL}O delta 22 dcmZ2_l6mP#<_%GG>_!TPW>&_gn-l9?(g0+92nhfH diff --git a/cps/translations/pt/LC_MESSAGES/messages.po b/cps/translations/pt/LC_MESSAGES/messages.po index cea2cbba..ec47cec8 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2023-07-25 11:30+0100\n" "Last-Translator: horus68 \n" "Language: pt\n" diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.mo b/cps/translations/pt_BR/LC_MESSAGES/messages.mo index 852e1676803dd805fb978b527b776fe85f972950..ee63863689121921717fc1370b85e4c654b2c8e8 100644 GIT binary patch delta 22 dcmdnHm3i-0<_*48>}CpvW>zNVn?tHH698nC2o(ST delta 22 dcmdnHm3i-0<_*48>_!TPW>&_gn?tHH698mU2o3-M diff --git a/cps/translations/pt_BR/LC_MESSAGES/messages.po b/cps/translations/pt_BR/LC_MESSAGES/messages.po index c776783e..20168752 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: br\n" diff --git a/cps/translations/ru/LC_MESSAGES/messages.mo b/cps/translations/ru/LC_MESSAGES/messages.mo index 716683205c3db552600f66e6399975d1794b9918..599dcb2d76dbf63cb6e04bca1af4b62a293c4696 100644 GIT binary patch delta 22 ecmX?bp6S4OrVYP5+07IT&8$q!H#2(ej|Bj4A_$oP delta 22 ecmX?bp6S4OrVYP5*^Lwo&8&<~H#2(ej|Bj3-w2Wb diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index cc74a58b..d6e980b3 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-04-29 01:20+0400\n" "Last-Translator: ZIZA\n" "Language: ru\n" diff --git a/cps/translations/sk/LC_MESSAGES/messages.mo b/cps/translations/sk/LC_MESSAGES/messages.mo new file mode 100644 index 0000000000000000000000000000000000000000..2df05f9d927b2528cb738e04a9cbc928ba63bccb GIT binary patch literal 62125 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 literal 0 HcmV?d00001 diff --git a/cps/translations/sk/LC_MESSAGES/messages.po b/cps/translations/sk/LC_MESSAGES/messages.po new file mode 100644 index 00000000..e3be3025 --- /dev/null +++ b/cps/translations/sk/LC_MESSAGES/messages.po @@ -0,0 +1,3452 @@ +# Slovak (Slovakia) translations for . +# Copyright (C) 2023 ORGANIZATION +# This file is distributed under the same license as the project. +# Branislav Hanáček , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: Calibre-Web\n" +"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" +"PO-Revision-Date: 2023-11-01 06:12+0100\n" +"Last-Translator: Branislav Hanáček \n" +"Language: sk_SK\n" +"Language-Team: \n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.11.0\n" + +#: cps/about.py:84 +msgid "Statistics" +msgstr "Štatistika" + +#: cps/admin.py:146 +msgid "Server restarted, please reload page." +msgstr "Server bol reštartovaný, znovu načítajte stránku." + +#: cps/admin.py:148 +msgid "Performing Server shutdown, please close window." +msgstr "Vypínam server, zavrite prosím okno." + +#: cps/admin.py:156 +msgid "Success! Database Reconnected" +msgstr "Spojenie s databázovo bolo úspešne znovu naviazané" + +#: cps/admin.py:159 +msgid "Unknown command" +msgstr "Neznámy príkaz" + +#: cps/admin.py:170 +msgid "Success! Books queued for Metadata Backup, please check Tasks for result" +msgstr "Úspech! Knihy boli zaradená do zálohovania metadát, skontrolujte si Úlohy na kontrolu" + +#: cps/admin.py:203 cps/editbooks.py:578 cps/editbooks.py:580 +#: cps/editbooks.py:618 cps/editbooks.py:635 cps/editbooks.py:1244 +#: cps/updater.py:613 cps/uploader.py:93 cps/uploader.py:102 +msgid "Unknown" +msgstr "Neznámy" + +#: cps/admin.py:228 +msgid "Admin page" +msgstr "Stránka správcu" + +#: cps/admin.py:248 +msgid "Basic Configuration" +msgstr "Základná konfigurácia" + +#: cps/admin.py:286 +msgid "UI Configuration" +msgstr "Konfigurácia používateľského rozhrania" + +#: cps/admin.py:320 cps/templates/admin.html:51 +msgid "Edit Users" +msgstr "Upraviť používateľov" + +#: cps/admin.py:364 cps/opds.py:506 cps/templates/grid.html:14 +#: cps/templates/list.html:13 +msgid "All" +msgstr "Všetko" + +#: cps/admin.py:391 cps/admin.py:1402 +msgid "User not found" +msgstr "Používateľ sa nenašiel" + +#: cps/admin.py:405 +msgid "{} users deleted successfully" +msgstr "Zmazaných {} používateľov" + +#: cps/admin.py:428 cps/templates/config_view_edit.html:133 +#: cps/templates/user_edit.html:45 cps/templates/user_table.html:81 +msgid "Show All" +msgstr "Zobraziť všetko" + +#: cps/admin.py:449 cps/admin.py:455 +msgid "Malformed request" +msgstr "Chybne vytvorená žiadosť" + +#: cps/admin.py:467 cps/admin.py:2020 +msgid "Guest Name can't be changed" +msgstr "Meno hosťa nie je možné zmeniť" + +#: cps/admin.py:479 +msgid "Guest can't have this role" +msgstr "Hosť nemôže mať túto rolu" + +#: cps/admin.py:491 cps/admin.py:1974 +msgid "No admin user remaining, can't remove admin role" +msgstr "Nezostáva žiadny správca, nie je možné odobrať rolu správcu" + +#: cps/admin.py:495 cps/admin.py:509 +msgid "Value has to be true or false" +msgstr "Hodnota musí byť pravda alebo nepravda" + +#: cps/admin.py:497 +msgid "Invalid role" +msgstr "Neplatná rola" + +#: cps/admin.py:501 +msgid "Guest can't have this view" +msgstr "Hosť nemôže mať toto zobrazenie" + +#: cps/admin.py:511 +msgid "Invalid view" +msgstr "Neplatné zobrazenie" + +#: cps/admin.py:514 +msgid "Guest's Locale is determined automatically and can't be set" +msgstr "Nastavenie jazyka pre hosťa sa určí automaticky a nie je možné ho nastaviť" + +#: cps/admin.py:518 +msgid "No Valid Locale Given" +msgstr "Nebolo poskytnuté platné nastavenie jazyka" + +#: cps/admin.py:529 +msgid "No Valid Book Language Given" +msgstr "Nebolo poskytnuté platné jazykové nastavenie pre knihu" + +#: cps/admin.py:531 cps/editbooks.py:444 +msgid "Parameter not found" +msgstr "Parameter sa nenašiel" + +#: cps/admin.py:568 +msgid "Invalid Read Column" +msgstr "Neplatný stĺpec na čítanie" + +#: cps/admin.py:574 +msgid "Invalid Restricted Column" +msgstr "Neplatný stĺpec na obmedzenie" + +#: cps/admin.py:594 cps/admin.py:1845 +msgid "Calibre-Web configuration updated" +msgstr "Konfigurácia Calibre-Web bola aktualizovaná" + +#: cps/admin.py:606 +msgid "Do you really want to delete the Kobo Token?" +msgstr "Naozaj chcete zmazať Kobo-žetón?" + +#: cps/admin.py:608 +msgid "Do you really want to delete this domain?" +msgstr "Naozaj chcete zmazať túto doménu?" + +#: cps/admin.py:610 +msgid "Do you really want to delete this user?" +msgstr "Naozaj chcete zmazať tohot používateľa?" + +#: cps/admin.py:612 +msgid "Are you sure you want to delete this shelf?" +msgstr "Naozaj chcete zmazať túto poličku?" + +#: cps/admin.py:614 +msgid "Are you sure you want to change locales of selected user(s)?" +msgstr "Naozaj chcete zmeniť nastavenia jazykov pre vybraných používateľov?" + +#: cps/admin.py:616 +msgid "Are you sure you want to change visible book languages for selected user(s)?" +msgstr "Naozaj chcete zmeniť viditeľné jazkyky pre knihy pre vybraných používateľov?" + +#: cps/admin.py:618 +msgid "Are you sure you want to change the selected role for the selected user(s)?" +msgstr "Naozaj chcete zmeniť vybrané role pre vybraných používateľov?" + +#: cps/admin.py:620 +msgid "Are you sure you want to change the selected restrictions for the selected user(s)?" +msgstr "Naozaj chcete zmeniť vybrané obmedzenia pre vybraných používateľov?" + +#: cps/admin.py:622 +msgid "Are you sure you want to change the selected visibility restrictions for the selected user(s)?" +msgstr "Naozaj chcete zmeniť vybrané obmedzenia viditeľnosti pre vybraných používateľov?" + +#: cps/admin.py:625 +msgid "Are you sure you want to change shelf sync behavior for the selected user(s)?" +msgstr "Naozaj chcete zmeniť synchronizačné správanie sa police pre vybraných používateľov?" + +#: cps/admin.py:627 +msgid "Are you sure you want to change Calibre library location?" +msgstr "Naozaj chcete zmenit umiestnenie pre knižnicu Calibre?" + +#: cps/admin.py:629 +msgid "Calibre-Web will search for updated Covers and update Cover Thumbnails, this may take a while?" +msgstr "Calilbre-Web vyhľadá aktualizované obálky a aktualizuje ich náhľady, môže to chvíľu trvať?" + +#: cps/admin.py:632 +msgid "Are you sure you want delete Calibre-Web's sync database to force a full sync with your Kobo Reader?" +msgstr "Naozaj chcete zmazať synchronizačnú databázu Calibre-Web aby ste vynútili úplnú synchronizáciu s vašou Kobo čítačkou?" + +#: cps/admin.py:875 cps/admin.py:881 cps/admin.py:891 cps/admin.py:901 +#: cps/templates/modal_dialogs.html:29 cps/templates/user_table.html:41 +#: cps/templates/user_table.html:58 +msgid "Deny" +msgstr "Odmietnuť" + +#: cps/admin.py:877 cps/admin.py:883 cps/admin.py:893 cps/admin.py:903 +#: cps/templates/modal_dialogs.html:28 cps/templates/user_table.html:44 +#: cps/templates/user_table.html:61 +msgid "Allow" +msgstr "Povoliť" + +#: cps/admin.py:918 +msgid "{} sync entries deleted" +msgstr "Zmazalo sa {} synchronizačných položiek" + +#: cps/admin.py:966 +msgid "Tag not found" +msgstr "Štítok sa nenašiel" + +#: cps/admin.py:978 +msgid "Invalid Action" +msgstr "Neplatná akcia" + +#: cps/admin.py:1108 +msgid "client_secrets.json Is Not Configured For Web Application" +msgstr "client_secrets.json nie je nakonfiguraovaný pre webovú aplikáciu" + +#: cps/admin.py:1153 +msgid "Logfile Location is not Valid, Please Enter Correct Path" +msgstr "Umiestnenie denníkového súboru je neplatné, zadajte prosím správnu cestu" + +#: cps/admin.py:1159 +msgid "Access Logfile Location is not Valid, Please Enter Correct Path" +msgstr "Umiestnenie súbor denníka prístupov nie je platné, zadajte prosím správnu cestu" + +#: cps/admin.py:1193 +msgid "Please Enter a LDAP Provider, Port, DN and User Object Identifier" +msgstr "Zadajte prosím poskytovateľa LDAP, port, DN a identifikátor používateľa" + +#: cps/admin.py:1199 +msgid "Please Enter a LDAP Service Account and Password" +msgstr "Zadajte prosím konto a heslo pre LDAP službu" + +#: cps/admin.py:1202 +msgid "Please Enter a LDAP Service Account" +msgstr "Zadajte prosím konto pre LDAP službu" + +#: cps/admin.py:1207 +#, python-format +msgid "LDAP Group Object Filter Needs to Have One \"%s\" Format Identifier" +msgstr "Filter pre LDAP objekt skupiny potrebuje jeden \"%s\" formátový identifikátor" + +#: cps/admin.py:1209 +msgid "LDAP Group Object Filter Has Unmatched Parenthesis" +msgstr "Filter pre LDAP objekt skupiny má nezhodu v zátvorkách" + +#: cps/admin.py:1213 +#, python-format +msgid "LDAP User Object Filter needs to Have One \"%s\" Format Identifier" +msgstr "Filter pre LDAP objekt používateľa potrebuje jeden \"%s\" formátový identifikátor" + +#: cps/admin.py:1215 +msgid "LDAP User Object Filter Has Unmatched Parenthesis" +msgstr "Filter pre LDAP objekt používateľa má nezhodu v zátvorkách" + +#: cps/admin.py:1222 +#, python-format +msgid "LDAP Member User Filter needs to Have One \"%s\" Format Identifier" +msgstr "Filter pre LDAP členstvo používateľa potrebuje jeden \"%s\" formátový identifikátor" + +#: cps/admin.py:1224 +msgid "LDAP Member User Filter Has Unmatched Parenthesis" +msgstr "Filter pre LDAP členstvo používateľa má nezhodu v zátvorkách" + +#: cps/admin.py:1231 +msgid "LDAP CACertificate, Certificate or Key Location is not Valid, Please Enter Correct Path" +msgstr "LDAP CA-certifikát, certifikát alebo umiestnenie kľúča nie je platné. Zadajte prosím správnu cestu" + +#: cps/admin.py:1262 cps/templates/admin.html:53 +msgid "Add New User" +msgstr "Pridať nového používateľa" + +#: cps/admin.py:1271 cps/templates/admin.html:100 +msgid "Edit Email Server Settings" +msgstr "Upraviť nastavenie pre poštový server" + +#: cps/admin.py:1290 +msgid "Success! Gmail Account Verified." +msgstr "Úspech! Gmail konto bolo verifikované." + +#: cps/admin.py:1310 cps/admin.py:1313 cps/admin.py:1695 cps/admin.py:1829 +#: cps/admin.py:1927 cps/admin.py:2048 cps/editbooks.py:230 +#: cps/editbooks.py:306 cps/editbooks.py:1206 cps/shelf.py:82 cps/shelf.py:142 +#: cps/shelf.py:185 cps/shelf.py:235 cps/shelf.py:272 cps/shelf.py:346 +#: cps/shelf.py:460 cps/tasks/convert.py:136 cps/web.py:1489 +#, python-format +msgid "Oops! Database Error: %(error)s." +msgstr "Chyba databázy: %(error)s." + +#: cps/admin.py:1320 +#, python-format +msgid "Test e-mail queued for sending to %(email)s, please check Tasks for result" +msgstr "Testovací e-mail bol zaradený na odoslanie na %(email)s, skontrolujte si výsledok v sekcii Úlohy" + +#: cps/admin.py:1323 +#, python-format +msgid "There was an error sending the Test e-mail: %(res)s" +msgstr "Pri odosielaní testovacieho e-mailu sa vyskytla chyba: %(res)s" + +#: cps/admin.py:1325 +msgid "Please configure your e-mail address first..." +msgstr "Prosím, najskôr si nastavte e-mailovú adresu..." + +#: cps/admin.py:1327 +msgid "Email Server Settings updated" +msgstr "Nastavenia poštového servera boli aktualizované" + +#: cps/admin.py:1350 cps/templates/admin.html:195 +msgid "Edit Scheduled Tasks Settings" +msgstr "Upraviť nastavenia naplánovaných úloh" + +#: cps/admin.py:1362 +msgid "Invalid start time for task specified" +msgstr "Bol uvedený neplatný čas spustenia" + +#: cps/admin.py:1367 +msgid "Invalid duration for task specified" +msgstr "Bol uvedený neplatný doba behu" + +#: cps/admin.py:1377 +msgid "Scheduled tasks settings updated" +msgstr "Nastavenia naplánovaných úloh boli aktualizované" + +#: cps/admin.py:1387 cps/admin.py:1436 cps/admin.py:2044 cps/web.py:1289 +msgid "Oops! An unknown error occurred. Please try again later." +msgstr "Vyskytla sa neočakávaná chyba. Prosím, skúste to opäť neskôr." + +#: cps/admin.py:1391 +msgid "Settings DB is not Writeable" +msgstr "Nie je možné zapisovať do databázy nastavení" + +#: cps/admin.py:1421 cps/admin.py:2036 +#, python-format +msgid "Edit User %(nick)s" +msgstr "Upraviť používateľa %(nick)s" + +#: cps/admin.py:1433 +#, python-format +msgid "Success! Password for user %(user)s reset" +msgstr "Úspech! Heslo pre používateľa %(user)s bolo resetované" + +#: cps/admin.py:1439 +msgid "Oops! Please configure the SMTP mail settings." +msgstr "Nastavte prosím poštový server." + +#: cps/admin.py:1450 +msgid "Logfile viewer" +msgstr "Prezerač denníkového súboru" + +#: cps/admin.py:1516 +msgid "Requesting update package" +msgstr "Žiadosť o aktualizačný balík" + +#: cps/admin.py:1517 +msgid "Downloading update package" +msgstr "Sťahuje sa aktualizačný balík" + +#: cps/admin.py:1518 +msgid "Unzipping update package" +msgstr "Rozbaľuje sa aktualizačný balík" + +#: cps/admin.py:1519 +msgid "Replacing files" +msgstr "Nahradzujú sa súbory" + +#: cps/admin.py:1520 +msgid "Database connections are closed" +msgstr "Spojenia s databázou sú uzavreté" + +#: cps/admin.py:1521 +msgid "Stopping server" +msgstr "Zastavuje sa server" + +#: cps/admin.py:1522 +msgid "Update finished, please press okay and reload page" +msgstr "Aktualizácia dokončená, stlačte prosím OK a znovu načítajte stránku" + +#: cps/admin.py:1523 cps/admin.py:1524 cps/admin.py:1525 cps/admin.py:1526 +#: cps/admin.py:1527 cps/admin.py:1528 +msgid "Update failed:" +msgstr "Aktualizácia zlyhala:" + +#: cps/admin.py:1523 cps/updater.py:389 cps/updater.py:624 cps/updater.py:626 +msgid "HTTP Error" +msgstr "HTTP chyba" + +#: cps/admin.py:1524 cps/updater.py:391 cps/updater.py:628 +msgid "Connection error" +msgstr "Chyba spojenia" + +#: cps/admin.py:1525 cps/updater.py:393 cps/updater.py:630 +msgid "Timeout while establishing connection" +msgstr "Časový limit pre naviazanie spojenia vypršal" + +#: cps/admin.py:1526 cps/updater.py:395 cps/updater.py:632 +msgid "General error" +msgstr "Všeobecná chyba" + +#: cps/admin.py:1527 +msgid "Update file could not be saved in temp dir" +msgstr "Súbor aktualizácie nebolo možné uložiť do dočasného adresára" + +#: cps/admin.py:1528 +msgid "Files could not be replaced during update" +msgstr "Nebolo možné nahradiť súbory počas aktualizácie" + +#: cps/admin.py:1552 +msgid "Failed to extract at least One LDAP User" +msgstr "Extrakcia minimálne jedného LDAP používateľa zlyhala" + +#: cps/admin.py:1597 +msgid "Failed to Create at Least One LDAP User" +msgstr "Vytvorenie minimálne jedného LDAP používateľa zlyhalo" + +#: cps/admin.py:1610 +#, python-format +msgid "Error: %(ldaperror)s" +msgstr "Chyba: %(ldaperror)s" + +#: cps/admin.py:1614 +msgid "Error: No user returned in response of LDAP server" +msgstr "Chyba: Odpoveď LDAP servera neobsahuje žiadneho používateľa" + +#: cps/admin.py:1647 +msgid "At Least One LDAP User Not Found in Database" +msgstr "Minimálne jeden LDAP používateľ sa nenachádza v databáze" + +#: cps/admin.py:1649 +msgid "{} User Successfully Imported" +msgstr "Používateľ bol naimportovaný" + +#: cps/admin.py:1707 +msgid "DB Location is not Valid, Please Enter Correct Path" +msgstr "Umiestnenie databáze nie je platné, zadajte prosím správnu cestu" + +#: cps/admin.py:1727 +msgid "DB is not Writeable" +msgstr "Do databázy nie je možné zapisovať" + +#: cps/admin.py:1740 +msgid "Keyfile Location is not Valid, Please Enter Correct Path" +msgstr "Umiestnenie súboru s kľúčmi nie je platné, zadajte prosím správnu cestu" + +#: cps/admin.py:1744 +msgid "Certfile Location is not Valid, Please Enter Correct Path" +msgstr "Umiestnenie súboru s certifikátmi nie je platné, zadajte prosím správnu cestu" + +#: cps/admin.py:1816 +msgid "Password length has to be between 1 and 40" +msgstr "Heslo musí byť dlhé 1 až 40 znakov" + +#: cps/admin.py:1868 +msgid "Database Settings updated" +msgstr "Nastavenia databáze boli aktualizované" + +#: cps/admin.py:1876 +msgid "Database Configuration" +msgstr "Konfigurácia databázy" + +#: cps/admin.py:1891 cps/web.py:1263 +msgid "Oops! Please complete all fields." +msgstr "Vyplňte prosím všetky polia." + +#: cps/admin.py:1900 +msgid "E-mail is not from valid domain" +msgstr "E-mail nie je z platnej domény" + +#: cps/admin.py:1906 +msgid "Add new user" +msgstr "Pridať nového používateľa" + +#: cps/admin.py:1917 +#, python-format +msgid "User '%(user)s' created" +msgstr "Používateľ '%(user)s' bol vytvorený" + +#: cps/admin.py:1923 +msgid "Oops! An account already exists for this Email. or name." +msgstr "Účet s týmto menom alebo e-mailovou adresou už existuje." + +#: cps/admin.py:1953 +#, python-format +msgid "User '%(nick)s' deleted" +msgstr "Používateľ '%(nick)s' bol zmazaný" + +#: cps/admin.py:1956 +msgid "Can't delete Guest User" +msgstr "Nie je možné zmazať používateľa Hosť" + +#: cps/admin.py:1959 +msgid "No admin user remaining, can't delete user" +msgstr "Nezostáva žiadny používateľ, nie je možné odobrať rolu správcu" + +#: cps/admin.py:2014 cps/web.py:1438 +msgid "Email can't be empty and has to be a valid Email" +msgstr "E-mailová adresa nemôže byť prázdna a musí byť platná" + +#: cps/admin.py:2040 +#, python-format +msgid "User '%(nick)s' updated" +msgstr "Používateľ '%(nick)s' bol aktualizovaný" + +#: cps/converter.py:31 +msgid "not installed" +msgstr "nie je naištalované" + +#: cps/converter.py:32 +msgid "Execution permissions missing" +msgstr "Chýba právo na vykonanie" + +#: cps/db.py:752 cps/search.py:137 cps/web.py:731 +#, python-format +msgid "Custom Column No.%(column)d does not exist in calibre database" +msgstr "Používateľom definovaný stĺpec č. %(column)d v Calibre databáze neexistuje" + +#: cps/db.py:993 cps/templates/config_edit.html:204 +#: cps/templates/config_view_edit.html:62 cps/templates/email_edit.html:41 +#: cps/web.py:558 cps/web.py:592 cps/web.py:665 cps/web.py:692 cps/web.py:973 +#: cps/web.py:1003 cps/web.py:1048 cps/web.py:1076 cps/web.py:1115 +msgid "None" +msgstr "Žiadne" + +#: cps/editbooks.py:111 cps/editbooks.py:899 cps/web.py:525 cps/web.py:1530 +#: cps/web.py:1574 cps/web.py:1619 +msgid "Oops! Selected book is unavailable. File does not exist or is not accessible" +msgstr "Vybraná kniha nie je dostupná. Súbor neexistuje alebo sa k nemu nedá pristupovať" + +#: cps/editbooks.py:155 cps/editbooks.py:1227 +msgid "User has no rights to upload cover" +msgstr "Používateľ nemá práva nahrať obálku knihy" + +#: cps/editbooks.py:175 cps/editbooks.py:720 +msgid "Identifiers are not Case Sensitive, Overwriting Old Identifier" +msgstr "Identifikátory nerozlišujú malé a veľké písmená, prepisuje sa starý identifikátor" + +#: cps/editbooks.py:217 +msgid "Metadata successfully updated" +msgstr "Metadáta boli úspešne aktualizované" + +#: cps/editbooks.py:235 +msgid "Error editing book: {}" +msgstr "Chyba pri úprave knihy: {}" + +#: cps/editbooks.py:292 +#, python-format +msgid "File %(file)s uploaded" +msgstr "Súbor %(file)s bol nahraný" + +#: cps/editbooks.py:320 +msgid "Source or destination format for conversion missing" +msgstr "Chýba zdrojový alebo cieľový formát pre prevod" + +#: cps/editbooks.py:328 +#, python-format +msgid "Book successfully queued for converting to %(book_format)s" +msgstr "Kniha bola úspešne zaradená na prevod do %(book_format)s" + +#: cps/editbooks.py:332 +#, python-format +msgid "There was an error converting this book: %(res)s" +msgstr "Vyskytla sa chyba pri prevode tejto knihy: %(res)s" + +#: cps/editbooks.py:639 +msgid "Uploaded book probably exists in the library, consider to change before upload new: " +msgstr "Nahrávaná kniha pravdepodobne existuje v knižnici, zvážte zmenu pred nahraním novej: " + +#: cps/editbooks.py:694 cps/editbooks.py:1019 +#, python-format +msgid "'%(langname)s' is not a valid language" +msgstr "'%(langname)s' nie je platný jazyk" + +#: cps/editbooks.py:732 cps/editbooks.py:1167 +#, python-format +msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" +msgstr "Prípona súboru '%(ext)s' nemôže byť nahraná na tento server" + +#: cps/editbooks.py:736 cps/editbooks.py:1171 +msgid "File to be uploaded must have an extension" +msgstr "Súbor ktorý sa má nahrať musí mať príponu" + +#: cps/editbooks.py:744 +#, python-format +msgid "File %(filename)s could not saved to temp dir" +msgstr "Súbor %(filename)s nebolo možné uložiť do dočasného adresára" + +#: cps/editbooks.py:764 +#, python-format +msgid "Failed to Move Cover File %(file)s: %(error)s" +msgstr "Zlyhal presun súboru obalky %(file)s: %(error)s" + +#: cps/editbooks.py:821 cps/editbooks.py:823 +msgid "Book Format Successfully Deleted" +msgstr "Kniha s formátom bola úspešne zmazaná" + +#: cps/editbooks.py:830 cps/editbooks.py:832 +msgid "Book Successfully Deleted" +msgstr "Kniha bola úspešne zmazaná" + +#: cps/editbooks.py:884 +msgid "You are missing permissions to delete books" +msgstr "Nemáte oprávnenia na mazanie kníh" + +#: cps/editbooks.py:934 +msgid "edit metadata" +msgstr "upraviť metadáta" + +#: cps/editbooks.py:983 +#, python-format +msgid "%(seriesindex)s is not a valid number, skipping" +msgstr "%(seriesindex)s nie je platné číslo, preskakuje sa" + +#: cps/editbooks.py:1162 +msgid "User has no rights to upload additional file formats" +msgstr "Používateľ nemá práva na nahranie dodatočných súborových formátov" + +#: cps/editbooks.py:1183 +#, python-format +msgid "Failed to create path %(path)s (Permission denied)." +msgstr "Nebolo možné vytvoriť cestu %(path)s (Povolenie zamietnuté)." + +#: cps/editbooks.py:1188 +#, python-format +msgid "Failed to store file %(file)s." +msgstr "Zlyhalo uloženie súboru: %(file)s." + +#: cps/editbooks.py:1212 +#, python-format +msgid "File format %(ext)s added to %(book)s" +msgstr "Súborový formát %(ext)s bol pridaný k %(book)s" + +#: cps/gdrive.py:58 +msgid "Google Drive setup not completed, try to deactivate and activate Google Drive again" +msgstr "Nastavenie Google Drive nie je dokončené, skúste deaktivovať a znovu aktivovať Google Drive" + +#: cps/gdrive.py:95 +msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" +msgstr "Doména spätného volania nie je verifikovaná, prosím, vykonajte kroky na verifikáciu domény v konzole Google vývojára" + +#: cps/helper.py:81 +#, python-format +msgid "%(format)s format not found for book id: %(book)d" +msgstr "Formát %(format)s sa nenašiel pre knihu s ID: %(book)d" + +#: cps/helper.py:88 cps/tasks/convert.py:75 +#, python-format +msgid "%(format)s not found on Google Drive: %(fn)s" +msgstr "%(format)s sa nenašiel na Google Drive: %(fn)s" + +#: cps/helper.py:93 +#, python-format +msgid "%(format)s not found: %(fn)s" +msgstr "%(format)s sa nenašiel: %(fn)s" + +#: cps/helper.py:98 cps/helper.py:223 cps/templates/detail.html:58 +msgid "Send to eReader" +msgstr "Poslať do čítačky" + +#: cps/helper.py:99 cps/helper.py:117 cps/helper.py:225 +msgid "This Email has been sent via Calibre-Web." +msgstr "Tento e-mail bol odoslaný skrz Calibre-Web." + +#: cps/helper.py:115 +msgid "Calibre-Web Test Email" +msgstr "Testovací e-mail Calibre-Web" + +#: cps/helper.py:116 +msgid "Test Email" +msgstr "Testovací e-mail" + +#: cps/helper.py:133 +msgid "Get Started with Calibre-Web" +msgstr "Začnite s aplikáciu Calibre-Web" + +#: cps/helper.py:138 +#, python-format +msgid "Registration Email for user: %(name)s" +msgstr "Registračný e-mail pre používateľa: %(name)s" + +#: cps/helper.py:149 cps/helper.py:155 +#, python-format +msgid "Convert %(orig)s to %(format)s and send to eReader" +msgstr "Previesť %(orig)s na %(format)s a odoslať do čítačky" + +#: cps/helper.py:174 cps/helper.py:178 cps/helper.py:182 +#, python-format +msgid "Send %(format)s to eReader" +msgstr "Odoslať %(format)s do čítačky" + +#: cps/helper.py:222 +#, python-format +msgid "%(book)s send to eReader" +msgstr "%(book)s odoslaná do čítačky" + +#: cps/helper.py:227 +msgid "The requested file could not be read. Maybe wrong permissions?" +msgstr "Požadovaný súbor sa nedá čítať. Možne zlé oprávnenia?" + +#: cps/helper.py:342 +msgid "Read status could not set: {}" +msgstr "Status čítania nie je možné nastaviť: {}" + +#: cps/helper.py:365 +#, python-format +msgid "Deleting bookfolder for book %(id)s failed, path has subfolders: %(path)s" +msgstr "Mazanie zložky pre knihu %(id)s zlyhalo, cesta má vnorené adresáre: %(path)s" + +#: cps/helper.py:371 +#, python-format +msgid "Deleting book %(id)s failed: %(message)s" +msgstr "Mazanie knihy %(id)s zlyhalo: %(message)s" + +#: cps/helper.py:382 +#, python-format +msgid "Deleting book %(id)s from database only, book path in database not valid: %(path)s" +msgstr "Mazanie knihy %(id)s iba z databázy, cesta ku knihe v databáze nie je platná: %(path)s" + +#: cps/helper.py:447 +#, python-format +msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" +msgstr "Premenovanie autora z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" + +#: cps/helper.py:519 cps/helper.py:528 +#, python-format +msgid "File %(file)s not found on Google Drive" +msgstr "Súbor %(file)s sa nenašiel na Google Drive" + +#: cps/helper.py:562 +#, python-format +msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" +msgstr "Zmena názvu knihy z: '%(src)s' na '%(dest)s' zlyhalo s chybou: %(error)s" + +#: cps/helper.py:582 +msgid "Error in rename file in path: {}" +msgstr "Chyba pri premenovaní v ceste: {}" + +#: cps/helper.py:600 +#, python-format +msgid "Book path %(path)s not found on Google Drive" +msgstr "Cesta ku knihe %(path)s sa nenašla na Google Drive" + +#: cps/helper.py:665 +msgid "Found an existing account for this Email address" +msgstr "Pre túto poštovú adresu sa našiel existujúci účet" + +#: cps/helper.py:673 +msgid "This username is already taken" +msgstr "Toto meno používateľa sa už používa" + +#: cps/helper.py:685 +msgid "Invalid Email address format" +msgstr "Neplatný formát poštovej adresy" + +#: cps/helper.py:703 +msgid "Password doesn't comply with password validation rules" +msgstr "Heslo nedodržiava pravidlá validácie" + +#: cps/helper.py:852 +msgid "Python module 'advocate' is not installed but is needed for cover uploads" +msgstr "Python modul 'advocate' nie je nainštalovaný ale je potrebný pre nahrávanie obálok kníh" + +#: cps/helper.py:862 +msgid "Error Downloading Cover" +msgstr "Chyba pri sťahovaní obálky knihy" + +#: cps/helper.py:865 +msgid "Cover Format Error" +msgstr "Chyba formátu obálky knihy" + +#: cps/helper.py:868 +msgid "You are not allowed to access localhost or the local network for cover uploads" +msgstr "Nemáte povolené pristupovať na lokálneho hostiteľa alebo lokálnu sieť na pre nahrávanie obálok kníh" + +#: cps/helper.py:878 +msgid "Failed to create path for cover" +msgstr "Vytváranie cesty k obálke knihy zlyhalo" + +#: cps/helper.py:894 +msgid "Cover-file is not a valid image file, or could not be stored" +msgstr "Súbor obálky knihy nie je platný súbor s obrázkom alebo nie je uložený" + +#: cps/helper.py:905 +msgid "Only jpg/jpeg/png/webp/bmp files are supported as coverfile" +msgstr "Ako súbor obálky knihy sú podporované iba súbory jpg/jpeg/png/webp/bmp" + +#: cps/helper.py:917 +msgid "Invalid cover file content" +msgstr "Neplatný obsah súboru obalky knihy" + +#: cps/helper.py:921 +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:973 +msgid "Unrar binary file not found" +msgstr "Binárny súbor pre Unrar sa nenašiel" + +#: cps/helper.py:984 +msgid "Error executing UnRar" +msgstr "Chyba pri spustení Unrar" + +#: cps/helper.py:1077 +msgid "Cover" +msgstr "Obálka knihy" + +#: cps/helper.py:1079 cps/templates/admin.html:216 +msgid "Queue all books for metadata backup" +msgstr "Zaradiť všetky knihy na zálohovanie metadát" + +#: cps/kobo_auth.py:90 +msgid "Please access Calibre-Web from non localhost to get valid api_endpoint for kobo device" +msgstr "Prosím, pristupujte k Calibre-Web z nie lokálneho hostiteľa aby ste získali platný API koncový bod pre Kobo zariadenie" + +#: cps/kobo_auth.py:116 +msgid "Kobo Setup" +msgstr "Nastavenie Kobo" + +#: cps/oauth_bb.py:77 +#, python-format +msgid "Register with %(provider)s" +msgstr "Zaregistrovať s %(provider)s" + +#: cps/oauth_bb.py:138 cps/remotelogin.py:130 +#, python-format +msgid "Success! You are now logged in as: %(nickname)s" +msgstr "Úspech! Teraz ste prihlásený ako: %(nickname)s" + +#: cps/oauth_bb.py:148 +#, python-format +msgid "Link to %(oauth)s Succeeded" +msgstr "Spojenie na %(oauth)s bolo úspešné" + +#: cps/oauth_bb.py:155 +msgid "Login failed, No User Linked With OAuth Account" +msgstr "Prihlásenie zlyhalo, s OAuth účtom nie je spojený žiadny používateľ" + +#: cps/oauth_bb.py:197 +#, python-format +msgid "Unlink to %(oauth)s Succeeded" +msgstr "Odpojenie z %(oauth)s bolo úspešné" + +#: cps/oauth_bb.py:202 +#, python-format +msgid "Unlink to %(oauth)s Failed" +msgstr "Odpojenie z %(oauth)s zlyhalo" + +#: cps/oauth_bb.py:205 +#, python-format +msgid "Not Linked to %(oauth)s" +msgstr "Nie je pripojený k %(oauth)s" + +#: cps/oauth_bb.py:261 +msgid "Failed to log in with GitHub." +msgstr "Prihlásenie na GitHub zlyhalo." + +#: cps/oauth_bb.py:267 +msgid "Failed to fetch user info from GitHub." +msgstr "Získanie používateľa z GitHub-u zlyhalo." + +#: cps/oauth_bb.py:279 +msgid "Failed to log in with Google." +msgstr "Prihlásenie na Google zlyhalo." + +#: cps/oauth_bb.py:285 +msgid "Failed to fetch user info from Google." +msgstr "Získanie používateľa z Google zlyhalo." + +#: cps/oauth_bb.py:332 +msgid "GitHub Oauth error, please retry later." +msgstr "Chyba GitHub OAuth, skúste to prosím neskôr." + +#: cps/oauth_bb.py:335 +msgid "GitHub Oauth error: {}" +msgstr "Chyba GitHub OAuth: {}" + +#: cps/oauth_bb.py:356 +msgid "Google Oauth error, please retry later." +msgstr "Chyba Google OAuth, skúste to prosím neskôr." + +#: cps/oauth_bb.py:359 +msgid "Google Oauth error: {}" +msgstr "Chyba Google OAuth: {}" + +#: cps/opds.py:274 +msgid "{} Stars" +msgstr "{} Hviezdičiek" + +#: cps/remotelogin.py:62 cps/templates/layout.html:67 +#: cps/templates/layout.html:101 cps/templates/login.html:4 +#: cps/templates/login.html:21 cps/web.py:1326 +msgid "Login" +msgstr "Prihlásiť sa" + +#: cps/remotelogin.py:74 cps/remotelogin.py:108 +msgid "Token not found" +msgstr "Žetón sa nenašiel" + +#: cps/remotelogin.py:83 cps/remotelogin.py:116 +msgid "Token has expired" +msgstr "Žetón expiroval" + +#: cps/remotelogin.py:92 +msgid "Success! Please return to your device" +msgstr "Úspech! Vráťte sa k vašemu zariadeniu" + +#: cps/render_template.py:42 cps/web.py:414 +msgid "Books" +msgstr "Knihy" + +#: cps/render_template.py:44 +msgid "Show recent books" +msgstr "Zobraziť nedávno čítané knihy" + +#: cps/render_template.py:45 cps/templates/index.xml:26 +msgid "Hot Books" +msgstr "Horúce knihy" + +#: cps/render_template.py:47 +msgid "Show Hot Books" +msgstr "Zobraziť horúce knihy" + +#: cps/render_template.py:49 cps/render_template.py:54 +msgid "Downloaded Books" +msgstr "Stiahnuté knihy" + +#: cps/render_template.py:51 cps/render_template.py:56 +#: cps/templates/user_table.html:167 +msgid "Show Downloaded Books" +msgstr "Zobraziť stiahnuté knihy" + +#: cps/render_template.py:59 cps/templates/index.xml:33 cps/web.py:429 +msgid "Top Rated Books" +msgstr "Najlepšie hodnotené knihy" + +#: cps/render_template.py:61 cps/templates/user_table.html:161 +msgid "Show Top Rated Books" +msgstr "Zobraziť najlepšie hodnotené knihy" + +#: cps/render_template.py:62 cps/templates/index.xml:55 +#: cps/templates/index.xml:59 cps/web.py:750 +msgid "Read Books" +msgstr "Prečítané knihy" + +#: cps/render_template.py:64 +msgid "Show Read and Unread" +msgstr "Zobraziť prečítané a neprečítané" + +#: cps/render_template.py:66 cps/templates/index.xml:62 +#: cps/templates/index.xml:66 cps/web.py:753 +msgid "Unread Books" +msgstr "Neprečítané knihy" + +#: cps/render_template.py:68 +msgid "Show unread" +msgstr "Zobraziť neprečítané" + +#: cps/render_template.py:69 +msgid "Discover" +msgstr "Objaviť" + +#: cps/render_template.py:71 cps/templates/index.xml:51 +#: cps/templates/user_table.html:159 cps/templates/user_table.html:162 +msgid "Show Random Books" +msgstr "Zobraziť náhodné knihy" + +#: cps/render_template.py:72 cps/templates/book_table.html:67 +#: cps/templates/index.xml:84 cps/web.py:1119 +msgid "Categories" +msgstr "Kategórie" + +#: cps/render_template.py:74 cps/templates/user_table.html:158 +msgid "Show Category Section" +msgstr "Zobraziť časť Kategórie" + +#: cps/render_template.py:75 cps/templates/book_edit.html:91 +#: cps/templates/book_table.html:68 cps/templates/index.xml:91 +#: cps/templates/search_form.html:69 cps/web.py:1009 cps/web.py:1021 +msgid "Series" +msgstr "Série" + +#: cps/render_template.py:77 cps/templates/user_table.html:157 +msgid "Show Series Section" +msgstr "Zobraziť časť Série" + +#: cps/render_template.py:78 cps/templates/book_table.html:66 +#: cps/templates/index.xml:70 +msgid "Authors" +msgstr "Autori" + +#: cps/render_template.py:80 cps/templates/user_table.html:160 +msgid "Show Author Section" +msgstr "Zobraziť časť Autori" + +#: cps/render_template.py:82 cps/templates/book_table.html:72 +#: cps/templates/index.xml:77 cps/web.py:977 +msgid "Publishers" +msgstr "Vydavatelia" + +#: cps/render_template.py:84 cps/templates/user_table.html:163 +msgid "Show Publisher Section" +msgstr "Zobraziť časť vydavatelia" + +#: cps/render_template.py:85 cps/templates/book_table.html:70 +#: cps/templates/index.xml:98 cps/templates/search_form.html:107 +#: cps/web.py:1091 +msgid "Languages" +msgstr "Jazyky" + +#: cps/render_template.py:88 cps/templates/user_table.html:155 +msgid "Show Language Section" +msgstr "Zobraziť časť Jazyky" + +#: cps/render_template.py:89 cps/templates/index.xml:105 +msgid "Ratings" +msgstr "Hodnotenia" + +#: cps/render_template.py:91 cps/templates/user_table.html:164 +msgid "Show Ratings Section" +msgstr "Zobraziť časť Hodnotenia" + +#: cps/render_template.py:92 cps/templates/index.xml:113 +msgid "File formats" +msgstr "Súborové formáty" + +#: cps/render_template.py:94 cps/templates/user_table.html:165 +msgid "Show File Formats Section" +msgstr "Zobraziť časť Súborové formáty" + +#: cps/render_template.py:96 cps/web.py:776 +msgid "Archived Books" +msgstr "Archivované knihy" + +#: cps/render_template.py:98 cps/templates/user_table.html:166 +msgid "Show Archived Books" +msgstr "Zobraziť archivované knihy" + +#: cps/render_template.py:101 cps/web.py:807 +msgid "Books List" +msgstr "Zoznam kníh" + +#: cps/render_template.py:103 cps/templates/user_table.html:168 +msgid "Show Books List" +msgstr "Zobraziť zoznam kníh" + +#: cps/search.py:48 cps/search.py:398 cps/templates/book_edit.html:236 +#: cps/templates/feed.xml:34 cps/templates/index.xml:12 +#: cps/templates/layout.html:46 cps/templates/layout.html:49 +#: cps/templates/search_form.html:226 +msgid "Search" +msgstr "Hľadať" + +#: cps/search.py:188 +msgid "Published after " +msgstr "Vydané po " + +#: cps/search.py:195 +msgid "Published before " +msgstr "Vydané pred " + +#: cps/search.py:217 +#, python-format +msgid "Rating <= %(rating)s" +msgstr "Hodnotenie <= %(rating)s" + +#: cps/search.py:219 +#, python-format +msgid "Rating >= %(rating)s" +msgstr "Hodnotenie >= %(rating)s" + +#: cps/search.py:221 +#, python-format +msgid "Read Status = %(status)s" +msgstr "Status čítania = %(status)s" + +#: cps/search.py:323 +msgid "Error on search for custom columns, please restart Calibre-Web" +msgstr "Chyba pri čítaní používateľom definovaných stĺpcov, reštartujte prosím Calibre-Web" + +#: cps/search.py:342 cps/search.py:374 cps/templates/layout.html:57 +msgid "Advanced Search" +msgstr "Rozšírené hľadanie" + +#: cps/shelf.py:49 cps/shelf.py:103 +msgid "Invalid shelf specified" +msgstr "Vybraná neplatná polica" + +#: cps/shelf.py:55 +msgid "Sorry you are not allowed to add a book to that shelf" +msgstr "Ľutujeme, do tejto police nemôžete pridať knihu" + +#: cps/shelf.py:64 +#, python-format +msgid "Book is already part of the shelf: %(shelfname)s" +msgstr "Kniha je už na polici: %(shelfname)s" + +#: cps/shelf.py:89 +#, python-format +msgid "Book has been added to shelf: %(sname)s" +msgstr "Kniha bola pridaná do police: %(sname)s" + +#: cps/shelf.py:108 +msgid "You are not allowed to add a book to the shelf" +msgstr "Nemáte povolené pridať knihu do tejto police" + +#: cps/shelf.py:126 +#, python-format +msgid "Books are already part of the shelf: %(name)s" +msgstr "Táto polica už obssahuje knihu: %(name)s" + +#: cps/shelf.py:138 +#, python-format +msgid "Books have been added to shelf: %(sname)s" +msgstr "Do police sa pridala kniha: %(sname)s" + +#: cps/shelf.py:145 +#, python-format +msgid "Could not add books to shelf: %(sname)s" +msgstr "Nemôžem pridať knihu do police: %(sname)s" + +#: cps/shelf.py:191 +#, python-format +msgid "Book has been removed from shelf: %(sname)s" +msgstr "Kniha bola odstránená z police: %(sname)s" + +#: cps/shelf.py:200 +msgid "Sorry you are not allowed to remove a book from this shelf" +msgstr "Ľutujeme, ale nie ste oprávnený odstrániť knihu z tejto police" + +#: cps/shelf.py:210 cps/templates/layout.html:157 +msgid "Create a Shelf" +msgstr "Vytvoriť policu" + +#: cps/shelf.py:218 +msgid "Sorry you are not allowed to edit this shelf" +msgstr "Ľutujeme, ale nie ste oprávnený upravovať túto policu" + +#: cps/shelf.py:220 +msgid "Edit a shelf" +msgstr "Upraviť policu" + +#: cps/shelf.py:229 +msgid "Error deleting Shelf" +msgstr "Chyba pri mazaní police" + +#: cps/shelf.py:231 +msgid "Shelf successfully deleted" +msgstr "Polica bol úspešne vymazaná" + +#: cps/shelf.py:281 +#, python-format +msgid "Change order of Shelf: '%(name)s'" +msgstr "Zmeniť poradie police: '%(name)s'" + +#: cps/shelf.py:316 +msgid "Sorry you are not allowed to create a public shelf" +msgstr "Ľutujeme, ale nie ste oprávnený vytvoriť verejnú policu" + +#: cps/shelf.py:333 +#, python-format +msgid "Shelf %(title)s created" +msgstr "Polica %(title)s bola vytvorená" + +#: cps/shelf.py:336 +#, python-format +msgid "Shelf %(title)s changed" +msgstr "Polica %(title)s bola zmenená" + +#: cps/shelf.py:350 +msgid "There was an error" +msgstr "Nastala chyba" + +#: cps/shelf.py:372 +#, python-format +msgid "A public shelf with the name '%(title)s' already exists." +msgstr "Verejná polica s názvom '%(title)s' už existuje." + +#: cps/shelf.py:383 +#, python-format +msgid "A private shelf with the name '%(title)s' already exists." +msgstr "Súkromná polica s názvom '%(title)s' už existuje." + +#: cps/shelf.py:465 +#, python-format +msgid "Shelf: '%(name)s'" +msgstr "Polica: '%(name)s'" + +#: cps/shelf.py:469 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "Chyba pri otváraní police. Polica neexistuje alebo je neprístupná" + +#: cps/tasks_status.py:46 cps/templates/layout.html:88 +#: cps/templates/tasks.html:7 +msgid "Tasks" +msgstr "Úlohy" + +#: cps/tasks_status.py:62 +msgid "Waiting" +msgstr "Čakajúca" + +#: cps/tasks_status.py:64 +msgid "Failed" +msgstr "Neúspešná" + +#: cps/tasks_status.py:66 +msgid "Started" +msgstr "Spustená" + +#: cps/tasks_status.py:68 +msgid "Finished" +msgstr "Hotová" + +#: cps/tasks_status.py:70 +msgid "Ended" +msgstr "Ukončená" + +#: cps/tasks_status.py:72 +msgid "Cancelled" +msgstr "Zrušená" + +#: cps/tasks_status.py:74 +msgid "Unknown Status" +msgstr "Neznámy stav" + +#: cps/updater.py:431 cps/updater.py:442 cps/updater.py:543 cps/updater.py:558 +msgid "Unexpected data while reading update information" +msgstr "Čítanie aktualizačnej informácie narazilo na neočakávané údaje" + +#: cps/updater.py:438 cps/updater.py:550 +msgid "No update available. You already have the latest version installed" +msgstr "Nie je dostupná žiadna aktualizácia. Máte nainštalovanú najnovšiu verziu" + +#: cps/updater.py:456 +msgid "A new update is available. Click on the button below to update to the latest version." +msgstr "Je dostupná nová aktualizácia. Ak chcete aktualizovať na najnovšiu verziu, kliknite na tlačidlo dolu." + +#: cps/updater.py:474 +msgid "Could not fetch update information" +msgstr "Nebolo možné stiahnuť aktualizačnú informáciu" + +#: cps/updater.py:484 +msgid "Click on the button below to update to the latest stable version." +msgstr "Ak chcete aktualizovať na najnovšiu stabilnú verziu, kliknite na tlačidlo dolu." + +#: cps/updater.py:493 cps/updater.py:507 cps/updater.py:518 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "Je dostupná nová aktualizácia. Kliknite na tlačidlo dolu, ak chcete aktualizovať na verziu: %(version)s" + +#: cps/updater.py:536 +msgid "No release information available" +msgstr "Nie je dostupná informácia o vydaní" + +#: cps/templates/index.html:6 cps/web.py:441 +msgid "Discover (Random Books)" +msgstr "Objaviť (Náhodné knihy)" + +#: cps/web.py:477 +msgid "Hot Books (Most Downloaded)" +msgstr "Horúce knihy (Najviac sťahované)" + +#: cps/web.py:508 +#, python-format +msgid "Downloaded books by %(user)s" +msgstr "Knihy stiahnuté: %(user)s" + +#: cps/web.py:541 +#, python-format +msgid "Author: %(name)s" +msgstr "Author: %(name)s" + +#: cps/web.py:577 +#, python-format +msgid "Publisher: %(name)s" +msgstr "Vydavateľ: %(name)s" + +#: cps/web.py:605 +#, python-format +msgid "Series: %(serie)s" +msgstr "Série: %(serie)s" + +#: cps/web.py:620 +msgid "Rating: None" +msgstr "Hodnotenie: Žiadne" + +#: cps/web.py:629 +#, python-format +msgid "Rating: %(rating)s stars" +msgstr "Hodnotenie: %(rating)s hviezdičiek" + +#: cps/web.py:645 +#, python-format +msgid "File format: %(format)s" +msgstr "Súborový formát: %(format)s" + +#: cps/web.py:682 +#, python-format +msgid "Category: %(name)s" +msgstr "Kategória: %(name)s" + +#: cps/web.py:711 +#, python-format +msgid "Language: %(name)s" +msgstr "Jazyk: %(name)s" + +#: cps/templates/admin.html:16 cps/web.py:949 +msgid "Downloads" +msgstr "Stiahnutia" + +#: cps/web.py:1051 +msgid "Ratings list" +msgstr "Zoznam hodnotení" + +#: cps/web.py:1078 +msgid "File formats list" +msgstr "Zoznam súborových formátov" + +#: cps/web.py:1226 +msgid "Please configure the SMTP mail settings first..." +msgstr "Najskôr nastavte poštový server, prosím..." + +#: cps/web.py:1233 +#, python-format +msgid "Success! Book queued for sending to %(eReadermail)s" +msgstr "Úspech! Kniha bola zaradená na odoslanie do %(eReadermail)s" + +#: cps/web.py:1236 +#, python-format +msgid "Oops! There was an error sending book: %(res)s" +msgstr "Vyskytla sa chyba pri posielaní knihy: %(res)s" + +#: cps/web.py:1238 +msgid "Oops! Please update your profile with a valid eReader Email." +msgstr "Nastavte vo vašom profile platnú e-mailovú adresu pre vašu čítačku." + +#: cps/web.py:1254 +msgid "Please wait one minute to register next user" +msgstr "Počkajte, prosím minútku pred registráciou ďalšieho používateľa" + +#: cps/templates/layout.html:68 cps/templates/layout.html:102 +#: cps/templates/login.html:27 cps/templates/register.html:17 cps/web.py:1255 +#: cps/web.py:1260 cps/web.py:1264 cps/web.py:1270 cps/web.py:1290 +#: cps/web.py:1294 cps/web.py:1307 cps/web.py:1310 +msgid "Register" +msgstr "Registrovať" + +#: cps/web.py:1259 cps/web.py:1306 +msgid "Oops! Email server is not configured, please contact your administrator." +msgstr "Poštový server nie je nastavený, kontaktujte prosím správcu." + +#: cps/web.py:1292 +msgid "Oops! Your Email is not allowed." +msgstr "Vaša e-mailová adresa nie je povolená." + +#: cps/web.py:1295 +msgid "Success! Confirmation Email has been sent." +msgstr "Úspech! Potvrdzujúci e-mail bol odoslaný." + +#: cps/web.py:1341 cps/web.py:1359 +msgid "Cannot activate LDAP authentication" +msgstr "Nie je možné aktivovať LDAP autentifikáciu" + +#: cps/web.py:1353 +msgid "Please wait one minute before next login" +msgstr "Počkajte, prosím minútku pred opätovným prihlásením" + +#: cps/web.py:1369 +#, python-format +msgid "you are now logged in as: '%(nickname)s'" +msgstr "ste prihlásený ako: '%(nickname)s'" + +#: cps/web.py:1376 +#, python-format +msgid "Fallback Login as: '%(nickname)s', LDAP Server not reachable, or user not known" +msgstr "Záložné prihlásenie ako: '%(nickname)s', LDAP server je nedostupný alebo používateľ je neznámy" + +#: cps/web.py:1381 +#, python-format +msgid "Could not login: %(message)s" +msgstr "Nemôžem prihlásiť: %(message)s" + +#: cps/web.py:1385 cps/web.py:1410 +msgid "Wrong Username or Password" +msgstr "Nesprávne používateľské meno alebo heslo" + +#: cps/web.py:1392 +msgid "New Password was send to your email address" +msgstr "Na vašu e-mailovú adresu bolo odoslané nové heslo" + +#: cps/web.py:1396 +msgid "An unknown error occurred. Please try again later." +msgstr "Vyskytla sa neočakávaná chyba. Prosím, skúste to opäť neskôr." + +#: cps/web.py:1398 +msgid "Please enter valid username to reset password" +msgstr "Na resetovanie hesla zadajte platné používateľské meno" + +#: cps/web.py:1406 +#, python-format +msgid "You are now logged in as: '%(nickname)s'" +msgstr "Teraz ste prihlásený ako: '%(nickname)s'" + +#: cps/web.py:1464 cps/web.py:1514 +#, python-format +msgid "%(name)s's Profile" +msgstr "Profil pre %(name)s" + +#: cps/web.py:1480 +msgid "Success! Profile Updated" +msgstr "Úspech! Profil bol aktualizovaný" + +#: cps/web.py:1484 +msgid "Oops! An account already exists for this Email." +msgstr "Účet s touto e-mailovou adresou už existuje." + +#: cps/services/gmail.py:58 +msgid "Found no valid gmail.json file with OAuth information" +msgstr "Nenašiel sa súbor gmail.json s OAuth informáciou" + +#: cps/tasks/convert.py:92 +#, python-format +msgid "%(book)s send to E-Reader" +msgstr "%(book)s bol odoslaný do čítačky" + +#: cps/tasks/convert.py:153 +#, python-format +msgid "Calibre ebook-convert %(tool)s not found" +msgstr "Nástroj pre prevod ebook-convert %(tool)s sa nenašiel" + +#: cps/tasks/convert.py:186 +#, python-format +msgid "%(format)s format not found on disk" +msgstr "Formát %(format)s sa nenachádza na disku" + +#: cps/tasks/convert.py:190 +msgid "Ebook converter failed with unknown error" +msgstr "Prevádzač e-kníh zlyhal s neznámou chybou" + +#: cps/tasks/convert.py:202 +#, python-format +msgid "Kepubify-converter failed: %(error)s" +msgstr "Prevádzač Kepubify zlyhal: %(error)s" + +#: cps/tasks/convert.py:224 +#, python-format +msgid "Converted file not found or more than one file in folder %(folder)s" +msgstr "Prevádzaný súbor sa nenašiel alebo viac ako jeden súbor v zložke %(folder)s" + +#: cps/tasks/convert.py:247 +#, python-format +msgid "Ebook-converter failed: %(error)s" +msgstr "Prevádzač e-kníh zlyhal: %(error)s" + +#: cps/tasks/convert.py:270 +#, python-format +msgid "Calibre failed with error: %(error)s" +msgstr "Calibre zlyhal s chybou: %(error)s" + +#: cps/tasks/convert.py:275 +msgid "Convert" +msgstr "Previesť" + +#: cps/tasks/database.py:28 +msgid "Reconnecting Calibre database" +msgstr "Spojenie s databázou sa znovu naväzuje" + +#: cps/tasks/mail.py:269 +msgid "E-mail" +msgstr "E-mail" + +#: cps/tasks/metadata_backup.py:46 +msgid "Backing up Metadata" +msgstr "Zálohovať metadáta" + +#: cps/tasks/thumbnail.py:96 +#, python-format +msgid "Generated %(count)s cover thumbnails" +msgstr "Bolo vygenerovaných %(count)s náhľadov obálok kníh" + +#: cps/tasks/thumbnail.py:230 cps/tasks/thumbnail.py:443 +#: cps/tasks/thumbnail.py:511 +msgid "Cover Thumbnails" +msgstr "Náhľad obálky knihy" + +#: cps/tasks/thumbnail.py:289 +msgid "Generated {0} series thumbnails" +msgstr "Bolo vygenerovaných {0} náhľadov pre série" + +#: cps/tasks/thumbnail.py:454 +msgid "Clearing cover thumbnail cache" +msgstr "Vyrovnávacia pamäť pre obálky kníh sa vyprázdňuje" + +#: cps/tasks/upload.py:38 cps/templates/admin.html:20 +#: cps/templates/layout.html:81 cps/templates/user_table.html:145 +msgid "Upload" +msgstr "Nahrať" + +#: cps/templates/admin.html:9 +msgid "Users" +msgstr "Používatelia" + +#: cps/templates/admin.html:13 cps/templates/login.html:9 +#: cps/templates/login.html:10 cps/templates/register.html:9 +#: cps/templates/user_edit.html:10 cps/templates/user_table.html:134 +msgid "Username" +msgstr "Meno používateľa" + +#: cps/templates/admin.html:14 cps/templates/register.html:14 +#: cps/templates/user_edit.html:15 cps/templates/user_table.html:135 +msgid "Email" +msgstr "E-mail" + +#: cps/templates/admin.html:15 cps/templates/user_edit.html:28 +msgid "Send to eReader Email" +msgstr "Poslať na e-mail čítačky" + +#: cps/templates/admin.html:17 cps/templates/layout.html:91 +#: cps/templates/user_table.html:143 +msgid "Admin" +msgstr "Správca" + +#: cps/templates/admin.html:18 cps/templates/login.html:13 +#: cps/templates/login.html:14 cps/templates/user_edit.html:23 +msgid "Password" +msgstr "Heslo" + +#: cps/templates/admin.html:22 cps/templates/detail.html:20 +#: cps/templates/detail.html:33 cps/templates/shelf.html:8 +#: cps/templates/user_table.html:146 +msgid "Download" +msgstr "Stiahnuť" + +#: cps/templates/admin.html:23 +msgid "View Books" +msgstr "Zobraziť knihy" + +#: cps/templates/admin.html:24 cps/templates/user_table.html:131 +#: cps/templates/user_table.html:148 +msgid "Edit" +msgstr "Upraviť" + +#: cps/templates/admin.html:25 cps/templates/book_edit.html:17 +#: cps/templates/book_table.html:100 cps/templates/modal_dialogs.html:63 +#: cps/templates/modal_dialogs.html:116 cps/templates/user_edit.html:67 +#: cps/templates/user_table.html:149 +msgid "Delete" +msgstr "Zmazať" + +#: cps/templates/admin.html:26 +msgid "Public Shelf" +msgstr "Verejná polica" + +#: cps/templates/admin.html:55 +msgid "Import LDAP Users" +msgstr "Importovať LDAP používateľov" + +#: cps/templates/admin.html:62 +msgid "Email Server Settings" +msgstr "Nastavenia poštového servera" + +#: cps/templates/admin.html:67 cps/templates/email_edit.html:31 +msgid "SMTP Hostname" +msgstr "SMTP hostiteľ" + +#: cps/templates/admin.html:71 cps/templates/email_edit.html:35 +msgid "SMTP Port" +msgstr "SMTP port" + +#: cps/templates/admin.html:75 cps/templates/email_edit.html:39 +msgid "Encryption" +msgstr "Šifrovanie" + +#: cps/templates/admin.html:79 cps/templates/email_edit.html:47 +msgid "SMTP Login" +msgstr "SMTP prihlásenie" + +#: cps/templates/admin.html:83 cps/templates/admin.html:94 +#: cps/templates/email_edit.html:55 +msgid "From Email" +msgstr "Z poštovej adresy" + +#: cps/templates/admin.html:90 +msgid "Email Service" +msgstr "Poštová služba" + +#: cps/templates/admin.html:91 +msgid "Gmail via Oauth2" +msgstr "GMail skrz OAuthľ" + +#: cps/templates/admin.html:106 +msgid "Configuration" +msgstr "Konfigurácia" + +#: cps/templates/admin.html:109 +msgid "Calibre Database Directory" +msgstr "Adresár databázy Calibre" + +#: cps/templates/admin.html:113 cps/templates/config_edit.html:68 +msgid "Log Level" +msgstr "Úroveň denníka" + +#: cps/templates/admin.html:117 +msgid "Port" +msgstr "Port" + +#: cps/templates/admin.html:122 +msgid "External Port" +msgstr "Externý port" + +#: cps/templates/admin.html:129 cps/templates/config_view_edit.html:28 +msgid "Books per Page" +msgstr "Kníh na stránku" + +#: cps/templates/admin.html:133 +msgid "Uploads" +msgstr "Nahrávania" + +#: cps/templates/admin.html:137 +msgid "Anonymous Browsing" +msgstr "Anonymné prezeranie" + +#: cps/templates/admin.html:141 +msgid "Public Registration" +msgstr "Verejná registrácia" + +#: cps/templates/admin.html:145 +msgid "Magic Link Remote Login" +msgstr "Vzdialené prihlásenie Magic Link" + +#: cps/templates/admin.html:149 +msgid "Reverse Proxy Login" +msgstr "Prihlásenie na reverznú proxy" + +#: cps/templates/admin.html:154 cps/templates/config_edit.html:173 +msgid "Reverse Proxy Header Name" +msgstr "Meno hlavičky pre reverznú proxy" + +#: cps/templates/admin.html:159 +msgid "Edit Calibre Database Configuration" +msgstr "Upraviť configuráciu databázy Calibre" + +#: cps/templates/admin.html:160 +msgid "Edit Basic Configuration" +msgstr "Upraviť základnú konfiguráciu" + +#: cps/templates/admin.html:161 +msgid "Edit UI Configuration" +msgstr "Upraviť konfiguráciu používateľského rozhrania" + +#: cps/templates/admin.html:167 +msgid "Scheduled Tasks" +msgstr "Naplánované úlohy" + +#: cps/templates/admin.html:170 cps/templates/schedule_edit.html:12 +#: cps/templates/tasks.html:18 +msgid "Start Time" +msgstr "Začiatok" + +#: cps/templates/admin.html:174 cps/templates/schedule_edit.html:20 +msgid "Maximum Duration" +msgstr "Maximálne trvanie" + +#: cps/templates/admin.html:178 cps/templates/schedule_edit.html:29 +msgid "Generate Thumbnails" +msgstr "Generovať náhľady" + +#: cps/templates/admin.html:182 +msgid "Generate series cover thumbnails" +msgstr "Generovať náhľady obálok pre série" + +#: cps/templates/admin.html:186 cps/templates/admin.html:208 +#: cps/templates/schedule_edit.html:37 +msgid "Reconnect Calibre Database" +msgstr "Znovu naviazať spojenie s Calibre databázou" + +#: cps/templates/admin.html:190 cps/templates/schedule_edit.html:41 +msgid "Generate Metadata Backup Files" +msgstr "Vygenerovať záložné súbory pre metadáta" + +#: cps/templates/admin.html:197 +msgid "Refresh Thumbnail Cache" +msgstr "Obnoviť vyrovnávaciu pamäť pre náhľady" + +#: cps/templates/admin.html:203 +msgid "Administration" +msgstr "Správa" + +#: cps/templates/admin.html:204 +msgid "Download Debug Package" +msgstr "Stiahnuť ladiaci balík" + +#: cps/templates/admin.html:205 +msgid "View Logs" +msgstr "Zobraziť denníky" + +#: cps/templates/admin.html:211 +msgid "Restart" +msgstr "Reštart" + +#: cps/templates/admin.html:212 +msgid "Shutdown" +msgstr "Vypnúť" + +#: cps/templates/admin.html:221 +msgid "Version Information" +msgstr "Informácia o verzii" + +#: cps/templates/admin.html:225 +msgid "Version" +msgstr "Verzia" + +#: cps/templates/admin.html:226 +msgid "Details" +msgstr "Detaily" + +#: cps/templates/admin.html:232 +msgid "Current Version" +msgstr "Aktuálna verzia" + +#: cps/templates/admin.html:239 +msgid "Check for Update" +msgstr "Kontrola aktualizácie" + +#: cps/templates/admin.html:240 +msgid "Perform Update" +msgstr "Vykonať aktualizáciu" + +#: cps/templates/admin.html:253 +msgid "Are you sure you want to restart?" +msgstr "Skutočne chcete reštartovať?" + +#: cps/templates/admin.html:258 cps/templates/admin.html:272 +#: cps/templates/admin.html:292 cps/templates/config_db.html:70 +msgid "OK" +msgstr "V poriadku" + +#: cps/templates/admin.html:259 cps/templates/admin.html:273 +#: cps/templates/book_edit.html:214 cps/templates/book_table.html:127 +#: cps/templates/config_db.html:54 cps/templates/config_edit.html:410 +#: cps/templates/config_view_edit.html:175 cps/templates/modal_dialogs.html:64 +#: cps/templates/modal_dialogs.html:99 cps/templates/modal_dialogs.html:117 +#: cps/templates/modal_dialogs.html:135 cps/templates/schedule_edit.html:45 +#: cps/templates/shelf_edit.html:27 cps/templates/tasks.html:46 +#: cps/templates/user_edit.html:144 +msgid "Cancel" +msgstr "Zrušiť" + +#: cps/templates/admin.html:271 +msgid "Are you sure you want to shutdown?" +msgstr "Skutočne chcete vypnúťť?" + +#: cps/templates/admin.html:283 +msgid "Updating, please do not reload this page" +msgstr "Aktualizuje sa, neskúšajte znovu načítať stránku" + +#: cps/templates/author.html:15 +msgid "via" +msgstr "cez" + +#: cps/templates/author.html:23 +msgid "In Library" +msgstr "V knižnici" + +#: cps/templates/author.html:26 cps/templates/index.html:74 +#: cps/templates/search.html:31 cps/templates/shelf.html:20 +msgid "Sort according to book date, newest first" +msgstr "Triediť podľa dátumu knihy, najnovšie najskôr" + +#: cps/templates/author.html:27 cps/templates/index.html:75 +#: cps/templates/search.html:32 cps/templates/shelf.html:21 +msgid "Sort according to book date, oldest first" +msgstr "Triediť podľa dátumu knihy, najstaršie najskôr" + +#: cps/templates/author.html:28 cps/templates/index.html:76 +#: cps/templates/search.html:33 cps/templates/shelf.html:22 +msgid "Sort title in alphabetical order" +msgstr "Triediť podľa názvu v abecednom poradí" + +#: cps/templates/author.html:29 cps/templates/index.html:77 +#: cps/templates/search.html:34 cps/templates/shelf.html:23 +msgid "Sort title in reverse alphabetical order" +msgstr "Triediť podľa názvu v obrátenom abecednom poradí" + +#: cps/templates/author.html:30 cps/templates/index.html:80 +#: cps/templates/search.html:37 cps/templates/shelf.html:26 +msgid "Sort according to publishing date, newest first" +msgstr "Triediť podľa dátumu vydania, najnovšie najskôr" + +#: cps/templates/author.html:31 cps/templates/index.html:81 +#: cps/templates/search.html:38 cps/templates/shelf.html:27 +msgid "Sort according to publishing date, oldest first" +msgstr "Triediť podľa dátumu vydania, najstaršie najskôr" + +#: cps/templates/author.html:56 cps/templates/author.html:115 +#: cps/templates/index.html:30 cps/templates/index.html:113 +#: cps/templates/search.html:67 cps/templates/shelf.html:55 +msgid "reduce" +msgstr "znížiť" + +#: cps/templates/author.html:99 +msgid "More by" +msgstr "Viac od" + +#: cps/templates/book_edit.html:11 +msgid "Delete Book" +msgstr "Zmazať knihu" + +#: cps/templates/book_edit.html:14 +msgid "Delete formats:" +msgstr "Zmazať formáty:" + +#: cps/templates/book_edit.html:25 +msgid "Convert book format:" +msgstr "Previesť knihu s formátom:" + +#: cps/templates/book_edit.html:30 +msgid "Convert from:" +msgstr "Previesť z:" + +#: cps/templates/book_edit.html:32 cps/templates/book_edit.html:39 +msgid "select an option" +msgstr "vybrať možnosť" + +#: cps/templates/book_edit.html:37 +msgid "Convert to:" +msgstr "Previesť do:" + +#: cps/templates/book_edit.html:46 +msgid "Convert book" +msgstr "Previesť knihu" + +#: cps/templates/book_edit.html:56 cps/templates/search_form.html:8 +msgid "Book Title" +msgstr "Názov knihy" + +#: cps/templates/book_edit.html:63 cps/templates/book_edit.html:271 +#: cps/templates/book_edit.html:289 cps/templates/search_form.html:12 +msgid "Author" +msgstr "Autor" + +#: cps/templates/book_edit.html:68 cps/templates/book_edit.html:276 +#: cps/templates/book_edit.html:291 cps/templates/search_form.html:153 +msgid "Description" +msgstr "Popis" + +#: cps/templates/book_edit.html:73 +msgid "Identifiers" +msgstr "Identifikátory" + +#: cps/templates/book_edit.html:77 cps/templates/book_edit.html:300 +msgid "Identifier Type" +msgstr "Typ identifikátora" + +#: cps/templates/book_edit.html:78 cps/templates/book_edit.html:301 +msgid "Identifier Value" +msgstr "Hodnota identifikátora" + +#: cps/templates/book_edit.html:79 cps/templates/book_edit.html:302 +#: cps/templates/user_table.html:24 +msgid "Remove" +msgstr "Odstrániť" + +#: cps/templates/book_edit.html:83 +msgid "Add Identifier" +msgstr "Pridať identifikátor" + +#: cps/templates/book_edit.html:87 cps/templates/search_form.html:51 +msgid "Tags" +msgstr "Značka" + +#: cps/templates/book_edit.html:95 +msgid "Series ID" +msgstr "ID série" + +#: cps/templates/book_edit.html:99 +msgid "Rating" +msgstr "Hodnotenie" + +#: cps/templates/book_edit.html:104 +msgid "Fetch Cover from URL (JPEG - Image will be downloaded and stored in database)" +msgstr "Načítať obálku z URL (JPEG-obrázok sa stiahne a uloží v databáze)" + +#: cps/templates/book_edit.html:108 +msgid "Upload Cover from Local Disk" +msgstr "Nahrať obálku knihy z miestneho disku" + +#: cps/templates/book_edit.html:113 +msgid "Published Date" +msgstr "Dátum vydania" + +#: cps/templates/book_edit.html:122 cps/templates/book_edit.html:273 +#: cps/templates/book_edit.html:290 cps/templates/detail.html:192 +#: cps/templates/listenmp3.html:102 cps/templates/search_form.html:16 +msgid "Publisher" +msgstr "Vydavateľ" + +#: cps/templates/book_edit.html:126 cps/templates/detail.html:157 +#: cps/templates/listenmp3.html:69 cps/templates/user_edit.html:33 +msgid "Language" +msgstr "Jazyk" + +#: cps/templates/book_edit.html:136 cps/templates/search_form.html:45 +#: cps/templates/search_form.html:164 +msgid "Yes" +msgstr "Áno" + +#: cps/templates/book_edit.html:137 cps/templates/search_form.html:46 +#: cps/templates/search_form.html:165 +msgid "No" +msgstr "Nie" + +#: cps/templates/book_edit.html:201 +msgid "Upload Format" +msgstr "Formát nahrávania" + +#: cps/templates/book_edit.html:209 +msgid "View Book on Save" +msgstr "Zobraziť knihu pri ukladaní" + +#: cps/templates/book_edit.html:212 cps/templates/book_edit.html:230 +msgid "Fetch Metadata" +msgstr "Načítať metadáta" + +#: cps/templates/book_edit.html:213 cps/templates/config_db.html:53 +#: cps/templates/config_edit.html:409 cps/templates/config_view_edit.html:174 +#: cps/templates/email_edit.html:65 cps/templates/schedule_edit.html:44 +#: cps/templates/shelf_edit.html:25 cps/templates/shelf_order.html:41 +#: cps/templates/user_edit.html:142 +msgid "Save" +msgstr "Uložiť" + +#: cps/templates/book_edit.html:233 +msgid "Keyword" +msgstr "Kľúčové slovo" + +#: cps/templates/book_edit.html:234 +msgid "Search keyword" +msgstr "Vyhľadať kľúčové slovo" + +#: cps/templates/book_edit.html:240 +msgid "Click the cover to load metadata to the form" +msgstr "Kliknite na oblálku aby ste načítali metadáta do formulára" + +#: cps/templates/book_edit.html:247 cps/templates/book_edit.html:286 +msgid "Loading..." +msgstr "Načítava sa..." + +#: cps/templates/book_edit.html:251 cps/templates/layout.html:78 +#: cps/templates/layout.html:203 cps/templates/modal_dialogs.html:34 +#: cps/templates/user_edit.html:163 +msgid "Close" +msgstr "Zatvoriť" + +#: cps/templates/book_edit.html:278 cps/templates/book_edit.html:292 +msgid "Source" +msgstr "Zdroj" + +#: cps/templates/book_edit.html:287 +msgid "Search error!" +msgstr "Chyba pri vyhľadávaní!" + +#: cps/templates/book_edit.html:288 +msgid "No Result(s) found! Please try another keyword." +msgstr "Nič sa nenaslo! Skúste, prosím iné kľúčové slovo." + +#: cps/templates/book_table.html:12 cps/templates/book_table.html:69 +#: cps/templates/user_table.html:14 cps/templates/user_table.html:77 +#: cps/templates/user_table.html:100 +msgid "This Field is Required" +msgstr "Toto pole je povinné" + +#: cps/templates/book_table.html:37 +msgid "Merge selected books" +msgstr "Zlúčiť vybrané knihy" + +#: cps/templates/book_table.html:38 cps/templates/user_table.html:124 +msgid "Remove Selections" +msgstr "Odstrániť výbery" + +#: cps/templates/book_table.html:41 +msgid "Exchange author and title" +msgstr "Vymeniť autora a názov" + +#: cps/templates/book_table.html:47 +msgid "Update Title Sort automatically" +msgstr "Automaticky aktualizovať triedenie podľa názvu" + +#: cps/templates/book_table.html:51 +msgid "Update Author Sort automatically" +msgstr "Automaticky aktualizovať triedeni podľa autora" + +#: cps/templates/book_table.html:63 cps/templates/book_table.html:69 +msgid "Enter Title" +msgstr "Zadajte názov" + +#: cps/templates/book_table.html:63 cps/templates/config_view_edit.html:24 +#: cps/templates/shelf_edit.html:8 +msgid "Title" +msgstr "Názov" + +#: cps/templates/book_table.html:64 +msgid "Enter Title Sort" +msgstr "Zadajte triedenie podľa názvu knihy" + +#: cps/templates/book_table.html:64 +msgid "Title Sort" +msgstr "Triedenie podľa názvu knihy" + +#: cps/templates/book_table.html:65 +msgid "Enter Author Sort" +msgstr "Zadajte triedenie podľa autora knihy" + +#: cps/templates/book_table.html:65 +msgid "Author Sort" +msgstr "Triedenie podľa autora knihy" + +#: cps/templates/book_table.html:66 +msgid "Enter Authors" +msgstr "Zadajte autorov" + +#: cps/templates/book_table.html:67 +msgid "Enter Categories" +msgstr "Zadajte kategórie" + +#: cps/templates/book_table.html:68 +msgid "Enter Series" +msgstr "Zadajte série" + +#: cps/templates/book_table.html:69 +msgid "Series Index" +msgstr "Číslo v sérii" + +#: cps/templates/book_table.html:70 +msgid "Enter Languages" +msgstr "Zadajte jazyky" + +#: cps/templates/book_table.html:71 +msgid "Publishing Date" +msgstr "Dátum vydania" + +#: cps/templates/book_table.html:72 +msgid "Enter Publishers" +msgstr "Zadajte vydavateľov" + +#: cps/templates/book_table.html:73 +msgid "Enter comments" +msgstr "Zadajte komentáre" + +#: cps/templates/book_table.html:73 +msgid "Comments" +msgstr "Komentáre" + +#: cps/templates/book_table.html:75 +msgid "Archive Status" +msgstr "Stav archivácie" + +#: cps/templates/book_table.html:77 cps/templates/search_form.html:42 +msgid "Read Status" +msgstr "Stav čítania" + +#: cps/templates/book_table.html:80 cps/templates/book_table.html:82 +#: cps/templates/book_table.html:84 cps/templates/book_table.html:86 +#: cps/templates/book_table.html:90 cps/templates/book_table.html:92 +#: cps/templates/book_table.html:96 +msgid "Enter " +msgstr "Zadať " + +#: cps/templates/book_table.html:113 cps/templates/modal_dialogs.html:46 +#: cps/templates/tasks.html:36 +msgid "Are you really sure?" +msgstr "Naozaj to chcete?" + +#: cps/templates/book_table.html:117 +msgid "Books with Title will be merged from:" +msgstr "Kniha z názvom bude zlúčená s:" + +#: cps/templates/book_table.html:121 +msgid "Into Book with Title:" +msgstr "Na knihu s názvom:" + +#: cps/templates/book_table.html:126 +msgid "Merge" +msgstr "Zlúčiť" + +#: cps/templates/config_db.html:12 +msgid "Location of Calibre Database" +msgstr "Umiestnenie databázy Calibre" + +#: cps/templates/config_db.html:22 +msgid "Use Google Drive?" +msgstr "Používať Google Drive?" + +#: cps/templates/config_db.html:27 +msgid "Authenticate Google Drive" +msgstr "Autentifikovať Google Drive" + +#: cps/templates/config_db.html:32 +msgid "Google Drive Calibre folder" +msgstr "Calibre zložka na Google Drive" + +#: cps/templates/config_db.html:40 +msgid "Metadata Watch Channel ID" +msgstr "ID kanála na sledovanie metadát" + +#: cps/templates/config_db.html:43 +msgid "Revoke" +msgstr "Zrušiť" + +#: cps/templates/config_db.html:68 +msgid "New db location is invalid, please enter valid path" +msgstr "Nové umiestnenie databáze nie je platné, zadajte prosím správnu cestu" + +#: cps/templates/config_edit.html:18 +msgid "Server Configuration" +msgstr "Konfigurácia servera" + +#: cps/templates/config_edit.html:25 +msgid "Server Port" +msgstr "Port servera" + +#: cps/templates/config_edit.html:28 +msgid "SSL certfile location (leave it empty for non-SSL Servers)" +msgstr "Umiestnenie SSL certifikačného súboru (ponechať prázdne pre nie-SSL servery)" + +#: cps/templates/config_edit.html:35 +msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" +msgstr "Umiestnenie SSL súboru s kľúčom (ponechať prázdne pre nie-SSL servery)" + +#: cps/templates/config_edit.html:43 +msgid "Update Channel" +msgstr "Aktualizovať kanál" + +#: cps/templates/config_edit.html:45 +msgid "Stable" +msgstr "Stabilný" + +#: cps/templates/config_edit.html:46 +msgid "Nightly" +msgstr "Nočný" + +#: cps/templates/config_edit.html:50 +msgid "Trusted Hosts (Comma Separated)" +msgstr "Hostitelia s dôverou (oddelené čiarkou)" + +#: cps/templates/config_edit.html:61 +msgid "Logfile Configuration" +msgstr "Konfigurácia súboru denníka" + +#: cps/templates/config_edit.html:77 +msgid "Location and name of logfile (calibre-web.log for no entry)" +msgstr "Umiestnenie a meno denníkového súboru (calibre-web.log keď nezadané)" + +#: cps/templates/config_edit.html:82 +msgid "Enable Access Log" +msgstr "Povoliť denník pristupu" + +#: cps/templates/config_edit.html:85 +msgid "Location and name of access logfile (access.log for no entry)" +msgstr "Umiestnenie a meno denníkového súboru pre prístup (access.log keď nezadané)" + +#: cps/templates/config_edit.html:96 +msgid "Feature Configuration" +msgstr "Konfigurácia funkčnosti" + +#: cps/templates/config_edit.html:104 +msgid "Convert non-English characters in title and author while saving to disk" +msgstr "Previesť neanglické znaky v názve a mene autora počas ukladania na disk" + +#: cps/templates/config_edit.html:108 +msgid "Enable Uploads" +msgstr "Povoliť nahrávanie" + +#: cps/templates/config_edit.html:108 +msgid "(Please ensure that users also have upload permissions)" +msgstr "(Zaistite, prosím, že používateľ má tiež právo nahrávať)" + +#: cps/templates/config_edit.html:112 +msgid "Allowed Upload Fileformats" +msgstr "Povolené formáty pre nahrávanie" + +#: cps/templates/config_edit.html:118 +msgid "Enable Anonymous Browsing" +msgstr "Povoliť anonymné prechádzanie" + +#: cps/templates/config_edit.html:122 +msgid "Enable Public Registration" +msgstr "Povoliť verejnú registráciu" + +#: cps/templates/config_edit.html:127 +msgid "Use Email as Username" +msgstr "Použiť e-mailovú adresu ako meno používateľa" + +#: cps/templates/config_edit.html:132 +msgid "Enable Magic Link Remote Login" +msgstr "Povoliť vzdialené prihlasovanie Magic Link" + +#: cps/templates/config_edit.html:137 +msgid "Enable Kobo sync" +msgstr "Povoliť synchronizáciu Kobo" + +#: cps/templates/config_edit.html:142 +msgid "Proxy unknown requests to Kobo Store" +msgstr "Proxy neznáme žiadosti na obchod Kobo" + +#: cps/templates/config_edit.html:145 +msgid "Server External Port (for port forwarded API calls)" +msgstr "Externý port servera (pre portovo preposielané API volania)" + +#: cps/templates/config_edit.html:153 +msgid "Use Goodreads" +msgstr "Použiť Goodreads" + +#: cps/templates/config_edit.html:154 +msgid "Create an API Key" +msgstr "Vytvoriť kľúč API" + +#: cps/templates/config_edit.html:158 +msgid "Goodreads API Key" +msgstr "Goodreads API kľúč" + +#: cps/templates/config_edit.html:162 +msgid "Goodreads API Secret" +msgstr "Goodreads API tajomstvo" + +#: cps/templates/config_edit.html:169 +msgid "Allow Reverse Proxy Authentication" +msgstr "Povoliť reverznú proxy autentifikáciu" + +#: cps/templates/config_edit.html:180 +msgid "Login type" +msgstr "Typ prihlásenia" + +#: cps/templates/config_edit.html:182 +msgid "Use Standard Authentication" +msgstr "Použiť štandardnú autentifikáciu" + +#: cps/templates/config_edit.html:184 +msgid "Use LDAP Authentication" +msgstr "Použiť LDAP autentifikáciu" + +#: cps/templates/config_edit.html:187 +msgid "Use OAuth" +msgstr "Použiť OAuth" + +#: cps/templates/config_edit.html:194 +msgid "LDAP Server Host Name or IP Address" +msgstr "Hostiteľské meno alebo IP adresa LDAP servera" + +#: cps/templates/config_edit.html:198 +msgid "LDAP Server Port" +msgstr "Port LDAP servera" + +#: cps/templates/config_edit.html:202 +msgid "LDAP Encryption" +msgstr "LDAP šifrovanie" + +#: cps/templates/config_edit.html:205 +msgid "TLS" +msgstr "TLS" + +#: cps/templates/config_edit.html:206 +msgid "SSL" +msgstr "SSL" + +#: cps/templates/config_edit.html:210 +msgid "LDAP CACertificate Path (Only needed for Client Certificate Authentication)" +msgstr "Cesta k LDAP CA-certifikátu (potrebná iba pre autentifikáciu certifikátom klienta)" + +#: cps/templates/config_edit.html:217 +msgid "LDAP Certificate Path (Only needed for Client Certificate Authentication)" +msgstr "Cesta k LDAP certifikátu (potrebná iba pre autentifikáciu certifikátom klienta)" + +#: cps/templates/config_edit.html:224 +msgid "LDAP Keyfile Path (Only needed for Client Certificate Authentication)" +msgstr "Cesta k LDAP súboru kľúča (potrebná iba pre autentifikáciu certifikátom klienta)" + +#: cps/templates/config_edit.html:233 +msgid "LDAP Authentication" +msgstr "LDAP autentifikácia" + +#: cps/templates/config_edit.html:235 +msgid "Anonymous" +msgstr "Anonymný" + +#: cps/templates/config_edit.html:236 +msgid "Unauthenticated" +msgstr "Neautentifikovaný" + +#: cps/templates/config_edit.html:237 +msgid "Simple" +msgstr "Jednoduchý" + +#: cps/templates/config_edit.html:242 +msgid "LDAP Administrator Username" +msgstr "Meno používateľa pre LDAP správcu" + +#: cps/templates/config_edit.html:248 +msgid "LDAP Administrator Password" +msgstr "Heslo pre LDAP správcu" + +#: cps/templates/config_edit.html:253 +msgid "LDAP Distinguished Name (DN)" +msgstr "LDAP rozlišovacie meno (DN)" + +#: cps/templates/config_edit.html:257 +msgid "LDAP User Object Filter" +msgstr "Filter pre LDAP objekt používateľa" + +#: cps/templates/config_edit.html:262 +msgid "LDAP Server is OpenLDAP?" +msgstr "LDAP server je OpenLDAP?" + +#: cps/templates/config_edit.html:264 +msgid "Following Settings are Needed For User Import" +msgstr "Pre import používateľa sú potrebné nasledovné nastavenia" + +#: cps/templates/config_edit.html:266 +msgid "LDAP Group Object Filter" +msgstr "Filter pre LDAP objekt skupiny" + +#: cps/templates/config_edit.html:270 +msgid "LDAP Group Name" +msgstr "Meno LDAP skupiny" + +#: cps/templates/config_edit.html:274 +msgid "LDAP Group Members Field" +msgstr "Pole členov LDAP skupiny" + +#: cps/templates/config_edit.html:278 +msgid "LDAP Member User Filter Detection" +msgstr "Detekcia filtra pre LDAP členstvo používateľa" + +#: cps/templates/config_edit.html:280 +msgid "Autodetect" +msgstr "Automatická detekcia" + +#: cps/templates/config_edit.html:281 +msgid "Custom Filter" +msgstr "Filter používateľa" + +#: cps/templates/config_edit.html:286 +msgid "LDAP Member User Filter" +msgstr "Filter pre LDAP členstvo požívateľa" + +#: cps/templates/config_edit.html:297 +#, python-format +msgid "Obtain %(provider)s OAuth Credential" +msgstr "Získať OAuth prístupové údaje pre %(provider)s" + +#: cps/templates/config_edit.html:300 +#, python-format +msgid "%(provider)s OAuth Client Id" +msgstr "%(provider)s OAuth klientské ID" + +#: cps/templates/config_edit.html:304 +#, python-format +msgid "%(provider)s OAuth Client Secret" +msgstr "%(provider)s OAuth klientské tajomstvo" + +#: cps/templates/config_edit.html:320 +msgid "External binaries" +msgstr "Externé binárky" + +#: cps/templates/config_edit.html:326 +msgid "Path to Calibre E-Book Converter" +msgstr "Cesta k Calibre prevádzaču e-kníh" + +#: cps/templates/config_edit.html:334 +msgid "Calibre E-Book Converter Settings" +msgstr "Nastavenie Calibre prevádzača e-kníh" + +#: cps/templates/config_edit.html:337 +msgid "Path to Kepubify E-Book Converter" +msgstr "Cesta Kepubify prevádzaču e-kníh" + +#: cps/templates/config_edit.html:345 +msgid "Location of Unrar binary" +msgstr "Binárny súbor pre Unrar sa nenašiel" + +#: cps/templates/config_edit.html:361 +msgid "Security Settings" +msgstr "Bezpečnostné nastavenia" + +#: cps/templates/config_edit.html:369 +msgid "Limit failed login attempts" +msgstr "Obmedziť neúspešné pokusy o prihlásenie" + +#: cps/templates/config_edit.html:372 +msgid "Session protection" +msgstr "Ochrana sedenia" + +#: cps/templates/config_edit.html:374 +msgid "Basic" +msgstr "Základná" + +#: cps/templates/config_edit.html:375 +msgid "Strong" +msgstr "Silná" + +#: cps/templates/config_edit.html:380 +msgid "User Password policy" +msgstr "Zásady pre používateľské heslá" + +#: cps/templates/config_edit.html:384 +msgid "Minimum password length" +msgstr "Minimálna dĺžka hesla" + +#: cps/templates/config_edit.html:389 +msgid "Enforce number" +msgstr "Vyžadovať číslo" + +#: cps/templates/config_edit.html:393 +msgid "Enforce lowercase characters" +msgstr "Vyžadovať malé písmená" + +#: cps/templates/config_edit.html:397 +msgid "Enforce uppercase characters" +msgstr "Vyžadovať veľké písmená" + +#: cps/templates/config_edit.html:401 +msgid "Enforce special characters" +msgstr "Vyžadovať špeciálne znaky" + +#: cps/templates/config_view_edit.html:17 +msgid "View Configuration" +msgstr "Zobraziť konfiguráciu" + +#: cps/templates/config_view_edit.html:32 +msgid "No. of Random Books to Display" +msgstr "Počet kníh na náhodné zobrazenie" + +#: cps/templates/config_view_edit.html:36 +msgid "No. of Authors to Display Before Hiding (0=Disable Hiding)" +msgstr "Počet autorov na zobrazenie pred ukrytím (0=Zakázať ukrývanie)" + +#: cps/templates/config_view_edit.html:40 cps/templates/readcbr.html:101 +msgid "Theme" +msgstr "Téma" + +#: cps/templates/config_view_edit.html:42 +msgid "Standard Theme" +msgstr "Štandardná téma" + +#: cps/templates/config_view_edit.html:43 +msgid "caliBlur! Dark Theme" +msgstr "tmavá téma caliBlur!" + +#: cps/templates/config_view_edit.html:47 +msgid "Regular Expression for Ignoring Columns" +msgstr "Regulárny výraz pre ignorované stĺpce" + +#: cps/templates/config_view_edit.html:51 +msgid "Link Read/Unread Status to Calibre Column" +msgstr "Prepojiť stav Prečítané/Neprečítané do Calibre stĺpca" + +#: cps/templates/config_view_edit.html:60 +msgid "View Restrictions based on Calibre column" +msgstr "Zobraziť obmedzenia založené na Calibre stĺpcoch" + +#: cps/templates/config_view_edit.html:69 +msgid "Regular Expression for Title Sorting" +msgstr "Regulárny výraz pre triedenie podľa názvu knihy" + +#: cps/templates/config_view_edit.html:80 +msgid "Default Settings for New Users" +msgstr "Predvolené nastavenia pre nových používateľov" + +#: cps/templates/config_view_edit.html:88 cps/templates/user_edit.html:96 +msgid "Admin User" +msgstr "Používateľ Správca" + +#: cps/templates/config_view_edit.html:92 cps/templates/user_edit.html:101 +msgid "Allow Downloads" +msgstr "Povoliť sťahovanie" + +#: cps/templates/config_view_edit.html:96 cps/templates/user_edit.html:105 +msgid "Allow eBook Viewer" +msgstr "Povoliť zobrazovač e-knihy" + +#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:110 +msgid "Allow Uploads" +msgstr "Povoliť nahrávanie" + +#: cps/templates/config_view_edit.html:106 cps/templates/user_edit.html:115 +msgid "Allow Edit" +msgstr "Povoliť úpravu" + +#: cps/templates/config_view_edit.html:111 cps/templates/user_edit.html:120 +msgid "Allow Delete Books" +msgstr "Povoliť mazanie kníh" + +#: cps/templates/config_view_edit.html:116 cps/templates/user_edit.html:126 +msgid "Allow Changing Password" +msgstr "Povoliť zmenu hesla" + +#: cps/templates/config_view_edit.html:120 cps/templates/user_edit.html:130 +msgid "Allow Editing Public Shelves" +msgstr "Povoliť úpravu verejných políc" + +#: cps/templates/config_view_edit.html:123 +msgid "Default Language" +msgstr "Predvolený jazyk" + +#: cps/templates/config_view_edit.html:131 +msgid "Default Visible Language of Books" +msgstr "Predvolené viditeľné jazyky pre knihy" + +#: cps/templates/config_view_edit.html:147 +msgid "Default Visibilities for New Users" +msgstr "Predvolené viditeľnosti pre nových používateľov" + +#: 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 "Ukázať náhodné knihy v detailnom zobrazení" + +#: cps/templates/config_view_edit.html:166 cps/templates/user_edit.html:87 +msgid "Add Allowed/Denied Tags" +msgstr "Pridať Povolené/Zakázané značky" + +#: cps/templates/config_view_edit.html:167 +msgid "Add Allowed/Denied custom column values" +msgstr "Pridať Povolené/Zakázané používateľom definované hodnoty stĺpca" + +#: cps/templates/detail.html:77 cps/templates/detail.html:91 +msgid "Read in Browser" +msgstr "Čítať v prezerači" + +#: cps/templates/detail.html:100 cps/templates/detail.html:120 +msgid "Listen in Browser" +msgstr "Počúvať v prezerači" + +#: cps/templates/detail.html:150 cps/templates/listenmp3.html:62 +#, python-format +msgid "Book %(index)s of %(range)s" +msgstr "Kniha %(index)s z %(range)s" + +#: cps/templates/detail.html:201 cps/templates/listenmp3.html:111 +msgid "Published" +msgstr "Vydané" + +#: cps/templates/detail.html:250 cps/templates/listenmp3.html:158 +msgid "Mark As Unread" +msgstr "Označiť ako neprečítané" + +#: cps/templates/detail.html:251 cps/templates/listenmp3.html:158 +msgid "Mark As Read" +msgstr "Označiť ako prečítané" + +#: cps/templates/detail.html:253 cps/templates/listenmp3.html:159 +msgid "Read" +msgstr "Čítať" + +#: cps/templates/detail.html:263 cps/templates/listenmp3.html:166 +msgid "Restore from archive" +msgstr "Obnoviť z archívu" + +#: cps/templates/detail.html:264 cps/templates/listenmp3.html:166 +msgid "Add to archive" +msgstr "Pridať do archívu" + +#: cps/templates/detail.html:266 cps/templates/listenmp3.html:167 +msgid "Archived" +msgstr "Archivovaný" + +#: cps/templates/detail.html:277 cps/templates/listenmp3.html:177 +msgid "Description:" +msgstr "Popis:" + +#: cps/templates/detail.html:292 cps/templates/listenmp3.html:190 +#: cps/templates/search.html:16 +msgid "Add to shelf" +msgstr "Pridať do police" + +#: cps/templates/detail.html:304 cps/templates/detail.html:323 +#: cps/templates/feed.xml:81 cps/templates/layout.html:154 +#: cps/templates/listenmp3.html:201 cps/templates/listenmp3.html:218 +#: cps/templates/search.html:22 +msgid "(Public)" +msgstr "(Verejné)" + +#: cps/templates/detail.html:339 +msgid "Edit Metadata" +msgstr "Upraviť metadáta" + +#: cps/templates/email_edit.html:13 +msgid "Email Account Type" +msgstr "Typ e-mailového účtu" + +#: cps/templates/email_edit.html:15 +msgid "Standard Email Account" +msgstr "Štandardný e-mailový účet" + +#: cps/templates/email_edit.html:16 +msgid "Gmail Account" +msgstr "Gmail účet" + +#: cps/templates/email_edit.html:22 +msgid "Setup Gmail Account" +msgstr "Nastaviť Gmail účet" + +#: cps/templates/email_edit.html:24 +msgid "Revoke Gmail Access" +msgstr "Zrušiť Gmail účet" + +#: cps/templates/email_edit.html:42 +msgid "STARTTLS" +msgstr "STARTTLS" + +#: cps/templates/email_edit.html:43 +msgid "SSL/TLS" +msgstr "SSL/TLS" + +#: cps/templates/email_edit.html:51 +msgid "SMTP Password" +msgstr "SMTP heslo" + +#: cps/templates/email_edit.html:58 +msgid "Attachment Size Limit" +msgstr "Limit pre veľkosť prílohy" + +#: cps/templates/email_edit.html:66 +msgid "Save and Send Test Email" +msgstr "Uložiť a poslať testovací e-mail" + +#: cps/templates/email_edit.html:70 cps/templates/layout.html:26 +#: cps/templates/shelf_order.html:42 cps/templates/user_table.html:174 +msgid "Back" +msgstr "Naspäť" + +#: cps/templates/email_edit.html:74 +msgid "Allowed Domains (Whitelist)" +msgstr "Povolené domény (Biely zoznam)" + +#: cps/templates/email_edit.html:78 cps/templates/email_edit.html:105 +msgid "Add Domain" +msgstr "Pridať doménu" + +#: cps/templates/email_edit.html:81 cps/templates/email_edit.html:108 +#: cps/templates/user_table.html:27 +msgid "Add" +msgstr "Pridať" + +#: cps/templates/email_edit.html:86 cps/templates/email_edit.html:96 +msgid "Enter domainname" +msgstr "Zadajte doménové meno" + +#: cps/templates/email_edit.html:92 +msgid "Denied Domains (Blacklist)" +msgstr "Zakázané domény (Čierny zoznam)" + +#: cps/templates/feed.xml:22 cps/templates/layout.html:187 +msgid "Next" +msgstr "Ďalší" + +#: cps/templates/generate_kobo_auth_url.html:6 +msgid "Open the .kobo/Kobo/Kobo eReader.conf file in a text editor and add (or edit):" +msgstr "Otvoriť súbor .kobo/Kobo/Kobo eReader.conf v textovom editore a pridať (alebo upraviť):" + +#: cps/templates/generate_kobo_auth_url.html:11 +msgid "Kobo Token:" +msgstr "Kobo žetón:" + +#: cps/templates/grid.html:21 +msgid "List" +msgstr "Zoznam" + +#: cps/templates/http_error.html:34 +msgid "Calibre-Web Instance is unconfigured, please contact your administrator" +msgstr "Inštancia Calibre-Web nie je nastavené, kontaktujte prosím vašeho správcu" + +#: cps/templates/http_error.html:44 +msgid "Create Issue" +msgstr "Vytvoriť hlásenie problému" + +#: cps/templates/http_error.html:51 +msgid "Return to Home" +msgstr "Návrat domov" + +#: cps/templates/http_error.html:53 +msgid "Logout User" +msgstr "Odhlásiť používateľa" + +#: cps/templates/index.html:71 +msgid "Sort ascending according to download count" +msgstr "Zotriediť podľa počtu stiahnutí vzostupne" + +#: cps/templates/index.html:72 +msgid "Sort descending according to download count" +msgstr "Zotriediť podľa počtu stiahnutí zostupne" + +#: cps/templates/index.html:78 cps/templates/search.html:35 +#: cps/templates/shelf.html:24 +msgid "Sort authors in alphabetical order" +msgstr "Zotriediť autorov v abecednom poradí" + +#: cps/templates/index.html:79 cps/templates/search.html:36 +#: cps/templates/shelf.html:25 +msgid "Sort authors in reverse alphabetical order" +msgstr "Zotriediť autorov v obrátenom abecednom poradí" + +#: cps/templates/index.html:83 +msgid "Sort ascending according to series index" +msgstr "Zotriediť podľa čísla série vzostupne" + +#: cps/templates/index.html:84 +msgid "Sort descending according to series index" +msgstr "Zotriediť podľa čísla série zostupne" + +#: cps/templates/index.xml:7 +msgid "Start" +msgstr "Začať" + +#: cps/templates/index.xml:19 +msgid "Alphabetical Books" +msgstr "Knihy podľa abecedy" + +#: cps/templates/index.xml:23 +msgid "Books sorted alphabetically" +msgstr "Knihy zotriedené podľa abecedy" + +#: cps/templates/index.xml:30 +msgid "Popular publications from this catalog based on Downloads." +msgstr "Populárne publikácie z tohoto katalógu založené na počte stiahnutí." + +#: cps/templates/index.xml:37 +msgid "Popular publications from this catalog based on Rating." +msgstr "Populárne publikácie z tohoto katalógu založené na hodnotení." + +#: cps/templates/index.xml:40 +msgid "Recently added Books" +msgstr "Naposledy pridané knihy" + +#: cps/templates/index.xml:44 +msgid "The latest Books" +msgstr "Najnovšie knihy" + +#: cps/templates/index.xml:47 +msgid "Random Books" +msgstr "Náhodné knihy" + +#: cps/templates/index.xml:74 +msgid "Books ordered by Author" +msgstr "Knihy usporiadané podľa autora" + +#: cps/templates/index.xml:81 +msgid "Books ordered by publisher" +msgstr "Knihy usporiadané podľa vydavateľa" + +#: cps/templates/index.xml:88 +msgid "Books ordered by category" +msgstr "Knihy usporiadané podľa kategórie" + +#: cps/templates/index.xml:95 +msgid "Books ordered by series" +msgstr "Knihy usporiadané podľa série" + +#: cps/templates/index.xml:102 +msgid "Books ordered by Languages" +msgstr "Knihy usporiadané podľa jazyka" + +#: cps/templates/index.xml:109 +msgid "Books ordered by Rating" +msgstr "Knihy usporiadané podľa hodnotenia" + +#: cps/templates/index.xml:117 +msgid "Books ordered by file formats" +msgstr "Knihy usporiadané podľa súborových formátov" + +#: cps/templates/index.xml:120 cps/templates/layout.html:152 +#: cps/templates/search_form.html:87 +msgid "Shelves" +msgstr "Police" + +#: cps/templates/index.xml:124 +msgid "Books organized in shelves" +msgstr "Knihy organizované v policiach" + +#: cps/templates/layout.html:26 cps/templates/login.html:30 +msgid "Home" +msgstr "Domov" + +#: cps/templates/layout.html:32 +msgid "Toggle Navigation" +msgstr "Prepnúť navigáciu" + +#: cps/templates/layout.html:47 +msgid "Search Library" +msgstr "Prehľadávať knižnicu" + +#: cps/templates/layout.html:65 cps/templates/layout.html:94 +msgid "Account" +msgstr "Účet" + +#: cps/templates/layout.html:71 cps/templates/layout.html:96 +msgid "Logout" +msgstr "Odhlásiť sa" + +#: cps/templates/layout.html:78 cps/templates/layout.html:134 +msgid "Uploading..." +msgstr "Nahráva sa..." + +#: cps/templates/layout.html:78 +msgid "Error" +msgstr "Chyba" + +#: cps/templates/layout.html:78 +msgid "Upload done, processing, please wait..." +msgstr "Nahrávanie ukončené, spracováva sa, počkajte prosím..." + +#: cps/templates/layout.html:91 cps/templates/read.html:76 +#: cps/templates/readcbr.html:70 cps/templates/readcbr.html:96 +msgid "Settings" +msgstr "Nastavenia" + +#: cps/templates/layout.html:135 +msgid "Please do not refresh the page" +msgstr "Prosím, neskúšajte znovu načítať stránku" + +#: cps/templates/layout.html:145 +msgid "Browse" +msgstr "Prechádzať" + +#: cps/templates/layout.html:158 cps/templates/stats.html:3 +msgid "About" +msgstr "O programe" + +#: cps/templates/layout.html:172 +msgid "Previous" +msgstr "Predchádzajúci" + +#: cps/templates/layout.html:199 +msgid "Book Details" +msgstr "Detailu o knihe" + +#: cps/templates/list.html:22 +msgid "Grid" +msgstr "Mriežka" + +#: cps/templates/login.html:18 +msgid "Remember Me" +msgstr "Zapamätať si ma" + +#: cps/templates/login.html:23 +msgid "Forgot Password?" +msgstr "Zabudli ste heslo?" + +#: cps/templates/login.html:34 +msgid "Log in with Magic Link" +msgstr "Prihlásiť sa cez Magic Link" + +#: cps/templates/logviewer.html:6 +msgid "Show Calibre-Web Log: " +msgstr "Ukázať Calibre-Web denník " + +#: cps/templates/logviewer.html:8 +msgid "Calibre-Web Log: " +msgstr "Calibre-Web denník: " + +#: cps/templates/logviewer.html:8 +msgid "Stream output, can't be displayed" +msgstr "Prúdový výstup, nedá sa zobraziť" + +#: cps/templates/logviewer.html:12 +msgid "Show Access Log: " +msgstr "Ukázať denník prístupu: " + +#: cps/templates/logviewer.html:18 +msgid "Download Calibre-Web Log" +msgstr "Stiahnuť Calibre-Web denník" + +#: cps/templates/logviewer.html:21 +msgid "Download Access Log" +msgstr "Stiahnuť denník prístupu" + +#: cps/templates/modal_dialogs.html:6 +msgid "Select Allowed/Denied Tags" +msgstr "Vybrať Povolené/Zakázané značky" + +#: cps/templates/modal_dialogs.html:7 +msgid "Select Allowed/Denied Custom Column Values" +msgstr "Vybrať Povolené/Zakázané používateľom definované hodnoty stĺpca" + +#: cps/templates/modal_dialogs.html:8 +msgid "Select Allowed/Denied Tags of User" +msgstr "Vybrať Povolené/Zakázané značky pre používateľa" + +#: cps/templates/modal_dialogs.html:9 +msgid "Select Allowed/Denied Custom Column Values of User" +msgstr "Vybrať Povolené/Zakázané používateľom definované hodnoty stĺpca pre používateľa" + +#: cps/templates/modal_dialogs.html:15 +msgid "Enter Tag" +msgstr "Zadať štítok" + +#: cps/templates/modal_dialogs.html:24 +msgid "Add View Restriction" +msgstr "Pridať obmedzenie zobrazenia" + +#: cps/templates/modal_dialogs.html:50 +msgid "This book format will be permanently erased from database" +msgstr "Tento formát knihy bude navždy vymazaný z databázy" + +#: cps/templates/modal_dialogs.html:51 +msgid "This book will be permanently erased from database" +msgstr "Táto kniha bude navždy vymazaná z databázy" + +#: cps/templates/modal_dialogs.html:52 +msgid "and hard disk" +msgstr "a pevný disk" + +#: cps/templates/modal_dialogs.html:56 +msgid "Important Kobo Note: deleted books will remain on any paired Kobo device." +msgstr "Dôležitá poznámka pre Kobo: zmazané knihy zostanú na každom spárovanom Kobo zariadení." + +#: cps/templates/modal_dialogs.html:57 +msgid "Books must first be archived and the device synced before a book can safely be deleted." +msgstr "Kniha musí byť najskôr archivovaná a zariadenie synchronizované pred tým než môže byť kniha bezpečne zmazaná." + +#: cps/templates/modal_dialogs.html:76 +msgid "Choose File Location" +msgstr "Vyberte umiestnenie súboru" + +#: cps/templates/modal_dialogs.html:82 +msgid "type" +msgstr "typ" + +#: cps/templates/modal_dialogs.html:83 +msgid "name" +msgstr "meno" + +#: cps/templates/modal_dialogs.html:84 +msgid "size" +msgstr "veľkosť" + +#: cps/templates/modal_dialogs.html:90 +msgid "Parent Directory" +msgstr "Rodičovský adresár" + +#: cps/templates/modal_dialogs.html:98 +msgid "Select" +msgstr "Vybrať" + +#: cps/templates/modal_dialogs.html:134 cps/templates/tasks.html:45 +msgid "Ok" +msgstr "Ok" + +#: cps/templates/osd.xml:5 +msgid "Calibre-Web eBook Catalog" +msgstr "Katalóg e-kníh Calibre-Web" + +#: cps/templates/read.html:6 +msgid "epub Reader" +msgstr "čítačka epub" + +#: cps/templates/read.html:81 cps/templates/readcbr.html:104 +msgid "Light" +msgstr "Svetlé" + +#: cps/templates/read.html:82 cps/templates/readcbr.html:105 +msgid "Dark" +msgstr "Tmavé" + +#: cps/templates/read.html:83 +msgid "Sepia" +msgstr "Sépia" + +#: cps/templates/read.html:84 +msgid "Black" +msgstr "Čierne" + +#: cps/templates/read.html:88 +msgid "Reflow text when sidebars are open." +msgstr "Preformátovať text keď sú otvorené bočné panely." + +#: cps/templates/read.html:93 +msgid "Font Sizes" +msgstr "Veľkosť písma" + +#: cps/templates/readcbr.html:8 +msgid "Comic Reader" +msgstr "Čítačka komiksov" + +#: cps/templates/readcbr.html:75 +msgid "Keyboard Shortcuts" +msgstr "Klávesové skratky" + +#: cps/templates/readcbr.html:78 +msgid "Previous Page" +msgstr "Predchádzajúca stránka" + +#: cps/templates/readcbr.html:79 cps/templates/readcbr.html:159 +msgid "Next Page" +msgstr "Nasledujúca stránka" + +#: cps/templates/readcbr.html:80 +msgid "Single Page Display" +msgstr "Zobrazenie na jednej stránke" + +#: cps/templates/readcbr.html:81 +msgid "Long Strip Display" +msgstr "Zobrazenie dlhý pás" + +#: cps/templates/readcbr.html:82 +msgid "Scale to Best" +msgstr "Zmeniť mierku na najlepšie" + +#: cps/templates/readcbr.html:83 +msgid "Scale to Width" +msgstr "Zmeniť mierku na šírku" + +#: cps/templates/readcbr.html:84 +msgid "Scale to Height" +msgstr "Zmeniť mierku na výšku" + +#: cps/templates/readcbr.html:85 +msgid "Scale to Native" +msgstr "Zmeniť mierku na prirodzenú" + +#: cps/templates/readcbr.html:86 +msgid "Rotate Right" +msgstr "Otočiť doprava" + +#: cps/templates/readcbr.html:87 +msgid "Rotate Left" +msgstr "Otočiť doľava" + +#: cps/templates/readcbr.html:88 +msgid "Flip Image" +msgstr "Prevrátiť obrázok" + +#: cps/templates/readcbr.html:110 +msgid "Display" +msgstr "Zobraziť" + +#: cps/templates/readcbr.html:113 +msgid "Single Page" +msgstr "Jedna stránka" + +#: cps/templates/readcbr.html:114 +msgid "Long Strip" +msgstr "Dlhý pás" + +#: cps/templates/readcbr.html:119 +msgid "Scale" +msgstr "Mierka" + +#: cps/templates/readcbr.html:122 +msgid "Best" +msgstr "Najlepšie" + +#: cps/templates/readcbr.html:123 +msgid "Width" +msgstr "Na výšku" + +#: cps/templates/readcbr.html:124 +msgid "Height" +msgstr "Na šírku" + +#: cps/templates/readcbr.html:125 +msgid "Native" +msgstr "Prirodzené" + +#: cps/templates/readcbr.html:130 +msgid "Rotate" +msgstr "Otočiť" + +#: cps/templates/readcbr.html:141 +msgid "Flip" +msgstr "Prevrátiť" + +#: cps/templates/readcbr.html:144 +msgid "Horizontal" +msgstr "Horizontálne" + +#: cps/templates/readcbr.html:145 +msgid "Vertical" +msgstr "Vertikálne" + +#: cps/templates/readcbr.html:150 +msgid "Direction" +msgstr "Smer" + +#: cps/templates/readcbr.html:153 +msgid "Left to Right" +msgstr "Zľava doprava" + +#: cps/templates/readcbr.html:154 +msgid "Right to Left" +msgstr "Sprava doľava" + +#: cps/templates/readcbr.html:162 +msgid "Reset to Top" +msgstr "Resetovať na vrch" + +#: cps/templates/readcbr.html:163 +msgid "Remember Position" +msgstr "Zapamätať si pozíciu" + +#: cps/templates/readcbr.html:168 +msgid "Scrollbar" +msgstr "Posúvatko" + +#: cps/templates/readcbr.html:171 +msgid "Show" +msgstr "Ukázať" + +#: cps/templates/readcbr.html:172 +msgid "Hide" +msgstr "Skryť" + +#: cps/templates/readdjvu.html:5 +msgid "DJVU Reader" +msgstr "DJVU čítačka" + +#: cps/templates/readpdf.html:32 +msgid "PDF Reader" +msgstr "PDF čítačka" + +#: cps/templates/readtxt.html:6 +msgid "txt Reader" +msgstr "textová čítačka" + +#: cps/templates/register.html:4 +msgid "Register New Account" +msgstr "Registrovať nový účet" + +#: cps/templates/register.html:10 +msgid "Choose a username" +msgstr "Vyberte si meno používateľa" + +#: cps/templates/register.html:15 +msgid "Your Email" +msgstr "Váš e-mail" + +#: cps/templates/remote_login.html:5 +msgid "Magic Link - Authorise New Device" +msgstr "Magic Link - Autorizovať nové zariadenie" + +#: cps/templates/remote_login.html:7 +msgid "On another device, login and visit:" +msgstr "Na inom zariadení, prihlásiť sa a navštíviť:" + +#: cps/templates/remote_login.html:11 +msgid "Once verified, you will automatically be logged in on this device." +msgstr "Po verifikácii budete automaticky prihlásený na tomto zariadení." + +#: cps/templates/remote_login.html:14 +msgid "This verification link will expire in 10 minutes." +msgstr "Toto verifikačné prepojenie expiruje za 10 minút." + +#: cps/templates/schedule_edit.html:33 +msgid "Generate Series Cover Thumbnails" +msgstr "Vygenerovať náhľady obálok kníh pre série" + +#: cps/templates/search.html:6 +msgid "No Results Found" +msgstr "Nič sa nenašlo" + +#: cps/templates/search.html:7 +msgid "Search Term:" +msgstr "Vyhľadať výraz:" + +#: cps/templates/search.html:9 +msgid "Results for:" +msgstr "Výsledky pre:" + +#: cps/templates/search_form.html:21 +msgid "Published Date From" +msgstr "Dátum vydania od" + +#: cps/templates/search_form.html:31 +msgid "Published Date To" +msgstr "Dátum vydania do" + +#: cps/templates/search_form.html:59 +msgid "Exclude Tags" +msgstr "Vylúčiť značky" + +#: cps/templates/search_form.html:77 +msgid "Exclude Series" +msgstr "Vylúčiť série" + +#: cps/templates/search_form.html:95 +msgid "Exclude Shelves" +msgstr "Vylúčiť police" + +#: cps/templates/search_form.html:115 +msgid "Exclude Languages" +msgstr "Vylúčiť jazyky" + +#: cps/templates/search_form.html:126 +msgid "Extensions" +msgstr "Rozšírenia" + +#: cps/templates/search_form.html:134 +msgid "Exclude Extensions" +msgstr "Vylúčiť rozšírenia" + +#: cps/templates/search_form.html:144 +msgid "Rating Above" +msgstr "Hodnotenie lepšie ako" + +#: cps/templates/search_form.html:148 +msgid "Rating Below" +msgstr "Hodnotenie horšie ako" + +#: cps/templates/search_form.html:180 +msgid "From:" +msgstr "Od:" + +#: cps/templates/search_form.html:190 +msgid "To:" +msgstr "Do:" + +#: cps/templates/shelf.html:13 +msgid "Delete this Shelf" +msgstr "Zmazať túto poličku" + +#: cps/templates/shelf.html:14 +msgid "Edit Shelf Properties" +msgstr "Upraviť vlastnosti police" + +#: cps/templates/shelf.html:17 +msgid "Arrange books manually" +msgstr "Usporiadať knihy manuálne" + +#: cps/templates/shelf.html:18 +msgid "Disable Change order" +msgstr "Znemožniť zmenu poradia" + +#: cps/templates/shelf.html:18 +msgid "Enable Change order" +msgstr "Povoloť zmenu poradia" + +#: cps/templates/shelf_edit.html:14 +msgid "Share with Everyone" +msgstr "Zdieľať s kýmkoľvek" + +#: cps/templates/shelf_edit.html:21 +msgid "Sync this shelf with Kobo device" +msgstr "Synchronizovať túto policu so zariadením Kobo" + +#: cps/templates/shelf_order.html:5 +msgid "Drag to Rearrange Order" +msgstr "Potiahnite pre zmenu poradia" + +#: cps/templates/shelf_order.html:33 +msgid "Hidden Book" +msgstr "Skryté chyby" + +#: cps/templates/stats.html:7 +msgid "Library Statistics" +msgstr "Štatistiky police" + +#: cps/templates/stats.html:12 +msgid "Books in this Library" +msgstr "Knihy v tejto knižnici" + +#: cps/templates/stats.html:16 +msgid "Authors in this Library" +msgstr "Autori v tejto knižnici" + +#: cps/templates/stats.html:20 +msgid "Categories in this Library" +msgstr "Kategórie v tejto knižnici" + +#: cps/templates/stats.html:24 +msgid "Series in this Library" +msgstr "Série v tejto knižnici" + +#: cps/templates/stats.html:29 +msgid "System Statistics" +msgstr "Systémove štatistiky" + +#: cps/templates/stats.html:33 +msgid "Program" +msgstr "Program" + +#: cps/templates/stats.html:34 +msgid "Installed Version" +msgstr "Nainštalovaná verzia" + +#: cps/templates/tasks.html:12 +msgid "User" +msgstr "Používateľ" + +#: cps/templates/tasks.html:14 +msgid "Task" +msgstr "Úloha" + +#: cps/templates/tasks.html:15 +msgid "Status" +msgstr "Stav" + +#: cps/templates/tasks.html:16 +msgid "Progress" +msgstr "Pokrok" + +#: cps/templates/tasks.html:17 +msgid "Run Time" +msgstr "Čas spustenia" + +#: cps/templates/tasks.html:20 +msgid "Actions" +msgstr "Akcie" + +#: cps/templates/tasks.html:40 +msgid "This task will be cancelled. Any progress made by this task will be saved." +msgstr "Táto úloha bude zrušená. Akýkoľvek pokrok vykonaný v tejto úlohe bude uložený." + +#: cps/templates/tasks.html:41 +msgid "If this is a scheduled task, it will be re-ran during the next scheduled time." +msgstr "Ak je toto naplánovaná úloha, bude znovu spustená v najbližšom naplánovanom čase." + +#: cps/templates/user_edit.html:20 +msgid "Reset user Password" +msgstr "Resetovať heslo používateľa" + +#: cps/templates/user_edit.html:43 +msgid "Language of Books" +msgstr "Jazyk kníh" + +#: cps/templates/user_edit.html:54 +msgid "OAuth Settings" +msgstr "Nastavenia OAuth" + +#: cps/templates/user_edit.html:56 +msgid "Link" +msgstr "Pripojiť" + +#: cps/templates/user_edit.html:58 +msgid "Unlink" +msgstr "Odpojiť" + +#: cps/templates/user_edit.html:64 +msgid "Kobo Sync Token" +msgstr "Synchronizačný žetón Kobo" + +#: cps/templates/user_edit.html:66 +msgid "Create/View" +msgstr "Vytvoriť/Zobraziť" + +#: cps/templates/user_edit.html:70 +msgid "Force full kobo sync" +msgstr "Vynútiť úplnú synchronizáciu Kobo" + +#: cps/templates/user_edit.html:88 +msgid "Add allowed/Denied Custom Column Values" +msgstr "Pridať povolené/zakázané užívateľom definovaných hodnôt stĺpca" + +#: cps/templates/user_edit.html:137 +msgid "Sync only books in selected shelves with Kobo" +msgstr "Synchronizovať s Kobo iba knihy vo vybraných policiach" + +#: cps/templates/user_edit.html:147 cps/templates/user_table.html:169 +msgid "Delete User" +msgstr "Zmazať používateľa" + +#: cps/templates/user_edit.html:159 +msgid "Generate Kobo Auth URL" +msgstr "Vygenerovať autentifikačné URL pre Kobo" + +#: cps/templates/user_table.html:80 cps/templates/user_table.html:103 +msgid "Select..." +msgstr "Vybrať..." + +#: cps/templates/user_table.html:131 +msgid "Edit User" +msgstr "Upraviť používateľa" + +#: cps/templates/user_table.html:134 +msgid "Enter Username" +msgstr "Upraviť meno používateľa" + +#: cps/templates/user_table.html:135 +msgid "Enter Email" +msgstr "Zadať e-mail" + +#: cps/templates/user_table.html:136 +msgid "Enter eReader Email" +msgstr "Zadať e-mail pre čítačku" + +#: cps/templates/user_table.html:136 +msgid "eReader Email" +msgstr "e-mail pre čítačku" + +#: cps/templates/user_table.html:137 +msgid "Locale" +msgstr "Nastavenie jazyka" + +#: cps/templates/user_table.html:138 +msgid "Visible Book Languages" +msgstr "Viditeľné jazyky kníh" + +#: cps/templates/user_table.html:139 +msgid "Edit Allowed Tags" +msgstr "Upraviť povolené znaťky" + +#: cps/templates/user_table.html:139 +msgid "Allowed Tags" +msgstr "Povolené značky" + +#: cps/templates/user_table.html:140 +msgid "Edit Denied Tags" +msgstr "Upraviť zakázané značky" + +#: cps/templates/user_table.html:140 +msgid "Denied Tags" +msgstr "Zakázané značky" + +#: cps/templates/user_table.html:141 +msgid "Edit Allowed Column Values" +msgstr "Upraviť povolené hodnoty stĺpca" + +#: cps/templates/user_table.html:141 +msgid "Allowed Column Values" +msgstr "Povolené hodnoty stĺpca" + +#: cps/templates/user_table.html:142 +msgid "Edit Denied Column Values" +msgstr "Upraviť zakázané hodnoty stĺpca" + +#: cps/templates/user_table.html:142 +msgid "Denied Column Values" +msgstr "Zakázané hodnoty stĺpca" + +#: cps/templates/user_table.html:144 +msgid "Change Password" +msgstr "Zmeniť heslo" + +#: cps/templates/user_table.html:147 +msgid "View" +msgstr "Zobraziť" + +#: cps/templates/user_table.html:150 +msgid "Edit Public Shelves" +msgstr "Upraviť verejné police" + +#: cps/templates/user_table.html:152 +msgid "Sync selected Shelves with Kobo" +msgstr "Synchronizovať vybrané police s Kobo" + +#: cps/templates/user_table.html:156 +msgid "Show Read/Unread Section" +msgstr "Zobraziť sekciu Prečítané/Neprečítané" + diff --git a/cps/translations/sv/LC_MESSAGES/messages.mo b/cps/translations/sv/LC_MESSAGES/messages.mo index 1f239e468fb989236cc8abe8e0b6c7e6d4df8010..cc36e4901fa0732cd4e452a976c4726c98a70583 100644 GIT binary patch delta 22 ecmdman`!55rVadQ>}CpvW>zNVo5j)=y8{4Z0teIp delta 22 ecmdman`!55rVadQ>_!TPW>&_go5j)=y8{4YzX#0# diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po index fd88c259..7e2a3e8c 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2021-05-13 11:00+0000\n" "Last-Translator: Jonatan Nyberg \n" "Language: sv\n" diff --git a/cps/translations/tr/LC_MESSAGES/messages.mo b/cps/translations/tr/LC_MESSAGES/messages.mo index cbe5b89ae7858e6ace0a0438cadeeaf78ded67e4..ed8f1706bf38c99fca8135af9ca78d91883b0395 100644 GIT binary patch delta 22 dcmdlsmvP%%#tk}p>}CpvW>zNVn~n9F6#!TG2Gall delta 22 dcmdlsmvP%%#tk}p>_!TPW>&_gn~n9F6#!SY2Fw5e diff --git a/cps/translations/tr/LC_MESSAGES/messages.po b/cps/translations/tr/LC_MESSAGES/messages.po index 10b050ac..2d0bd8b8 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-04-23 22:47+0300\n" "Last-Translator: iz \n" "Language: tr\n" diff --git a/cps/translations/uk/LC_MESSAGES/messages.mo b/cps/translations/uk/LC_MESSAGES/messages.mo index e7537ae38e0c1ecf2dfe13e363f399c3fc792513..dd4ee367a3ceb18a60ba402d9056760564072b03 100644 GIT binary patch delta 22 dcmX@Pp7G>*#tng*>}CpvW>zNVn*#tng*>_!TPW>&_gn\n" "Language: uk\n" diff --git a/cps/translations/vi/LC_MESSAGES/messages.mo b/cps/translations/vi/LC_MESSAGES/messages.mo index 2b3636f5bb83846aac7c95480fde16f48c9a817f..55d290d7b1c966fe9ecdf2236fd1e0cd21ead569 100644 GIT binary patch delta 22 ecmX@{jPb-X#tnPz+07IT&8$q!Hy^QYF$Mr}@(AGo delta 22 ecmX@{jPb-X#tnPz*^Lwo&8&<~Hy^QYF$Mr}uL#-z diff --git a/cps/translations/vi/LC_MESSAGES/messages.po b/cps/translations/vi/LC_MESSAGES/messages.po index 82819533..9986d48d 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2022-09-20 21:36+0700\n" "Last-Translator: Ha Link \n" "Language: vi\n" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index 3471ae8c6a790bd0fa8b89f16ba974f194ff0f75..16e99d0b845c7cd0a8b13899f8529bdf9469d76e 100644 GIT binary patch delta 22 dcmeyhf%(@4<_(VR>}CpvW>zNVn?2f%0s(Cj2tfb< delta 22 dcmeyhf%(@4<_(VR>_!TPW>&_gn?2f%0s(B#2s!`& diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 5cf9ac27..52135ddf 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-09-27 22:18+0800\n" "Last-Translator: xlivevil \n" "Language: zh_CN\n" diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index df1e758db28afd9afcb8f3e56e687c0c17718aa9..45c9740bb196c6a5a74b31c71415ba58a26a0c40 100644 GIT binary patch delta 22 ecmdmgi)sHYrVX!h*v%9S&8$q!H-F6Wa{vHz#|cCL delta 22 ecmdmgi)sHYrVX!h*o_nn&8&<~H-F6Wa{vHzgb6(W diff --git a/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/cps/translations/zh_Hant_TW/LC_MESSAGES/messages.po index 659a1036..b2de1559 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: 2020-09-27 22:18+0800\n" "Last-Translator: xlivevil \n" "Language: zh_TW\n" diff --git a/messages.pot b/messages.pot index 293b9b0b..54bac15b 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: 2023-11-02 16:35+0100\n" +"POT-Creation-Date: 2023-11-06 16:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" From 184ce23351d8c11fc42845f5559d57959cb9cf91 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Mon, 6 Nov 2023 18:05:36 +0100 Subject: [PATCH 10/21] Catch error with tornado on restart --- cps/admin.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/cps/admin.py b/cps/admin.py index 045a9523..20e901e3 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -102,10 +102,13 @@ def admin_required(f): @admi.before_app_request def before_request(): - if not ub.check_user_session(current_user.id, - flask_session.get('_id')) and 'opds' not in request.path \ - and config.config_session == 1: - logout_user() + try: + if not ub.check_user_session(current_user.id, + flask_session.get('_id')) and 'opds' not in request.path \ + and config.config_session == 1: + logout_user() + except AttributeError: + pass # ? fails on requesting /ajax/emailstat during restart ? g.constants = constants g.google_site_verification = os.getenv('GOOGLE_SITE_VERIFICATION', '') g.allow_registration = config.config_public_reg From d68e57c4fc5525b32c2312a251434368d9211251 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Tue, 7 Nov 2023 19:30:13 +0100 Subject: [PATCH 11/21] Implement split library and books Bugfix arrows in comic reader Fix kobo download link Updated requirement --- cps/admin.py | 5 +- cps/config_sql.py | 5 + cps/editbooks.py | 22 +- cps/epub.py | 3 +- cps/helper.py | 6 +- cps/kobo.py | 2 +- cps/static/js/kthoom.js | 5 +- cps/tasks/convert.py | 6 +- cps/tasks/mail.py | 2 +- cps/tasks/metadata_backup.py | 2 +- cps/tasks/thumbnail.py | 4 +- cps/templates/config_db.html | 12 + cps/web.py | 6 +- requirements.txt | 2 +- setup.cfg | 2 +- test/Calibre-Web TestSummary_Linux.html | 3878 ++++++++++++++--------- 16 files changed, 2428 insertions(+), 1534 deletions(-) mode change 100755 => 100644 cps/editbooks.py mode change 100755 => 100644 cps/tasks/convert.py mode change 100755 => 100644 cps/tasks/mail.py mode change 100755 => 100644 cps/web.py diff --git a/cps/admin.py b/cps/admin.py index 045a9523..c9f28e26 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -1702,7 +1702,7 @@ def _db_configuration_update_helper(): return _db_configuration_result('{}'.format(ex), gdrive_error) if db_change or not db_valid or not config.db_configured \ - or config.config_calibre_dir != to_save["config_calibre_dir"]: + or config.config_calibre_dir != to_save["config_calibre_dir"]: if not os.path.exists(metadata_db) or not to_save['config_calibre_dir']: return _db_configuration_result(_('DB Location is not Valid, Please Enter Correct Path'), gdrive_error) else: @@ -1725,6 +1725,9 @@ def _db_configuration_update_helper(): calibre_db.update_config(config) if not os.access(os.path.join(config.config_calibre_dir, "metadata.db"), os.W_OK): flash(_("DB is not Writeable"), category="warning") + _config_string(to_save, "config_calibre_split_dir") + config.config_calibre_split = to_save.get('config_calibre_split', 0) == "on" + calibre_db.update_config(config) config.save() return _db_configuration_result(None, gdrive_error) diff --git a/cps/config_sql.py b/cps/config_sql.py index 21644ccd..f6c0991c 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -69,6 +69,8 @@ class _Settings(_Base): config_calibre_dir = Column(String) config_calibre_uuid = Column(String) + config_calibre_split = Column(Boolean, default=False) + config_calibre_split_dir = Column(String) config_port = Column(Integer, default=constants.DEFAULT_PORT) config_external_port = Column(Integer, default=constants.DEFAULT_PORT) config_certfile = Column(String) @@ -389,6 +391,9 @@ class ConfigSQL(object): self.db_configured = False self.save() + def get_book_path(self): + return self.config_calibre_split_dir if self.config_calibre_split_dir else self.config_calibre_dir + def store_calibre_uuid(self, calibre_db, Library_table): try: calibre_uuid = calibre_db.session.query(Library_table).one_or_none() diff --git a/cps/editbooks.py b/cps/editbooks.py old mode 100755 new mode 100644 index b8f6363f..2449eab9 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -126,7 +126,7 @@ def edit_book(book_id): edited_books_id = book.id modify_date = True title_author_error = helper.update_dir_structure(edited_books_id, - config.config_calibre_dir, + config.get_book_path(), input_authors[0], renamed_author=renamed) if title_author_error: @@ -271,7 +271,7 @@ def upload(): meta.extension.lower()) else: error = helper.update_dir_structure(book_id, - config.config_calibre_dir, + config.get_book_path(), input_authors[0], meta.file_path, title_dir + meta.extension.lower(), @@ -321,7 +321,7 @@ def convert_bookformat(book_id): return redirect(url_for('edit-book.show_edit_book', book_id=book_id)) log.info('converting: book id: %s from: %s to: %s', book_id, book_format_from, book_format_to) - rtn = helper.convert_book_format(book_id, config.config_calibre_dir, book_format_from.upper(), + rtn = helper.convert_book_format(book_id, config.get_book_path(), book_format_from.upper(), book_format_to.upper(), current_user.name) if rtn is None: @@ -391,7 +391,7 @@ def edit_list_book(param): elif param == 'title': sort_param = book.sort if handle_title_on_edit(book, vals.get('value', "")): - rename_error = helper.update_dir_structure(book.id, config.config_calibre_dir) + rename_error = helper.update_dir_structure(book.id, config.get_book_path()) if not rename_error: ret = Response(json.dumps({'success': True, 'newValue': book.title}), mimetype='application/json') @@ -409,7 +409,7 @@ def edit_list_book(param): mimetype='application/json') elif param == 'authors': input_authors, __, renamed = handle_author_on_edit(book, vals['value'], vals.get('checkA', None) == "true") - rename_error = helper.update_dir_structure(book.id, config.config_calibre_dir, input_authors[0], + rename_error = helper.update_dir_structure(book.id, config.get_book_path(), input_authors[0], renamed_author=renamed) if not rename_error: ret = Response(json.dumps({ @@ -513,10 +513,10 @@ def merge_list_book(): for element in from_book.data: if element.format not in to_file: # create new data entry with: book_id, book_format, uncompressed_size, name - filepath_new = os.path.normpath(os.path.join(config.config_calibre_dir, + filepath_new = os.path.normpath(os.path.join(config.get_book_path(), to_book.path, to_name + "." + element.format.lower())) - filepath_old = os.path.normpath(os.path.join(config.config_calibre_dir, + filepath_old = os.path.normpath(os.path.join(config.get_book_path(), from_book.path, element.name + "." + element.format.lower())) copyfile(filepath_old, filepath_new) @@ -556,7 +556,7 @@ def table_xchange_author_title(): if edited_books_id: # toDo: Handle error - edit_error = helper.update_dir_structure(edited_books_id, config.config_calibre_dir, input_authors[0], + edit_error = helper.update_dir_structure(edited_books_id, config.get_book_path(), input_authors[0], renamed_author=renamed) if modify_date: book.last_modified = datetime.utcnow() @@ -753,7 +753,7 @@ def move_coverfile(meta, db_book): cover_file = meta.cover else: cover_file = os.path.join(constants.STATIC_DIR, 'generic_cover.jpg') - new_cover_path = os.path.join(config.config_calibre_dir, db_book.path) + new_cover_path = os.path.join(config.get_book_path(), db_book.path) try: os.makedirs(new_cover_path, exist_ok=True) copyfile(cover_file, os.path.join(new_cover_path, "cover.jpg")) @@ -839,7 +839,7 @@ def delete_book_from_table(book_id, book_format, json_response): book = calibre_db.get_book(book_id) if book: try: - result, error = helper.delete_book(book, config.config_calibre_dir, book_format=book_format.upper()) + result, error = helper.delete_book(book, config.get_book_path(), book_format=book_format.upper()) if not result: if json_response: return json.dumps([{"location": url_for("edit-book.show_edit_book", book_id=book_id), @@ -1172,7 +1172,7 @@ def upload_single_file(file_request, book, book_id): return False file_name = book.path.rsplit('/', 1)[-1] - filepath = os.path.normpath(os.path.join(config.config_calibre_dir, book.path)) + filepath = os.path.normpath(os.path.join(config.get_book_path(), book.path)) saved_filename = os.path.join(filepath, file_name + '.' + file_ext) # check if file path exists, otherwise create it, copy file to calibre path and delete temp file diff --git a/cps/epub.py b/cps/epub.py index 50adba59..b45f3e51 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -48,7 +48,8 @@ def get_epub_layout(book, book_data): 'n': 'urn:oasis:names:tc:opendocument:xmlns:container', 'pkg': 'http://www.idpf.org/2007/opf', } - file_path = os.path.normpath(os.path.join(config.config_calibre_dir, book.path, book_data.name + "." + book_data.format.lower())) + file_path = os.path.normpath(os.path.join(config.get_book_path(), + book.path, book_data.name + "." + book_data.format.lower())) try: epubZip = zipfile.ZipFile(file_path) diff --git a/cps/helper.py b/cps/helper.py index 0c526d01..bd219594 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -781,7 +781,7 @@ def get_book_cover_internal(book, resolution=None): # Send the book cover from the Calibre directory else: - cover_file_path = os.path.join(config.config_calibre_dir, book.path) + cover_file_path = os.path.join(config.get_book_path(), book.path) if os.path.isfile(os.path.join(cover_file_path, "cover.jpg")): return send_from_directory(cover_file_path, "cover.jpg") else: @@ -934,7 +934,7 @@ def save_cover(img, book_path): else: return False, message else: - return save_cover_from_filestorage(os.path.join(config.config_calibre_dir, book_path), "cover.jpg", img) + return save_cover_from_filestorage(os.path.join(config.get_book_path(), book_path), "cover.jpg", img) def do_download_file(book, book_format, client, data, headers): @@ -947,7 +947,7 @@ def do_download_file(book, book_format, client, data, headers): else: abort(404) else: - filename = os.path.join(config.config_calibre_dir, book.path) + filename = os.path.join(config.get_book_path(), book.path) if not os.path.isfile(os.path.join(filename, data.name + "." + book_format)): # ToDo: improve error handling log.error('File not found: %s', os.path.join(filename, data.name + "." + book_format)) diff --git a/cps/kobo.py b/cps/kobo.py index 0a968081..9900200e 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -205,7 +205,7 @@ def HandleSyncRequest(): for book in books: formats = [data.format for data in book.Books.data] if 'KEPUB' not in formats and config.config_kepubifypath and 'EPUB' in formats: - helper.convert_book_format(book.Books.id, config.config_calibre_dir, 'EPUB', 'KEPUB', current_user.name) + helper.convert_book_format(book.Books.id, config.get_book_path(), 'EPUB', 'KEPUB', current_user.name) kobo_reading_state = get_or_create_reading_state(book.Books.id) entitlement = { diff --git a/cps/static/js/kthoom.js b/cps/static/js/kthoom.js index 67b18fc1..b7ed6c8b 100644 --- a/cps/static/js/kthoom.js +++ b/cps/static/js/kthoom.js @@ -179,8 +179,9 @@ kthoom.ImageFile = function(file) { }; function updateDirectionButtons(){ - var left, right = 1; - if (currentImage == 0 ) { + var left = 1; + var right = 1; + if (currentImage <= 0 ) { if (settings.direction === 0) { left = 0; } else { diff --git a/cps/tasks/convert.py b/cps/tasks/convert.py old mode 100755 new mode 100644 index df6ae104..7b2c8718 --- a/cps/tasks/convert.py +++ b/cps/tasks/convert.py @@ -62,11 +62,11 @@ class TaskConvert(CalibreTask): df = gdriveutils.getFileFromEbooksFolder(cur_book.path, data.name + "." + self.settings['old_book_format'].lower()) if df: - datafile = os.path.join(config.config_calibre_dir, + datafile = os.path.join(config.get_book_path(), cur_book.path, data.name + "." + self.settings['old_book_format'].lower()) - if not os.path.exists(os.path.join(config.config_calibre_dir, cur_book.path)): - os.makedirs(os.path.join(config.config_calibre_dir, cur_book.path)) + if not os.path.exists(os.path.join(config.get_book_path(), cur_book.path)): + os.makedirs(os.path.join(config.get_book_path(), cur_book.path)) df.GetContentFile(datafile) worker_db.session.close() else: diff --git a/cps/tasks/mail.py b/cps/tasks/mail.py old mode 100755 new mode 100644 index a305b623..36133ccf --- a/cps/tasks/mail.py +++ b/cps/tasks/mail.py @@ -239,7 +239,7 @@ class TaskEmail(CalibreTask): @classmethod def _get_attachment(cls, book_path, filename): """Get file as MIMEBase message""" - calibre_path = config.config_calibre_dir + calibre_path = config.get_book_path() if config.config_use_google_drive: df = gdriveutils.getFileFromEbooksFolder(book_path, filename) if df: diff --git a/cps/tasks/metadata_backup.py b/cps/tasks/metadata_backup.py index 1751feeb..45015ccf 100644 --- a/cps/tasks/metadata_backup.py +++ b/cps/tasks/metadata_backup.py @@ -114,7 +114,7 @@ class TaskBackupMetadata(CalibreTask): True) else: # ToDo: Handle book folder not found or not readable - book_metadata_filepath = os.path.join(config.config_calibre_dir, book.path, 'metadata.opf') + book_metadata_filepath = os.path.join(config.get_book_path(), book.path, 'metadata.opf') # prepare finalize everything and output doc = etree.ElementTree(package) try: diff --git a/cps/tasks/thumbnail.py b/cps/tasks/thumbnail.py index 6d11fe97..dd9ee1e0 100644 --- a/cps/tasks/thumbnail.py +++ b/cps/tasks/thumbnail.py @@ -209,7 +209,7 @@ class TaskGenerateCoverThumbnails(CalibreTask): if stream is not None: stream.close() else: - book_cover_filepath = os.path.join(config.config_calibre_dir, book.path, 'cover.jpg') + book_cover_filepath = os.path.join(config.get_book_path(), book.path, 'cover.jpg') if not os.path.isfile(book_cover_filepath): raise Exception('Book cover file not found') @@ -404,7 +404,7 @@ class TaskGenerateSeriesThumbnails(CalibreTask): if stream is not None: stream.close() - book_cover_filepath = os.path.join(config.config_calibre_dir, book.path, 'cover.jpg') + book_cover_filepath = os.path.join(config.get_book_path(), book.path, 'cover.jpg') if not os.path.isfile(book_cover_filepath): raise Exception('Book cover file not found') diff --git a/cps/templates/config_db.html b/cps/templates/config_db.html index 0090bd95..6e54d97c 100644 --- a/cps/templates/config_db.html +++ b/cps/templates/config_db.html @@ -16,6 +16,18 @@ +
+ + +
+
+
+ + + + +
+
{% if feature_support['gdrive'] %}
diff --git a/cps/web.py b/cps/web.py old mode 100755 new mode 100644 index 4430dd90..6b26f29e --- a/cps/web.py +++ b/cps/web.py @@ -1192,7 +1192,7 @@ def serve_book(book_id, book_format, anyname): if book_format.upper() == 'TXT': log.info('Serving book: %s', data.name) try: - rawdata = open(os.path.join(config.config_calibre_dir, book.path, data.name + "." + book_format), + rawdata = open(os.path.join(config.get_book_path(), book.path, data.name + "." + book_format), "rb").read() result = chardet.detect(rawdata) return make_response( @@ -1202,7 +1202,7 @@ def serve_book(book_id, book_format, anyname): return "File Not Found" # enable byte range read of pdf response = make_response( - send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + book_format)) + send_from_directory(os.path.join(config.get_book_path(), book.path), data.name + "." + book_format)) if not range_header: log.info('Serving book: %s', data.name) response.headers['Accept-Ranges'] = 'bytes' @@ -1226,7 +1226,7 @@ def send_to_ereader(book_id, book_format, convert): response = [{'type': "danger", 'message': _("Please configure the SMTP mail settings first...")}] return Response(json.dumps(response), mimetype='application/json') elif current_user.kindle_mail: - result = send_mail(book_id, book_format, convert, current_user.kindle_mail, config.config_calibre_dir, + result = send_mail(book_id, book_format, convert, current_user.kindle_mail, config.get_book_path(), current_user.name) if result is None: ub.update_download(book_id, int(current_user.id)) diff --git a/requirements.txt b/requirements.txt index e384ed87..53be7c2e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ iso-639>=0.4.5,<0.5.0 PyPDF>=3.0.0,<3.16.0 pytz>=2016.10 requests>=2.28.0,<2.32.0 -SQLAlchemy>=1.3.0,<2.0.0 +SQLAlchemy>=1.3.0,<2.1.0 tornado>=6.3,<6.4 Wand>=0.4.4,<0.7.0 unidecode>=0.04.19,<1.4.0 diff --git a/setup.cfg b/setup.cfg index 4bcd1a11..46e5421b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -49,7 +49,7 @@ install_requires = PyPDF>=3.0.0,<3.16.0 pytz>=2016.10 requests>=2.28.0,<2.32.0 - SQLAlchemy>=1.3.0,<2.0.0 + SQLAlchemy>=1.3.0,<2.1.0 tornado>=6.3,<6.4 Wand>=0.4.4,<0.7.0 unidecode>=0.04.19,<1.4.0 diff --git a/test/Calibre-Web TestSummary_Linux.html b/test/Calibre-Web TestSummary_Linux.html index 7ca3dad5..f5ad2347 100644 --- a/test/Calibre-Web TestSummary_Linux.html +++ b/test/Calibre-Web TestSummary_Linux.html @@ -37,20 +37,20 @@
-

Start Time: 2023-10-16 19:38:22

+

Start Time: 2023-11-07 19:32:08

-

Stop Time: 2023-10-17 02:18:49

+

Stop Time: 2023-11-08 00:42:45

-

Duration: 5h 37 min

+

Duration: 4h 11 min

@@ -234,11 +234,11 @@ - + TestBackupMetadata 22 - 22 - 0 + 21 + 1 0 0 @@ -266,11 +266,31 @@ - +
TestBackupMetadata - test_backup_change_book_description
- PASS + +
+ FAIL +
+ + + + @@ -1014,12 +1034,12 @@ - + TestEditAdditionalBooks 20 - 18 - 0 - 0 + 9 + 1 + 8 2 Detail @@ -1037,11 +1057,50 @@ - +
TestEditAdditionalBooks - test_change_upload_formats
- PASS + +
+ ERROR +
+ + + + @@ -1055,11 +1114,31 @@ - +
TestEditAdditionalBooks - test_delete_role
- PASS + +
+ FAIL +
+ + + + @@ -1109,56 +1188,233 @@ - +
TestEditAdditionalBooks - test_title_sort
- PASS + +
+ ERROR +
+ + + + - +
TestEditAdditionalBooks - test_upload_cbz_coverformats
- PASS + +
+ ERROR +
+ + + + - +
TestEditAdditionalBooks - test_upload_edit_role
- PASS + +
+ ERROR +
+ + + + - +
TestEditAdditionalBooks - test_upload_metadata_cb7
- PASS + +
+ ERROR +
+ + + + - +
TestEditAdditionalBooks - test_upload_metadata_cbr
- PASS + +
+ ERROR +
+ + + + - +
TestEditAdditionalBooks - test_upload_metadata_cbt
- PASS + +
+ ERROR +
+ + + + @@ -1189,11 +1445,42 @@ - +
TestEditAdditionalBooks - test_writeonly_path
- PASS + +
+ ERROR +
+ + + + @@ -1226,6 +1513,490 @@ + + _ErrorHolder + 9 + 0 + 0 + 9 + 0 + + Detail + + + + + + + +
tearDownClass (test_edit_additional_books)
+ + +
+ ERROR +
+ + + + + + + + + + +
tearDownClass (test_thumbnail_env)
+ + +
+ ERROR +
+ + + + + + + + + + +
tearDownClass (test_thumbnails)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_upload_epubs)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_user_list)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_user_load)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_user_template)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_visiblilitys)
+ + +
+ ERROR +
+ + + + + + + + + + +
setUpClass (test_zz_helper)
+ + +
+ ERROR +
+ + + + + + + + + TestEditBooks 38 @@ -1234,13 +2005,13 @@ 0 2 - Detail + Detail - +
TestEditBooks - test_download_book
@@ -1249,7 +2020,7 @@ - +
TestEditBooks - test_edit_author
@@ -1258,7 +2029,7 @@ - +
TestEditBooks - test_edit_category
@@ -1267,7 +2038,7 @@ - +
TestEditBooks - test_edit_comments
@@ -1276,7 +2047,7 @@ - +
TestEditBooks - test_edit_custom_bool
@@ -1285,7 +2056,7 @@ - +
TestEditBooks - test_edit_custom_categories
@@ -1294,7 +2065,7 @@ - +
TestEditBooks - test_edit_custom_comment
@@ -1303,7 +2074,7 @@ - +
TestEditBooks - test_edit_custom_date
@@ -1312,7 +2083,7 @@ - +
TestEditBooks - test_edit_custom_float
@@ -1321,7 +2092,7 @@ - +
TestEditBooks - test_edit_custom_int
@@ -1330,7 +2101,7 @@ - +
TestEditBooks - test_edit_custom_rating
@@ -1339,7 +2110,7 @@ - +
TestEditBooks - test_edit_custom_single_select
@@ -1348,7 +2119,7 @@ - +
TestEditBooks - test_edit_custom_text
@@ -1357,7 +2128,7 @@ - +
TestEditBooks - test_edit_language
@@ -1366,7 +2137,7 @@ - +
TestEditBooks - test_edit_publisher
@@ -1375,7 +2146,7 @@ - +
TestEditBooks - test_edit_publishing_date
@@ -1384,7 +2155,7 @@ - +
TestEditBooks - test_edit_rating
@@ -1393,7 +2164,7 @@ - +
TestEditBooks - test_edit_series
@@ -1402,7 +2173,7 @@ - +
TestEditBooks - test_edit_title
@@ -1411,19 +2182,19 @@ - +
TestEditBooks - test_rename_upper_lowercase
- SKIP + SKIP
-