From 62574939b209ae4e1ddde8132cff740bca2ec507 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Sat, 19 Jan 2019 16:48:04 +0100 Subject: [PATCH 01/20] Fix #770 --- cps/web.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cps/web.py b/cps/web.py index 0a52947e..68d2be13 100644 --- a/cps/web.py +++ b/cps/web.py @@ -2333,6 +2333,7 @@ def register(): content.password = generate_password_hash(password) content.role = config.config_default_role content.sidebar_view = config.config_default_show + content.mature_content = bool(config.config_default_show & ub.MATURE_CONTENT) try: ub.session.add(content) ub.session.commit() From bacb6fb561a2d7aa514a7656b27c893d24d65589 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Sun, 20 Jan 2019 17:45:42 +0100 Subject: [PATCH 02/20] New updater with default setting -> only stable releases #653 --- .gitattributes | 2 +- cps/helper.py | 192 +------------ cps/static/js/main.js | 2 +- cps/templates/admin.html | 2 +- cps/templates/config_edit.html | 11 +- cps/ub.py | 19 +- cps/updater.py | 496 +++++++++++++++++++++++++++++++++ cps/web.py | 164 ++--------- 8 files changed, 557 insertions(+), 331 deletions(-) create mode 100644 cps/updater.py diff --git a/.gitattributes b/.gitattributes index a53b37de..f4bb7a9f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,4 @@ -helper.py ident export-subst +updater.py ident export-subst /test export-ignore cps/static/css/libs/* linguist-vendored cps/static/js/libs/* linguist-vendored diff --git a/cps/helper.py b/cps/helper.py index fc18e0d8..605c0fd6 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -4,13 +4,13 @@ import db import ub from flask import current_app as app -import logging +# import logging from tempfile import gettempdir import sys import os import re import unicodedata -from io import BytesIO +# from io import BytesIO import worker import time from flask import send_from_directory, make_response, redirect, abort @@ -18,16 +18,16 @@ from flask_babel import gettext as _ from flask_login import current_user from babel.dates import format_datetime from datetime import datetime -import threading +# import threading import shutil import requests -import zipfile +# import zipfile try: import gdriveutils as gd except ImportError: pass import web -import server +# import server import random import subprocess @@ -38,7 +38,7 @@ except ImportError: use_unidecode = False # Global variables -updater_thread = None +# updater_thread = None global_WorkerThread = worker.WorkerThread() global_WorkerThread.start() @@ -468,166 +468,6 @@ def do_download_file(book, book_format, data, headers): ################################## -class Updater(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - self.status = 0 - - def run(self): - try: - self.status = 1 - r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True) - r.raise_for_status() - - fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0] - self.status = 2 - z = zipfile.ZipFile(BytesIO(r.content)) - self.status = 3 - tmp_dir = gettempdir() - z.extractall(tmp_dir) - self.status = 4 - self.update_source(os.path.join(tmp_dir, os.path.splitext(fname)[0]), ub.config.get_main_dir) - self.status = 6 - time.sleep(2) - server.Server.setRestartTyp(True) - server.Server.stopServer() - self.status = 7 - time.sleep(2) - except requests.exceptions.HTTPError as ex: - logging.getLogger('cps.web').info( u'HTTP Error' + ' ' + str(ex)) - self.status = 8 - except requests.exceptions.ConnectionError: - logging.getLogger('cps.web').info(u'Connection error') - self.status = 9 - except requests.exceptions.Timeout: - logging.getLogger('cps.web').info(u'Timeout while establishing connection') - self.status = 10 - except requests.exceptions.RequestException: - self.status = 11 - logging.getLogger('cps.web').info(u'General error') - - def get_update_status(self): - return self.status - - @classmethod - def file_to_list(self, filelist): - return [x.strip() for x in open(filelist, 'r') if not x.startswith('#EXT')] - - @classmethod - def one_minus_two(self, one, two): - return [x for x in one if x not in set(two)] - - @classmethod - def reduce_dirs(self, delete_files, new_list): - new_delete = [] - for filename in delete_files: - parts = filename.split(os.sep) - sub = '' - for part in parts: - sub = os.path.join(sub, part) - if sub == '': - sub = os.sep - count = 0 - for song in new_list: - if song.startswith(sub): - count += 1 - break - if count == 0: - if sub != '\\': - new_delete.append(sub) - break - return list(set(new_delete)) - - @classmethod - def reduce_files(self, remove_items, exclude_items): - rf = [] - for item in remove_items: - if not item.startswith(exclude_items): - rf.append(item) - return rf - - @classmethod - def moveallfiles(self, root_src_dir, root_dst_dir): - change_permissions = True - if sys.platform == "win32" or sys.platform == "darwin": - change_permissions = False - else: - logging.getLogger('cps.web').debug('Update on OS-System : ' + sys.platform) - new_permissions = os.stat(root_dst_dir) - # print new_permissions - for src_dir, __, files in os.walk(root_src_dir): - dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1) - if not os.path.exists(dst_dir): - os.makedirs(dst_dir) - logging.getLogger('cps.web').debug('Create-Dir: '+dst_dir) - if change_permissions: - # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) - os.chown(dst_dir, new_permissions.st_uid, new_permissions.st_gid) - for file_ in files: - src_file = os.path.join(src_dir, file_) - dst_file = os.path.join(dst_dir, file_) - if os.path.exists(dst_file): - if change_permissions: - permission = os.stat(dst_file) - logging.getLogger('cps.web').debug('Remove file before copy: '+dst_file) - os.remove(dst_file) - else: - if change_permissions: - permission = new_permissions - shutil.move(src_file, dst_dir) - logging.getLogger('cps.web').debug('Move File '+src_file+' to '+dst_dir) - if change_permissions: - try: - os.chown(dst_file, permission.st_uid, permission.st_gid) - except (Exception) as e: - # ex = sys.exc_info() - old_permissions = os.stat(dst_file) - logging.getLogger('cps.web').debug('Fail change permissions of ' + str(dst_file) + '. Before: ' - + str(old_permissions.st_uid) + ':' + str(old_permissions.st_gid) + ' After: ' - + str(permission.st_uid) + ':' + str(permission.st_gid) + ' error: '+str(e)) - return - - def update_source(self, source, destination): - # destination files - old_list = list() - exclude = ( - 'vendor' + os.sep + 'kindlegen.exe', 'vendor' + os.sep + 'kindlegen', os.sep + 'app.db', - os.sep + 'vendor', os.sep + 'calibre-web.log') - for root, dirs, files in os.walk(destination, topdown=True): - for name in files: - old_list.append(os.path.join(root, name).replace(destination, '')) - for name in dirs: - old_list.append(os.path.join(root, name).replace(destination, '')) - # source files - new_list = list() - for root, dirs, files in os.walk(source, topdown=True): - for name in files: - new_list.append(os.path.join(root, name).replace(source, '')) - for name in dirs: - new_list.append(os.path.join(root, name).replace(source, '')) - - delete_files = self.one_minus_two(old_list, new_list) - - rf = self.reduce_files(delete_files, exclude) - - remove_items = self.reduce_dirs(rf, new_list) - - self.moveallfiles(source, destination) - - for item in remove_items: - item_path = os.path.join(destination, item[1:]) - if os.path.isdir(item_path): - logging.getLogger('cps.web').debug("Delete dir " + item_path) - shutil.rmtree(item_path) - else: - try: - logging.getLogger('cps.web').debug("Delete file " + item_path) - # log_from_thread("Delete file " + item_path) - os.remove(item_path) - except Exception: - logging.getLogger('cps.web').debug("Could not remove:" + item_path) - shutil.rmtree(source, ignore_errors=True) def check_unrar(unrarLocation): @@ -654,26 +494,6 @@ def check_unrar(unrarLocation): return (error, version) -def is_sha1(sha1): - if len(sha1) != 40: - return False - try: - int(sha1, 16) - except ValueError: - return False - return True - - -def get_current_version_info(): - content = {} - content[0] = '$Format:%H$' - content[1] = '$Format:%cI$' - # content[0] = 'bb7d2c6273ae4560e83950d36d64533343623a57' - # content[1] = '2018-09-09T10:13:08+02:00' - if is_sha1(content[0]) and len(content[1]) > 0: - return {'hash': content[0], 'datetime': content[1]} - return False - def json_serial(obj): """JSON serializer for objects not serializable by default json code""" diff --git a/cps/static/js/main.js b/cps/static/js/main.js index ea0a2b03..d6bbd078 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -120,7 +120,7 @@ $(function() { .removeClass("hidden") .find("span").html(data.commit); - data.history.reverse().forEach(function(entry) { + data.history.forEach(function(entry) { $("" + entry[0] + "" + entry[1] + "").appendTo($("#update_table")); }); cssClass = "alert-warning"; diff --git a/cps/templates/admin.html b/cps/templates/admin.html index e196019f..e43e3f6b 100644 --- a/cps/templates/admin.html +++ b/cps/templates/admin.html @@ -105,7 +105,7 @@

{{_('Administration')}}

{{_('Reconnect to Calibre DB')}}
-
{{_('Restart Calibre-Web')}}
+
{{_('Restart Calibre-Web')}}
{{_('Stop Calibre-Web')}}
diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index b2826b39..dfda8816 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -76,7 +76,7 @@
-
+
@@ -88,6 +88,15 @@
+
+ + +
diff --git a/cps/ub.py b/cps/ub.py index f5822738..495faa05 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -46,6 +46,10 @@ SIDEBAR_PUBLISHER = 4096 DEFAULT_PASS = "admin123" DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083)) +UPDATE_STABLE = 0 +AUTO_UPDATE_STABLE = 1 +UPDATE_NIGHTLY = 2 +AUTO_UPDATE_NIGHTLY = 4 class UserBase: @@ -166,7 +170,6 @@ class User(UserBase, Base): sidebar_view = Column(Integer, default=1) default_language = Column(String(3), default="all") mature_content = Column(Boolean, default=True) - # theme = Column(Integer, default=0) # Class for anonymous user is derived from User base and completly overrides methods and properties for the @@ -259,7 +262,7 @@ class Downloads(Base): def __repr__(self): return ' 0: + return {'version': content[0], 'datetime': content[1]} + return False + + def _stable_version_info(self): + return {'version': '0.6.0'} + + def _nightly_available_updates(self, request_method): + tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) + if request_method == "GET": + repository_url = 'https://api.github.com/repos/janeczku/calibre-web' + status, commit = self._load_remote_data(repository_url +'/git/refs/heads/master') + parents = [] + if status['message'] != '': + return json.dumps(status) + if 'object' not in commit: + status['message'] = _(u'Unexpected data while reading update information') + return json.dumps(status) + + if commit['object']['sha'] == status['current_commit_hash']: + status.update({ + 'update': False, + 'success': True, + 'message': _(u'No update available. You already have the latest version installed') + }) + return json.dumps(status) + + # a new update is available + status['update'] = True + + try: + r = requests.get(repository_url + '/git/commits/' + commit['object']['sha']) + r.raise_for_status() + update_data = r.json() + except requests.exceptions.HTTPError as e: + status['error'] = _(u'HTTP Error') + ' ' + str(e) + except requests.exceptions.ConnectionError: + status['error'] = _(u'Connection error') + except requests.exceptions.Timeout: + status['error'] = _(u'Timeout while establishing connection') + except requests.exceptions.RequestException: + status['error'] = _(u'General error') + + if status['message'] != '': + return json.dumps(status) + + if 'committer' in update_data and 'message' in update_data: + status['success'] = True + status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.') + + new_commit_date = datetime.datetime.strptime( + update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parents.append( + [ + format_datetime(new_commit_date, format='short', locale=web.get_locale()), + update_data['message'], + update_data['sha'] + ] + ) + + # it only makes sense to analyze the parents if we know the current commit hash + if status['current_commit_hash'] != '': + try: + parent_commit = update_data['parents'][0] + # limit the maximum search depth + remaining_parents_cnt = 10 + except IndexError: + remaining_parents_cnt = None + + if remaining_parents_cnt is not None: + while True: + if remaining_parents_cnt == 0: + break + + # check if we are more than one update behind if so, go up the tree + if parent_commit['sha'] != status['current_commit_hash']: + try: + r = requests.get(parent_commit['url']) + r.raise_for_status() + parent_data = r.json() + + parent_commit_date = datetime.datetime.strptime( + parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parent_commit_date = format_datetime( + parent_commit_date, format='short', locale=web.get_locale()) + + parents.append([parent_commit_date, + parent_data['message'].replace('\r\n','

').replace('\n','

')]) + parent_commit = parent_data['parents'][0] + remaining_parents_cnt -= 1 + except Exception: + # it isn't crucial if we can't get information about the parent + break + else: + # parent is our current version + break + + else: + status['success'] = False + status['message'] = _(u'Could not fetch update information') + + # a new update is available + status['update'] = True + if 'body' in commit: + status['success'] = True + status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.') + + new_commit_date = datetime.datetime.strptime( + commit['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parents.append( + [ + format_datetime(new_commit_date, format='short', locale=web.get_locale()), + commit['message'], + commit['sha'] + ] + ) + + # it only makes sense to analyze the parents if we know the current commit hash + if status['current_commit_hash'] != '': + try: + parent_commit = commit['parents'][0] + # limit the maximum search depth + remaining_parents_cnt = 10 + except IndexError: + remaining_parents_cnt = None + + if remaining_parents_cnt is not None: + while True: + if remaining_parents_cnt == 0: + break + + # check if we are more than one update behind if so, go up the tree + if commit['sha'] != status['current_commit_hash']: + try: + r = requests.get(parent_commit['url']) + r.raise_for_status() + parent_data = r.json() + + parent_commit_date = datetime.datetime.strptime( + parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz + parent_commit_date = format_datetime( + parent_commit_date, format='short', locale=web.get_locale()) + + parents.append([parent_commit_date, parent_data['message'], parent_data['sha']]) + parent_commit = parent_data['parents'][0] + remaining_parents_cnt -= 1 + except Exception: + # it isn't crucial if we can't get information about the parent + break + else: + # parent is our current version + break + status['history'] = parents[::-1] + return json.dumps(status) + return '' + + def _stable_available_updates(self, request_method): + if request_method == "GET": + parents = [] + # repository_url = 'https://api.github.com/repos/flatpak/flatpak/releases' # test URL + repository_url = 'https://api.github.com/repos/janeczku/calibre-web/releases' + status, commit = self._load_remote_data(repository_url) + if status['message'] != '': + return json.dumps(status) + if not commit: + status['success'] = True + status['message'] = _(u'No release information available') + return json.dumps(status) + version = status['current_commit_hash'] + current_version = status['current_commit_hash'].split('.') + + # we are already on newest version, no update available + if 'tag_name' not in commit[0]: + status['message'] = _(u'Unexpected data while reading update information') + return json.dumps(status) + if commit[0]['tag_name'] == version: + status.update({ + 'update': False, + 'success': True, + 'message': _(u'No update available. You already have the latest version installed') + }) + return json.dumps(status) + + i = len(commit) - 1 + while i >= 0: + if 'tag_name' not in commit[i] or 'body' not in commit[i]: + status['message'] = _(u'Unexpected data while reading update information') + return json.dumps(status) + major_version_update = int(commit[i]['tag_name'].split('.')[0]) + minor_version_update = int(commit[i]['tag_name'].split('.')[1]) + patch_version_update = int(commit[i]['tag_name'].split('.')[2]) + + # Check if major versions are identical search for newest nonenqual commit and update to this one + if major_version_update == int(current_version[0]): + if (minor_version_update == int(current_version[1]) and patch_version_update > int(current_version[2])) \ + or minor_version_update > int(current_version[1]): + parents.append([commit[i]['tag_name'],commit[i]['body'].replace('\r\n', '

')]) + i -= 1 + continue + if major_version_update < int(current_version[0]): + i -= 1 + continue + if major_version_update > int(current_version[0]): + # found update update to last version before major update, unless current version is on last version + # before major update + if commit[i+1]['tag_name'].split('.')[1] == current_version[1]: + parents.append([commit[i]['tag_name'], + commit[i]['body'].replace('\r\n', '

').replace('\n', '

')]) + status.update({ + 'update': True, + 'success': True, + 'message': _( + u'A new update is available. Click on the button below to update to version: ') + + commit[i]['tag_name'], + 'history': parents + }) + self.updateFile = commit[i]['zipball_url'] + else: + status.update({ + 'update': True, + 'success': True, + 'message': _( + u'A new update is available. Click on the button below to update to version: ') + + commit[i + 1]['tag_name'], + 'history': parents + }) + self.updateFile = commit[i +1]['zipball_url'] + break + if i == -1: + status.update({ + 'update': True, + 'success': True, + 'message': _(u'A new update is available. Click on the button below to update to the latest version.'), + 'history': parents + }) + self.updateFile = commit[0]['zipball_url'] + return json.dumps(status) + + def _get_request_path(self): + if config.get_update_channel == UPDATE_STABLE: + return self.updateFile + else: + return 'https://api.github.com/repos/janeczku/calibre-web/zipball/master' + + def _load_remote_data(self, repository_url): + status = { + 'update': False, + 'success': False, + 'message': '', + 'current_commit_hash': '' + } + commit = None + version = self.get_current_version_info() + if version is False: + status['current_commit_hash'] = _(u'Unknown') + else: + status['current_commit_hash'] = version['version'] + try: + r = requests.get(repository_url) + commit = r.json() + r.raise_for_status() + except requests.exceptions.HTTPError as e: + if commit: + if 'message' in commit: + status['message'] = _(u'HTTP Error') + ': ' + commit['message'] + else: + status['message'] = _(u'HTTP Error') + ': ' + str(e) + except requests.exceptions.ConnectionError: + status['message'] = _(u'Connection error') + except requests.exceptions.Timeout: + status['message'] = _(u'Timeout while establishing connection') + except requests.exceptions.RequestException: + status['message'] = _(u'General error') + + return status, commit + + +updater_thread = Updater() diff --git a/cps/web.py b/cps/web.py index 68d2be13..1f7a052f 100644 --- a/cps/web.py +++ b/cps/web.py @@ -57,6 +57,7 @@ from redirect import redirect_back import time import server from reverseproxy import ReverseProxied +from updater import updater_thread try: from googleapiclient.errors import HttpError @@ -1139,127 +1140,7 @@ def get_matching_tags(): @app.route("/get_update_status", methods=['GET']) @login_required_if_no_ano def get_update_status(): - status = { - 'update': False, - 'success': False, - 'message': '', - 'current_commit_hash': '' - } - parents = [] - - repository_url = 'https://api.github.com/repos/janeczku/calibre-web' - tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) - - if request.method == "GET": - version = helper.get_current_version_info() - if version is False: - status['current_commit_hash'] = _(u'Unknown') - else: - status['current_commit_hash'] = version['hash'] - - try: - r = requests.get(repository_url + '/git/refs/heads/master') - r.raise_for_status() - commit = r.json() - except requests.exceptions.HTTPError as e: - status['message'] = _(u'HTTP Error') + ' ' + str(e) - except requests.exceptions.ConnectionError: - status['message'] = _(u'Connection error') - except requests.exceptions.Timeout: - status['message'] = _(u'Timeout while establishing connection') - except requests.exceptions.RequestException: - status['message'] = _(u'General error') - - if status['message'] != '': - return json.dumps(status) - - if 'object' not in commit: - status['message'] = _(u'Unexpected data while reading update information') - return json.dumps(status) - - if commit['object']['sha'] == status['current_commit_hash']: - status.update({ - 'update': False, - 'success': True, - 'message': _(u'No update available. You already have the latest version installed') - }) - return json.dumps(status) - - # a new update is available - status['update'] = True - - try: - r = requests.get(repository_url + '/git/commits/' + commit['object']['sha']) - r.raise_for_status() - update_data = r.json() - except requests.exceptions.HTTPError as e: - status['error'] = _(u'HTTP Error') + ' ' + str(e) - except requests.exceptions.ConnectionError: - status['error'] = _(u'Connection error') - except requests.exceptions.Timeout: - status['error'] = _(u'Timeout while establishing connection') - except requests.exceptions.RequestException: - status['error'] = _(u'General error') - - if status['message'] != '': - return json.dumps(status) - - if 'committer' in update_data and 'message' in update_data: - status['success'] = True - status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.') - - new_commit_date = datetime.datetime.strptime( - update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz - parents.append( - [ - format_datetime(new_commit_date, format='short', locale=get_locale()), - update_data['message'], - update_data['sha'] - ] - ) - - # it only makes sense to analyze the parents if we know the current commit hash - if status['current_commit_hash'] != '': - try: - parent_commit = update_data['parents'][0] - # limit the maximum search depth - remaining_parents_cnt = 10 - except IndexError: - remaining_parents_cnt = None - - if remaining_parents_cnt is not None: - while True: - if remaining_parents_cnt == 0: - break - - # check if we are more than one update behind if so, go up the tree - if parent_commit['sha'] != status['current_commit_hash']: - try: - r = requests.get(parent_commit['url']) - r.raise_for_status() - parent_data = r.json() - - parent_commit_date = datetime.datetime.strptime( - parent_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz - parent_commit_date = format_datetime( - parent_commit_date, format='short', locale=get_locale()) - - parents.append([parent_commit_date, parent_data['message'], parent_data['sha']]) - parent_commit = parent_data['parents'][0] - remaining_parents_cnt -= 1 - except Exception: - # it isn't crucial if we can't get information about the parent - break - else: - # parent is our current version - break - - else: - status['success'] = False - status['message'] = _(u'Could not fetch update information') - - status['history'] = parents - return json.dumps(status) + return updater_thread.get_available_updates(request.method) @app.route("/get_updater_status", methods=['GET', 'POST']) @@ -1284,12 +1165,12 @@ def get_updater_status(): "11": _(u'Update failed:') + u' ' + _(u'General error') } status['text'] = text - helper.updater_thread = helper.Updater() - helper.updater_thread.start() - status['status'] = helper.updater_thread.get_update_status() + # helper.updater_thread = helper.Updater() + updater_thread.start() + status['status'] = updater_thread.get_update_status() elif request.method == "GET": try: - status['status'] = helper.updater_thread.get_update_status() + status['status'] = updater_thread.get_update_status() except AttributeError: # thread is not active, occours after restart on update status['status'] = 7 @@ -1957,13 +1838,13 @@ def shutdown(): abort(404) -@app.route("/update") +'''@app.route("/update") @login_required @admin_required def update(): - helper.updater_thread = helper.Updater() + # updater.updater_thread = helper.Updater() flash(_(u"Update done"), category="info") - return abort(404) + return abort(404)''' @app.route("/search", methods=["GET"]) @@ -2862,20 +2743,23 @@ def profile(): @login_required @admin_required def admin(): - version = helper.get_current_version_info() + version = updater_thread.get_current_version_info() if version is False: commit = _(u'Unknown') else: - commit = version['datetime'] - - tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) - form_date = datetime.datetime.strptime(commit[:19], "%Y-%m-%dT%H:%M:%S") - if len(commit) > 19: # check if string has timezone - if commit[19] == '+': - form_date -= datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:])) - elif commit[19] == '-': - form_date += datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:])) - commit = format_datetime(form_date - tz, format='short', locale=get_locale()) + if 'datetime' in version: + commit = version['datetime'] + + tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) + form_date = datetime.datetime.strptime(commit[:19], "%Y-%m-%dT%H:%M:%S") + if len(commit) > 19: # check if string has timezone + if commit[19] == '+': + form_date -= datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:])) + elif commit[19] == '-': + form_date += datetime.timedelta(hours=int(commit[20:22]), minutes=int(commit[23:])) + commit = format_datetime(form_date - tz, format='short', locale=get_locale()) + else: + commit = version['version'] content = ub.session.query(ub.User).all() settings = ub.session.query(ub.Settings).first() @@ -3100,6 +2984,8 @@ def configuration_helper(origin): content.config_goodreads_api_key = to_save["config_goodreads_api_key"] if "config_goodreads_api_secret" in to_save: content.config_goodreads_api_secret = to_save["config_goodreads_api_secret"] + if "config_updater" in to_save: + content.config_updatechannel = int(to_save["config_updater"]) if "config_log_level" in to_save: content.config_log_level = int(to_save["config_log_level"]) if content.config_logfile != to_save["config_logfile"]: From 836c6fd245aeab2a78c577ef970dd7d7ad257cfc Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Sun, 20 Jan 2019 19:37:45 +0100 Subject: [PATCH 03/20] Updated translations Added license texts in flies --- cps/book_formats.py | 16 + cps/cache_buster.py | 16 + cps/cli.py | 17 + cps/comic.py | 16 + cps/converter.py | 18 + cps/db.py | 17 + cps/epub.py | 16 + cps/fb2.py | 16 + cps/gdriveutils.py | 19 + cps/helper.py | 18 + cps/redirect.py | 28 + cps/reverseproxy.py | 16 + cps/server.py | 17 + cps/static/js/caliBlur.js | 20 +- cps/static/js/details.js | 17 + cps/static/js/get_meta.js | 17 +- cps/static/js/main.js | 17 + cps/static/js/shelforder.js | 17 + cps/static/js/table.js | 17 + cps/templates/config_edit.html | 4 +- cps/translations/de/LC_MESSAGES/messages.mo | Bin 46989 -> 47593 bytes cps/translations/de/LC_MESSAGES/messages.po | 499 ++++++++++-------- cps/translations/es/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/translations/fr/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/translations/hu/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/translations/it/LC_MESSAGES/messages.po | 452 +++++++++------- cps/translations/ja/LC_MESSAGES/messages.po | 452 +++++++++------- cps/translations/km/LC_MESSAGES/messages.po | 454 +++++++++------- cps/translations/nl/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/translations/pl/LC_MESSAGES/messages.po | 452 +++++++++------- cps/translations/ru/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/translations/sv/LC_MESSAGES/messages.po | 458 ++++++++-------- .../zh_Hans_CN/LC_MESSAGES/messages.po | 458 ++++++++-------- cps/ub.py | 17 + cps/updater.py | 40 +- cps/uploader.py | 16 + cps/web.py | 20 + cps/worker.py | 16 + messages.pot | 437 ++++++++------- 39 files changed, 3682 insertions(+), 2718 deletions(-) diff --git a/cps/book_formats.py b/cps/book_formats.py index 58d21df5..93febb4b 100644 --- a/cps/book_formats.py +++ b/cps/book_formats.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2016-2019 lemmsh cervinko Kennyl matthazinski OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import logging import uploader import os diff --git a/cps/cache_buster.py b/cps/cache_buster.py index 31c98c79..edd73cec 100644 --- a/cps/cache_buster.py +++ b/cps/cache_buster.py @@ -1,3 +1,19 @@ +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2016-2019 jkrehm andy29485 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + # Inspired by https://github.com/ChrisTM/Flask-CacheBust # Uses query strings so CSS font files are found without having to resort to absolute URLs diff --git a/cps/cli.py b/cps/cli.py index 7f8d9ab3..26741c57 100644 --- a/cps/cli.py +++ b/cps/cli.py @@ -1,6 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import argparse import os import sys diff --git a/cps/comic.py b/cps/comic.py index 98343ae7..05ffef9b 100644 --- a/cps/comic.py +++ b/cps/comic.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import zipfile import tarfile import os diff --git a/cps/converter.py b/cps/converter.py index 666a4b56..bfcf0879 100644 --- a/cps/converter.py +++ b/cps/converter.py @@ -1,5 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2016-2019 Ben Bennett, OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + import os import subprocess import ub diff --git a/cps/db.py b/cps/db.py index dfa01f54..225bcf4e 100755 --- a/cps/db.py +++ b/cps/db.py @@ -1,6 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2012-2019 mutschler, cervinko, ok11, jkrehm, nanu-c, Wineliva, +# pjeby, elelay, idalin, Ozzieisaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + from sqlalchemy import * from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import * diff --git a/cps/epub.py b/cps/epub.py index 10665576..76d74793 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 lemmsh, Kennyl, Kyosfonica, matthazinski +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import zipfile from lxml import etree import os diff --git a/cps/fb2.py b/cps/fb2.py index 87295ab8..adcac758 100644 --- a/cps/fb2.py +++ b/cps/fb2.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 lemmsh, cervinko, OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + from lxml import etree import uploader diff --git a/cps/gdriveutils.py b/cps/gdriveutils.py index cfe2564b..ffddb9d3 100644 --- a/cps/gdriveutils.py +++ b/cps/gdriveutils.py @@ -1,3 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 idalin, OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + try: from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive diff --git a/cps/helper.py b/cps/helper.py index 605c0fd6..94da9e5c 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -1,6 +1,24 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2012-2019 cervinko, idalin, SiphonSquirrel, ouzklcn, akushsky, +# OzzieIsaacs, bodybybuddha, jkrehm, matthazinski, janeczku +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + import db import ub from flask import current_app as app diff --git a/cps/redirect.py b/cps/redirect.py index b521bc28..7b3981c4 100644 --- a/cps/redirect.py +++ b/cps/redirect.py @@ -1,3 +1,31 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Flask License +# +# Copyright © 2010 by the Pallets team. +# +# Some rights reserved. + +# Redistribution and use in source and binary forms of the software as well as +# documentation, with or without modification, are permitted provided that the +# following conditions are met: +# +# Redistributions of source code must retain the above copyright notice, this list of conditions +# and the following disclaimer. +# Redistributions in binary form must reproduce the above copyright notice, this list of conditions +# and the following disclaimer in the documentation and/or other materials provided with the distribution. +# Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # http://flask.pocoo.org/snippets/62/ try: diff --git a/cps/reverseproxy.py b/cps/reverseproxy.py index db2c4a3b..5e2ce271 100644 --- a/cps/reverseproxy.py +++ b/cps/reverseproxy.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018 cervinko, janeczku, OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + class ReverseProxied(object): """Wrap the application in this middleware and configure the front-end server to add these headers, to let you quietly bind diff --git a/cps/server.py b/cps/server.py index 9e5165be..9c5993aa 100644 --- a/cps/server.py +++ b/cps/server.py @@ -1,6 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2012-2019 janeczku, OzzieIsaacs, andrerfcsantos, idalin +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + from socket import error as SocketError import sys import os diff --git a/cps/static/js/caliBlur.js b/cps/static/js/caliBlur.js index 4da3db7c..66eedafa 100644 --- a/cps/static/js/caliBlur.js +++ b/cps/static/js/caliBlur.js @@ -1,3 +1,19 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2018-2019 hexeth + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ // Move advanced search to side-menu $( 'a[href*="advanced"]' ).parent().insertAfter( '#nav_new' ); $( 'body' ).addClass('blur'); @@ -200,7 +216,7 @@ return $(this).text().replace(/^\s+|^\t+|\t+|\s+$/g, ""); $('.downloadBtn' ).click( function() { $( '.leramslist' ).toggle(); }); - + $('#sendbtn2' ).click( function() { $( '.sendtokindle-drop' ).toggle(); }); @@ -231,7 +247,7 @@ return $(this).text().replace(/^\s+|^\t+|\t+|\s+$/g, ""); $( '.readinbrowser-drop' ).attr("style", "left: " + position + "px !important; right: auto; top: " + topPos + "px"); } } - + if ( $( '#sendbtn2' ).length > 0 ) { position = $( '#sendbtn2' ).offset().left if ( position + $( '.sendtokindle-drop' ).width() > $( window ).width() ) { diff --git a/cps/static/js/details.js b/cps/static/js/details.js index 33335339..491d23bb 100644 --- a/cps/static/js/details.js +++ b/cps/static/js/details.js @@ -1,3 +1,20 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2018 jkrehm + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + /* global _ */ $(function() { diff --git a/cps/static/js/get_meta.js b/cps/static/js/get_meta.js index 99ae0a7b..4598228a 100644 --- a/cps/static/js/get_meta.js +++ b/cps/static/js/get_meta.js @@ -1,6 +1,21 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2018 idalin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ /* * Get Metadata from Douban Books api and Google Books api - * Created by idalin * Google Books api document: https://developers.google.com/books/docs/v1/using * Douban Books api document: https://developers.douban.com/wiki/?title=book_v2 (Chinese Only) */ diff --git a/cps/static/js/main.js b/cps/static/js/main.js index d6bbd078..902f6b47 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -1,3 +1,20 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2012-2019 mutschler, janeczku, jkrehm, OzzieIsaacs + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + // Generic control/related handler to show/hide fields based on a checkbox' value // e.g. // diff --git a/cps/static/js/shelforder.js b/cps/static/js/shelforder.js index 36390fb3..3f804ad5 100644 --- a/cps/static/js/shelforder.js +++ b/cps/static/js/shelforder.js @@ -1,3 +1,20 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2018 jkrehm, OzzieIsaacs + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + /* global Sortable,sortTrue */ Sortable.create(sortTrue, { diff --git a/cps/static/js/table.js b/cps/static/js/table.js index 4f038231..fad703ef 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -1,3 +1,20 @@ +/* This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) + * Copyright (C) 2018 OzzieIsaacs + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + $(function() { $("#domain_submit").click(function(event) { diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index dfda8816..bdd72946 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -92,9 +92,9 @@ diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index c006284c4953ec52c19600951c3ead834bf4f005..c75344091dff34a4091b382dcee93fd90d2d7c7c 100644 GIT binary patch delta 15004 zcmZ|Wd3=sn-pBDfi9|$55PNVV5?e^b9!pap)>3ON)5Jip~_RqMf!(Ra;{$?J!lUweVLGy)XB;Y!$r#G|o~NzDJnOK?T#j1k4XlY9Q9FDewZLbn04|`Cb`2|G`OY3s z1FVkf*ABI@o>&_PU>nTFAlCP+q@an{ssVSQBHWLf=%_va2Wp}_sD7SAk0%1kqjnaF z8rQ_?t<8?8g_BU@Mx*9QLq|J%l0r3{WgV7VhgDYJXl}!b^eaWB^Z@E;j-UcKg_`)R z`8_HFSFQd#Y90SB?wzX9h5Rd`7#cKTD^yAoP-oc$`jhr&5~a2wlEuiV|uKr$-wA*h{ly-sUN&iDsiRv=B8xG3vIz zjk>%CQT@(fCp?D=ta_4bebi-*L1nxPHq`syhk^!8-A9e$;hi&!#x1gYf$D+P)lTi__M@75?wbP@hGd_b_ z_*>LbTtRK%25R9u7=wO2Jf23_498%9Y>aPW6n=u0S>N+B1)Z&5vKwI#>a__)O&DqQ zCic7?CeWUU0XPvANWS@$`5cy`eI7QzMOYt8P=TF5M+;o1pb74vcK8SCwpQ%v2GS6f z+IUo^dZ6yYP*ndXP#GJK%EUBtCI(WUhgxSb>W&qoGPJ!X`ENzxOB(bV1@&?t#G?Wj zi3)5YYJw@K%jckWv=RgHUGpH;qyCZAFQUd>MP2fn7=)El+&dJJLjE;TV;Yp29;g9n zsGW|-hByPu;cC>**Q0LzTd18M!n*h=>aJWx^}mDacOSKIcyBjDHBkXIa42X;ols{o z6t(bF)I#&HJQkrAc+K2{>URd);zg{1wflHH+&@noa;-f1$S1|K2bHPYSOM>0Fgihf z-AfdPim)0g6LnB$-U;=(^+WA+l(lE0`cFq)#+k@R(6h_xKVuW>(f!%= zBLO*{JruOV_fcnl6gBZVjKS}*Cx-NQCme*$sZT-eV6C|YHBTuj_4_dd52D_Z(1smfK)McHD>R*hJxDi9~L)4B>qIP^171(*y zMlPa0Xtz;!sp3HLuR;t3?W6~4;Q^?DLs4fn3UxI3s1(mf1^O~-+)C8K8&Ko6o4Zl{ z_M_%KVjee74^bbYtKNflQW3?>-CvPL)i|@?Wl;~MWyZ#cE&TPBdPqT8$caYfKjL~TT9f$$*9cr zMg7K;j_NlRl@Z6Br-IJzWz?CjM(u1HDu8#)_fZQUvHEAI{$HXd{)e^ygzEPThM{M$ zyI{Ck8#R9;RHmGk6tqx0R>h9UZ`_`KsEKEzcC-+6RIi{WSc@9B6}6+ct-c=>*oT;i zpP>Q@9pcVc%k&}vIG&~yv_LE>g$byM`=KTtZ1vGrPeb(|j|y0u0wKfQ=Mkuh zBhALB`I?&vsDQhm0!kWA{;N?)p+NzRMlFUfTBCGIG}p80BuD zBC20FY9qB#{i3Yi(w=ufuipQMC@4j#sI#1kZEy~1;67}ChfouKhjI8Lw#9m*-Bb?7 zmehTy%lH~9gZofBKa8F67(vP5dx6!U3oqOhWB+I_ga4n#J~fGuEbk z2P*Jms8oNA`VjquI)VqNK*Imz_N#;H*9;vk+?9eB=#6@<9z)&!38=_tqB1cT)&C{b zk*&1$&8U9cQRCk+kE7W-Cr+?}VwDe_huTpRYQjNS6Eji2 z2|a_#&|0j4TQC|AVGLfzC=7qXecjrj0#3r-_=s8jgu};&h6^+(fTm;Jly*d=Xt0@u zn&2taPUoTmSd2<>F)BlEqMq+G_o6m<05$$N>T-XD>VMv`!X>Or!@p2x9+K*&s1~Z; z7_#M(gemec!xo`Npd59VErrCu$= zohS*l@DQtyL`^Ur_1!2i7ho;wYf$s;Lv7%c)i0p#)E!j6&`joMeNPh#UhII1_%S`e z38)1et1m+>ycv~&9jMIgvHAh4e}sDNK1F5rJ9~Z|m9g8Xah@#Z)xTYD6 zDb(9xPkaW|?=Y6#X4DyfWnRW0>US^!|3LLm$aecDqMr9g1voI9{ATF*O<{FkQ?O@kI_ zg-U%pRC@|);6T)w4#i;1MNLp>^{1^q8`Xb-)n7twV42m|pw`)BmN*o2Yj29Dd?*ml-i1F^u>zhrGc^ywnx8P}u z+G!Vz!~xd+Br0WjsEDVd0-J^EKgXUI+w;{{-;7%LEz}0~qBd|4b$L%?oZkO$twVUO zd;4pdF{n>+dkn?FsQ2~>R6x^Em)9{Dqf)&J8{=oFe!pNnyo<_A?FsHiVzBJ@|2PVv zJm`!%^Ayw$`=cTrgq1K2HPIwgzs0CaS!8ZC4`XxM&!I9987M|&_Ct)ulc){cMvbd5iSt(~ zt4wkisA1MawMUuFPy<_`GLeM(RQJbLn2P!_yaX%bF|34NqjvgF)W&Yu^V{}3(3$N1 zI$RBPwlz=#+M;&c6~i$Zbs2}DF4tt#4wj)Zv*q z2P&{*SWWN$Hxy!N_%|xm4W_y&j6(%B61Cts)TPS9zPJjt@MYAvTd078rn&85sJjx0 z3Lpk`WJ%WEM|IZs45gq2#-LJ{W#(D?v#7f<50$!2sEM|rzLdLAnK*?C;1X)S>!>^Q zo9UVE9&vfp_}b`Hr_hjs7Vd!BQ4i}d2$g}ytUVj6Q7=I4cphrOS5Zf_4t3eyMvXg& z%D_of;AgQ0UNC>1PX2Wkm7j7aYKZFC+>ArLhV4-iC!!YUVeOBi0w0draT<2OTyq1q zqyBfRSAE+3kJ5dyBkgOSCjT)M&eEWX{b#s_V_WL=u{{pKNL+wAip}W7qu2m1VI&4U zX}Ezyw^1YX2)Lurv4&eurAP z(R1#Zwnbge30MoCwR$nC-=9(A-^F0P|9>qj@cNi%F_{iOpmx}F7C#|z6n4f_*c3yb zcYniahq|QwP?;Kp%FsyErJR5YXe#O`=ArJ^QVd{y&&L$>o_>Ow;B(YYzp?hq*ns+V z)WTu2-M?_`i0Yqajz{gR0Bhqc)WWZ0T`WOm;A7PM=g`sneu;tx-b9_1-wUo4Fpzo` z)Iv2;6M3;QcEL6{7QI-6^>7#JgLE3Tv45h*{|j}*zhX32okRWuDRi3SUZU<8Lwz8s zeJX0;Ggu$zU=VIZ-HmOiw_rau#mlJvRpz=ouY(P#w?G}m0MrL)1nPD5%_aY8c#(!^ zT!)JMV=RZ~QLohx7=(9G3;54-Gf@$nP>;dpH~=+%8Y=aRFc?>(0^W>T_#ITgGY$pa z?#md3k@NZ62~5I)xCHy-1yn|27q~k~z+mcKQJ1P0D!{?m6i1>y?XysqaRusounlzw z4xj>ZPEqJW;R5!59Be^-6L!VZ*bKuLx|gdnDxjelf}>CiW}@!W)7Td0V^915 zTVlCI?rR&5Y{2p4Q7EqgZiDA}b0JoueHjMedK`e8F%fTJD8?^#kFFawqMnJ`**w&T zso30%3UrUvKP;2;KTSake2@Nk33WDCumV0n?KJo$_fAws9aS}~j2%&_O+ob^h1yUC zD!^RSC7h0WJ6=QGjeS^4@Bc9hVfX`9!kehe=eNXNI0$t)Ls1hYpkBjas2xv61+o;i z@Oo6hTTx%Yov2HE40UI|H?N_i0l!eFi1)B;r!TvgsWNH@)lsQygnAxp&l6A!bhhV1 z?D^xUOk`NQ54ExBR-cRE)L(g-^Ve-%PlE=WK<)f*<~dYg7f?s^qj>|%0!Mv-?x7ZF z{fgVatJw#2l*6z+K56Z1QR|hwLjE<;9vYO&1E|;NdsNDHdr@b30CgumMJ;$9brhFT6Wqe8=(p5e zFanj*2AGU-sD6d0g`Pvr`x0us)u{EHO%yb+#2P+84LFJ^c*ff6F0(s;nm879RGmUkSfhB~3{Q~poJZ*jtfu&)?iI6L0!h9s1$yI z3g|5A5?(-!zljR`0jht{tL_GBpxT?D0*l26Z2KztuT7y34b3p!IxIr%XepKjV(lg7 zE>r;fQ41eJ?ev7Te}M}894g?OsPD%e)V%jlfdsE4|4MP#O4s^W7NOPKTD=DREA6J`C-Qjf5o0W_yl!%s=ek;)EsM3?}X7f z82jLK)MY%3%EUj+Yp4MKjmpe@)DZ>0?phZWXe-o4oetK}4K-1UIRN$3Y6vQolTica zqkc**K}}SI`hL8Q-LM2T&yVKM<{i{sdw_bqgIASp(DBrupaD%#DQkg>JkCr+rLLFN zA3-fV65C=LDy79(4NI*35USs8)TjLqRAw5jcK@8v3ft@b&!$k12dgmw-@`h119f&4 z-*6|Yg?*_v#1za$1-uKjqkX7_{({=TRn*lfR3NRfg+n2cf)>m+XQ5KQ z3UwEDqXwKnE%X)YOfR8!_#0{=|F!NyRn2I#GpgSssK7>`#;0M~|Nf_tg3jh;)WWZs zrKrny-0BxmM{y5z=H=G80aZuU8=GxWf%n7)I0iM(3~Y_dP?Yt$&_}09N8g~l=@jhyNz-G5S6jhJFAgqVlxD!Po zok6`x40RJ!LmS6mudv+R{Jm(=b|p%Zft^IpfY(E)jw>j zyTNEwKnYm(_y3)(AsMx^eyE*~L>++-L-09sAqG<~MoqK^%j0HL=C-3Uc@PKTCzy=& zx4HADqxwxory_+}6hd(^YQoo0@98>JCQf50UPV3s6&2tE)a9&J;vPjKtU$dfs=WoRCaU9R)I@Kg7T$~H@F*&k$53bg9cuhPQ5pCdwZQLI zuk@BXt~xfNy$)*LuBdra-s1cb2(~mH>XL4^ z_D{{vQ6HGIs12P*eHkyI7QTlH(5bf5y~Pbt?`>z)gJG!1(@_ggL+yN)IUhCg5_`S^ z^){@-Slo}w%oS9sZ=vS#f7=Z#6nX0$PdEil+y-@)olqTBZ$Fj*akIW zFVsT)QK=h_n)pxlJPR9B&$apzRR86uz}8rO1Nu{c3w1YkzQg%zqW5Xg#2;Z2eqx60 zaRYf2JJOzs5x5#PK`AQb2T2wW*d1G7HY!6!wJB(VRj6M= z*J3j~u&?yp_FliD*&QB=n39>7pEJ?d+1sS46`SRke%T?hLGA2u1-a8bkK~l;ZJJbA zFmXa^K~8$JqOcK@>*ZzUW~Sz6dUJeP6Z6zQ(dSK_lA4p7nwFbcI%C9V0SzXl=H>XZ zy%`hJ3nygy3cPgmPNJ!R)>f@rmG&O}_mCR&_6#Y|p#QbR&Mh@c+h>IZmQNp->hoph zmi8HcA~3j3oHxEx=Y;k}^(NO1?-UysAN$`eE#l&fdQbkQl6Od9`na^r?7W<;EN^LC zUVFc4IX>k8d*k|Jb?rsX}k+_=3XJ+?@QJ%)CrrQAU1u zzgDH|^IQ8D-7TzDdb#igzlc$Vd57OiA5Z5zZ|~H?g8a;!g3@VIua)oF%EPQ_IlhcS zUv_?0=D6IFC){N>ML5~4Dst+ zdei9@P_#X{R?(p6_xW`%tuVV%Ia+JZI~m|#kW+N|#U4fJ`H@Av7J7*|rgYJo zN`8^UCZuKhGC4_~HzPC8o6JGvcylIr2W6#Z6y0B2w<@RNRl>3}i7_`dJJVPC<=U?U z!j!ZB$x^DX^n;E4{rno1hHTy%P%AAbx9slZSm}Y-VT7jNLF}AI36cA3HM`*=0$|GR7cFW~dN1YJ`k1RF+Ozii4Bo z8=_Tr%^k*g<2rIr3QzzVC!JTt!8A12xfob-*g=ZlYAwz?K+~?NK}Hj~e%=)km9?umbJVP~(=N z0$PRI*gEv$D7<4G4qJ!st$y0Ph>`TWf=cOaR0{t_1rX87O&n)dLS>-3)f=PMX@$B= zy-)!SYvuEbC(NZmXFd*fmQSK0or_v<5o%zOxgHh3PE-INp^oee^9X9(G1NRKQ5(2m z?blG_Z?+=;S~#$^&sQ6xu^u+XMmQW(a4E7`-v`JG;Jb@;F}01G_z`n7)~9_kCgWNx zgNINlKZiP!yI2w9y|(T_Lu^Vz7gPpjpdw$0+Q~9h%2t@Kp?1Cjb@tn=eJ^UUUZr*}fTlQ{h90QfycIRkd#DV3ikjeSd;S~ha^6Api)zos#CTL- zJ}cxwd3DW&u?RC^mTCKV^Qsu zP)AoCm5JV{jSaviI1*!6-?xH-zEqn~5uQXvd>J+1KI-yBb#x1tM;%2q)I!Oqz*Dg{ zreif6fsbGTR>yN#150#r8>xrEtnW*wpa|QcUYktRg#E4ls6C&6jcK2ZLAVhW$QILY z?nT|1eOMLuV->uF3M?eU&0hySO^`}KJ8Xfvtr@652BT6t7Ij2VqwYc>s{hNVjIBpy zV!OEqwV{2ejeLf>{a>Rp^b0n?m`w7o*Qi~ldoUIiz*1CT8&MN%MP0tPQ9C+{A$Z-q zg9+6Cv3f#hH?BJBmZzZR>x{ZXJy7#J(wY1#HBZx^g;t?u!yxp!Qc#55QJLt6I`ceKs-8vd zw8+|DL-pT*x{P~}kD2eP)$4Wh`D#)hifLGYn)huikH=5}T|+kL`EF6rncqiE9RGm3 z3zd-L^mRf_I3MfcR@4qonCFp+d{k-u5_#HJ*=!49y z_rEj+HPk^Zn1(uvuBe4)qcZcHxd@fQ<)}-v61DIKRA4($^X)~A{{*%0LDW3wQAhPF zdK!3}f>IRJ-*t#W)#FeTRqFSp9j_Td~w!W9{2e8QpF5k5GXeKyB!#wVy#9-6fBL z7P^k=c-!iM16>M3Q31rDeq_pFL#&8;&%2=}8jNKy7xj0*4Ad9$L)4B>qSiTw3h-yt zdftC2l&0`Mv*aMRa3X5qWUDtqP1MqChZ>iOI?I8m{*R#o&9nLxRDe%o2F^##^Oe){ zeQOOTP?zQ`>JD5+9nD|nKd2pqKIHmEp>|RR)i2TNb?kX#Or*UvDlo5x|P@j*AcpWOmJ5V2*{ixI*Lj`ad)$cm0Um*XhLkpHg&6|XJ zYf@2{yE7`_htN~%hEdRf(WtY^N43vFb)1Kq;01F%YN9=;fDWOK<`in4bEw;X6&1i8 zRKM^cF3^go`I3i_|8f-C(xAU|2B1WP32B0p_XltK=x)bwJ zJ9`s#8F!=Z*1P7nSfBb8)I1flwXVlIO+gK5s0lJqAB-MmHkPM86*b{f)DAXTeGlqV z9YOWGh??&{CSuG;7jP=7y)$b5L8`O9Zvq7^JPVb9`KU8nZ1tC|{wnIV+ki^#UVHvI zDr1LH<9@LApRE21D&TA8KiGwO$sFGQObP=iXy9rrzRjpJ-fr$g1$G1*<8f5~s8Oze zJZga?48caI=gm-owME_fu2=&5p}q%$N0EOm^q4)Ejy0*zvHC_-X11axdK-iBBh*oR zhFb6pYQc+G0&9f7=K-e`BGG1!O))ln&a5OrJUVO`vX`qlagLot4g zTc9$AQLlzIv7WW}F$ZE0?L$!GhNChw2E);tZVw9VK_Ti$UPWE9t*G1j9){yl)XqEaGsAxE%YR62OjFO zEM|ZPFQGocH&OjdKjvQ3Dp*4Ae{%{tySAu--B7812&>~lROH(*0e7P^ z^Brm@=TQM(K`n3#b>>0iT@g2n&-*NuX1WiK<=^sp}NFQFFr2wUMH z)WTuo-3O*L>awMw&bo!wTca}85!JsNMqoeGcjQs@^k5PNO)w2LV3s)#^<`UZ&)1uq z%x$RgyR7~JR;2!^)z6xjP=Q@RW%8QU{~AyJBWbutgBA{*;5wAT*3`?QGSCmBa3rk26V$XNj^L-dd`(f1CeuL_N4HeKG)Ft;l?k;0#)ZMD@QP2+hpi=Y@Dxe`)2lH@# z0RJ$F%2drf_x}^5qW&((#Uxydweb_wWxIl-@ILB;lauduydJfIt*DH8J1JYpT4QhOrIS6B@=b|$36l&htR$qd;%quZo@BexVie!&H z*l&JqoobVe6Z zxBVt+V9--81F@*c6R<2+H`7r^(FYayNL0V^Wf?#hfQc7j?M5z)Q{1ZsH6B56ESQ$`L9YL zdAjS6g}NN0P^sRI+S$jb6dyv}iQ}jpowxSito<)D@M+gC8kLdqs0>%ZD%b#1u!l#X zB86#K4wvIF{0}O%C1<#WlTZuSM+MvhbwqWF1gD?t>bTZH_}tJOvfN46DyW9ob^5uS6}d7S-=PRDhpjV?1W0iFu z>HV)kK?{#WMf3#fc5cM-xX0?>nCDRw+&~2yILjGn#$yKU38?u-Aa9y)8Kz_8Z1;WW zjAiuxPo$t*T7a5x0V+jBs2y%V1+*P?2R=ewuCGv^?4UXBH4R0LFNw-PIcu+mRjDUq z9n8XH%)>C&_pMd|Uq|iiO{{?Lq89!hE8)+mOa(pT7AS*y{}avnsG~|ZJEAUMH`M&S zQS&^6)o}`XX%tpaNW?=}8LwhIMm+0wRuwftEz}t|#9G)5wZJ6Q?S2w#<8#)&6*X=r zR>AjCAGA}byK&)J@~_w6It_I&vA_+;LhZaSCSf+}C<;&?pchbqzG3x`Q30Jm1s*Wh z9cfwATU7~5U}IE3>8MO}noIs`QW#1@T`WLNuniT!r>Ftnqar?oTKIQVzsTp@?M}oR z)E~s2I2C*0=hz*~&vTi|L2cwQ)VxzX3c6G?u>>x_I=BSO;9k^a{2KK=xPZC?f1v^j zpYQ%sDvu9P?{D=rSdaQ?Y=aRC+@ z=Y78RI0nOT6NaMS>hGAJpyv4!gYZXGCeEN!H@nxhtOjoM&GOvEv$%eMfl>HU9$LP z;91lHmr%F(A5_ZAz2Hnl^-sn~Oht`rgStzdP#frm%G^MEKEj@lMo$Y&v<~yELlG(y zE3ADTYG-d+{asWBKEpbA9MwNyvDMR$ae#c+6_U};(owKC{!P?GU!Vd$h6>;!YT>I`5^rEB3|i{ui9;Pl0&09+jKyXi1ud9`G58>6 zU=FI|Ce%W^P!oTGTJR`p!5>lM&RP9Bs{dW=ieW{rUmw&ugHZEkqb{j8k%BJGWYnj1 z8mi+GRK%-M3;i2)`L@~fJy!q3o_~o7>|0a-C$0TgRN#NwbKf$T=`dtI&sWhEeAQ74 zr&ztY*&cOCvrrL_Ki<0|Bj-_<@g6FJkuSM`V$h4F zp)3VWkc^7F32H!V)Y)~n_J>iCXJb5$Mg5p~n2amz`NyaY9mL{5to^+CD=H&@zC`}D z@Lx1&r-3iK2a#BgdTCU|$*2!V1JuN6s6g7H0?afYwDxSPkG1+#R3NiZ;|oz6UGXyK zubr-;K>=(>O}H1e@B!4oudM!~c@{HhzldeA?g}@q1D2=W8?$f>>eBg9JO0l65f#W! z9tCCKD(Wb1n~^JBKvhsXt!?!NsEL}JZBRc-olqGYj_N-Z^=mi_wXtVV--(5&zXx7H z&Ex%Og`doyQJ3l}>OKAom64EDZa_RLGZj&RS2gRRQrgt&ZBPq$#U|JXbvfr^9Ikfl zo^Klkb-alBhX0OAP3hI{f8!-!GwK6SJ1xYiXic5VAcBVcU74RC= zhTcF0{uY+f`~Lw2MRXVy;dxX5cd#CY{L3wrYIaAZIu~{J9;*L~s0G%dj&d6+ppQ{^ z>=0_5ljb$a`o7>-UB~jM$dXVKq+lg%hdPpnQ48moGf%K@)Yx1~?Rz(nVMqS78dijdk%N*1?!H?y|K+^>2^eu?Kd=mG}Uj zM`fVlT9@H=sCE0VCI5`~BVf9m})ZRp0&ikkZqSv`gnt*y< z-Autm>P=A@8Gu@6>m*U~51;(HP$V1(M*;X$^ zEwI|$fI6BTsMl^UYW#~umr?NDx^$0YOYMzHN6i1*^J{GmkbnMOgzIhZf@CVcaRW`YfDX7%8K@G@4O*jA> z;t*6O3hnvpsLQwmmHK@cj-Ofk5!8HVQS)5E;@|)46pDAY+3h4AYtf-9s$*x=L_JV} z48&j@iOSp<)Pl1x0_UQ3yabh@6;|JZ8uu1f!#$hHza~COgC@RY9j~L>?^!)$i%V%V zD$ug1=QU6PHZYrFB=y$V61$=Tn}ZrR4|S(r#6Gxr3;9=vziH4;g8t)v9xGy7>Vq&1 zUqYq)Ag1G8Q~*uibmQBh&O8%!DSKM`crzdMJ(-Hi%na0TO@T*23$Max+<|%vK1BVx z{b21kP>~02bqkk6?L5h>gPORZJ#UVhrvui5Q6q64t`$7=vq3srTFScTqdskGgC}QJFc8O8Hq-V7D+y?|=9XH$gp2 z;6W2i#J;E<=A&NE#i%3t4*TMH)I!bt?t{_^72p_DM)Og3>q#s=b5x)OsCgD)8NL6j z?ZFOI$9K$+QAh9v#^Lv<34cW`bPbicyQql+-g3_)usZb^t2aUQPe%ooVfC))1=7%$ zf-XmY)I`Hk6OY9XILY*59QB*n0>gK@BkPD7KMcl0AAv zPHx_qQKS4%Z=AsL_-f{{B-M1{Q65vTV_$C+qn?dvb6<(I>6q{cWe73oS~T z9al7|V_MPp*$?>l%RX$sIeqXUXw8k*&=wf@VXqO#d#{Sg~80{p%Hy*a2TCpXq#=RXHR jimvbI7d>)HUiRqRoKYXYJ34Q&{{eqUfWOaMFNgdeEHAfU diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index 21305649..eeee0621 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2019-01-12 09:00+0100\n" -"PO-Revision-Date: 2016-07-12 19:54+0200\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" +"PO-Revision-Date: 2019-01-20 19:36+0100\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" "Language-Team: \n" @@ -18,737 +18,742 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "Nicht installiert" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Ausführungsberechtigung nicht vorhanden" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "Nicht konfiguriert" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "%(format)s Format nicht gefunden bei Buch ID %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s von Buch %(fn)s nicht auf Google Drive gefunden" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "An Kindle senden" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Diese E-Mail wurde durch Calibre-Web versendet." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s nicht gefunden: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web Test E-Mail" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Test E-Mail" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Loslegen mit Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Registrierungs E-Mail für Benutzer %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" -msgstr "" +msgstr "Sende %(format)s an Kindle" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" -msgstr "" +msgstr "Konvertiere %(orig)s nach %(format)s und sende an Kindle" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "E-Mail: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "Die angeforderte Datei konnte nicht gelesen werden. Evtl. falsche Zugriffsrechte?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Umbenennen des Titelpfades '%(src)s' nach '%(dest)s' schlug fehl: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Umbenennen des Authorpfades '%(src)s' nach '%(dest)s' schlug fehl: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" -msgstr "" +msgstr "Umbenennen der Datei im Pfad '%(src)s' nach '%(dest)s' ist fehlgeschlagen: %(error)s" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Datei %(file)s wurde nicht auf Google Drive gefunden" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Buchpfad %(path)s wurde nicht auf Google Drive gefunden" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Fehler bei der Ausführung von UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "UnRar Datei nicht gefunden" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Wartend" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Fehlgeschlagen" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Gestartet" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Beendet" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "Unbekannter Status" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "E-Mail: " -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "Konvertiere: " -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "Upload: " -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " -msgstr "Unbekannte Aufgabe" +msgstr "Unbekannte Aufgabe: " -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Unbekannt" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Updateinformationen enthalten unbekannte Daten" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Kein Update verfügbar. Es ist bereits die aktuellste Version installiert" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "HTTP Fehler" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Verbindungsfehler" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Timeout beim Verbindungsaufbau" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Allgemeiner Fehler" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Updateinformationen enthalten unbekannte Daten" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Kein Update verfügbar. Es ist bereits die aktuellste Version installiert" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Es sind Updates verfügbar. Klicke auf den Button unten, um auf die aktuelle Version zu aktualisieren." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "Update Informationen konnten nicht geladen werden" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "Keine Release Informationen verfügbar" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "Ein neues Update ist verfügbar. Klicke auf den Button unten, um auf Version: %(version)s zu aktualisieren" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Unbekannt" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Frage Update Paket an" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Lade Update Paket herunter" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Entpacke Update Paket" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "Ersetze Dateien" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Schließe Datenbankverbindungen" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "Stoppe Server" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "Update fehlgeschlagen:" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Kürzlich hinzugefügte Bücher" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Neueste Bücher" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Älteste Bücher" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Bücher (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Bücher (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Beliebte Bücher (die meisten Downloads)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Best bewertete Bücher" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Zufällige Bücher" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" -msgstr "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht zugänglich." +msgstr "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht zugänglich:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "Verlegerliste" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "Verleger: %(name)s" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Liste Serien" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Verfügbare Sprachen" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Sprache: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Kategorieliste" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Kategorie: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Aufgaben" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statistiken" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Callback Domain ist nicht verifiziert, bitte Domain in der Google Developer Console verifizieren" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Server neu gestartet,bitte Seite neu laden" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Server wird runtergefahren, bitte Fenster schließen" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Update durchgeführt" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Herausgegeben nach dem " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Herausgegeben vor dem " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Bewertung <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Bewertung >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "Suche" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Gelesene Bücher" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Ungelesene Bücher" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Lese ein Buch" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Bitte alle Felder ausfüllen!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "Registieren" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Es ist ein unbekannter Fehler aufgetreten. Bitte später erneut versuchen." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Diese E-Mail ist nicht für die Registrierung zugelassen" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." -msgstr "Eine Bestätigungs E-Mail wurde an den E-Mail Account versendet" +msgstr "Eine Bestätigungs E-Mail wurde an den E-Mail Account versendet." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Benutzername oder E-Mailadresse ist bereits in Verwendung." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Du bist nun eingeloggt als '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Falscher Benutzername oder Passwort" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "Login" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Token wurde nicht gefunden" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Das Token ist abgelaufen" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Erfolg! Bitte zum Gerät zurückkehren" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Bitte zuerst die SMTP Mail Einstellung konfigurieren ..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Buch erfolgreich zum Senden an %(kindlemail)s eingereiht" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Bitte zuerst die Kindle E-Mailadresse konfigurieren..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "Ungültiges Bücherregal angegeben" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "Keine Erlaubnis ein Buch zum Bücherregale %(shelfname)s hinzuzufügen vorhanden" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "Keine Erlaubnis öffentliche Bücherregale zu editieren vorhanden" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "Buch ist bereits Teil des Bücherregals %(shelfname)s" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Keine Erlaubnis ein Buch zum Bücherregal %(name)s hinzuzufügen" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "Benutzer hat keine Erlaubnis öffentliche Bücherregale zu editieren" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Bücher sind bereits Teil des Bücherregals %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "Bücher wurden zum Bücherregal %(sname)s hinzugefügt" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Bücher konnten nicht zum Bücherregal %(sname)s hinzugefügt werden" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Das Buch wurde aus dem Bücherregal: %(sname)s entfernt" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Keine Erlaubnis das Buch aus dem Bücherregal %(sname)s zu entfernen" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." -msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'" +msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Bücherregal %(title)s erzeugt" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Es trat ein Fehler auf" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "Bücherregal erzeugen" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Bücherregal %(title)s verändert" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Bücherregal editieren" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Bücherregal %(name)s erfolgreich gelöscht" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Bücherregal: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Fehler beim Öffnen. Bücherregel exisitert nicht oder ist nicht zugänglich" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Reihenfolge in Bücherregal '%(name)s' verändern" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "E-Mail ist nicht Teil einer gültigen Domain" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's Profil" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." -msgstr "Es exisitert bereits ein Benutzer für diese E-Mailadresse" +msgstr "Es existiert bereits ein Benutzer für diese E-Mailadresse." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Profil aktualisiert" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Admin Seite" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Calibre-Web Konfiguration wurde aktualisiert" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Konfiguration Benutzeroberfläche" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "Optionale Abhängigkeiten für Google Drive fehlen" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json nicht vorhanden, oder nicht lesbar" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json nicht als Webapplication konfiguriert" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Basis Konfiguration" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "SSL-Keydatei Speicherort ist ungültig, bitte gültigen Pfad angeben" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "SSL-Certdatei Speicherort ist ungültig, bitte gültigen Pfad angeben" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "Speicherort Logdatei ist ungültig, bitte Pfad korrigieren" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Neuen Benutzer hinzufügen" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Benutzer '%(user)s' angelegt" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." -msgstr "Es exisitert bereits ein Account für diese E-Mailadresse oder Benutzernamen" +msgstr "Es existiert bereits ein Account für diese E-Mailadresse oder Benutzernamen." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Test E-Mail wurde erfolgreich an %(kindlemail)s versendet" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Es trat ein Fehler beim Versenden der Test E-Mail auf: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "E-Mail Server Einstellungen aktualisiert" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "E-Mail Server Einstellungen bearbeiten" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Benutzer '%(nick)s' gelöscht" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Benutzer '%(nick)s' aktualisiert" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." -msgstr "Es ist ein unbekanter Fehler aufgetreten" +msgstr "Es ist ein unbekannter Fehler aufgetreten." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Benutzer %(nick)s bearbeiten" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Passwort für Benutzer %(user)s wurde zurückgesetzt" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht zugänglich" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "Metadaten editieren" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Dateiendung '%(ext)s' kann nicht auf diesen Server hochgeladen werden" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Dateien müssen eine Erweiterung haben, um hochgeladen zu werden" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads %(path)s (Zugriff verweigert)" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Fehler beim speichern der Datei %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Dateiformat %(ext)s zu %(book)s hinzugefügt" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads für das Cover %(path)s (Zugriff verweigert)" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Fehler beim Speichern des Covers %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "Cover-Datei ist keine gültige Bilddatei" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "Unbekannt" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "Cover ist keine JPG Datei, konnte nicht gespeichert werden" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s ist keine gültige Sprache" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "Metadaten wurden erfolgreich aktualisiert" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Fehler beim Editieren des Buchs, Details im Logfile" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Fehler beim speichern der Datei %(file)s (Zugriff verweigert)" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Fehler beim Löschen von Datei %(file)s (Zugriff verweigert)" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Quell- oder Zielformat für Konvertierung fehlt" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Buch wurde erfolgreich für die Konvertierung in das %(book_format)s Format eingereiht" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Es trat ein Fehlker beim Konvertieren des Buches auf: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Fehler EBook-converter: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" -msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen " +msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen" #: cps/templates/admin.html:6 msgid "User list" @@ -902,7 +907,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -911,7 +916,7 @@ msgstr "Zurück" #: cps/templates/admin.html:163 msgid "Do you really want to stop Calibre-Web?" -msgstr "Calibre-Web wirklich stoppen" +msgstr "Calibre-Web wirklich stoppen?" #: cps/templates/admin.html:175 msgid "Updating, please do not reload page" @@ -956,7 +961,7 @@ msgstr "Wähle eine Option" #: cps/templates/book_edit.html:41 msgid "Convert to:" -msgstr "Konvertiere nach" +msgstr "Konvertiere nach:" #: cps/templates/book_edit.html:50 msgid "Convert book" @@ -1035,9 +1040,9 @@ msgstr "Buch nach Bearbeitung ansehen" msgid "Get metadata" msgstr "Metadaten laden" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Abschicken" @@ -1060,7 +1065,7 @@ msgstr "Suchbegriff" #: cps/templates/book_edit.html:216 msgid " Search keyword " -msgstr "Suchbegriff" +msgstr " Suchbegriff " #: cps/templates/book_edit.html:218 cps/templates/layout.html:46 msgid "Go!" @@ -1088,7 +1093,7 @@ msgstr "Fehler bei Suche!" #: cps/templates/book_edit.html:276 msgid "No Result(s) found! Please try aonther keyword." -msgstr "Keine Ergebnisse gefunden! Bitte ein anderes Schlüsselwort benutzen" +msgstr "Keine Ergebnisse gefunden! Bitte ein anderes Schlüsselwort benutzen." #: cps/templates/config_edit.html:12 msgid "Library Configuration" @@ -1100,7 +1105,7 @@ msgstr "Speicherort der Calibre Datenbank" #: cps/templates/config_edit.html:24 msgid "Use Google Drive?" -msgstr "Google Drive benutzen" +msgstr "Google Drive benutzen?" #: cps/templates/config_edit.html:30 msgid "Google Drive config problem" @@ -1142,83 +1147,103 @@ msgstr "SSL Certdatei Speicherort (leerlassen für nicht SSL Server)" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "SSL Keydatei Speicherort (leerlassen für nicht SSL Server)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "Update Kanal" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "Stabil" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "Stabil (Automatisch)" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "Nightly" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "Nightly (Automatisch)" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Konfiguration Logdatei" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Log Level" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Position und Name des Logfiles (calibre-web.log bei keinem Eintrag)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Feature Konfiguration" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Hochladen aktivieren" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Anonymes Browsen aktivieren" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Öffentliche Registrierung aktivieren" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Remote Login aktivieren ('Magischer Link')" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Benutze" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Einen API Schlüssel erhalten" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Öffentlicher Goodreads API Schlüssel" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" -msgstr "eheimer Goodreads API Schlüssel" +msgstr "Geheimer Goodreads API Schlüssel" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Externe Programme" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Kein Konverter" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Kindlegen benutzen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Benutze Calibre's Ebook Konverter" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "E-Book Konverter Einstellungen" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Pfad zu Konvertertool" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Pfad zum UnRar Programm" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" @@ -1374,7 +1399,7 @@ msgstr "Gelesen" #: cps/templates/detail.html:196 msgid "Description:" -msgstr "Beschreibung" +msgstr "Beschreibung:" #: cps/templates/detail.html:209 cps/templates/search.html:14 msgid "Add to shelf" @@ -1451,7 +1476,7 @@ msgstr "Suche" #: cps/templates/http_error.html:23 msgid "Back to home" -msgstr "" +msgstr "Zurück zur Hautseite" #: cps/templates/index.html:5 msgid "Discover (Random Books)" @@ -1467,7 +1492,7 @@ msgstr "Beliebte Bücher" #: cps/templates/index.xml:22 msgid "Popular publications from this catalog based on Downloads." -msgstr "Beliebte Publikationen aus dieser Bibliothek basierend auf Downloadzahlen" +msgstr "Beliebte Publikationen aus dieser Bibliothek basierend auf Downloadzahlen." #: cps/templates/index.xml:25 cps/templates/layout.html:142 msgid "Best rated Books" @@ -1475,7 +1500,7 @@ msgstr "Best bewertete Bücher" #: cps/templates/index.xml:29 msgid "Popular publications from this catalog based on Rating." -msgstr "Beliebte Veröffentlichungen dieses Katalogs basierend auf Bewertungen" +msgstr "Beliebte Veröffentlichungen dieses Katalogs basierend auf Bewertungen." #: cps/templates/index.xml:32 msgid "New Books" @@ -1643,7 +1668,7 @@ msgstr "Einstellungen" #: cps/templates/read.html:72 msgid "Reflow text when sidebars are open." -msgstr "Text umbrechen wenn Seitenleiste geöffnet ist" +msgstr "Text umbrechen wenn Seitenleiste geöffnet ist." #: cps/templates/readcbr.html:84 msgid "Keyboard Shortcuts" @@ -1733,6 +1758,10 @@ msgstr "Vertikal" msgid "PDF.js viewer" msgstr "PDF.js Viewer" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "Bereite Dokument zum Ducken vor..." + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Basis Txt Reader" @@ -1763,7 +1792,7 @@ msgstr "und logge Dich ein" #: cps/templates/remote_login.html:9 msgid "Once you do so, you will automatically get logged in on this device." -msgstr "Danach wirst Du automatisch auf diesem Gerät eingeloggt sein" +msgstr "Danach wirst Du automatisch auf diesem Gerät eingeloggt sein." #: cps/templates/search.html:5 msgid "No Results for:" @@ -1823,7 +1852,7 @@ msgstr "Wirklich das Bücherregal löschen?" #: cps/templates/shelf.html:61 msgid "Shelf will be lost for everybody and forever!" -msgstr "Das Bücherregal wird für alle und für immer gelöscht" +msgstr "Das Bücherregal wird für alle und für immer gelöscht!" #: cps/templates/shelf_edit.html:13 msgid "should the shelf be public?" @@ -1958,3 +1987,9 @@ msgstr "Letzte Downloads" #~ msgid "File %(file)s uploaded" #~ msgstr "Datei %(file)s hochgeladen" +#~ msgid "Update done" +#~ msgstr "Update durchgeführt" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "Ein neues Update ist verfügbar. Klicke auf den Button unten, um auf Version: " + diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index fce7b837..111f7408 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-10-05 11:27+0100\n" "Last-Translator: victorhck \n" "Language: es\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "No instalado" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Permisos de ejecución ausentes" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "%(format)s formato no encontrado para el id del libro: %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s no encontrado en Google Drive: %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Enviar a Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Este correo electrónico ha sido enviado por Calibre-Web." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s no encontrado: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web comprobar correo electrónico" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Comprobar correo electrónico" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Primeros pasos con Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Registrar un correo electrónico para el usuario: %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "Correo electrónico: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "El fichero solicitado no puede ser leído. ¿Quizás existen problemas con los permisos?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "El renombrado del título de: '%(src)s' a '%(dest)s' falló con errores: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "El renombrado del autor de: '%(src)s' a '%(dest)s' falló con errores: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Fichero %(file)s no encontrado en Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "La ruta %(path)s del libro no fue encontrada en Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Error ejecutando UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Fichero binario Unrar no encontrado" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Esperando" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Fallido" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Comenzado" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Finalizado" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Desconocido" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Dato inesperado mientras se leía la información de actualización" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Actualización no disponible. Ya tienes la versión más reciente instalada" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "Error HTTP" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Error de conexión" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Tiempo agotado mientras se trataba de establecer la conexión" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Error general" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Dato inesperado mientras se leía la información de actualización" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Actualización no disponible. Ya tienes la versión más reciente instalada" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Una nueva actualización está disponible. Haz clic en el botón inferior para actualizar a la versión más reciente." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "No se puede conseguir información sobre la actualización" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Desconocido" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Solicitando paquete de actualización" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Descargando paquete de actualización" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Descomprimiendo paquete de actualización" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Los conexiones de base datos están cerradas" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Actualización finalizada. Por favor, pulse OK y recargue la página" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Libros recientemente añadidos" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Libros más nuevos" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Libros más antiguos" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Libros (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Libros (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Libros populares (los mas descargados)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Libros mejor valorados" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Libros al azar" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Error en la apertura del eBook. El archivo no existe o no es accesible:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Lista de series" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Idiomas disponibles" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Idioma: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Lista de categorías" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Categoría : %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Tareas" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Estadísticas" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "El dominio de devolución de llamada no se ha verificado, siga los pasos para verificar el dominio en la consola de desarrollador de Google" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Servidor reiniciado. Por favor, recargue la página" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." -#: cps/web.py:1965 -msgid "Update done" -msgstr "Actualización realizada" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Publicado antes de" -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Publicado después de" -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Clasificación <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Clasificación >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "búsqueda" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Libros leídos" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Libros no leídos" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Leer un libro" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "¡Por favor completar todos los campos!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "registrarse" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Ha ocurrido un error desconocido. Por favor vuelva a intentarlo más tarde." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Su correo electrónico no está permitido para registrarse" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Se ha enviado un correo electrónico de verificación a su cuenta de correo electrónico." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Este nombre de usuario o correo electrónico ya están en uso." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Sesión iniciada como : '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Usuario o contraseña inválido" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "Iniciar sesión" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Token no encontrado" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "El token ha expirado" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "¡Correcto! Por favor regrese a su dispositivo" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Configurar primero los parámetros SMTP por favor..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Libro puesto en la cola de envío a %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ha sucedido un error en el envío del libro: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Por favor configure primero la dirección de correo de su kindle..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "Estante especificado inválido" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "No tiene permiso para añadir un libro a el estante: %(name)s" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "El usuario no tiene permiso para editar estantes públicos" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Los libros ya forman parte del estante: %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "Los libros han sido añadidos al estante: %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "No se pudieron agregar libros al estante: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue eliminado del estante: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Lo siento, no tiene permiso para eliminar un libro del estante: %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Un estante con el nombre '%(title)s' ya existe." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Ha sucedido un error" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "crear un estante" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Estante %(title)s cambiado" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Editar un estante" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Error al abrir un estante. El estante no existe o no es accesible" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Cambiar orden del estante: '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "El correo electrónico no tiene un nombre de dominio válido" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Encontrada una cuenta existente para esa dirección de correo electrónico." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Página de administración" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Configuración de Calibre-Web actualizada" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Configuración de la interfaz del usuario" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "Falta la importación de requisitos opcionales de Google Drive" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json está desaparecido o no se puede leer" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json no está configurado para la aplicación web" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Configuración básica" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "La ubicación del fichero clave (Keyfile) no es válida, por favor introduzca la ruta correcta" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "La ubicación del fichero de certificado (Certfile) no es válida, por favor introduzca la ruta correcta" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "La ubicación del fichero de registro (Logfile) no es válida, por favor introduzca la ruta correcta" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Localización de la BD inválida, por favor introduzca la ruta correcta" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Encontrada una cuenta existente para este correo electrónico o nombre de usuario." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Correo electrónico de prueba enviado con éxito a %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Ocurrió un error enviando el correo electrónico de prueba: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "Actualizados los ajustes del servidor de correo electrónico" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Editar los ajustes del servidor de correo electrónico" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' actualizado" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Ocurrió un error inesperado." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Contraseña para el usuario %(user)s reinicializada" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Error abriendo un eBook. El archivo no existe o no es accesible" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "editar metadatos" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión '%(ext)s' a este servidor" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Fallo al crear la ruta %(path)s (permiso denegado)" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Falla al guardar el archivo %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Fichero con formato %(ext)s añadido a %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Fallo al crear la ruta para la cubierta %(path)s (Permiso denegado)." -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Fallo al guardar el archivo de cubierta %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "El archivo de imagen de la portada no es válido" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "desconocido" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "La cubierta no es un archivo jpg, no se puede guardar" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s no es un idioma válido" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Error al editar el libro, por favor compruebe el fichero de registro (logfile) para tener más detalles" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Fallo al guardar el archivo %(file)s (permiso denegado)" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Fallo al borrar el archivo %(file)s (permiso denegado)" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Falta la fuente o el formato de destino para la conversión" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Libro puesto a la cola con éxito para convertirlo a %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Ocurrió un error al convertir este libro: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Falló Ebook-converter: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen falló con error %(error)s. Mensaje: %(message)s" @@ -902,7 +907,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "ver libro tras la edición" msgid "Get metadata" msgstr "Obtener metadatos" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Enviar" @@ -1142,83 +1147,103 @@ msgstr "Ubicación del archivo de certificado SSL (dejar en blanco si no hay un msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "Ubicación del archivo clave SSL (dejar en blanco si no hay un servidor SSL)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Configuración del archivo de registro" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Nivel de registro" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Ubicación y nombre del archivo de registro (si no se especifica será calibre-web.log)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Configuración de características" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Permitir subida" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Permitir navegación anónima" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Permitir registro público" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Permitir inicio de sesión remoto (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Usar" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Obtener una API Key" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Goodreads API Key" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API Secret" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Binarios externos" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "No convertir" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Utilizar Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Utilizar el convertidor de libros de Calibre" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "Ajustes del convertidos E-Book" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Ruta para convertertool" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Ubicación del binario de Unrar" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Inicio de sesión" @@ -1733,6 +1758,10 @@ msgstr "Vertical" msgid "PDF.js viewer" msgstr "Visor PDF.js" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Lector básico de txt" @@ -1991,3 +2020,18 @@ msgstr "Descargas recientes" #~ msgid "File %(file)s uploaded" #~ msgstr "Fichero %(file)s subido" +#~ msgid "Update done" +#~ msgstr "Actualización realizada" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 0bbd3b2f..db7536c9 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-09-16 00:46+0200\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "non installé" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Permission d’exécution manquante" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "le format %(format)s est introuvable pour le livre : %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "le %(format)s est introuvable sur Google Drive : %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Envoyer vers Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Ce courriel a été envoyé depuis Calibre-Web" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s introuvable : %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Courriel de test de Calibre-Web" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Courriel de test" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Bien démarrer avec Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Courriel d’inscription pour l’utilisateur : %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "Courriel : %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "Le fichier demandé n’a pu être lu. Problème de permission d’accès ?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Renommer le titre de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Renommer l’auteur de : '%(src)s' à '%(dest)s' a échoué avec l’erreur : %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Le fichier %(file)s est introuvable sur Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Le chemin d’accès %(path)s du livre est introuvable sur Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Erreur d’exécution de la commande UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Le fichier exécutable UnRar est introuvable" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "En attente" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Echec" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Démarré" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Terminé" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Inconnu" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Données inattendues lors de la lecture des informations de mise à jour" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Aucune mise à jour disponible. Vous avez déjà la dernière version installée" + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "Erreur HTTP" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Erreur de connexion" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Délai d'attente dépassé lors de l'établissement de connexion" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Erreur générale" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Données inattendues lors de la lecture des informations de mise à jour" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Aucune mise à jour disponible. Vous avez déjà la dernière version installée" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Une nouvelle mise à jour est disponible. Cliquez sur le bouton ci-dessous pour charger la dernière version." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "Impossible d'extraire les informations de mise à jour" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Inconnu" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Demander une mise à jour" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Téléchargement la mise à jour" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Décompression de la mise à jour" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Connexion à la base de donnée fermée" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Mise à jour terminée, merci d’appuyer sur okay et de rafraîchir la page" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Ajouts récents" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Livres récents" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Anciens livres" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Livres (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Livres (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Livres les mieux notés" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est pas accessible :" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Tâches" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Le domaine de retour d’appel (Callback domain) est non vérifié, Veuillez suivre les étapes nécessaires pour vérifier le domaine dans la console de développement de Google" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Serveur redémarré, merci de rafraîchir la page" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Arrêt du serveur en cours, merci de fermer la fenêtre" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Mise à jour effectuée" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Publié après le " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Publié avant le " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Évaluation <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Évaluation >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "recherche" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Livres lus" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Livres non-lus" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "s’enregistrer" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Une erreur inconnue est survenue. Veuillez réessayer plus tard." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Votre adresse de courriel n’est pas autorisé pour une inscription" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Le courriel de confirmation a été envoyé à votre adresse." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Ce nom d’utilisateur ou cette adresse de courriel sont déjà utilisés." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Mauvais nom d'utilisateur ou mot de passe" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "connexion" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Jeton non trouvé" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Jeton expiré" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Réussite! Merci de vous tourner vers votre appareil" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Veuillez configurer les paramètres SMTP au préalable…" -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Le livre a été mis en file de traitement avec succès pour un envois vers %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Il y a eu une erreur en envoyant ce livre : %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Veuillez configurer votre adresse de courriel Kindle en premier lieu…" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "L’étagère indiquée est invalide" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Vous n’êtes pas autorisé à ajouter un livre dans l’étagère %(name)s" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "L’utilisateur n’est pas autorisé à éditer les étagères publiques" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Ces livres sont déjà sur l’étagère : %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "Les livres ont été ajoutés à l’étagère : %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Impossible d’ajouter les livres à l’étagère : %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Le livre a été supprimé de l'étagère %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Désolé, vous n’êtes pas autorisé à enlever un livre de cette étagère : %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Une étagère de ce nom '%(title)s' existe déjà." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "Créer une étagère" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "L’étagère %(title)s a été modifiée" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Modifier une étagère" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "l’étagère %(name)s a été supprimé avec succès" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Erreur à l’ouverture de l’étagère. Elle n’existe plus ou n’est plus accessible." -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Modifier l’arrangement de l’étagère : ‘%(name)s’" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "Cette adresse de courriel n’appartient pas à un domaine valide" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Un compte existant a été trouvé pour cette adresse de courriel" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Page administrateur" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Configuration de Calibre-Web mise à jour" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Configuration de l’interface utilisateur" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "L’import des pré-requis optionnels pour Google Drive est manquant" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json est manquant ou ne peut être lu" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json n’est pas configuré pour une application web" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Configuration principale" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "L’emplacement du fichier de la clé de chiffrement (keyfile) n’est pas valide, veuillez saisir un chemin d’accès correct" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "L’emplacement du fichier de certificat (cert) n’est pas valide, veuillez saisir un chemin d’accès correct" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "L’emplacement du fichier de Log n’est pas valide, veuillez saisir un chemin d’accès correct" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "L’emplacement du fichier de base de donnée (DB) n’est pas valide, veuillez saisir un chemin d’accès correct" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Un compte existant a été trouvé pour cette adresse de courriel ou pour ce surnom." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Courriel de test envoyé avec succès sur %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Il y a eu une erreur pendant l’envoi du courriel de test : %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "Les paramètres du serveur de courriels ont été mis à jour" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Modifier les paramètres du serveur de courriels" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Le mot de passe de l’utilisateur %(user)s a été réinitialisé" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Erreur à l’ouverture du livre. Le fichier n’existe pas ou n’est pas accessible" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "modifier les métadonnées" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "L’extension de fichier '%(ext)s' n’est pas autorisée pour être déposée sur ce serveur" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Pour être déposé le fichier doit avoir une extension" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Impossible de créer le chemin %(path)s (permission refusée)" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Echec de la sauvegarde du fichier %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Le format de fichier %(ext)s a été ajouté à %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Impossible de créer le chemin d’accès pour la couverture %(path)s (Autorisation refusée)" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Echec de la sauvegarde du fichier de couverture %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "Le fichier de couverture n’est pas un fichier d’image valide" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "inconnu" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "Le fichier de couverture n’est pas au format jpg, impossible de sauvegarder" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s n'est pas une langue valide" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Erreur d’édition du livre, veuillez consulter le journal (log) pour plus de détails" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %(file)s (permission refusée)" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Impossible de supprimer le fichier %(file)s (permission refusée)" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Le format de conversion de la source ou de la destination est manquant" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Le livre a été mis avec succès en file de traitement pour conversion vers %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Une erreur est survenue au cours de la conversion du livre : %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "La commande ebook-convert a échouée : %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "La commande Kindlegen a échouée avec le code d’erreur : %(error)s et le message : %(message)s" @@ -902,7 +907,7 @@ msgstr "D’accord" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "voir le livre après l'édition" msgid "Get metadata" msgstr "Obtenir les métadonnées" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Soumettre" @@ -1142,83 +1147,103 @@ msgstr "Emplacement du certificat SSL (laisser vide pour les serveurs non SSL)" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "Emplacement de la clé de chiffrement SSL (laisser vide pour les serveurs non SSL)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Configuration du journal d’évenements" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Niveau de journalisation" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Emplacement et nom du fichier journal (sera calibre-web.log si vide)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Configuration des options" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Autoriser le dépôt de fichier" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Autoriser la navigation anonyme" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Autoriser l’inscription publique" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Activer la connexion (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Utiliser" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Obtenir la clé API" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Clé de l’API Goodreads" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Secret de l’API Goodreads" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Configuration des outils de conversion externes" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Pas de convertisseur" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Utiliser Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Utiliser Calibre ebook-convert" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "Paramètres de la commande de conversion de livres" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Chemin d’accès à la commande de conversion" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Chemin d’accès à la commande UnRar" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Connexion" @@ -1733,6 +1758,10 @@ msgstr "Vertical" msgid "PDF.js viewer" msgstr "Visionneuse PDF.js" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Lecteur de texte simple" @@ -1958,3 +1987,18 @@ msgstr "Téléchargements récents" #~ msgid "File %(file)s uploaded" #~ msgstr "Fichier %(file)s déposé" +#~ msgid "Update done" +#~ msgstr "Mise à jour effectuée" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/hu/LC_MESSAGES/messages.po b/cps/translations/hu/LC_MESSAGES/messages.po index ebecab92..cf4bb70e 100644 --- a/cps/translations/hu/LC_MESSAGES/messages.po +++ b/cps/translations/hu/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-10-11 18:13+0200\n" "Last-Translator: \n" "Language: hu\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "nincs telepítve" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Nincs jogosultság a futtatáshoz" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "A(z) %(format)s formátum nem található a következő könyvhöz: %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s nem található a Google Drive-on: %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Küldés Kindle-re" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Ez az e-mail a Calibre-Web-en keresztül lett küldve." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s nem található: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web teszt e-mail" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Teszt e-mail" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Kezdő lépések a Calibre-Web-bel" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Regisztrációs e-mail a következő felhasználóhoz: %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "E-mail: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "A kért fájl nem olvasható. Esetleg jogosultsági probléma lenne?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "A cím átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "A szerző átnevezése \"%(src)s\"-ról \"%(dest)s\"-ra nem sikerült a következő hiba miatt: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "A \"%(file)s\" fájl nem található a Google Drive-on" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "A könyv elérési útja (\"%(path)s\") nem található a Google Drive-on" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Hiba az UnRar futtatásakor" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Az Unrar futtatható állománya nem található" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Várakozás" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Nem sikerült" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Elindítva" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Végrehajtva" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Ismeretlen" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Ismeretlen adat a frissítési információk olvasásakor" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Nem érhető el újabb frissítés. Már a legújabb verzió van telepítve." + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "HTTP hiba" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Kapcsolódási hiba" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Időtúllépés a kapcsolódás során" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Általános hiba" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Ismeretlen adat a frissítési információk olvasásakor" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Nem érhető el újabb frissítés. Már a legújabb verzió van telepítve." - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Egy új frissítés érhető el. Kattints a lenti gombra a legújabb verzió frissítésére" -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "Nem lehetett begyűjteni a frissítési információkat" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Ismeretlen" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Frissítési csomag kérése" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Frissítési csomag letöltése" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Frissítési csomag kitömörítése" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Adatbázis kapcsolatok lezárva" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "A frissítés települt, kattints az OK-ra és újra tölt az oldal" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Legutóbb hozzáadott könyvek" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Legújabb könyvek" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Legrégebbi könyvek" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Könyvek (A-Zs)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Könyvek (Zs-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Kelendő könyvek (legtöbbet letöltöttek)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Legjobbra értékelt könyvek" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Könyvek találomra" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Hiba történt az e-könyv megnyitásakor. A fájl nem létezik vagy nem érhető el:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Sorozatok listája" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Sorozat: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Elérhető nyelvek" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Nyelv: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Címkék listája" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Címke: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Feladatok" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statisztika" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "A visszahívási tartomány nem ellenőrzött, kövesd az alábbi lépéseket a tartomány ellenőrzéséhez a Google Developer Console-ban:" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "A kiszolgáló újraindult, tölts be újra az oldalt!" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "A kiszolgáló leállítása folyamatban, zárd be ezt az ablakot" -#: cps/web.py:1965 -msgid "Update done" -msgstr "A frissítés kész" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Kiadva ezután: " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Kiadva ezelőtt: " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Értékelés <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Értékelés <= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "keresés" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Olvasott könyvek" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Olvasatlan könyvek" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Egy olvasott könyv" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Az összes mezőt ki kell tölteni!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "regisztrálás" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Ismeretlen hiba történt. Próbáld újra később!" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Nem engedélyezett a megadott e-mail cím bejegyzése" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Jóváhagyó levél elküldve az email címedre." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Ez a felhasználónév vagy e-mail cím már használatban van." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Be vagy jelentkezve mint: %(nickname)s" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Rossz felhasználó név vagy jelszó!" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "belépés" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "A token nem található." -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "A token érvényessége lejárt." -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Sikerült! Újra használható az eszköz." -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Először be kell állítani az SMTP levelező beállításokat..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "A könyv sikeresen küldésre lett jelölve a következő címre: %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Hiba történt a könyv küldésekor: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Először be kell állítani a kindle e-mail címet..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "A megadott polc érvénytelen!" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "A könyv hozzá lett adva a következő polchoz: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Nincs jogosultságod könyvet tenni a következő polcra: %(name)s." -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "A felhasználó nem szerkeszthet nyilvános polcokat" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "A könyvek már a következő polcon vannak: %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "A könyvek hozzá lettek adva a következő polchoz: %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Nem sikerült hozzáadni a könyveket a polchoz: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "A könyv el lett távolítva a polcról: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Sajnálom, nincs jogosultságot eltávolítani könyvet erről a polcról: %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Már létezik \"%(title)s\" nevű polc!" -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "A következő polc létre lett hozva: %(title)s" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Hiba történt" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "Polc készítése" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "A következő polc megváltoztatva: %(title)s" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Polc szerkesztése" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "A következő polc sikeresen törölve: %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Polc: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Hiba a polc megnyitásakor. A polc nem létezik vagy nem elérhető." -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "A következő polc átrendezése: %(name)s" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "Az e-mail tartománya nem érvényes." -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)s profilja" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Már létezik felhasználó ehhez az e-mail címhez." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "A profil frissítve." -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Rendszergazda oldala" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "A Calibre-Web konfigurációja frissítve." -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Felhasználói felület beállításai" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "Hiányzanak a Google Drive használatához szükséges komponensek" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "A client_secrets.json hiányzik vagy nem olvasható." -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "A client_secrets.json nincs beállítva a web alkalmazáshoz." -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Alapvető beállítások" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "A kulcsfájl helye nem érvényes, adj meg érvényes elérési utat" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "A tanusítványfájl helye nem érvényes, adj meg érvényes elérési utat" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "A naplófájl helye nem érvényes, adj meg érvényes elérési utat" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Az adatbázis helye nem érvényes, adj meg érvényes elérési utat" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Új felhasználó hozzáadása" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "A következő felhasználó létrehozva: %(user)s" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Már létezik felhasználó ehhez az e-mail címhez vagy felhasználói névhez." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "A teszt levél sikeresen elküldve ide: %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Hiba történt a teszt levél küldése során: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "Az e-mail kiszolgáló beállításai frissítve." -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Az e-mail kiszolgáló beállításainak módosítása" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "A felhasználó törölve: %(nick)s" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "A felhasználó frissítve: %(nick)s" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Ismeretlen hiba történt." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr " A felhasználó szerkesztése: %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "A(z) %(user)s felhasználó jelszavának alaphelyzetbe állítása" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Hiba az ekönyv megnyitásakor. A fájl nem létezik vagy nem elérhető." -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "Metaadatok szerkesztése" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "A(z) \"%(ext)s\" kiterjesztésű fájlok feltöltése nincs engedélyezve ezen a szerveren." -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "A feltöltendő fájlnak kiterjesztéssel kell rendelkeznie!" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nem sikerült létrehozni az elérési utat (engedély megtagadva): %(path)s." -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Nem sikerült elmenteni a %(file)s fájlt." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "A(z) %(ext)s fájlformátum hozzáadva a könyvhez: %(book)s." -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Nem sikerült létrehozni az elérési utat a borítóhoz (engedély megtagadva): %(path)s." -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Nem sikerült elmenteni a borító-fájlt: %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "A borító-fájl nem érvényes képfájl!" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "ismeretlen" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "A borító nem jpg fájl, nem lehet elmenteni." -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "A(z) %(langname)s nem érvényes nyelv" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Hiba a könyv szerkesztése során, további részletek a naplófájlban." -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Nem sikerült elmenteni a %(file)s fájlt." -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Nem sikerült törölni a %(file)s fájlt." -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Az átalakításhoz hiányzik a forrás- vagy a célformátum!" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "A könyv sikeresen átalakításra lett jelölve a következő formátumra: %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Hiba történt a könyv átalakításakor: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Az e-könyv átalakítás nem sikerült: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "A Kindlegen futtatása nem sikerült a(z) %(error)s hiba miatt. Üzenet: %(message)s" @@ -902,7 +907,7 @@ msgstr "OK" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "Könyv megnézése szerkesztés után" msgid "Get metadata" msgstr "Metaadatok beszerzése" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Küldés" @@ -1142,83 +1147,103 @@ msgstr "SSL hitelesítő fájl helye (nem SSL szerverekhez üresen kell hagyni)" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "SSL kulcsfájl helye (nem SSL szerverekhez üresen kell hagyni)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Naplózási beállítások" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Naplózás szintje" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Naplófájl helye és neve (üresen hagyva calibre-web.log)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Funkciók beállítása" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Feltöltés engedélyezése" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Böngészés bejelentkezés nélkül engedélyezése" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Nyilvános regisztráció engedélyezése" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Távoli belépés engedélyezése (\"varázs-hivatkozás\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Engedélyezés" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "API-kulcs beszerzése" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Goodreads API-kulcs" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API titkos kód" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Külső futtatható fájlok" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Átalakítás nélkül" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Kindlegen használata" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Calibre e-könyv átalakító használata" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "E-könyv átalakító beállításai" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Elérési út az átalakító-eszközhöz" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Az Unrar futtatási állományának helye" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Belépés" @@ -1733,6 +1758,10 @@ msgstr "Függőleges" msgid "PDF.js viewer" msgstr "PDF.js olvasó" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Egyszerű txt olvasó" @@ -1952,3 +1981,18 @@ msgstr "Utolsó letöltések" #~ msgid "File %(file)s uploaded" #~ msgstr "A %(file)s fájl feltöltve." +#~ msgid "Update done" +#~ msgstr "A frissítés kész" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 0744b046..79f0ed37 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Marco Picone \n" "Language: it\n" @@ -17,734 +17,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "non installato" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Mancano autorizzazioni di esecuzione" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Invia a Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" msgstr "" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 +msgid "A new update is available. Click on the button below to update to the latest version." msgstr "" -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" +#: cps/updater.py:335 +msgid "Could not fetch update information" msgstr "" -#: cps/web.py:1209 -msgid "A new update is available. Click on the button below to update to the latest version." +#: cps/updater.py:403 +msgid "No release information available" msgstr "" -#: cps/web.py:1259 -msgid "Could not fetch update information" +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" msgstr "" -#: cps/web.py:1274 +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Richiesta del pacchetto di aggiornamento" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Scaricare il pacchetto di aggiornamento" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Decomprimere pacchetto di aggiornamento" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Le connessioni di database sono chiuse" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Aggiornamento completato, prego premere bene e ricaricare pagina" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Libri aggiunti di recente" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "I più nuovi libri" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Libri più vecchi" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Ebook (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Ebook (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Hot Books (più scaricati)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "I migliori libri valutati" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Libri casuali" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Errore durante l'apertura di eBook. Il file non esiste o il file non è accessibile:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Lista delle serie" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Serie :" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Lingue disponibili" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Lingue: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Elenco categorie" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Categoria : %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statistica" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Server riavviato, ricarica pagina" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Eseguire l'arresto del server, chiudi la finestra." -#: cps/web.py:1965 -msgid "Update done" -msgstr "Aggiornamento fatto" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "" -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "" -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "ricerca" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Leggere libri" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Libri non letti" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Leggere un libro" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Compila tutti i campi" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "Registrare" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "ora sei connesso come : '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Nome utente o password errata" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "Accesso" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Token non trovato" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Il token è scaduto" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Successo! Torna al tuo dispositivo" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Configurare prima le impostazioni della posta SMTP..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Si è verificato un errore durante l'invio di questo libro: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Il libro è stato aggiunto alla mensola: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Il libro è stato rimosso dalla mensola: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Uno scaffale con il nome '%(title)s' esiste già." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Mensola %(title)s creato" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "c'era un errore" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "creare uno scaffale" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Mensola %(title)s cambiato" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Modifica un ripiano" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "cancellato con successo il ripiano %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Mensola: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Errore durante l'apertura dello scaffale. La mensola non esiste o non è accessibile" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Modificare l'ordine della mensola: '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "Profilo di %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Profilo aggiornato" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Pagina di amministrazione" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Aggiornamento della configurazione del calibro-web" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Configurazione di base" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Posizione DB non valida. Inserisci il percorso corretto." -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Aggiungi un nuovo utente" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "utente '%(user)s' creato" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "utente '%(nick)s' cancellati" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "utente '%(nick)s' aggiornato" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Errore imprevisto." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Modifica utente %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Errore durante l'apertura di eBook. Il file non esiste o il file non è accessibile" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "modificare la metainformazione" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Non è consentito caricare i file con l'estensione '%(ext)s' a questo server" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Il file da caricare deve avere un'estensione" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Impossibile creare il percorso %(path)s (autorizzazione negata)" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "Sconosciuto" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Impossibile archiviare il file %(file)s (autorizzazione negata)" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Impossibile eliminare il file %(file)s (autorizzazione negata)" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "errore" @@ -901,7 +906,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1034,9 +1039,9 @@ msgstr "visualizzare il libro dopo la modifica" msgid "Get metadata" msgstr "Ottieni metadati" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Sottoscrivi" @@ -1141,83 +1146,103 @@ msgstr "" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Livello del registro" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Abilita il caricamento" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Abilita la navigazione anonima" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Abilita la registrazione pubblica" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Attiva login remoto (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Uso" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Ottenere una chiave API" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "API di Goodreads" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API Secret" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Accesso" @@ -1732,6 +1757,10 @@ msgstr "" msgid "PDF.js viewer" msgstr "Visiera PDF.js" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Lettore base txt" @@ -1990,3 +2019,18 @@ msgstr "Download Recenti" #~ msgid "File %(file)s uploaded" #~ msgstr "" +#~ msgid "Update done" +#~ msgstr "Aggiornamento fatto" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/ja/LC_MESSAGES/messages.po b/cps/translations/ja/LC_MESSAGES/messages.po index 31ae513b..cc9ef0ee 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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n" "Last-Translator: white \n" "Language: ja\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "インストールされません" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "実行許可はありません" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Kindleに送信する" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" msgstr "" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 +msgid "A new update is available. Click on the button below to update to the latest version." msgstr "" -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" +#: cps/updater.py:335 +msgid "Could not fetch update information" msgstr "" -#: cps/web.py:1209 -msgid "A new update is available. Click on the button below to update to the latest version." +#: cps/updater.py:403 +msgid "No release information available" msgstr "" -#: cps/web.py:1259 -msgid "Could not fetch update information" +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" msgstr "" -#: cps/web.py:1274 +#: cps/web.py:1175 msgid "Requesting update package" msgstr "更新パッケージを要求します" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "更新パッケージをダウンロードします" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "更新パッケージをZIP解凍します" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "データベースの接続が閉じられました" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "更新完了、Okayまたは再読み込みボタンを押してください" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "最近追加された本" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "最新の本" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "最古の本" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "本(A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "本 (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "有名な本(ダウンロード数)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "最高評判の本" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "任意の本" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "叢書リスト" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "叢書: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "利用可能な言語" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "言語: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "カテゴリーリスト" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "カテゴリー: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "統計" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "サーバを再起動しました、ページを再読み込みしてください" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "サーバをシャットダウンします、ページを閉じてください" -#: cps/web.py:1965 -msgid "Update done" -msgstr "更新完了" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "" -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "" -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "検索" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "既読の本" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "未読の本" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "本を読む" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "全ての項目を入力してください" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "登録" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "%(nickname)s としてログインします" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "ユーザ名またはパスワードは間違いました" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "ログイン" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "トークンは見つかりません" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "トークンは失効されました" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "成功しまた!端末に戻ってください" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "SMTPメールをまず設定してください" -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "%(res)s を送信する際にエーラが発生しました" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "本 %(sname)s を書架に追加されました" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "本 %(sname)s を書架から除去されました" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "名前を使った書架 '%(title)s' は既に存在しました" -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "書架%(title)s は作成されました" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "エーラが発生しました" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "書架を作成する" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "書架 %(title)s 変わりました" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "書架を編集する" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "%(name)s の書架を削除されました" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "書架: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "書架を開けません。書架は存在しないまたはアクセスできません" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "'%(name)s' の書架の順番を入れ替える" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)sのプロファイル" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "プロファイルが更新されました" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "管理者ページ" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Calibre-Web 設定を更新されました" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "基本設定" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "ログファイルの場所は不適切です。正しい場所を入力してください" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "データベースの場所は不適切です。正しい場所を入力してください" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "新規ユーザ追加" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "ユーザ '%(user)s' が作成されました" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "ユーザ '%(nick)s' 削除されました" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "ユーザ '%(nick)s' 更新されました" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "不明のエーラが発生しました" -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "ユーザ編集 %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "メタデータを編集します" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "ファイル拡張子 '%(ext)s' をこのサーバにアップロードする許可はありません" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "ファイルをアップロードするために拡張子が必要です" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "場所 %(path)s の作成を失敗しました (許可拒否)" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "フアイル %(file)s の保存を失敗しました" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "不明" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "ファイル %(file)s の保存を失敗しました (許可拒否)" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "ファイル %(file)s の削除を失敗しました (許可拒否)" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen 失敗しました、エーラ %(error)s. メッセージ: %(message)s" @@ -902,7 +907,7 @@ msgstr "はい" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "編集してから本を表示します" msgid "Get metadata" msgstr "メタデータを取得します" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "提出" @@ -1142,83 +1147,103 @@ msgstr "" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "ログレベル" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "アップロードを 有効する" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "匿名ブラウジングを有効する" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "公的登録を有効する" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "遠距離ログインを有効する ('マジックリンク')" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "使う" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "APIキーを取得する" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "GoodreadsのAPIキー" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "GoodreadsのAPI秘密" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "ログイン" @@ -1733,6 +1758,10 @@ msgstr "" msgid "PDF.js viewer" msgstr "" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "" @@ -1991,3 +2020,18 @@ msgstr "最近ダウンロード" #~ msgid "File %(file)s uploaded" #~ msgstr "" +#~ msgid "Update done" +#~ msgstr "更新完了" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/km/LC_MESSAGES/messages.po b/cps/translations/km/LC_MESSAGES/messages.po index 9f2979f2..0245efbd 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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-08-27 17:06+0700\n" "Last-Translator: \n" "Language: km_KH\n" @@ -19,734 +19,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "មិនបានតម្លើង" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "ខ្វះសិទ្ធិប្រតិបត្តិការ" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "ផ្ញើទៅ Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "អ៊ីមែល៖ %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "ឯកសារដែលបានស្នើសុំមិនអាចបើកបានទេ។ អាចនឹងខុសសិទ្ធិប្រើប្រាស់ទេដឹង?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "ប្តូរអ្នកនិពន្ធពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "ឯកសារ %(file)s រកមិនឃើញក្នុង Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "ទីតាំងសៀវភៅ %(path)s រកមិនឃើញក្នុង Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "កំពុងរង់ចាំ" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "បានបរាជ័យ" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "បានចាប់ផ្តើម" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "បានបញ្ចប់" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "មិនដឹង" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "" + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 +msgid "A new update is available. Click on the button below to update to the latest version." msgstr "" -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" +#: cps/updater.py:335 +msgid "Could not fetch update information" msgstr "" -#: cps/web.py:1209 -msgid "A new update is available. Click on the button below to update to the latest version." +#: cps/updater.py:403 +msgid "No release information available" msgstr "" -#: cps/web.py:1259 -msgid "Could not fetch update information" +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" msgstr "" -#: cps/web.py:1274 +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "មិនដឹង" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "កំពុងស្នើសុំឯកសារបច្ចុប្បន្នភាព" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "កំពុងទាញយកឯកសារបច្ចុប្បន្នភាព" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "កំពុងពន្លាឯកសារបច្ចុប្បន្នភាព" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "ទំនាក់ទំនងទៅមូលដ្ឋានទិន្នន័យត្រូវបានផ្តាច់" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "ការធ្វើបច្ចុប្បន្នភាពបានបញ្ចប់ សូមចុច okay រួចបើកទំព័រជាថ្មី" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "សៀវភៅដែលទើបបានបន្ថែម" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "សៀវភៅថ្មីៗជាងគេ" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "សៀវភៅចាស់ជាងគេ" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "សៀវភៅពី A ទៅ Z" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "សៀវភៅពី Z ទៅ A" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "សៀវភៅដែលត្រូវបានទាញយកច្រើនជាងគេ" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "សៀវភៅដែលត្រូវបានវាយតម្លៃល្អជាងគេ" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "សៀវភៅចៃដន្យ" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ មិនមានឯកសារនេះ ឬមិនអាចបើកបាន៖" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "បញ្ជីស៊េរី" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "ស៊េរី៖ %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "ភាសាដែលមាន" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "ភាសា៖ %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "បញ្ជីប្រភេទ" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "ប្រភេទ៖ %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "កិច្ចការនានា" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "ស្ថិតិ" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Callback domain មិនទាន់បានផ្ទៀងផ្ទាត់ឲប្រើទេ សូមធ្វើតាមជំហានដើម្បីផ្ទៀងផ្ទាត់ domain នៅក្នុង Google Developer Console" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "ម៉ាស៊ីន server បានដំណើរការម្តងទៀត សូមបើកទំព័រជាថ្មី" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "កំពុងបិទម៉ាស៊ីន server សូមបិទផ្ទាំងនេះ" -#: cps/web.py:1965 -msgid "Update done" -msgstr "ការធ្វើបច្ចុប្បន្នភាពរួចរាល់" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "បានបោះពុម្ភក្រោយ " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "បានបោះពុម្ភមុន " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "ការវាយតម្លៃ <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "ការវាយតម្លៃ >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "ស្វែងរក" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "សៀវភៅដែលបានអានរួច" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "សៀវភៅដែលមិនទាន់បានអាន" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "អានសៀវភៅ" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "សូមបំពេញចន្លោះទាំងអស់!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "ចុះឈ្មោះ" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "ឥឡូវអ្នកបានចូលដោយមានឈ្មោះថា៖ ‘%(nickname)s’" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "ខុសឈ្មោះអ្នកប្រើប្រាស់ ឬលេខសម្ងាត់" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "ចូលប្រើ" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "រកមិនឃើញវត្ថុតាង" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "វត្ថុតាងហួសពេលកំណត់" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "ជោគជ័យ! សូមវិលមកឧបករណ៍អ្នកវិញ" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "សូមកំណត់អ៊ីមែល SMTP ជាមុនសិន" -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "សៀវភៅបានចូលជួរសម្រាប់ផ្ញើទៅ %(kindlemail)s ដោយជោគជ័យ" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "មានបញ្ហានៅពេលផ្ញើសៀវភៅនេះ៖ %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "សៀវភៅត្រូវបានបន្ថែមទៅធ្នើ៖ %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "សៀវភៅត្រូវបានដកចេញពីធ្នើ៖ %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "សូមអភ័យទោស អ្នកមិនមានសិទ្ធិដកសៀវភៅចេញពីធ្នើនេះទេ៖ %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "មានធ្នើដែលមានឈ្មោះ ‘%(title)s’ រួចហើយ។" -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានបង្កើត" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "មានបញ្ហា" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "បង្កើតធ្នើ" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានប្តូរ" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "កែប្រែធ្នើ" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "បានបង្កើតធ្នើឈ្មោះ %(name)s ដោយជោគជ័យ" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "ធ្នើ៖ ‘%(name)s’" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "មានបញ្ហាពេលបើកធ្នើ។ ពុំមានធ្នើ ឬមិនអាចបើកបាន" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "ប្តូរលំដាប់ធ្នើ៖ ‘%(name)s’" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "ព័ត៌មានសង្ខេបរបស់ %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "ព័ត៌មានសង្ខេបបានកែប្រែ" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "ទំព័ររដ្ឋបាល" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "ការកំណត់ផ្ទាំងប្រើប្រាស់" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "ខ្វះការនាំចូលតម្រូវការបន្ថែមរបស់ Google Drive" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "មិនមានឯកសារ client_secrets.json ឬមិនអាចបើកបាន" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "ឯកសារ client_secrets.json មិនទាន់បានកំណត់សម្រាប់កម្មវិធីវែប" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "ការកំណត់សាមញ្ញ" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "ទីតាំងរបស់ keyfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "ទីតាំងរបស់ certfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "ទីតាំងរបស់ logfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "ទីតាំងរបស់ database មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "បន្ថែមអ្នកប្រើប្រាស់ថ្មី" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "បានបង្កើតអ្នកប្រើប្រាស់ ‘%(user)s’" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "អ្នកប្រើប្រាស់ ‘%(nick)s’ ត្រូវបានលុប" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "អ្នកប្រើប្រាស់ ‘%(nick)s’ ត្រូវបានកែប្រែ" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "បញ្ហាដែលមិនដឹងបានកើតឡើង។" -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "កែប្រែអ្នកប្រើប្រាស់ %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ ពុំមានឯកសារ ឬឯកសារនេះមិនអាចបើកបាន" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "កែប្រែទិន្នន័យមេតា" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "ឯកសារប្រភេទ '%(ext)s' មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "ឯកសារដែលត្រូវអាប់ឡូដត្រូវមានកន្ទុយឯកសារ" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "មិនអាចបង្កើតទីតាំង %(path)s (ពុំមានសិទ្ធិ)។" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "មិនដឹង" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "គម្របមិនមែនជាឯកសារ JPG មិនអាចរក្សាទុក" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "មានបញ្ហាពេលកែប្រែសៀវភៅ សូមពិនិត្យមើល logfile សម្រាប់ព័ត៌មានបន្ថែម" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s (មិនមានសិទ្ធិ)។" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "មិនអាចលុបឯកសារ %(file)s (មិនមានសិទ្ធិ)។" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Ebook-converter បានបរាជ័យ៖ %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen បានបរាជ័យដោយមានកំហុស %(error)s. សារ៖ %(message)s" @@ -903,7 +908,7 @@ msgstr "បាទ/ចាស" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1036,9 +1041,9 @@ msgstr "មើលសៀវភៅក្រោយពីកែប្រែ" msgid "Get metadata" msgstr "មើលទិន្នន័យមេតា" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "បញ្ចូល" @@ -1143,83 +1148,103 @@ msgstr "ទីតាំង SSL certfile (ទុកទទេសម្រាប់ msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "ទីតាំង SSL keyfile (ទុកទទេសម្រាប់ម៉ាស៊ីន server ដែលមិនប្រើ SSL)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "ការកំណត់ logfile" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "កម្រិត log" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "ទីតាំង និងឈ្មោះ logfile (calibre-web.log ប្រសិនបើទទេ)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "ការកំណត់មុខងារ" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "អនុញ្ញាតការអាប់ឡូត" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "អនុញ្ញាតការរុករកដោយអនាមិក" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "អនុញ្ញាតការចុះឈ្មោះសាធារណៈ" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "អនុញ្ញាតការ login ពីចម្ងាយ (ឬ “magic link”)" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "ប្រើប្រាស់" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "ទាញយក API key" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Goodreads API key" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API secret" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "គ្មានកម្មវិធីបម្លែង" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "ប្រើ Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "ប្រើកម្មវិធីបម្លែង eBook របស់ Calibre" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "ការកំណត់របស់កម្មវិធីបម្លែង eBook" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "ទីតាំងរបស់កម្មវិធីបម្លែង" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "ចូលប្រើប្រាស់" @@ -1734,6 +1759,10 @@ msgstr "" msgid "PDF.js viewer" msgstr "កម្មវិធីមើល PDF.js" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "កម្មវិធីមើល txt សាមញ្ញ" @@ -1992,3 +2021,18 @@ msgstr "ការទាញយកថ្មីៗ" #~ msgid "File %(file)s uploaded" #~ msgstr "ឯកសារ %(file)s ត្រូវបានអាប់ឡូដ" +#~ msgid "Update done" +#~ msgstr "ការធ្វើបច្ចុប្បន្នភាពរួចរាល់" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 3a69bb42..fb4f2703 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 dutch translation by Ed Driesen (GPL V3)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-12-09 15:07+0100\n" "Last-Translator: \n" "Language: nl\n" @@ -19,734 +19,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "niet geïnstalleerd" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Rechten om uit te voeren ontbreken" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "Niet geconfigureerd" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "%(format)s formaat niet gevonden voor boek met id: %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s niet gevonden op Google Drive: %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Stuur naar Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Deze email werd verzonden via Calibre-Web." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s niet gevonden %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web test email" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Test email" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Aan de slag met Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Registratie email voor gebruiker: %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "Email: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "Het gevraagde bestand kon niet worden gelezen. Misschien niet de juiste permissies?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Hernoemen van titel: '%(src)s' naar '%(dest)s' faade met fout: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Hernoemen van de auteur: '%(src)s' naar '%(dest)s' faalde met fout: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Bestand %(file)s niet gevonden op Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Boek pad %(path)s niet gevonden op Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Fout bij het uitvoeren van UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Unrar uitvoeringsbestand niet gevonden" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Wachten" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Mislukt" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Gestart" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Voltooid" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "Onbekende status" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "Email:" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "Converteer:" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "Upload:" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "Onbekende taak:" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Onbekend" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Onverwachte data tijdens het lezen van de update informatie" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Geen update beschikbaar. Je hebt reeds de laatste versie geïnstalleerd" + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "HTTP fout" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Verbindingsfout" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Time-out bij het maken van de verbinding" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Algemene fout" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Onverwachte data tijdens het lezen van de update informatie" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Geen update beschikbaar. Je hebt reeds de laatste versie geïnstalleerd" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Een nieuwe update is beschikbaar. Click op de knop hier onder op te updaten naar de laatste versie." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "De update informatie kon niet gelezen worden" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Onbekend" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Update pakket wordt aangevraagd" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Update pakket wordt gedownload" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Update pakket wordt uitgepakt" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "Bestanden aan het vervangen" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Database verbindingen zijn gesloten" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "Server aan het stoppen" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Update voltooid, klik op ok en herlaad de pagina" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "Update gefaald:" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Recent toegevoegde boeken" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Nieuwste boeken" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Oudste boeken" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Boeken (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Boeken (A-Z)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Populaire boeken (meeste downloads)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Best beoordeelde boeken" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Willekeurige boeken" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Fout bij openen van het boek. Bestand bestaat niet of is niet toegankelijk:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "Uitgeverslijst" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "Uitgever: %(name)s" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Serie lijst" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Beschikbare talen" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Taal: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Categorie lijst" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Categorie: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Taken" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statistieken" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Het callback domein is niet geverifieerd, volg de stappen in de google ontwikkelaars console om het domein te verifiëren" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Server herstart, gelieve de pagina herladen" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Bezig met het stoppen van de server, gelieve venster te sluiten" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Update voltooid" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Gepubliceerd na " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Gepubliceerd voor " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Waardering <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Waardering >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "zoek" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Gelezen Boeken" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Ongelezen Boeken" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Lees een boek" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Gelieve alle velden in te vullen!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "registreer" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Er was een onbekende fout. Gelieve later nog eens te proberen." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Het is niet toegestaan om te registreren met jou email" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Bevestigings email werd verzonden naar jou email account." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Deze gebruikersnaam of email adres is reeds in gebruik." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "je bent nu ingelogd als: '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Verkeerde gebruikersnaam of Wachtwoord" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "login" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Token niet gevonden" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Token is verlopen" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Gelukt! Ga terug naar je apparaat" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Gelieve de SMTP mail instellingen eerst te configureren..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Boek met succes in de wachtrij geplaatst om te verzenden naar %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Er trad een fout op bij het versturen van dit boek: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Gelieve eerst je kindle mailadres te configureren..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "Ongeldige boekenplank gespecificeerd" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "Sorry, jij mag geen boeken toe voegen aan boekenplank: %(shelfname)s" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "Jij mag geen publieke boekenplanken bewerken" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "Dit boek maakt al deel uit van boekenplank: %(shelfname)s" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Jij mag geen boeken plaatsen op boekenplank: %(name)s" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "Gebruiker is niet toegestaan om publieke boekenplanken te bewerken" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Deze boeken maken reeds deel uit van boekenplank: %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "De boeken werden toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Kon geen boeken toevoegen aan boekenplank: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boek werd verwijderd van boekenplank: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Sorry, jij mag geen boeken verwijderen van deze boekenplank: %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Boekenplank %(title)s aangemaakt" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Er deed zich een fout voor" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "maak een boekenplank" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Boekenplank %(title)s gewijzigd" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Bewerk een boekenplank" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "boekenplank %(name)s succesvol gewist" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Boekenplank: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Fout bij openen boekenplank. Boekenplank bestaat niet of is niet toegankelijk" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Verander volgorde van Boekenplank: '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "Email is niet van een geldig domein" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's profiel" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Een bestaand account met dit email adres werd gevonden." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Profiel aangepast" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Administratie pagina" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Calibre-Web configuratie aangepast" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Gebruikersinterface configuratie" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "De import van optionele Google Drive vereisten ontbreken" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json ontbreekt of is niet leesbaar" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json is niet geconfigureerd voor web applicaties" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Basis configuratie" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "Sleutelbestand (\"keyfile\") locatie ongeldig, gelieve het correcte pad in te geven" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "Certificatiebestand (\"certfile\") locatie ongeldig, gelieve het correcte pad in te geven" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "Log bestand (\"logfile\") locatie ongeldig, gelieve het correcte pad in te geven" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "DB locatie is niet geldig, gelieve het correcte pad in te geven" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Voeg nieuwe gebruiker toe" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Gebruiker '%(user)s' aangemaakt" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Een bestaande account gevonden met dit email adres of gebruikersnaam." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Test email met succes verzonden naar %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Er was een fout bij het verzenden van test email: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "Email server instellingen aangepast" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Bewerk email server instellingen" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Gebruiker '%(nick)s' verwijderd" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Gebruiker '%(nick)s' aangepast" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Een onbekende fout deed zich voor." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Bewerk gebruiker '%(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Wachtwoord voor gebruiker %(user)s gereset" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Fout bij openen eBook. Het bestand bestaat niet of is niet toegankelijk" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "bewerk metadata" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Het uploaden van bestandsextensie '%(ext)s' is niet toegestaan op deze server" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Up te loaden bestanden dienen een extensie te hebben" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Het pad %(path)s aanmaken mislukt (Geen toestemming)." -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Bestand opslaan niet gelukt voor %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Bestandsformaat %(ext)s toegevoegd aan %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Het pad %(path)s aanmaken voor boekomslag is mislukt (Geen toestemming)." -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Boekomslag %(cover)s opslaan mislukt." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "Boekomslag bestand is geen geldig beeldbestand" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "onbekend" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "Boekomslag is geen jpg bestand, opslaan niet mogelijk" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s is geen geldige taal" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "Metadata succesvol geüpdatet" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Fout bij het bewerken van het boek, gelieve logfile controleren" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Bestand %(file)s opslaan mislukt (Geen toestemming)." -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Bestand %(file)s wissen mislukt (Geen toestemming)." -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Bron of doel formaat voor conversie ontbreekt" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Boek succesvol in de wachtrij geplaatst voor conversie naar %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Er trad een fout op bij het converteren van dit boek: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Ebook conversie mislukt: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen gefaald met Error %(error)s. Bericht: %(message)s" @@ -903,7 +908,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1036,9 +1041,9 @@ msgstr "bekijk boek na bewerking" msgid "Get metadata" msgstr "Verkrijg metadata" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Opslaan" @@ -1143,83 +1148,103 @@ msgstr "SSL certificaat (\"certfile\") bestand locatie (laat leeg voor niet-SSL msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "SSL sleutel (\"keyfile\") bestand (laat leeg voor niet-SSL servers)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Logbestand configuratie" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Log niveau" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Locatie en naam van logbestand (calibre-web.log indien leeg)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Voorzieningen configuratie" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Uploaden aanzetten" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Anoniem verkennen aanzetten" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Publieke registratie aanzetten" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Maak op afstand ionloggen mogelijk (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Gebruik" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Verkrijg een API sleutel" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Goodreads API sleutel" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API geheim" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Externe bibliotheken" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Geen conversie programma" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Gebruik Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Gebruik calibre's ebook converter" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "E-book conversie instellingen" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Pad naar conversietool" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Locatie van Unrar programma" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" @@ -1734,6 +1759,10 @@ msgstr "Verticaal" msgid "PDF.js viewer" msgstr "PDF.js viewer" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Basis txt Lezer" @@ -1962,3 +1991,18 @@ msgstr "Recente Downloads" #~ msgid "Author list" #~ msgstr "Auteur lijst" +#~ msgid "Update done" +#~ msgstr "Update voltooid" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index 9b352d58..726cde44 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: 2017-04-11 22:51)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2017-04-11 22:51+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -19,734 +19,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "nie zainstalowane" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Wyślij do Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" msgstr "" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 +msgid "A new update is available. Click on the button below to update to the latest version." msgstr "" -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" +#: cps/updater.py:335 +msgid "Could not fetch update information" msgstr "" -#: cps/web.py:1209 -msgid "A new update is available. Click on the button below to update to the latest version." +#: cps/updater.py:403 +msgid "No release information available" msgstr "" -#: cps/web.py:1259 -msgid "Could not fetch update information" +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" msgstr "" -#: cps/web.py:1274 +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Żądanie o pakiet aktualizacji" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Pobieranie pakietu aktualizacji" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Rozpakowywanie pakietu aktualizacji" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Połączenia z bazą danych zostały zakończone" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Błąd otwierania e-booka. Plik nie istnieje lub plik nie jest dostępny:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Seria: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Aktualizacja zakończona" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "" -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "" -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "szukaj" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Przeczytane książki" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Nieprzeczytane książki" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "rejestracja" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Zalogowałeś się jako: '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Błędna nazwa użytkownika lub hasło" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "logowanie" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Książka została usunięta z półki: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Konfiguracja Calibre-Web została zaktualizowana" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku '%(ext)s' nie jest dozwolone do przesłania na ten serwer" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Plik do przesłania musi mieć rozszerzenie" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Nie udało się utworzyć łącza %(path)s (Odmowa dostępu)." -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Nie można przechowywać pliku %(file)s (Odmowa dostępu)." -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Nie udało się usunąć pliku %(file)s (Odmowa dostępu)." -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" @@ -903,7 +908,7 @@ msgstr "OK" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1036,9 +1041,9 @@ msgstr "wyświetl książkę po edycji" msgid "Get metadata" msgstr "Uzyskaj metadane" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Wyślij" @@ -1144,83 +1149,103 @@ msgstr "" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Poziom logów" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Włącz wysyłanie" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Włącz anonimowe przeglądanie" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Włącz publiczną rejestrację" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Zaloguj się" @@ -1736,6 +1761,10 @@ msgstr "" msgid "PDF.js viewer" msgstr "PDF.js viewer" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Podstawowy czytnik txt" @@ -2000,3 +2029,18 @@ msgstr "Ostatnio pobierane" #~ msgid "File %(file)s uploaded" #~ msgstr "" +#~ msgid "Update done" +#~ msgstr "Aktualizacja zakończona" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index f16abe54..36cb6cf5 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-12-14 16:26+0300\n" "Last-Translator: Pavel Korovin \n" "Language: ru\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "не установлено" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Отсутствуют разрешения на выполнение" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "не настроен" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "%(format)s форма не найден для книги с id: %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s не найден на Google Drive: %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Отправить на Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Это электронное письмо было отправлено через Caliber-Web." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s не найден: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Тестовый e-mail для Calibre-Web" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Тестовый e-mail" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Начать работать с Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Регистрационный e-mail для пользователя: %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "Эл. почта: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "Запрашиваемый файл не может быть прочитан. Возможно не верные разрешения?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Переименовывание заголовка с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Переименовывание автора с: '%(src)s' на '%(dest)s' не удалось из-за ошибки: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Файл %(file)s не найден на Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Путь книги %(path)s не найден на Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Ошибка извлечения UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Unrar двочиный файл не найден" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Ожидание" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Неудачно" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Начало" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Закончено" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "Неизвестный статус" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "E-mail: " -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "Конвертировать:" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "Загрузить:" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "Неизвестная задача:" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Неизвестно" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Некорректные данные при чтении информации об обновлении" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Обновление недоступно. Вы используете самую последнюю версию" + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "Ошибка HTTP" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Ошибка соединения" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Таймаут при установлении соединения" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Общая ошибка" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Некорректные данные при чтении информации об обновлении" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Обновление недоступно. Вы используете самую последнюю версию" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "Доступно обновление. Нажмите на кнопку, что бы обновиться до последней версии." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "Не удалось получить информацию об обновлении" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Неизвестно" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Проверка обновлений" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Загрузка обновлений" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Распаковка обновлений" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "Замена файлов" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Соеднинения с базой данных закрыты" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "Остановка сервера" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "Ошибка обновления:" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Недавно Добавленные Книги" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Новые Книги" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Старые Книги" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Книги (А-Я)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Книги (Я-А)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Популярные книги (часто загружаемые)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Книги с наивысшим рейтингом" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Случайный выбор" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Невозможно открыть книгу. Файл не существует или недоступен." -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "Список издателей" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "Издатель: %(name)s" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Серии" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Серии: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Доступные языки" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Язык: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Категории" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Категория: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Задания" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Статистика" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Не удалось проверить домен обратного вызова, пожалуйста, выполните шаги для проверки домена в консоли разработчика Google." -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Производится остановка сервера, пожалуйста, закройте окно" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Обновление закончено" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Опубликовано до " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Опубликовано после " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Рейтинг <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Рейтинг >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "поиск" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Прочитанные Книги" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Непрочитанные Книги" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Читать Книгу" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Пожалуйста, заполните все поля!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "регистрация" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Неизвестная ошибка. Попробуйте позже." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Ваш e-mail не подходит для регистрации" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Письмо с подтверждением отправлено вам на e-mail" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Этот никнейм или e-mail уже используются" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Вы вошли как пользователь '%(nickname)s'" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Ошибка в имени пользователя или пароле" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "войти" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Ключ не найден" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Ключ просрочен" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Успешно! Пожалуйста, проверьте свое устройство" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP" -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Книга успешно поставлена в очередь для отправки на %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ошибка при отправке книги: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Пожалуйста, сначала настройте e-mail на вашем kindle..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "Указана неверная полка" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "Извините, но вам не разрешено добавлять книгу на полку: %(shelfname)s" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "Вы не можете редактировать общедоступные полки" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "Книги уже размещены на полке: %(shelfname)s" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Вам не разрешено добавлять книгу на полку: %(name)s" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "Пользователь не может редактировать общедоступные полки" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Книги уже размещены на полке: %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "Книги добавлены в полку: %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Не удалось добавить книги на полку: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Книга удалена с полки: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Извините, вы не можете удалить книгу с полки: %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Полка с названием '%(title)s' уже существует." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Создана полка %(title)s" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Произошла ошибка" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "создать полку" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Колка %(title)s изменена" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Изменить полку" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "удачно удалена полка %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Полка: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Ошибка открытия Полки. Полка не существует или недоступна" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Изменить расположение полки '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "E-mail не из существующей доменной зоны" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "Профиль %(name)s" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Этот адрес электронной почты уже зарегистрирован." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Профиль обновлён" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Администрирование" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Конфигурация Calibre-Web обновлена" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Настройка интерфейса" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "Импорт дополнительных требований к Google Диску отсутствует" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json отсутствует или его невозможно прочесть" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json не настроен для веб-приложения" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Настройки сервера" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "Неверное расположение файла-ключа, введите правильный путь" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "Неверное расположение сертификата, введите правильный путь" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "Неверное расположение лог-файла, введите правильный путь" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Неверное расположение базы данных, введите правильный путь" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Добавить пользователя" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Пользователь '%(user)s' добавлен" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Для этого адреса электронной почты или логина уже есть аккаунт." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Тестовое письмо успешно отправлено на %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Произошла ошибка при отправке тестового письма на: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "Настройки E-mail сервера обновлены" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Изменить настройки e-mail сервера" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Пользователь '%(nick)s' удалён" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Пользователь '%(nick)s' обновлён" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Произошла неизвестная ошибка." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Изменить пользователя %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Пароль для пользователя %(user)s сброшен" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Ошибка при открытии eBook. Файл не существует или файл недоступен" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "изменить метаданные" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Запрещена загрузка файлов с расширением '%(ext)s'" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Загружаемый файл должен иметь расширение" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Ошибка при создании пути %(path)s (Доступ запрещён)." -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Не удалось сохранить файл %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Формат файла %(ext)s добавлен в %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Не удалось создать путь для обложки %(path)s (Доступ запрещён)." -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Не удалось сохранить файл обложки %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "Файл обложки не соответствует изображению" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "неизвестно" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "Обложка не jpg файл, невозможно сохранить" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s не допустимый язык" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "Метаданные обновлены" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Ошибка редактирования книги. Пожалуйста, проверьте лог-файл для дополнительной информации" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Ошибка записи файла %(file)s (Доступ запрещён)." -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Ошибка удаления файла %(file)s (Доступ запрещён)." -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Исходный или целевой формат для конвертирования отсутствует" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Книга успешно поставлена в очередь для конвертирования в %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Произошла ошибка при конвертирования этой книги: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "Ошибка Ebook-конвертора: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen - неудачно, с Ошибкой %(error)s. Сообщение: %(message)s" @@ -902,7 +907,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "смотреть книгу после редактирования" msgid "Get metadata" msgstr "Получить метаданные" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Отправить" @@ -1142,83 +1147,103 @@ msgstr "Расположение SSL сертификата (оставьте е msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "Расположение SSL файла-ключа (оставьте его пустым для серверов без SSL)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Настройки лог-файла" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Уровень Логирования" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Расположение и имя лог-файла (не вводите calibre-web.log)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Дополнительный Настройки" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Разрешить анонимный просмотр" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Разрешить публичную регистрацию" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Включить удаленный логин (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Использовать" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Получить ключ API" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Ключ API Goodreads" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API Секрет" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Внешние двоичные файлы" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Нет конвертера" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Использовать Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Использовать конвертер calibre's ebook" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "Настройки конвертера E-Book" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Путь к конвертеру" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Расположение двоичного файла Unrar" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Логин" @@ -1733,6 +1758,10 @@ msgstr "Вертикально" msgid "PDF.js viewer" msgstr "Просмотровщик PDF.js" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Средство для чтения txt-файлов" @@ -1961,3 +1990,18 @@ msgstr "Недавние скачивания" #~ msgid "Author list" #~ msgstr "Авторы" +#~ msgid "Update done" +#~ msgstr "Обновление закончено" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/sv/LC_MESSAGES/messages.po b/cps/translations/sv/LC_MESSAGES/messages.po index ea227b99..585a3a1e 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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2018-11-23 02:57+0100\n" "Last-Translator: Jonatan Nyberg \n" "Language: sv\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "inte installerad" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "Utförande behörighet saknas" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "inte konfigurerad" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "%(format)s formatet hittades inte för bok-id: %(book)d" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "%(format)s hittades inte på Google Drive: %(fn)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "Skicka till Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "Detta e-postmeddelande har skickats via Calibre-Web." -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "%(format)s hittades inte: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web test e-post" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "Test e-post" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "Kom igång med Calibre-Web" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "Registrera e-post för användare: %(name)s" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "E-post: %(book)s" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "Den begärda filen kunde inte läsas. Kanske fel behörigheter?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Byt namn på titel från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "Byt namn på författare från: \"%(src)s\" till \"%(dest)s\" misslyckades med fel: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Filen %(file)s hittades inte på Google Drive" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Boksökvägen %(path)s hittades inte på Google Drive" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "Fel vid körning av UnRar" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "Unrar binärfil hittades inte" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "Väntar" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "Misslyckades" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "Startad" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "Klar" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "Okänd status" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "E-post: " -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "Konvertera: " -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "Överför: " -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "Okänd uppgift: " -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "Okänd" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "Oväntade data vid läsning av uppdateringsinformation" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "Ingen uppdatering tillgänglig. Du har redan den senaste versionen installerad" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "HTTP-fel" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "Anslutningsfel" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "Tiden ute när du etablerade anslutning" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "Allmänt fel" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "Oväntade data vid läsning av uppdateringsinformation" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "Ingen uppdatering tillgänglig. Du har redan den senaste versionen installerad" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "En ny uppdatering är tillgänglig. Klicka på knappen nedan för att uppdatera till den senaste versionen." -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "Kunde inte hämta uppdateringsinformation" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "Okänd" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "Begär uppdateringspaketet" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "Hämtar uppdateringspaketet" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "Packar upp uppdateringspaketet" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "Ersätta filer" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "Databasanslutningarna är stängda" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "Stoppar server" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "Uppdatering klar, tryck på okej och uppdatera sidan" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "Uppdateringen misslyckades:" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "Nyligen tillagda böcker" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "Nyaste böcker" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "Äldsta böcker" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "Böcker (A-Ö)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "Böcker (Ö-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "Heta böcker (mest hämtade)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "Bäst rankade böcker" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "Slumpmässiga böcker" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Fel vid öppnande av e-bok. Filen finns inte eller filen är inte tillgänglig:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "Lista över förlag" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "Förlag: %(name)s" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "Serielista" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "Serier: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "Tillgängliga språk" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "Språk: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "Kategorilista" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "Kategori: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "Uppgifter" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "Statistik" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "Återuppringningsdomänen är inte verifierad, följ stegen för att verifiera domänen i Google utvecklarkonsol" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "Server startas om, vänligen uppdatera sidan" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "Stänger servern, vänligen stäng fönstret" -#: cps/web.py:1965 -msgid "Update done" -msgstr "Uppdatering klar" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "Publicerad efter " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "Publicerad före " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "Betyg <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "Betyg >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "sök" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "Lästa böcker" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "Olästa böcker" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "Läs en bok" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "Fyll i alla fält!" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "registrera" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "Ett okänt fel uppstod. Försök igen senare." -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "Din e-post är inte tillåten att registrera" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "Bekräftelsemail skickades till ditt e-postkonto." -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "Det här användarnamnet eller e-postadressen är redan i bruk." -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "du är nu inloggad som: \"%(nickname)s\"" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "Fel användarnamn eller lösenord" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "logga in" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "Token hittades inte" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Token har löpt ut" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "Lyckades! Vänligen återvänd till din enhet" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "Konfigurera SMTP-postinställningarna först..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "Boken är i kö för att skicka till %(kindlemail)s" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Det gick inte att skicka den här boken: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "Konfigurera din kindle-e-postadress först..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "Ogiltig hylla specificerad" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "Du får inte redigera offentliga hyllor" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "Boken är redan en del av hyllan: %(shelfname)s" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Boken har lagts till i hyllan: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "Du får inte lägga till en bok i hyllan: %(name)s" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "Användaren får inte redigera publika hyllor" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "Böcker är redan en del av hyllan: %(name)s" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "Böcker har lagts till hyllan: %(sname)s" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "Kunde inte lägga till böcker till hyllan: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boken har tagits bort från hyllan: %(sname)s" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "Tyvärr har du inte rätt att ta bort en bok från den här hyllan: %(sname)s" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "En hylla med namnet '%(title)s' finns redan." -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "Hyllan %(title)s skapad" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "Det fanns ett fel" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "skapa en hylla" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "Hyllan %(title)s ändrad" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "Redigera en hylla" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "tog bort hyllan %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "Hylla: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "Fel vid öppning av hyllan. Hylla finns inte eller är inte tillgänglig" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Ändra ordning på hyllan: '%(name)s'" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "E-posten är inte från giltig domän" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)ss profil" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "Hittade ett befintligt konto för den här e-postadressen." -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "Profilen uppdaterad" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "Administrationssida" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Calibre-Web konfiguration uppdaterad" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "Användargränssnitt konfiguration" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "Import av valfri Google Drive krav saknas" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json saknas eller inte kan läsas" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "client_secrets.json är inte konfigurerad för webbapplikation" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "Grundläggande konfiguration" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "Platsen för Keyfile är inte giltig, ange rätt sökväg" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "Platsen för Certfile är inte giltig, ange rätt sökväg" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "Platsen för Logfile platsen är inte giltig, ange rätt sökväg" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "Platsen för DB är inte giltig, ange rätt sökväg" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "Lägg till ny användare" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "Användaren '%(user)s' skapad" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "Hittade ett befintligt konto för den här e-postadressen eller smeknamnet." -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "Test-e-post skicka till %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "Det gick inte att skicka Testmeddelandet: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "E-postserverinställningar uppdaterade" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "Redigera inställningar för e-postserver" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "Användaren '%(nick)s' borttagen" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "Användaren '%(nick)s' uppdaterad" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "Ett okänt fel uppstod." -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "Redigera användaren %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "Lösenord för användaren %(user)s återställd" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "Det gick inte att öppna e-boken. Filen finns inte eller filen är inte tillgänglig" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "redigera metadata" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "Filändelsen '%(ext)s' får inte laddas upp till den här servern" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "Filen som ska laddas upp måste ha en ändelse" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "Det gick inte att skapa sökväg %(path)s (behörighet nekad)." -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "Det gick inte att lagra filen %(file)s." -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "Filformatet %(ext)s lades till %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "Det gick inte att skapa sökväg för omslag %(path)s (behörighet nekad)." -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "Det gick inte att lagra omslagsfilen %(cover)s." -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "Omslagsfilen är inte en giltig bildfil" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "okänd" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "Omslag är inte en jpg-fil, kan inte spara" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s är inte ett giltigt språk" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "Metadata uppdaterades" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "Det gick inte att redigera boken, kontrollera loggfilen för mer information" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "Det gick inte att lagra filen %(file)s (behörighet nekad)." -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "Det gick inte att ta bort filen %(file)s (behörighet nekad)." -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "Källa eller målformat för konvertering saknas" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "Boken är i kö för konvertering till %(book_format)s" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "Det gick inte att konvertera den här boken: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "E-bokkonverteraren misslyckades: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen misslyckades med fel %(error)s. Meddelande: %(message)s" @@ -902,7 +907,7 @@ msgstr "Ok" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "visa bok efter redigering" msgid "Get metadata" msgstr "Hämta metadata" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "Skicka" @@ -1142,83 +1147,103 @@ msgstr "SSL certfile plats (lämna den tom för icke-SSL-servrar)" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "SSL Keyfile plats (lämna den tom för icke-SSL-servrar)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "Loggfil konfiguration" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "Loggnivå" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "Plats och namn på loggfilen (calibre-web.log för ingen post)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "Funktion konfiguration" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "Aktivera uppladdning" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "Aktivera anonym surfning" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "Aktivera offentlig registrering" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "Aktivera fjärrinloggning (\"magic link\")" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "Använd" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "Hämta en API-nyckel" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "Goodreads API-nyckel" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "Goodreads API-hemlighet" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "Externa binärer" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "Ingen konverterare" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "Använd Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "Använd calibres e-bokkonverterare" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "Inställningar för e-bokkonverteraren" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "Sökväg till convertertool" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Plats för Unrar-binär" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "Logga in" @@ -1733,6 +1758,10 @@ msgstr "Vertikal" msgid "PDF.js viewer" msgstr "PDF.js visare" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "Grundläggande txt-läsare" @@ -1964,3 +1993,18 @@ msgstr "Senaste hämtningar" #~ msgid "Author list" #~ msgstr "Författarlista" +#~ msgid "Update done" +#~ msgstr "Uppdatering klar" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 2b4b31e5..d3fc690f 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: https://github.com/janeczku/Calibre-Web\n" -"POT-Creation-Date: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -18,734 +18,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "未安装" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "可执行权限缺失" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "未配置" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "找不到id为 %(book)d 的书的 %(format)s 格式" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "Google Drive %(fn)s 上找不到 %(format)s" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "发送到Kindle" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "此邮件已经通过Calibre-Web发送" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "找不到 %(format)s: %(fn)s" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "Calibre-Web测试邮件" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "测试邮件" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "开启Calibre-Web之旅" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "用户 %(name)s 的注册邮箱" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "无法读取请求的文件。 可能有错误的权限设置?" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "Google Drive上找不到文件 %(file)s" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "Google Drive上找不到书籍路径 %(path)s" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "执行UnRar时出错" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "找不到Unrar二进制文件" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "等待中" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "失败" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "已开始" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "已完成" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "未知状态" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "转换:" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "上传:" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "未知任务:" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" -msgstr "未知" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" +msgstr "读取更新信息时出现异常数据" + +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "没有可用更新。您已经安装了最新版本" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "HTTP错误" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "连接错误" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "建立连接超时" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "一般错误" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" -msgstr "读取更新信息时出现异常数据" - -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" -msgstr "没有可用更新。您已经安装了最新版本" - -#: cps/web.py:1209 +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 msgid "A new update is available. Click on the button below to update to the latest version." msgstr "有一个更新可用。点击正文按钮更新到最新版本。" -#: cps/web.py:1259 +#: cps/updater.py:335 msgid "Could not fetch update information" msgstr "无法获取更新信息" -#: cps/web.py:1274 +#: cps/updater.py:403 +msgid "No release information available" +msgstr "" + +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" +msgstr "未知" + +#: cps/web.py:1175 msgid "Requesting update package" msgstr "正在请求更新包" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "正在下载更新包" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "正在解压更新包" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "正在替换文件" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "数据库连接已关闭" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "正在停止服务器" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "更新完成,请按确定并刷新页面" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "更新失败:" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "最近添加的书籍" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "最新书籍" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "最旧书籍" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "书籍 (A-Z)" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "书籍 (Z-A)" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "最高评分书籍" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "出版社列表" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "出版社: %(name)s" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "分类列表" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "任务" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "统计" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "回调域名尚未被校验,请在google开发者控制台按步骤校验域名" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "服务器已重启,请刷新页面" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1965 -msgid "Update done" -msgstr "更新完成" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "出版时晚于 " -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "出版时早于 " -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "评分 <= %(rating)s" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "评分 >= %(rating)s" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "搜索" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "已读书籍" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "未读书籍" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "请填写所有字段" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "注册" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "发生一个未知错误,请稍后再试。" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "您的邮箱不能用来注册" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "确认邮件已经发送到您的邮箱。" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "这个用户名或者邮箱已经被使用。" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "您现在已以'%(nickname)s'身份登录" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "用户名或密码错误" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "登录" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "找不到Token" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "Token已过期" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "成功!请返回您的设备" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "请先配置SMTP邮箱..." -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "书籍已经被成功加入 %(kindlemail)s 的发送队列" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "请先配置您的kindle邮箱..." -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "指定的书架无效" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "对不起,您没有添加书籍到书架 %(shelfname)s 的权限" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "您没有编辑书架的权限" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "此书已经是书架 %(shelfname)s 的一部分" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "您没有添加书籍到书架 %(name)s 的权限" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "用户没有编辑公开书架的权限" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "书籍已经在书架 %(name)s 中了" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "书籍已经被添加到书架 %(sname)s 中'" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "无法添加书籍到书架: %(sname)s" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "对不起,您没有从书架 %(sname)s 中删除书籍的权限" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "打开书架出错。书架不存在或不可访问" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "邮箱不在有效域中'" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "找到一个已有账号使用这个邮箱。" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "管理页" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "Calibre-Web配置已更新" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "UI配置" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "可选的Google Drive依赖导入缺失" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "client_secrets.json文件缺失或不可读" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "没有为web应用配置client_secrets.json" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "key文件位置无效,请输入正确路径" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "证书文件位置无效,请输入正确路径" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "日志文件位置无效,请输入正确路径" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "此邮箱或昵称的账号已经存在。" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "测试邮件已经被成功发到 %(kindlemail)s" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "发送测试邮件出错了: %(res)s" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "已更新邮件服务器设置" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "编辑邮箱服务器设置" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "用户 %(user)s 的密码已重置" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "打开电子书出错。文件不存在或不可访问" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "编辑元数据" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "不能上传后缀为 '%(ext)s' 的文件到此服务器" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须有一个后缀" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "创建路径 %(path)s 失败(权限拒绝)。" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "保存文件 %(file)s 失败。" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "为封面 %(path)s 创建路径失败(权限拒绝)。" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "保存封面文件 %(cover)s 失败。" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "封面文件不是一个有效的图片文件" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "未知" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "封面不是一个jpg文件,无法保存" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "%(langname)s 不是一种有效语言" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "已成功更新元数据" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "编辑书籍出错,详情请检查日志文件" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "存储文件 %(file)s 失败(权限拒绝)。" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "删除文件 %(file)s 失败(权限拒绝)。" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "转换的源或目的格式缺失" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "书籍已经被成功加入 %(book_format)s 的转换队列" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "转换此书时出现错误: %(res)s" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "电子书转换器失败: %(error)s" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s" @@ -902,7 +907,7 @@ msgstr "确定" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1035,9 +1040,9 @@ msgstr "编辑后查看书籍" msgid "Get metadata" msgstr "获取元数据" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "提交" @@ -1142,83 +1147,103 @@ msgstr "SSL 证书文件位置(非SSL服务器请留空)" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "SSL Key文件位置(非SSL服务器请留空)" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "日志文件配置" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "日志级别" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "日志文件位置和名称(默认为calibre-web.log)" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "特性配置" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "启用上传" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "启用匿名浏览" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "启用注册" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "启用远程登录 ('魔法链接')" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "使用" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "获取API Key" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "外部二进制" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "没有转换器" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "使用Kindlegen" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "使用calibre的电子书转换器" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "电子书转换设置" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "转换工具路径" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "Unrar二进制位置" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "登录" @@ -1733,6 +1758,10 @@ msgstr "垂直" msgid "PDF.js viewer" msgstr "PDF.js 查看器" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "简单txt阅读器" @@ -1994,3 +2023,18 @@ msgstr "最近下载" #~ msgid "File %(file)s uploaded" #~ msgstr "文件 %(file)s 已上传" +#~ msgid "Update done" +#~ msgstr "更新完成" + +#~ msgid "Stable (Automatic))" +#~ msgstr "" + +#~ msgid "Nightly (Automatic))" +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: " +#~ msgstr "" + +#~ msgid "A new update is available. Click on the button below to update to version: %(version)s" +#~ msgstr "" + diff --git a/cps/ub.py b/cps/ub.py index 495faa05..46c8bd93 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -1,6 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2012-2019 mutschler, jkrehm, cervinko, janeczku, OzzieIsaacs, csitko +# ok11, issmirnov, idalin +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + from sqlalchemy import * from sqlalchemy import exc from sqlalchemy.ext.declarative import declarative_base diff --git a/cps/updater.py b/cps/updater.py index aa8f383b..e679268c 100644 --- a/cps/updater.py +++ b/cps/updater.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018-2019 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import threading import zipfile import requests @@ -264,7 +280,8 @@ class Updater(threading.Thread): if 'committer' in update_data and 'message' in update_data: status['success'] = True - status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.') + status['message'] = _( + u'A new update is available. Click on the button below to update to the latest version.') new_commit_date = datetime.datetime.strptime( update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz @@ -321,7 +338,8 @@ class Updater(threading.Thread): status['update'] = True if 'body' in commit: status['success'] = True - status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.') + status['message'] = _( + u'A new update is available. Click on the button below to update to the latest version.') new_commit_date = datetime.datetime.strptime( commit['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz @@ -410,8 +428,9 @@ class Updater(threading.Thread): # Check if major versions are identical search for newest nonenqual commit and update to this one if major_version_update == int(current_version[0]): - if (minor_version_update == int(current_version[1]) and patch_version_update > int(current_version[2])) \ - or minor_version_update > int(current_version[1]): + if (minor_version_update == int(current_version[1]) and + patch_version_update > int(current_version[2])) or \ + minor_version_update > int(current_version[1]): parents.append([commit[i]['tag_name'],commit[i]['body'].replace('\r\n', '

')]) i -= 1 continue @@ -427,9 +446,8 @@ class Updater(threading.Thread): status.update({ 'update': True, 'success': True, - 'message': _( - u'A new update is available. Click on the button below to update to version: ') + - commit[i]['tag_name'], + 'message': _(u'A new update is available. Click on the button below to ' + u'update to version: %(version)s', version=commit[i]['tag_name']), 'history': parents }) self.updateFile = commit[i]['zipball_url'] @@ -437,9 +455,8 @@ class Updater(threading.Thread): status.update({ 'update': True, 'success': True, - 'message': _( - u'A new update is available. Click on the button below to update to version: ') + - commit[i + 1]['tag_name'], + 'message': _(u'A new update is available. Click on the button below to ' + u'update to version: %(version)s', version=commit[i]['tag_name']), 'history': parents }) self.updateFile = commit[i +1]['zipball_url'] @@ -448,7 +465,8 @@ class Updater(threading.Thread): status.update({ 'update': True, 'success': True, - 'message': _(u'A new update is available. Click on the button below to update to the latest version.'), + 'message': _( + u'A new update is available. Click on the button below to update to the latest version.'), 'history': parents }) self.updateFile = commit[0]['zipball_url'] diff --git a/cps/uploader.py b/cps/uploader.py index 40741bfd..8d9b74a4 100644 --- a/cps/uploader.py +++ b/cps/uploader.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2012-2019 lemmsh, OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import os from tempfile import gettempdir import hashlib diff --git a/cps/web.py b/cps/web.py index 1f7a052f..2a0e4f5a 100644 --- a/cps/web.py +++ b/cps/web.py @@ -1,6 +1,26 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018-2019 OzzieIsaacs, cervinko, jkrehm, bodybybuddha, ok11, +# andy29485, idalin, Kyosfonica, wuqi, Kennyl, lemmsh, +# falgh1, grunjol, csitko, ytils, xybydy, trasba, vrabe, +# ruben-herold, marblepebble, JackED42, SiphonSquirrel, +# apetresc, nanu-c, mutschler +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + import mimetypes import logging from logging.handlers import RotatingFileHandler diff --git a/cps/worker.py b/cps/worker.py index 3dd7a68c..65d4a850 100644 --- a/cps/worker.py +++ b/cps/worker.py @@ -1,6 +1,22 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2018-2019 OzzieIsaacs, bodybybuddha, janeczku +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + from __future__ import print_function import smtplib import threading diff --git a/messages.pot b/messages.pot index e651e816..525aaf07 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: 2019-01-12 09:00+0100\n" +"POT-Creation-Date: 2019-01-20 19:36+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,734 +17,739 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#: cps/book_formats.py:129 cps/book_formats.py:130 cps/book_formats.py:134 -#: cps/book_formats.py:138 cps/converter.py:11 cps/converter.py:27 +#: cps/book_formats.py:145 cps/book_formats.py:146 cps/book_formats.py:150 +#: cps/book_formats.py:154 cps/converter.py:29 cps/converter.py:45 msgid "not installed" msgstr "" -#: cps/converter.py:22 cps/converter.py:38 +#: cps/converter.py:40 cps/converter.py:56 msgid "Excecution permissions missing" msgstr "" -#: cps/converter.py:48 +#: cps/converter.py:66 msgid "not configured" msgstr "" -#: cps/helper.py:59 +#: cps/helper.py:77 #, python-format msgid "%(format)s format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:71 +#: cps/helper.py:89 #, python-format msgid "%(format)s not found on Google Drive: %(fn)s" msgstr "" -#: cps/helper.py:78 cps/helper.py:186 cps/templates/detail.html:49 +#: cps/helper.py:96 cps/helper.py:204 cps/templates/detail.html:49 msgid "Send to Kindle" msgstr "" -#: cps/helper.py:79 cps/helper.py:97 cps/helper.py:188 +#: cps/helper.py:97 cps/helper.py:115 cps/helper.py:206 msgid "This e-mail has been sent via Calibre-Web." msgstr "" -#: cps/helper.py:90 +#: cps/helper.py:108 #, python-format msgid "%(format)s not found: %(fn)s" msgstr "" -#: cps/helper.py:95 +#: cps/helper.py:113 msgid "Calibre-Web test e-mail" msgstr "" -#: cps/helper.py:96 +#: cps/helper.py:114 msgid "Test e-mail" msgstr "" -#: cps/helper.py:112 +#: cps/helper.py:130 msgid "Get Started with Calibre-Web" msgstr "" -#: cps/helper.py:113 +#: cps/helper.py:131 #, python-format msgid "Registration e-mail for user: %(name)s" msgstr "" -#: cps/helper.py:126 cps/helper.py:128 cps/helper.py:130 cps/helper.py:132 -#: cps/helper.py:138 cps/helper.py:140 cps/helper.py:142 cps/helper.py:144 +#: cps/helper.py:144 cps/helper.py:146 cps/helper.py:148 cps/helper.py:150 +#: cps/helper.py:156 cps/helper.py:158 cps/helper.py:160 cps/helper.py:162 #, python-format msgid "Send %(format)s to Kindle" msgstr "" -#: cps/helper.py:148 cps/helper.py:152 +#: cps/helper.py:166 cps/helper.py:170 #, python-format msgid "Convert %(orig)s to %(format)s and send to Kindle" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:205 #, python-format msgid "E-mail: %(book)s" msgstr "" -#: cps/helper.py:190 +#: cps/helper.py:208 msgid "The requested file could not be read. Maybe wrong permissions?" msgstr "" -#: cps/helper.py:295 +#: cps/helper.py:313 #, python-format msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:305 +#: cps/helper.py:323 #, python-format msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:319 +#: cps/helper.py:337 #, python-format msgid "Rename file in path '%(src)s' to '%(dest)s' failed with error: %(error)s" msgstr "" -#: cps/helper.py:344 cps/helper.py:353 +#: cps/helper.py:362 cps/helper.py:371 #, python-format msgid "File %(file)s not found on Google Drive" msgstr "" -#: cps/helper.py:384 +#: cps/helper.py:402 #, python-format msgid "Book path %(path)s not found on Google Drive" msgstr "" -#: cps/helper.py:650 +#: cps/helper.py:508 msgid "Error excecuting UnRar" msgstr "" -#: cps/helper.py:652 +#: cps/helper.py:510 msgid "Unrar binary file not found" msgstr "" -#: cps/helper.py:703 +#: cps/helper.py:541 msgid "Waiting" msgstr "" -#: cps/helper.py:705 +#: cps/helper.py:543 msgid "Failed" msgstr "" -#: cps/helper.py:707 +#: cps/helper.py:545 msgid "Started" msgstr "" -#: cps/helper.py:709 +#: cps/helper.py:547 msgid "Finished" msgstr "" -#: cps/helper.py:711 +#: cps/helper.py:549 msgid "Unknown Status" msgstr "" -#: cps/helper.py:716 +#: cps/helper.py:554 msgid "E-mail: " msgstr "" -#: cps/helper.py:718 cps/helper.py:722 +#: cps/helper.py:556 cps/helper.py:560 msgid "Convert: " msgstr "" -#: cps/helper.py:720 +#: cps/helper.py:558 msgid "Upload: " msgstr "" -#: cps/helper.py:724 +#: cps/helper.py:562 msgid "Unknown Task: " msgstr "" -#: cps/web.py:1156 cps/web.py:2866 -msgid "Unknown" +#: cps/updater.py:251 cps/updater.py:410 cps/updater.py:423 +msgid "Unexpected data while reading update information" msgstr "" -#: cps/web.py:1165 cps/web.py:1196 cps/web.py:1281 +#: cps/updater.py:258 cps/updater.py:416 +msgid "No update available. You already have the latest version installed" +msgstr "" + +#: cps/updater.py:270 cps/updater.py:501 cps/updater.py:503 cps/web.py:1182 msgid "HTTP Error" msgstr "" -#: cps/web.py:1167 cps/web.py:1198 cps/web.py:1282 +#: cps/updater.py:272 cps/updater.py:505 cps/web.py:1183 msgid "Connection error" msgstr "" -#: cps/web.py:1169 cps/web.py:1200 cps/web.py:1283 +#: cps/updater.py:274 cps/updater.py:507 cps/web.py:1184 msgid "Timeout while establishing connection" msgstr "" -#: cps/web.py:1171 cps/web.py:1202 cps/web.py:1284 +#: cps/updater.py:276 cps/updater.py:509 cps/web.py:1185 msgid "General error" msgstr "" -#: cps/web.py:1177 -msgid "Unexpected data while reading update information" +#: cps/updater.py:283 cps/updater.py:341 cps/updater.py:468 +msgid "A new update is available. Click on the button below to update to the latest version." msgstr "" -#: cps/web.py:1184 -msgid "No update available. You already have the latest version installed" +#: cps/updater.py:335 +msgid "Could not fetch update information" msgstr "" -#: cps/web.py:1209 -msgid "A new update is available. Click on the button below to update to the latest version." +#: cps/updater.py:403 +msgid "No release information available" msgstr "" -#: cps/web.py:1259 -msgid "Could not fetch update information" +#: cps/updater.py:449 cps/updater.py:458 +#, python-format +msgid "A new update is available. Click on the button below to update to version: %(version)s" +msgstr "" + +#: cps/updater.py:491 cps/web.py:2768 +msgid "Unknown" msgstr "" -#: cps/web.py:1274 +#: cps/web.py:1175 msgid "Requesting update package" msgstr "" -#: cps/web.py:1275 +#: cps/web.py:1176 msgid "Downloading update package" msgstr "" -#: cps/web.py:1276 +#: cps/web.py:1177 msgid "Unzipping update package" msgstr "" -#: cps/web.py:1277 +#: cps/web.py:1178 msgid "Replacing files" msgstr "" -#: cps/web.py:1278 +#: cps/web.py:1179 msgid "Database connections are closed" msgstr "" -#: cps/web.py:1279 +#: cps/web.py:1180 msgid "Stopping server" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1181 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1281 cps/web.py:1282 cps/web.py:1283 cps/web.py:1284 +#: cps/web.py:1182 cps/web.py:1183 cps/web.py:1184 cps/web.py:1185 msgid "Update failed:" msgstr "" -#: cps/web.py:1307 +#: cps/web.py:1208 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1317 +#: cps/web.py:1218 msgid "Newest Books" msgstr "" -#: cps/web.py:1329 +#: cps/web.py:1230 msgid "Oldest Books" msgstr "" -#: cps/web.py:1341 +#: cps/web.py:1242 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1352 +#: cps/web.py:1253 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1381 +#: cps/web.py:1282 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:1394 +#: cps/web.py:1295 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:39 cps/web.py:1407 +#: cps/templates/index.xml:39 cps/web.py:1308 msgid "Random Books" msgstr "" -#: cps/web.py:1434 cps/web.py:1689 cps/web.py:2236 +#: cps/web.py:1335 cps/web.py:1590 cps/web.py:2137 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/web.py:1462 +#: cps/web.py:1363 msgid "Publisher list" msgstr "" -#: cps/web.py:1477 +#: cps/web.py:1378 #, python-format msgid "Publisher: %(name)s" msgstr "" -#: cps/templates/index.xml:83 cps/web.py:1509 +#: cps/templates/index.xml:83 cps/web.py:1410 msgid "Series list" msgstr "" -#: cps/web.py:1523 +#: cps/web.py:1424 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:1549 +#: cps/web.py:1450 msgid "Available languages" msgstr "" -#: cps/web.py:1569 +#: cps/web.py:1470 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:76 cps/web.py:1580 +#: cps/templates/index.xml:76 cps/web.py:1481 msgid "Category list" msgstr "" -#: cps/web.py:1594 +#: cps/web.py:1495 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/templates/layout.html:71 cps/web.py:1725 +#: cps/templates/layout.html:71 cps/web.py:1626 msgid "Tasks" msgstr "" -#: cps/web.py:1759 +#: cps/web.py:1660 msgid "Statistics" msgstr "" -#: cps/web.py:1867 +#: cps/web.py:1768 msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgstr "" -#: cps/web.py:1943 +#: cps/web.py:1844 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1946 +#: cps/web.py:1847 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1965 -msgid "Update done" -msgstr "" - -#: cps/web.py:2035 +#: cps/web.py:1936 msgid "Published after " msgstr "" -#: cps/web.py:2042 +#: cps/web.py:1943 msgid "Published before " msgstr "" -#: cps/web.py:2056 +#: cps/web.py:1957 #, python-format msgid "Rating <= %(rating)s" msgstr "" -#: cps/web.py:2058 +#: cps/web.py:1959 #, python-format msgid "Rating >= %(rating)s" msgstr "" -#: cps/web.py:2119 cps/web.py:2128 +#: cps/web.py:2020 cps/web.py:2029 msgid "search" msgstr "" #: cps/templates/index.xml:47 cps/templates/index.xml:51 -#: cps/templates/layout.html:146 cps/web.py:2195 +#: cps/templates/layout.html:146 cps/web.py:2096 msgid "Read Books" msgstr "" #: cps/templates/index.xml:55 cps/templates/index.xml:59 -#: cps/templates/layout.html:148 cps/web.py:2198 +#: cps/templates/layout.html:148 cps/web.py:2099 msgid "Unread Books" msgstr "" -#: cps/web.py:2246 cps/web.py:2248 cps/web.py:2250 cps/web.py:2262 +#: cps/web.py:2147 cps/web.py:2149 cps/web.py:2151 cps/web.py:2163 msgid "Read a Book" msgstr "" -#: cps/web.py:2321 cps/web.py:3230 +#: cps/web.py:2222 cps/web.py:3137 msgid "Please fill out all fields!" msgstr "" -#: cps/web.py:2322 cps/web.py:2343 cps/web.py:2347 cps/web.py:2352 -#: cps/web.py:2354 +#: cps/web.py:2223 cps/web.py:2245 cps/web.py:2249 cps/web.py:2254 +#: cps/web.py:2256 msgid "register" msgstr "" -#: cps/web.py:2342 cps/web.py:3444 +#: cps/web.py:2244 cps/web.py:3351 msgid "An unknown error occurred. Please try again later." msgstr "" -#: cps/web.py:2345 +#: cps/web.py:2247 msgid "Your e-mail is not allowed to register" msgstr "" -#: cps/web.py:2348 +#: cps/web.py:2250 msgid "Confirmation e-mail was send to your e-mail account." msgstr "" -#: cps/web.py:2351 +#: cps/web.py:2253 msgid "This username or e-mail address is already in use." msgstr "" -#: cps/web.py:2368 cps/web.py:2464 +#: cps/web.py:2270 cps/web.py:2366 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "" -#: cps/web.py:2373 +#: cps/web.py:2275 msgid "Wrong Username or Password" msgstr "" -#: cps/web.py:2379 cps/web.py:2400 +#: cps/web.py:2281 cps/web.py:2302 msgid "login" msgstr "" -#: cps/web.py:2412 cps/web.py:2443 +#: cps/web.py:2314 cps/web.py:2345 msgid "Token not found" msgstr "" -#: cps/web.py:2420 cps/web.py:2451 +#: cps/web.py:2322 cps/web.py:2353 msgid "Token has expired" msgstr "" -#: cps/web.py:2428 +#: cps/web.py:2330 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:2478 +#: cps/web.py:2380 msgid "Please configure the SMTP mail settings first..." msgstr "" -#: cps/web.py:2483 +#: cps/web.py:2385 #, python-format msgid "Book successfully queued for sending to %(kindlemail)s" msgstr "" -#: cps/web.py:2487 +#: cps/web.py:2389 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:2489 cps/web.py:3283 +#: cps/web.py:2391 cps/web.py:3190 msgid "Please configure your kindle e-mail address first..." msgstr "" -#: cps/web.py:2500 cps/web.py:2552 +#: cps/web.py:2402 cps/web.py:2454 msgid "Invalid shelf specified" msgstr "" -#: cps/web.py:2507 +#: cps/web.py:2409 #, python-format msgid "Sorry you are not allowed to add a book to the the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2515 +#: cps/web.py:2417 msgid "You are not allowed to edit public shelves" msgstr "" -#: cps/web.py:2524 +#: cps/web.py:2426 #, python-format msgid "Book is already part of the shelf: %(shelfname)s" msgstr "" -#: cps/web.py:2538 +#: cps/web.py:2440 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2557 +#: cps/web.py:2459 #, python-format msgid "You are not allowed to add a book to the the shelf: %(name)s" msgstr "" -#: cps/web.py:2562 +#: cps/web.py:2464 msgid "User is not allowed to edit public shelves" msgstr "" -#: cps/web.py:2580 +#: cps/web.py:2482 #, python-format msgid "Books are already part of the shelf: %(name)s" msgstr "" -#: cps/web.py:2594 +#: cps/web.py:2496 #, python-format msgid "Books have been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2596 +#: cps/web.py:2498 #, python-format msgid "Could not add books to shelf: %(sname)s" msgstr "" -#: cps/web.py:2633 +#: cps/web.py:2535 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:2639 +#: cps/web.py:2541 #, python-format msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgstr "" -#: cps/web.py:2660 cps/web.py:2684 +#: cps/web.py:2562 cps/web.py:2586 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:2665 +#: cps/web.py:2567 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:2667 cps/web.py:2695 +#: cps/web.py:2569 cps/web.py:2597 msgid "There was an error" msgstr "" -#: cps/web.py:2668 cps/web.py:2670 +#: cps/web.py:2570 cps/web.py:2572 msgid "create a shelf" msgstr "" -#: cps/web.py:2693 +#: cps/web.py:2595 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2696 cps/web.py:2698 +#: cps/web.py:2598 cps/web.py:2600 msgid "Edit a shelf" msgstr "" -#: cps/web.py:2719 +#: cps/web.py:2621 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:2746 +#: cps/web.py:2648 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2749 +#: cps/web.py:2651 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2780 +#: cps/web.py:2682 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2809 cps/web.py:3236 +#: cps/web.py:2711 cps/web.py:3143 msgid "E-mail is not from valid domain" msgstr "" -#: cps/web.py:2811 cps/web.py:2853 cps/web.py:2856 +#: cps/web.py:2713 cps/web.py:2755 cps/web.py:2758 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2851 +#: cps/web.py:2753 msgid "Found an existing account for this e-mail address." msgstr "" -#: cps/web.py:2854 +#: cps/web.py:2756 msgid "Profile updated" msgstr "" -#: cps/web.py:2882 +#: cps/web.py:2787 msgid "Admin page" msgstr "" -#: cps/web.py:2964 cps/web.py:3139 +#: cps/web.py:2869 cps/web.py:3046 msgid "Calibre-Web configuration updated" msgstr "" -#: cps/templates/admin.html:100 cps/web.py:2978 +#: cps/templates/admin.html:100 cps/web.py:2883 msgid "UI Configuration" msgstr "" -#: cps/web.py:2996 +#: cps/web.py:2901 msgid "Import of optional Google Drive requirements missing" msgstr "" -#: cps/web.py:2999 +#: cps/web.py:2904 msgid "client_secrets.json is missing or not readable" msgstr "" -#: cps/web.py:3004 cps/web.py:3031 +#: cps/web.py:2909 cps/web.py:2936 msgid "client_secrets.json is not configured for web application" msgstr "" -#: cps/templates/admin.html:99 cps/web.py:3034 cps/web.py:3060 cps/web.py:3072 -#: cps/web.py:3115 cps/web.py:3130 cps/web.py:3148 cps/web.py:3156 -#: cps/web.py:3172 +#: cps/templates/admin.html:99 cps/web.py:2939 cps/web.py:2965 cps/web.py:2977 +#: cps/web.py:3022 cps/web.py:3037 cps/web.py:3055 cps/web.py:3063 +#: cps/web.py:3079 msgid "Basic Configuration" msgstr "" -#: cps/web.py:3057 +#: cps/web.py:2962 msgid "Keyfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3069 +#: cps/web.py:2974 msgid "Certfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3112 +#: cps/web.py:3019 msgid "Logfile location is not valid, please enter correct path" msgstr "" -#: cps/web.py:3152 +#: cps/web.py:3059 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:33 cps/web.py:3232 cps/web.py:3238 cps/web.py:3254 +#: cps/templates/admin.html:33 cps/web.py:3139 cps/web.py:3145 cps/web.py:3161 msgid "Add new user" msgstr "" -#: cps/web.py:3244 +#: cps/web.py:3151 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:3248 +#: cps/web.py:3155 msgid "Found an existing account for this e-mail address or nickname." msgstr "" -#: cps/web.py:3278 +#: cps/web.py:3185 #, python-format msgid "Test e-mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:3281 +#: cps/web.py:3188 #, python-format msgid "There was an error sending the Test e-mail: %(res)s" msgstr "" -#: cps/web.py:3285 +#: cps/web.py:3192 msgid "E-mail server settings updated" msgstr "" -#: cps/web.py:3286 +#: cps/web.py:3193 msgid "Edit e-mail server settings" msgstr "" -#: cps/web.py:3311 +#: cps/web.py:3218 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:3419 +#: cps/web.py:3326 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:3422 +#: cps/web.py:3329 msgid "An unknown error occured." msgstr "" -#: cps/web.py:3424 +#: cps/web.py:3331 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:3441 +#: cps/web.py:3348 #, python-format msgid "Password for user %(user)s reset" msgstr "" -#: cps/web.py:3455 cps/web.py:3661 +#: cps/web.py:3362 cps/web.py:3568 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:3483 cps/web.py:3955 +#: cps/web.py:3390 cps/web.py:3862 msgid "edit metadata" msgstr "" -#: cps/web.py:3576 cps/web.py:3823 +#: cps/web.py:3483 cps/web.py:3730 #, python-format msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:3580 cps/web.py:3827 +#: cps/web.py:3487 cps/web.py:3734 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:3592 cps/web.py:3847 +#: cps/web.py:3499 cps/web.py:3754 #, python-format msgid "Failed to create path %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3597 +#: cps/web.py:3504 #, python-format msgid "Failed to store file %(file)s." msgstr "" -#: cps/web.py:3614 +#: cps/web.py:3521 #, python-format msgid "File format %(ext)s added to %(book)s" msgstr "" -#: cps/web.py:3632 +#: cps/web.py:3539 #, python-format msgid "Failed to create path for cover %(path)s (Permission denied)." msgstr "" -#: cps/web.py:3640 +#: cps/web.py:3547 #, python-format msgid "Failed to store cover-file %(cover)s." msgstr "" -#: cps/web.py:3643 +#: cps/web.py:3550 msgid "Cover-file is not a valid image file" msgstr "" -#: cps/web.py:3673 cps/web.py:3682 +#: cps/web.py:3580 cps/web.py:3589 msgid "unknown" msgstr "" -#: cps/web.py:3714 +#: cps/web.py:3621 msgid "Cover is not a jpg file, can't save" msgstr "" -#: cps/web.py:3762 +#: cps/web.py:3669 #, python-format msgid "%(langname)s is not a valid language" msgstr "" -#: cps/web.py:3793 +#: cps/web.py:3700 msgid "Metadata successfully updated" msgstr "" -#: cps/web.py:3802 +#: cps/web.py:3709 msgid "Error editing book, please check logfile for details" msgstr "" -#: cps/web.py:3852 +#: cps/web.py:3759 #, python-format msgid "Failed to store file %(file)s (Permission denied)." msgstr "" -#: cps/web.py:3857 +#: cps/web.py:3764 #, python-format msgid "Failed to delete file %(file)s (Permission denied)." msgstr "" -#: cps/web.py:3975 +#: cps/web.py:3882 msgid "Source or destination format for conversion missing" msgstr "" -#: cps/web.py:3985 +#: cps/web.py:3892 #, python-format msgid "Book successfully queued for converting to %(book_format)s" msgstr "" -#: cps/web.py:3989 +#: cps/web.py:3896 #, python-format msgid "There was an error converting this book: %(res)s" msgstr "" -#: cps/worker.py:289 +#: cps/worker.py:305 #, python-format msgid "Ebook-converter failed: %(error)s" msgstr "" -#: cps/worker.py:300 +#: cps/worker.py:316 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" @@ -901,7 +906,7 @@ msgstr "" #: cps/templates/admin.html:151 cps/templates/admin.html:165 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 -#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:175 +#: cps/templates/config_edit.html:221 cps/templates/config_view_edit.html:175 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/shelf.html:64 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:147 @@ -1034,9 +1039,9 @@ msgstr "" msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:210 +#: cps/templates/book_edit.html:177 cps/templates/config_edit.html:219 #: cps/templates/config_view_edit.html:174 cps/templates/login.html:20 -#: cps/templates/search_form.html:153 cps/templates/shelf_edit.html:17 +#: cps/templates/search_form.html:150 cps/templates/shelf_edit.html:17 #: cps/templates/user_edit.html:145 msgid "Submit" msgstr "" @@ -1141,83 +1146,103 @@ msgstr "" msgid "SSL Keyfile location (leave it empty for non-SSL Servers)" msgstr "" -#: cps/templates/config_edit.html:99 +#: cps/templates/config_edit.html:92 +msgid "Update channel" +msgstr "" + +#: cps/templates/config_edit.html:94 +msgid "Stable" +msgstr "" + +#: cps/templates/config_edit.html:95 +msgid "Stable (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:96 +msgid "Nightly" +msgstr "" + +#: cps/templates/config_edit.html:97 +msgid "Nightly (Automatic)" +msgstr "" + +#: cps/templates/config_edit.html:108 msgid "Logfile Configuration" msgstr "" -#: cps/templates/config_edit.html:106 +#: cps/templates/config_edit.html:115 msgid "Log Level" msgstr "" -#: cps/templates/config_edit.html:115 +#: cps/templates/config_edit.html:124 msgid "Location and name of logfile (calibre-web.log for no entry)" msgstr "" -#: cps/templates/config_edit.html:126 +#: cps/templates/config_edit.html:135 msgid "Feature Configuration" msgstr "" -#: cps/templates/config_edit.html:134 +#: cps/templates/config_edit.html:143 msgid "Enable uploading" msgstr "" -#: cps/templates/config_edit.html:138 +#: cps/templates/config_edit.html:147 msgid "Enable anonymous browsing" msgstr "" -#: cps/templates/config_edit.html:142 +#: cps/templates/config_edit.html:151 msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:146 +#: cps/templates/config_edit.html:155 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:151 +#: cps/templates/config_edit.html:160 msgid "Use" msgstr "" -#: cps/templates/config_edit.html:152 +#: cps/templates/config_edit.html:161 msgid "Obtain an API Key" msgstr "" -#: cps/templates/config_edit.html:156 +#: cps/templates/config_edit.html:165 msgid "Goodreads API Key" msgstr "" -#: cps/templates/config_edit.html:160 +#: cps/templates/config_edit.html:169 msgid "Goodreads API Secret" msgstr "" -#: cps/templates/config_edit.html:173 +#: cps/templates/config_edit.html:182 msgid "External binaries" msgstr "" -#: cps/templates/config_edit.html:181 +#: cps/templates/config_edit.html:190 msgid "No converter" msgstr "" -#: cps/templates/config_edit.html:183 +#: cps/templates/config_edit.html:192 msgid "Use Kindlegen" msgstr "" -#: cps/templates/config_edit.html:185 +#: cps/templates/config_edit.html:194 msgid "Use calibre's ebook converter" msgstr "" -#: cps/templates/config_edit.html:189 +#: cps/templates/config_edit.html:198 msgid "E-Book converter settings" msgstr "" -#: cps/templates/config_edit.html:193 +#: cps/templates/config_edit.html:202 msgid "Path to convertertool" msgstr "" -#: cps/templates/config_edit.html:199 +#: cps/templates/config_edit.html:208 msgid "Location of Unrar binary" msgstr "" -#: cps/templates/config_edit.html:215 cps/templates/layout.html:82 +#: cps/templates/config_edit.html:224 cps/templates/layout.html:82 #: cps/templates/login.html:4 msgid "Login" msgstr "" @@ -1732,6 +1757,10 @@ msgstr "" msgid "PDF.js viewer" msgstr "" +#: cps/templates/readpdf.html:418 +msgid "Preparing document for printing..." +msgstr "" + #: cps/templates/readtxt.html:6 msgid "Basic txt Reader" msgstr "" From 341dd77b9d9cdbc14f49540ac92886fe87e0a643 Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Mon, 21 Jan 2019 21:01:16 +0100 Subject: [PATCH 04/20] Bugfix Restart and Stop server on python3 --- cps/server.py | 8 ++++++++ cps/web.py | 1 + 2 files changed, 9 insertions(+) diff --git a/cps/server.py b/cps/server.py index 9c5993aa..53c4c859 100644 --- a/cps/server.py +++ b/cps/server.py @@ -61,11 +61,13 @@ class server: self.wsgiserver= WSGIServer(('0.0.0.0', web.ub.config.config_port), web.app, spawn=Pool(), **ssl_args) else: self.wsgiserver = WSGIServer(('', web.ub.config.config_port), web.app, spawn=Pool(), **ssl_args) + web.py3_gevent_link = self.wsgiserver self.wsgiserver.serve_forever() except SocketError: try: web.app.logger.info('Unable to listen on \'\', trying on IPv4 only...') self.wsgiserver = WSGIServer(('0.0.0.0', web.ub.config.config_port), web.app, spawn=Pool(), **ssl_args) + web.py3_gevent_link = self.wsgiserver self.wsgiserver.serve_forever() except (OSError, SocketError) as e: web.app.logger.info("Error starting server: %s" % e.strerror) @@ -130,6 +132,12 @@ class server: self.stopServer() def stopServer(self): + if sys.version_info > (3, 0): + if not self.wsgiserver: + if gevent_present: + self.wsgiserver = web.py3_gevent_link + else: + self.wsgiserver = IOLoop.instance() if self.wsgiserver: if gevent_present: self.wsgiserver.close() diff --git a/cps/web.py b/cps/web.py index 2a0e4f5a..6ea6e42d 100644 --- a/cps/web.py +++ b/cps/web.py @@ -132,6 +132,7 @@ except ImportError: # Global variables current_milli_time = lambda: int(round(time.time() * 1000)) gdrive_watch_callback_token = 'target=calibreweb-watch_files' +py3_gevent_link = None EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2', 'html', 'rtf', 'odt'} EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'htmlz'} From 97064db2a41d89575286095241bcb16428e606fd Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Wed, 23 Jan 2019 18:14:45 +0100 Subject: [PATCH 05/20] Restart python3 fix, stop and restart python2 working again --- cps/server.py | 12 ++++++++++-- cps/updater.py | 4 ++-- cps/web.py | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cps/server.py b/cps/server.py index 53c4c859..da7b487c 100644 --- a/cps/server.py +++ b/cps/server.py @@ -25,7 +25,7 @@ import signal import web try: - from gevent.pywsgi import WSGIServer + from gevent.piwsgi import WSGIServer from gevent.pool import Pool from gevent import __version__ as geventVersion gevent_present = True @@ -37,6 +37,7 @@ except ImportError: gevent_present = False + class server: wsgiserver = None @@ -63,6 +64,7 @@ class server: self.wsgiserver = WSGIServer(('', web.ub.config.config_port), web.app, spawn=Pool(), **ssl_args) web.py3_gevent_link = self.wsgiserver self.wsgiserver.serve_forever() + except SocketError: try: web.app.logger.info('Unable to listen on \'\', trying on IPv4 only...') @@ -110,6 +112,9 @@ class server: web.helper.global_WorkerThread.stop() sys.exit(1) + # ToDo: Somehow caused by circular import under python3 refactor + if sys.version_info > (3, 0): + self.restart = web.py3_restart_Typ if self.restart == True: web.app.logger.info("Performing restart of Calibre-Web") web.helper.global_WorkerThread.stop() @@ -126,12 +131,15 @@ class server: sys.exit(0) def setRestartTyp(self,starttyp): - self.restart=starttyp + self.restart = starttyp + # ToDo: Somehow caused by circular import under python3 refactor + web.py3_restart_Typ = starttyp def killServer(self, signum, frame): self.stopServer() def stopServer(self): + # ToDo: Somehow caused by circular import under python3 refactor if sys.version_info > (3, 0): if not self.wsgiserver: if gevent_present: diff --git a/cps/updater.py b/cps/updater.py index e679268c..9905a1e8 100644 --- a/cps/updater.py +++ b/cps/updater.py @@ -216,7 +216,7 @@ class Updater(threading.Thread): item_path = os.path.join(destination, item[1:]) if os.path.isdir(item_path): logging.getLogger('cps.web').debug("Delete dir " + item_path) - shutil.rmtree(item_path) + shutil.rmtree(item_path, ignore_errors=True) else: try: logging.getLogger('cps.web').debug("Delete file " + item_path) @@ -237,7 +237,7 @@ class Updater(threading.Thread): return False def _stable_version_info(self): - return {'version': '0.6.0'} + return {'version': '0.6.0'} # Current version def _nightly_available_updates(self, request_method): tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) diff --git a/cps/web.py b/cps/web.py index 6ea6e42d..bbec773c 100644 --- a/cps/web.py +++ b/cps/web.py @@ -132,7 +132,9 @@ except ImportError: # Global variables current_milli_time = lambda: int(round(time.time() * 1000)) gdrive_watch_callback_token = 'target=calibreweb-watch_files' +# ToDo: Somehow caused by circular import under python3 refactor py3_gevent_link = None +py3_restart_Typ = False EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2', 'html', 'rtf', 'odt'} EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'htmlz'} From ec81a3cd920ccd148a3635a5c2ba31d07b09f4ce Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Fri, 25 Jan 2019 21:58:19 +0100 Subject: [PATCH 06/20] Fix Authors page pagination Update infinite scroll plugin --- cps/static/js/libs/plugins.js | 14 ++++++++++++-- cps/static/js/main.js | 22 +++++++++++++++++++--- cps/web.py | 11 +---------- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/cps/static/js/libs/plugins.js b/cps/static/js/libs/plugins.js index 1a623a3d..53b6f241 100644 --- a/cps/static/js/libs/plugins.js +++ b/cps/static/js/libs/plugins.js @@ -31,5 +31,15 @@ */ (function(a,b,c){"use strict";var d=a.document,e=a.Modernizr,f=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},g="Moz Webkit O Ms".split(" "),h=function(a){var b=d.documentElement.style,c;if(typeof b[a]=="string")return a;a=f(a);for(var e=0,h=g.length;e"+d+"{#modernizr{height:3px}}"+"").appendTo("head"),f=b('

').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd otransitionend",transitionProperty:"transitionend"}[j],r=h("transitionDuration"));var s=b.event,t=b.event.handle?"handle":"dispatch",u;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",u&&clearTimeout(u),u=setTimeout(function(){s[t].apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var v=["width","height"],w=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},containerStyle:{position:"relative",overflow:"hidden"},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!0,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};var d=v.slice(0);for(var e in this.options.containerStyle)d.push(e);for(var f=0,g=d.length;fg?1:f0&&(i=function(a,b){b.$el[d](b.style,f).one(q,k)},j=!1)}}b.each(this.styleQueue,i),j&&k(),this.styleQueue=[]},resize:function(){this["_"+this.options.layoutMode+"ResizeChanged"]()&&this.reLayout()},reLayout:function(a){this["_"+this.options.layoutMode+"Reset"](),this.layout(this.$filteredAtoms,a)},addItems:function(a,b){var c=this._getAtoms(a);this.$allAtoms=this.$allAtoms.add(c),b&&b(c)},insert:function(a,b){this.element.append(a);var c=this;this.addItems(a,function(a){var d=c._filter(a);c._addHideAppended(d),c._sort(),c.reLayout(),c._revealAppended(d,b)})},appended:function(a,b){var c=this;this.addItems(a,function(a){c._addHideAppended(a),c.layout(a),c._revealAppended(a,b)})},_addHideAppended:function(a){this.$filteredAtoms=this.$filteredAtoms.add(a),a.addClass("no-transition"),this._isInserting=!0,this.styleQueue.push({$el:a,style:this.options.hiddenStyle})},_revealAppended:function(a,b){var c=this;setTimeout(function(){a.removeClass("no-transition"),c.styleQueue.push({$el:a,style:c.options.visibleStyle}),c._isInserting=!1,c._processStyleQueue(a,b)},10)},reloadItems:function(){this.$allAtoms=this._getAtoms(this.element.children())},remove:function(a,b){this.$allAtoms=this.$allAtoms.not(a),this.$filteredAtoms=this.$filteredAtoms.not(a);var c=this,d=function(){a.remove(),b&&b.call(c.element)};a.filter(":not(."+this.options.hiddenClass+")").length?(this.styleQueue.push({$el:a,style:this.options.hiddenStyle}),this._sort(),this.reLayout(d)):d()},shuffle:function(a){this.updateSortData(this.$allAtoms),this.options.sortBy="random",this._sort(),this.reLayout(a)},destroy:function(){var a=this.usingTransforms,b=this.options;this.$allAtoms.removeClass(b.hiddenClass+" "+b.itemClass).each(function(){var b=this.style;b.position="",b.top="",b.left="",b.opacity="",a&&(b[i]="")});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".isotope").undelegate("."+b.hiddenClass,"click").removeClass(b.containerClass).removeData("isotope"),w.unbind(".isotope")},_getSegments:function(a){var b=this.options.layoutMode,c=a?"rowHeight":"columnWidth",d=a?"height":"width",e=a?"rows":"cols",g=this.element[d](),h,i=this.options[b]&&this.options[b][c]||this.$filteredAtoms["outer"+f(d)](!0)||g;h=Math.floor(g/i),h=Math.max(h,1),this[b][e]=h,this[b][c]=i},_checkIfSegmentsChanged:function(a){var b=this.options.layoutMode,c=a?"rows":"cols",d=this[b][c];return this._getSegments(a),this[b][c]!==d},_masonryReset:function(){this.masonry={},this._getSegments();var a=this.masonry.cols;this.masonry.colYs=[];while(a--)this.masonry.colYs.push(0)},_masonryLayout:function(a){var c=this,d=c.masonry;a.each(function(){var a=b(this),e=Math.ceil(a.outerWidth(!0)/d.columnWidth);e=Math.min(e,d.cols);if(e===1)c._masonryPlaceBrick(a,d.colYs);else{var f=d.cols+1-e,g=[],h,i;for(i=0;id&&(e.x=0,e.y=e.height),c._pushPosition(a,e.x,e.y),e.height=Math.max(e.y+g,e.height),e.x+=f})},_fitRowsGetContainerSize:function(){return{height:this.fitRows.height}},_fitRowsResizeChanged:function(){return!0},_cellsByRowReset:function(){this.cellsByRow={index:0},this._getSegments(),this._getSegments(!0)},_cellsByRowLayout:function(a){var c=this,d=this.cellsByRow;a.each(function(){var a=b(this),e=d.index%d.cols,f=Math.floor(d.index/d.cols),g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByRowGetContainerSize:function(){return{height:Math.ceil(this.$filteredAtoms.length/this.cellsByRow.cols)*this.cellsByRow.rowHeight+this.offset.top}},_cellsByRowResizeChanged:function(){return this._checkIfSegmentsChanged()},_straightDownReset:function(){this.straightDown={y:0}},_straightDownLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,0,c.straightDown.y),c.straightDown.y+=d.outerHeight(!0)})},_straightDownGetContainerSize:function(){return{height:this.straightDown.y}},_straightDownResizeChanged:function(){return!0},_masonryHorizontalReset:function(){this.masonryHorizontal={},this._getSegments(!0);var a=this.masonryHorizontal.rows;this.masonryHorizontal.rowXs=[];while(a--)this.masonryHorizontal.rowXs.push(0)},_masonryHorizontalLayout:function(a){var c=this,d=c.masonryHorizontal;a.each(function(){var a=b(this),e=Math.ceil(a.outerHeight(!0)/d.rowHeight);e=Math.min(e,d.rows);if(e===1)c._masonryHorizontalPlaceBrick(a,d.rowXs);else{var f=d.rows+1-e,g=[],h,i;for(i=0;id&&(e.x=e.width,e.y=0),c._pushPosition(a,e.x,e.y),e.width=Math.max(e.x+f,e.width),e.y+=g})},_fitColumnsGetContainerSize:function(){return{width:this.fitColumns.width}},_fitColumnsResizeChanged:function(){return!0},_cellsByColumnReset:function(){this.cellsByColumn={index:0},this._getSegments(),this._getSegments(!0)},_cellsByColumnLayout:function(a){var c=this,d=this.cellsByColumn;a.each(function(){var a=b(this),e=Math.floor(d.index/d.rows),f=d.index%d.rows,g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByColumnGetContainerSize:function(){return{width:Math.ceil(this.$filteredAtoms.length/this.cellsByColumn.rows)*this.cellsByColumn.columnWidth}},_cellsByColumnResizeChanged:function(){return this._checkIfSegmentsChanged(!0)},_straightAcrossReset:function(){this.straightAcross={x:0}},_straightAcrossLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,c.straightAcross.x,0),c.straightAcross.x+=d.outerWidth(!0)})},_straightAcrossGetContainerSize:function(){return{width:this.straightAcross.x}},_straightAcrossResizeChanged:function(){return!0}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var x=function(b){a.console&&a.console.error(b)};b.fn.isotope=function(a,c){if(typeof a=="string"){var d=Array.prototype.slice.call(arguments,1);this.each(function(){var c=b.data(this,"isotope");if(!c){x("cannot call methods on isotope prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(c[a])||a.charAt(0)==="_"){x("no such method '"+a+"' for isotope instance");return}c[a].apply(c,d)})}else this.each(function(){var d=b.data(this,"isotope");d?(d.option(a),d._init(c)):b.data(this,"isotope",new b.Isotope(a,this,c))});return this}})(window,jQuery); -/*https://raw.github.com/paulirish/infinite-scroll/master/jquery.infinitescroll.min.js*/ -(function(e,t,n){"use strict";t.infinitescroll=function(n,r,i){this.element=t(i);if(!this._create(n,r)){this.failed=true}};t.infinitescroll.defaults={loading:{finished:n,finishedMsg:"Congratulations, you've reached the end of the internet.",img:"data:image/gif;base64,R0lGODlh3AATAPQeAPDy+MnQ6LW/4N3h8MzT6rjC4sTM5r/I5NHX7N7j8c7U6tvg8OLl8uXo9Ojr9b3G5MfP6Ovu9tPZ7PT1+vX2+tbb7vf4+8/W69jd7rC73vn5/O/x+K243ai02////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgD/ACwAAAAA3AATAAAF/6AnjmRpnmiqrmzrvnAsz3Rt33iu73zv/8CgcEj0BAScpHLJbDqf0Kh0Sq1ar9isdioItAKGw+MAKYMFhbF63CW438f0mg1R2O8EuXj/aOPtaHx7fn96goR4hmuId4qDdX95c4+RBIGCB4yAjpmQhZN0YGYGXitdZBIVGAsLoq4BBKQDswm1CQRkcG6ytrYKubq8vbfAcMK9v7q7EMO1ycrHvsW6zcTKsczNz8HZw9vG3cjTsMIYqQkCLBwHCgsMDQ4RDAYIqfYSFxDxEfz88/X38Onr16+Bp4ADCco7eC8hQYMAEe57yNCew4IVBU7EGNDiRn8Z831cGLHhSIgdFf9chIeBg7oA7gjaWUWTVQAGE3LqBDCTlc9WOHfm7PkTqNCh54rePDqB6M+lR536hCpUqs2gVZM+xbrTqtGoWqdy1emValeXKzggYBBB5y1acFNZmEvXAoN2cGfJrTv3bl69Ffj2xZt3L1+/fw3XRVw4sGDGcR0fJhxZsF3KtBTThZxZ8mLMgC3fRatCbYMNFCzwLEqLgE4NsDWs/tvqdezZf13Hvk2A9Szdu2X3pg18N+68xXn7rh1c+PLksI/Dhe6cuO3ow3NfV92bdArTqC2Ebd3A8vjf5QWfH6Bg7Nz17c2fj69+fnq+8N2Lty+fuP78/eV2X13neIcCeBRwxorbZrA1ANoCDGrgoG8RTshahQ9iSKEEzUmYIYfNWViUhheCGJyIP5E4oom7WWjgCeBFAJNv1DVV01MAdJhhjdkplWNzO/5oXI846njjVEIqR2OS2B1pE5PVscajkxhMycqLJghQSwT40PgfAl4GqNSXYdZXJn5gSkmmmmJu1aZYb14V51do+pTOCmA40AqVCIhG5IJ9PvYnhIFOxmdqhpaI6GeHCtpooisuutmg+Eg62KOMKuqoTaXgicQWoIYq6qiklmoqFV0UoeqqrLbq6quwxirrrLTWauutJ4QAACH5BAUKABwALAcABADOAAsAAAX/IPd0D2dyRCoUp/k8gpHOKtseR9yiSmGbuBykler9XLAhkbDavXTL5k2oqFqNOxzUZPU5YYZd1XsD72rZpBjbeh52mSNnMSC8lwblKZGwi+0QfIJ8CncnCoCDgoVnBHmKfByGJimPkIwtiAeBkH6ZHJaKmCeVnKKTHIihg5KNq4uoqmEtcRUtEREMBggtEr4QDrjCuRC8h7/BwxENeicSF8DKy82pyNLMOxzWygzFmdvD2L3P0dze4+Xh1Arkyepi7dfFvvTtLQkZBC0T/FX3CRgCMOBHsJ+EHYQY7OinAGECgQsB+Lu3AOK+CewcWjwxQeJBihtNGHSoQOE+iQ3//4XkwBBhRZMcUS6YSXOAwIL8PGqEaSJCiYt9SNoCmnJPAgUVLChdaoFBURN8MAzl2PQphwQLfDFd6lTowglHve6rKpbjhK7/pG5VinZP1qkiz1rl4+tr2LRwWU64cFEihwEtZgbgR1UiHaMVvxpOSwBA37kzGz9e8G+B5MIEKLutOGEsAH2ATQwYfTmuX8aETWdGPZmiZcccNSzeTCA1Sw0bdiitC7LBWgu8jQr8HRzqgpK6gX88QbrB14z/kF+ELpwB8eVQj/JkqdylAudji/+ts3039vEEfK8Vz2dlvxZKG0CmbkKDBvllRd6fCzDvBLKBDSCeffhRJEFebFk1k/Mv9jVIoIJZSeBggwUaNeB+Qk34IE0cXlihcfRxkOAJFFhwGmKlmWDiakZhUJtnLBpnWWcnKaAZcxI0piFGGLBm1mc90kajSCveeBVWKeYEoU2wqeaQi0PetoE+rr14EpVC7oAbAUHqhYExbn2XHHsVqbcVew9tx8+XJKk5AZsqqdlddGpqAKdbAYBn1pcczmSTdWvdmZ17c1b3FZ99vnTdCRFM8OEcAhLwm1NdXnWcBBSMRWmfkWZqVlsmLIiAp/o1gGV2vpS4lalGYsUOqXrddcKCmK61aZ8SjEpUpVFVoCpTj4r661Km7kBHjrDyc1RAIQAAIfkEBQoAGwAsBwAEAM4ACwAABf/gtmUCd4goQQgFKj6PYKi0yrrbc8i4ohQt12EHcal+MNSQiCP8gigdz7iCioaCIvUmZLp8QBzW0EN2vSlCuDtFKaq4RyHzQLEKZNdiQDhRDVooCwkbfm59EAmKi4SGIm+AjIsKjhsqB4mSjT2IOIOUnICeCaB/mZKFNTSRmqVpmJqklSqskq6PfYYCDwYHDC4REQwGCBLGxxIQDsHMwhAIX8bKzcENgSLGF9PU1j3Sy9zX2NrgzQziChLk1BHWxcjf7N046tvN82715czn9Pryz6Ilc4ACj4EBOCZM8KEnAYYADBRKnACAYUMFv1wotIhCEcaJCisqwJFgAUSQGyX/kCSVUUTIdKMwJlyo0oXHlhskwrTJciZHEXsgaqS4s6PJiCAr1uzYU8kBBSgnWFqpoMJMUjGtDmUwkmfVmVypakWhEKvXsS4nhLW5wNjVroJIoc05wSzTr0PtiigpYe4EC2vj4iWrFu5euWIMRBhacaVJhYQBEFjA9jHjyQ0xEABwGceGAZYjY0YBOrRLCxUp29QM+bRkx5s7ZyYgVbTqwwti2ybJ+vLtDYpycyZbYOlptxdx0kV+V7lC5iJAyyRrwYKxAdiz82ng0/jnAdMJFz0cPi104Ec1Vj9/M6F173vKL/feXv156dw11tlqeMMnv4V5Ap53GmjQQH97nFfg+IFiucfgRX5Z8KAgbUlQ4IULIlghhhdOSB6AgX0IVn8eReghen3NRIBsRgnH4l4LuEidZBjwRpt6NM5WGwoW0KSjCwX6yJSMab2GwwAPDXfaBCtWpluRTQqC5JM5oUZAjUNS+VeOLWpJEQ7VYQANW0INJSZVDFSnZphjSikfmzE5N4EEbQI1QJmnWXCmHulRp2edwDXF43txukenJwvI9xyg9Q26Z3MzGUcBYFEChZh6DVTq34AU8Iflh51Sd+CnKFYQ6mmZkhqfBKfSxZWqA9DZanWjxmhrWwi0qtCrt/43K6WqVjjpmhIqgEGvculaGKklKstAACEAACH5BAUKABwALAcABADOAAsAAAX/ICdyQmaMYyAUqPgIBiHPxNpy79kqRXH8wAPsRmDdXpAWgWdEIYm2llCHqjVHU+jjJkwqBTecwItShMXkEfNWSh8e1NGAcLgpDGlRgk7EJ/6Ae3VKfoF/fDuFhohVeDeCfXkcCQqDVQcQhn+VNDOYmpSWaoqBlUSfmowjEA+iEAEGDRGztAwGCDcXEA60tXEiCrq8vREMEBLIyRLCxMWSHMzExnbRvQ2Sy7vN0zvVtNfU2tLY3rPgLdnDvca4VQS/Cpk3ABwSLQkYAQwT/P309vcI7OvXr94jBQMJ/nskkGA/BQBRLNDncAIAiDcG6LsxAWOLiQzmeURBKWSLCQbv/1F0eDGinJUKR47YY1IEgQASKk7Yc7ACRwZm7mHweRJoz59BJUogisKCUaFMR0x4SlJBVBFTk8pZivTR0K73rN5wqlXEAq5Fy3IYgHbEzQ0nLy4QSoCjXLoom96VOJEeCosK5n4kkFfqXjl94wa+l1gvAcGICbewAOAxY8l/Ky/QhAGz4cUkGxu2HNozhwMGBnCUqUdBg9UuW9eUynqSwLHIBujePef1ZGQZXcM+OFuEBeBhi3OYgLyqcuaxbT9vLkf4SeqyWxSQpKGB2gQpm1KdWbu72rPRzR9Ne2Nu9Kzr/1Jqj0yD/fvqP4aXOt5sW/5qsXXVcv1Nsp8IBUAmgswGF3llGgeU1YVXXKTN1FlhWFXW3gIE+DVChApysACHHo7Q4A35lLichh+ROBmLKAzgYmYEYDAhCgxKGOOMn4WR4kkDaoBBOxJtdNKQxFmg5JIWIBnQc07GaORfUY4AEkdV6jHlCEISSZ5yTXpp1pbGZbkWmcuZmQCaE6iJ0FhjMaDjTMsgZaNEHFRAQVp3bqXnZED1qYcECOz5V6BhSWCoVJQIKuKQi2KFKEkEFAqoAo7uYSmO3jk61wUUMKmknJ4SGimBmAa0qVQBhAAAIfkEBQoAGwAsBwAEAM4ACwAABf/gJm5FmRlEqhJC+bywgK5pO4rHI0D3pii22+Mg6/0Ej96weCMAk7cDkXf7lZTTnrMl7eaYoy10JN0ZFdco0XAuvKI6qkgVFJXYNwjkIBcNBgR8TQoGfRsJCRuCYYQQiI+ICosiCoGOkIiKfSl8mJkHZ4U9kZMbKaI3pKGXmJKrngmug4WwkhA0lrCBWgYFCCMQFwoQDRHGxwwGCBLMzRLEx8iGzMMO0cYNeCMKzBDW19lnF9DXDIY/48Xg093f0Q3s1dcR8OLe8+Y91OTv5wrj7o7B+7VNQqABIoRVCMBggsOHE36kSoCBIcSH3EbFangxogJYFi8CkJhqQciLJEf/LDDJEeJIBT0GsOwYUYJGBS0fjpQAMidGmyVP6sx4Y6VQhzs9VUwkwqaCCh0tmKoFtSMDmBOf9phg4SrVrROuasRQAaxXpVUhdsU6IsECZlvX3kwLUWzRt0BHOLTbNlbZG3vZinArge5Dvn7wbqtQkSYAAgtKmnSsYKVKo2AfW048uaPmG386i4Q8EQMBAIAnfB7xBxBqvapJ9zX9WgRS2YMpnvYMGdPK3aMjt/3dUcNI4blpj7iwkMFWDXDvSmgAlijrt9RTR78+PS6z1uAJZIe93Q8g5zcsWCi/4Y+C8bah5zUv3vv89uft30QP23punGCx5954oBBwnwYaNCDY/wYrsYeggnM9B2Fpf8GG2CEUVWhbWAtGouEGDy7Y4IEJVrbSiXghqGKIo7z1IVcXIkKWWR361QOLWWnIhwERpLaaCCee5iMBGJQmJGyPFTnbkfHVZGRtIGrg5HALEJAZbu39BuUEUmq1JJQIPtZilY5hGeSWsSk52G9XqsmgljdIcABytq13HyIM6RcUA+r1qZ4EBF3WHWB29tBgAzRhEGhig8KmqKFv8SeCeo+mgsF7YFXa1qWSbkDpom/mqR1PmHCqJ3fwNRVXjC7S6CZhFVCQ2lWvZiirhQq42SACt25IK2hv8TprriUV1usGgeka7LFcNmCldMLi6qZMgFLgpw16Cipb7bC1knXsBiEAACH5BAUKABsALAcABADOAAsAAAX/4FZsJPkUmUGsLCEUTywXglFuSg7fW1xAvNWLF6sFFcPb42C8EZCj24EJdCp2yoegWsolS0Uu6fmamg8n8YYcLU2bXSiRaXMGvqV6/KAeJAh8VgZqCX+BexCFioWAYgqNi4qAR4ORhRuHY408jAeUhAmYYiuVlpiflqGZa5CWkzc5fKmbbhIpsAoQDRG8vQwQCBLCwxK6vb5qwhfGxxENahvCEA7NzskSy7vNzzzK09W/PNHF1NvX2dXcN8K55cfh69Luveol3vO8zwi4Yhj+AQwmCBw4IYclDAAJDlQggVOChAoLKkgFkSCAHDwWLKhIEOONARsDKryogFPIiAUb/95gJNIiw4wnI778GFPhzBKFOAq8qLJEhQpiNArjMcHCmlTCUDIouTKBhApELSxFWiGiVKY4E2CAekPgUphDu0742nRrVLJZnyrFSqKQ2ohoSYAMW6IoDpNJ4bLdILTnAj8KUF7UeENjAKuDyxIgOuGiOI0EBBMgLNew5AUrDTMGsFixwBIaNCQuAXJB57qNJ2OWm2Aj4skwCQCIyNkhhtMkdsIuodE0AN4LJDRgfLPtn5YDLdBlraAByuUbBgxQwICxMOnYpVOPej074OFdlfc0TqC62OIbcppHjV4o+LrieWhfT8JC/I/T6W8oCl29vQ0XjLdBaA3s1RcPBO7lFvpX8BVoG4O5jTXRQRDuJ6FDTzEWF1/BCZhgbyAKE9qICYLloQYOFtahVRsWYlZ4KQJHlwHS/IYaZ6sZd9tmu5HQm2xi1UaTbzxYwJk/wBF5g5EEYOBZeEfGZmNdFyFZmZIR4jikbLThlh5kUUVJGmRT7sekkziRWUIACABk3T4qCsedgO4xhgGcY7q5pHJ4klBBTQRJ0CeHcoYHHUh6wgfdn9uJdSdMiebGJ0zUPTcoS286FCkrZxnYoYYKWLkBowhQoBeaOlZAgVhLidrXqg2GiqpQpZ4apwSwRtjqrB3muoF9BboaXKmshlqWqsWiGt2wphJkQbAU5hoCACH5BAUKABsALAcABADOAAsAAAX/oGFw2WZuT5oZROsSQnGaKjRvilI893MItlNOJ5v5gDcFrHhKIWcEYu/xFEqNv6B1N62aclysF7fsZYe5aOx2yL5aAUGSaT1oTYMBwQ5VGCAJgYIJCnx1gIOBhXdwiIl7d0p2iYGQUAQBjoOFSQR/lIQHnZ+Ue6OagqYzSqSJi5eTpTxGcjcSChANEbu8DBAIEsHBChe5vL13G7fFuscRDcnKuM3H0La3EA7Oz8kKEsXazr7Cw9/Gztar5uHHvte47MjktznZ2w0G1+D3BgirAqJmJMAQgMGEgwgn5Ei0gKDBhBMALGRYEOJBb5QcWlQo4cbAihZz3GgIMqFEBSM1/4ZEOWPAgpIIJXYU+PIhRG8ja1qU6VHlzZknJNQ6UanCjQkWCIGSUGEjAwVLjc44+DTqUQtPPS5gejUrTa5TJ3g9sWCr1BNUWZI161StiQUDmLYdGfesibQ3XMq1OPYthrwuA2yU2LBs2cBHIypYQPPlYAKFD5cVvNPtW8eVGbdcQADATsiNO4cFAPkvHpedPzc8kUcPgNGgZ5RNDZG05reoE9s2vSEP79MEGiQGy1qP8LA4ZcdtsJE48ONoLTBtTV0B9LsTnPceoIDBDQvS7W7vfjVY3q3eZ4A339J4eaAmKqU/sV58HvJh2RcnIBsDUw0ABqhBA5aV5V9XUFGiHfVeAiWwoFgJJrIXRH1tEMiDFV4oHoAEGlaWhgIGSGBO2nFomYY3mKjVglidaNYJGJDkWW2xxTfbjCbVaOGNqoX2GloR8ZeTaECS9pthRGJH2g0b3Agbk6hNANtteHD2GJUucfajCQBy5OOTQ25ZgUPvaVVQmbKh9510/qQpwXx3SQdfk8tZJOd5b6JJFplT3ZnmmX3qd5l1eg5q00HrtUkUn0AKaiGjClSAgKLYZcgWXwocGRcCFGCKwSB6ceqphwmYRUFYT/1WKlOdUpipmxW0mlCqHjYkAaeoZlqrqZ4qd+upQKaapn/AmgAegZ8KUtYtFAQQAgAh+QQFCgAbACwHAAQAzgALAAAF/+C2PUcmiCiZGUTrEkKBis8jQEquKwU5HyXIbEPgyX7BYa5wTNmEMwWsSXsqFbEh8DYs9mrgGjdK6GkPY5GOeU6ryz7UFopSQEzygOGhJBjoIgMDBAcBM0V/CYqLCQqFOwobiYyKjn2TlI6GKC2YjJZknouaZAcQlJUHl6eooJwKooobqoewrJSEmyKdt59NhRKFMxLEEA4RyMkMEAjDEhfGycqAG8TQx9IRDRDE3d3R2ctD1RLg0ttKEnbY5wZD3+zJ6M7X2RHi9Oby7u/r9g38UFjTh2xZJBEBMDAboogAgwkQI07IMUORwocSJwCgWDFBAIwZOaJIsOBjRogKJP8wTODw5ESVHVtm3AhzpEeQElOuNDlTZ0ycEUWKWFASqEahGwYUPbnxoAgEdlYSqDBkgoUNClAlIHbSAoOsqCRQnQHxq1axVb06FWFxLIqyaze0Tft1JVqyE+pWXMD1pF6bYl3+HTqAWNW8cRUFzmih0ZAAB2oGKukSAAGGRHWJgLiR6AylBLpuHKKUMlMCngMpDSAa9QIUggZVVvDaJobLeC3XZpvgNgCmtPcuwP3WgmXSq4do0DC6o2/guzcseECtUoO0hmcsGKDgOt7ssBd07wqesAIGZC1YIBa7PQHvb1+SFo+++HrJSQfB33xfav3i5eX3Hnb4CTJgegEq8tH/YQEOcIJzbm2G2EoYRLgBXFpVmFYDcREV4HIcnmUhiGBRouEMJGJGzHIspqgdXxK0yCKHRNXoIX4uorCdTyjkyNtdPWrA4Up82EbAbzMRxxZRR54WXVLDIRmRcag5d2R6ugl3ZXzNhTecchpMhIGVAKAYpgJjjsSklBEd99maZoo535ZvdamjBEpusJyctg3h4X8XqodBMx0tiNeg/oGJaKGABpogS40KSqiaEgBqlQWLUtqoVQnytekEjzo0hHqhRorppOZt2p923M2AAV+oBtpAnnPNoB6HaU6mAAIU+IXmi3j2mtFXuUoHKwXpzVrsjcgGOauKEjQrwq157hitGq2NoWmjh7z6Wmxb0m5w66+2VRAuXN/yFUAIACH5BAUKABsALAcABADOAAsAAAX/4CZuRiaM45MZqBgIRbs9AqTcuFLE7VHLOh7KB5ERdjJaEaU4ClO/lgKWjKKcMiJQ8KgumcieVdQMD8cbBeuAkkC6LYLhOxoQ2PF5Ys9PKPBMen17f0CCg4VSh32JV4t8jSNqEIOEgJKPlkYBlJWRInKdiJdkmQlvKAsLBxdABA4RsbIMBggtEhcQsLKxDBC2TAS6vLENdJLDxMZAubu8vjIbzcQRtMzJz79S08oQEt/guNiyy7fcvMbh4OezdAvGrakLAQwyABsELQkY9BP+//ckyPDD4J9BfAMh1GsBoImMeQUN+lMgUJ9CiRMa5msxoB9Gh/o8GmxYMZXIgxtR/yQ46S/gQAURR0pDwYDfywoyLPip5AdnCwsMFPBU4BPFhKBDi444quCmDKZOfwZ9KEGpCKgcN1jdALSpPqIYsabS+nSqvqplvYqQYAeDPgwKwjaMtiDl0oaqUAyo+3TuWwUAMPpVCfee0cEjVBGQq2ABx7oTWmQk4FglZMGN9fGVDMCuiH2AOVOu/PmyxM630gwM0CCn6q8LjVJ8GXvpa5Uwn95OTC/nNxkda1/dLSK475IjCD6dHbK1ZOa4hXP9DXs5chJ00UpVm5xo2qRpoxptwF2E4/IbJpB/SDz9+q9b1aNfQH08+p4a8uvX8B53fLP+ycAfemjsRUBgp1H20K+BghHgVgt1GXZXZpZ5lt4ECjxYR4ScUWiShEtZqBiIInRGWnERNnjiBglw+JyGnxUmGowsyiiZg189lNtPGACjV2+S9UjbU0JWF6SPvEk3QZEqsZYTk3UAaRSUnznJI5LmESCdBVSyaOWUWLK4I5gDUYVeV1T9l+FZClCAUVA09uSmRHBCKAECFEhW51ht6rnmWBXkaR+NjuHpJ40D3DmnQXt2F+ihZxlqVKOfQRACACH5BAUKABwALAcABADOAAsAAAX/ICdyUCkUo/g8mUG8MCGkKgspeC6j6XEIEBpBUeCNfECaglBcOVfJFK7YQwZHQ6JRZBUqTrSuVEuD3nI45pYjFuWKvjjSkCoRaBUMWxkwBGgJCXspQ36Bh4EEB0oKhoiBgyNLjo8Ki4QElIiWfJqHnISNEI+Ql5J9o6SgkqKkgqYihamPkW6oNBgSfiMMDQkGCBLCwxIQDhHIyQwQCGMKxsnKVyPCF9DREQ3MxMPX0cu4wt7J2uHWx9jlKd3o39MiuefYEcvNkuLt5O8c1ePI2tyELXGQwoGDAQf+iEC2xByDCRAjTlAgIUWCBRgCPJQ4AQBFXAs0coT40WLIjRxL/47AcHLkxIomRXL0CHPERZkpa4q4iVKiyp0tR/7kwHMkTUBBJR5dOCEBAVcKKtCAyOHpowXCpk7goABqBZdcvWploACpBKkpIJI1q5OD2rIWE0R1uTZu1LFwbWL9OlKuWb4c6+o9i3dEgw0RCGDUG9KlRw56gDY2qmCByZBaASi+TACA0TucAaTteCcy0ZuOK3N2vJlx58+LRQyY3Xm0ZsgjZg+oPQLi7dUcNXi0LOJw1pgNtB7XG6CBy+U75SYfPTSQAgZTNUDnQHt67wnbZyvwLgKiMN3oCZB3C76tdewpLFgIP2C88rbi4Y+QT3+8S5USMICZXWj1pkEDeUU3lOYGB3alSoEiMIjgX4WlgNF2EibIwQIXauWXSRg2SAOHIU5IIIMoZkhhWiJaiFVbKo6AQEgQXrTAazO1JhkBrBG3Y2Y6EsUhaGn95hprSN0oWpFE7rhkeaQBchGOEWnwEmc0uKWZj0LeuNV3W4Y2lZHFlQCSRjTIl8uZ+kG5HU/3sRlnTG2ytyadytnD3HrmuRcSn+0h1dycexIK1KCjYaCnjCCVqOFFJTZ5GkUUjESWaUIKU2lgCmAKKQIUjHapXRKE+t2og1VgankNYnohqKJ2CmKplso6GKz7WYCgqxeuyoF8u9IQAgA7",msg:null,msgText:"Loading the next set of posts...",selector:null,speed:"fast",start:n},state:{isDuringAjax:false,isInvalidPage:false,isDestroyed:false,isDone:false,isPaused:false,isBeyondMaxPage:false,currPage:1},debug:false,behavior:n,binder:t(e),nextSelector:"div.navigation a:first",navSelector:"div.navigation",contentSelector:null,extraScrollPx:150,itemSelector:"div.post",animate:false,pathParse:n,dataType:"html",appendCallback:true,bufferPx:40,errorCallback:function(){},infid:0,pixelsFromNavToBottom:n,path:n,prefill:false,maxPage:n};t.infinitescroll.prototype={_binding:function(t){var r=this,i=r.options;i.v="2.0b2.120520";if(!!i.behavior&&this["_binding_"+i.behavior]!==n){this["_binding_"+i.behavior].call(this);return}if(t!=="bind"&&t!=="unbind"){this._debug("Binding value "+t+" not valid");return false}if(t==="unbind"){this.options.binder.unbind("smartscroll.infscr."+r.options.infid)}else{this.options.binder[t]("smartscroll.infscr."+r.options.infid,function(){r.scroll()})}this._debug("Binding",t)},_create:function(i,s){var o=t.extend(true,{},t.infinitescroll.defaults,i);this.options=o;var u=t(e);var a=this;if(!a._validate(i)){return false}var f=t(o.nextSelector).attr("href");if(!f){this._debug("Navigation selector not found");return false}o.path=o.path||this._determinepath(f);o.contentSelector=o.contentSelector||this.element;o.loading.selector=o.loading.selector||o.contentSelector;o.loading.msg=o.loading.msg||t('
Loading...
'+o.loading.msgText+"
");(new Image).src=o.loading.img;if(o.pixelsFromNavToBottom===n){o.pixelsFromNavToBottom=t(document).height()-t(o.navSelector).offset().top;this._debug("pixelsFromNavToBottom: "+o.pixelsFromNavToBottom)}var l=this;o.loading.start=o.loading.start||function(){t(o.navSelector).hide();o.loading.msg.appendTo(o.loading.selector).show(o.loading.speed,t.proxy(function(){this.beginAjax(o)},l))};o.loading.finished=o.loading.finished||function(){if(!o.state.isBeyondMaxPage)o.loading.msg.fadeOut(o.loading.speed)};o.callback=function(e,r,i){if(!!o.behavior&&e["_callback_"+o.behavior]!==n){e["_callback_"+o.behavior].call(t(o.contentSelector)[0],r,i)}if(s){s.call(t(o.contentSelector)[0],r,o,i)}if(o.prefill){u.bind("resize.infinite-scroll",e._prefill)}};if(i.debug){if(Function.prototype.bind&&(typeof console==="object"||typeof console==="function")&&typeof console.log==="object"){["log","info","warn","error","assert","dir","clear","profile","profileEnd"].forEach(function(e){console[e]=this.call(console[e],console)},Function.prototype.bind)}}this._setup();if(o.prefill){this._prefill()}return true},_prefill:function(){function s(){return r.options.contentSelector.height()<=i.height()}var r=this;var i=t(e);this._prefill=function(){if(s()){r.scroll()}i.bind("resize.infinite-scroll",function(){if(s()){i.unbind("resize.infinite-scroll");r.scroll()}})};this._prefill()},_debug:function(){if(true!==this.options.debug){return}if(typeof console!=="undefined"&&typeof console.log==="function"){if(Array.prototype.slice.call(arguments).length===1&&typeof Array.prototype.slice.call(arguments)[0]==="string"){console.log(Array.prototype.slice.call(arguments).toString())}else{console.log(Array.prototype.slice.call(arguments))}}else if(!Function.prototype.bind&&typeof console!=="undefined"&&typeof console.log==="object"){Function.prototype.call.call(console.log,console,Array.prototype.slice.call(arguments))}},_determinepath:function(t){var r=this.options;if(!!r.behavior&&this["_determinepath_"+r.behavior]!==n){return this["_determinepath_"+r.behavior].call(this,t)}if(!!r.pathParse){this._debug("pathParse manual");return r.pathParse(t,this.options.state.currPage+1)}else if(t.match(/^(.*?)\b2\b(.*?$)/)){t=t.match(/^(.*?)\b2\b(.*?$)/).slice(1)}else if(t.match(/^(.*?)2(.*?$)/)){if(t.match(/^(.*?page=)2(\/.*|$)/)){t=t.match(/^(.*?page=)2(\/.*|$)/).slice(1);return t}t=t.match(/^(.*?)2(.*?$)/).slice(1)}else{if(t.match(/^(.*?page=)1(\/.*|$)/)){t=t.match(/^(.*?page=)1(\/.*|$)/).slice(1);return t}else{this._debug("Sorry, we couldn't parse your Next (Previous Posts) URL. Verify your the css selector points to the correct A tag. If you still get this error: yell, scream, and kindly ask for help at infinite-scroll.com.");r.state.isInvalidPage=true}}this._debug("determinePath",t);return t},_error:function(t){var r=this.options;if(!!r.behavior&&this["_error_"+r.behavior]!==n){this["_error_"+r.behavior].call(this,t);return}if(t!=="destroy"&&t!=="end"){t="unknown"}this._debug("Error",t);if(t==="end"||r.state.isBeyondMaxPage){this._showdonemsg()}r.state.isDone=true;r.state.currPage=1;r.state.isPaused=false;r.state.isBeyondMaxPage=false;this._binding("unbind")},_loadcallback:function(i,s,o){var u=this.options,a=this.options.callback,f=u.state.isDone?"done":!u.appendCallback?"no-append":"append",l;if(!!u.behavior&&this["_loadcallback_"+u.behavior]!==n){this["_loadcallback_"+u.behavior].call(this,i,s);return}switch(f){case"done":this._showdonemsg();return false;case"no-append":if(u.dataType==="html"){s="
"+s+"
";s=t(s).find(u.itemSelector)}break;case"append":var c=i.children();if(c.length===0){return this._error("end")}l=document.createDocumentFragment();while(i[0].firstChild){l.appendChild(i[0].firstChild)}this._debug("contentSelector",t(u.contentSelector)[0]);t(u.contentSelector)[0].appendChild(l);s=c.get();break}u.loading.finished.call(t(u.contentSelector)[0],u);if(u.animate){var h=t(e).scrollTop()+t(u.loading.msg).height()+u.extraScrollPx+"px";t("html,body").animate({scrollTop:h},800,function(){u.state.isDuringAjax=false})}if(!u.animate){u.state.isDuringAjax=false}a(this,s,o);if(u.prefill){this._prefill()}},_nearbottom:function(){var i=this.options,s=0+t(document).height()-i.binder.scrollTop()-t(e).height();if(!!i.behavior&&this["_nearbottom_"+i.behavior]!==n){return this["_nearbottom_"+i.behavior].call(this)}this._debug("math:",s,i.pixelsFromNavToBottom);return s-i.bufferPx-1&&t(n[r]).length===0){this._debug("Your "+r+" found no elements.");return false}}return true},bind:function(){this._binding("bind")},destroy:function(){this.options.state.isDestroyed=true;this.options.loading.finished();return this._error("destroy")},pause:function(){this._pausing("pause")},resume:function(){this._pausing("resume")},beginAjax:function(r){var i=this,s=r.path,o,u,a,f;r.state.currPage++;if(r.maxPage!=n&&r.state.currPage>r.maxPage){r.state.isBeyondMaxPage=true;this.destroy();return}o=t(r.contentSelector).is("table, tbody")?t(""):t("
");u=typeof s==="function"?s(r.state.currPage):s.join(r.state.currPage);i._debug("heading into ajax",u);a=r.dataType==="html"||r.dataType==="json"?r.dataType:"html+callback";if(r.appendCallback&&r.dataType==="html"){a+="+callback"}switch(a){case"html+callback":i._debug("Using HTML via .load() method");o.load(u+" "+r.itemSelector,n,function(t){i._loadcallback(o,t,u)});break;case"html":i._debug("Using "+a.toUpperCase()+" via $.ajax() method");t.ajax({url:u,dataType:r.dataType,complete:function(t,n){f=typeof t.isResolved!=="undefined"?t.isResolved():n==="success"||n==="notmodified";if(f){i._loadcallback(o,t.responseText,u)}else{i._error("end")}}});break;case"json":i._debug("Using "+a.toUpperCase()+" via $.ajax() method");t.ajax({dataType:"json",type:"GET",url:u,success:function(e,t,s){f=typeof s.isResolved!=="undefined"?s.isResolved():t==="success"||t==="notmodified";if(r.appendCallback){if(r.template!==n){var a=r.template(e);o.append(a);if(f){i._loadcallback(o,a)}else{i._error("end")}}else{i._debug("template must be defined.");i._error("end")}}else{if(f){i._loadcallback(o,e,u)}else{i._error("end")}}},error:function(){i._debug("JSON ajax request failed.");i._error("end")}});break}},retrieve:function(r){r=r||null;var i=this,s=i.options;if(!!s.behavior&&this["retrieve_"+s.behavior]!==n){this["retrieve_"+s.behavior].call(this,r);return}if(s.state.isDestroyed){this._debug("Instance is destroyed");return false}s.state.isDuringAjax=true;s.loading.start.call(t(s.contentSelector)[0],s)},scroll:function(){var t=this.options,r=t.state;if(!!t.behavior&&this["scroll_"+t.behavior]!==n){this["scroll_"+t.behavior].call(this);return}if(r.isDuringAjax||r.isInvalidPage||r.isDone||r.isDestroyed||r.isPaused){return}if(!this._nearbottom()){return}this.retrieve()},toggle:function(){this._pausing()},unbind:function(){this._binding("unbind")},update:function(n){if(t.isPlainObject(n)){this.options=t.extend(true,this.options,n)}}};t.fn.infinitescroll=function(n,r){var i=typeof n;switch(i){case"string":var s=Array.prototype.slice.call(arguments,1);this.each(function(){var e=t.data(this,"infinitescroll");if(!e){return false}if(!t.isFunction(e[n])||n.charAt(0)==="_"){return false}e[n].apply(e,s)});break;case"object":this.each(function(){var e=t.data(this,"infinitescroll");if(e){e.update(n)}else{e=new t.infinitescroll(n,r,this);if(!e.failed){t.data(this,"infinitescroll",e)}}});break}return this};var r=t.event,i;r.special.smartscroll={setup:function(){t(this).bind("scroll",r.special.smartscroll.handler)},teardown:function(){t(this).unbind("scroll",r.special.smartscroll.handler)},handler:function(e,n){var r=this,s=arguments;e.type="smartscroll";if(i){clearTimeout(i)}i=setTimeout(function(){t(r).trigger("smartscroll",s)},n==="execAsap"?0:100)}};t.fn.smartscroll=function(e){return e?this.bind("smartscroll",e):this.trigger("smartscroll",["execAsap"])}})(window,jQuery) +/*! + * Infinite Scroll PACKAGED v3.0.5 + * Automatically add next page + * + * Licensed GPLv3 for open source use + * or Infinite Scroll Commercial License for commercial use + * + * https://infinite-scroll.com + * Copyright 2018 Metafizzy + */ + +!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,l){function a(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,a){var h=l.data(a,i);if(!h)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var c=h[e];if(!c||"_"==e.charAt(0))return void s(r+" is not a valid method");var u=c.apply(h,n);o=void 0===o?u:o}),void 0!==o?o:t}function h(t,e){t.each(function(t,n){var o=l.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),l.data(n,i,o))})}l=l||e||t.jQuery,l&&(r.prototype.option||(r.prototype.option=function(t){l.isPlainObject(t)&&(this.options=l.extend(!0,this.options,t))}),l.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return a(this,t,e)}return h(this,t),this},n(l))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return n.indexOf(e)==-1&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return n!=-1&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o=0,this.isPrefilling?(this.log("prefill"),this.loadNextPage()):this.stopPrefill()},s.getPrefillDistance=function(){return this.options.elementScroll?this.scroller.clientHeight-this.scroller.scrollHeight:this.windowHeight-this.element.clientHeight},s.stopPrefill=function(){this.log("stopPrefill"),this.off("append",this.prefill)},e}),function(t,e){"function"==typeof define&&define.amd?define("infinite-scroll/js/scroll-watch",["./core","fizzy-ui-utils/utils"],function(i,n){return e(t,i,n)}):"object"==typeof module&&module.exports?module.exports=e(t,require("./core"),require("fizzy-ui-utils")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){var n=e.prototype;return e.defaults.scrollThreshold=400,e.create.scrollWatch=function(){this.pageScrollHandler=this.onPageScroll.bind(this),this.resizeHandler=this.onResize.bind(this);var t=this.options.scrollThreshold,e=t||0===t;e&&this.enableScrollWatch()},e.destroy.scrollWatch=function(){this.disableScrollWatch()},n.enableScrollWatch=function(){this.isScrollWatching||(this.isScrollWatching=!0,this.updateMeasurements(),this.updateScroller(),this.on("last",this.disableScrollWatch),this.bindScrollWatchEvents(!0))},n.disableScrollWatch=function(){this.isScrollWatching&&(this.bindScrollWatchEvents(!1),delete this.isScrollWatching)},n.bindScrollWatchEvents=function(e){var i=e?"addEventListener":"removeEventListener";this.scroller[i]("scroll",this.pageScrollHandler),t[i]("resize",this.resizeHandler)},n.onPageScroll=e.throttle(function(){var t=this.getBottomDistance();t<=this.options.scrollThreshold&&this.dispatchEvent("scrollThreshold")}),n.getBottomDistance=function(){return this.options.elementScroll?this.getElementBottomDistance():this.getWindowBottomDistance()},n.getWindowBottomDistance=function(){var e=this.top+this.element.clientHeight,i=t.pageYOffset+this.windowHeight;return e-i},n.getElementBottomDistance=function(){var t=this.scroller.scrollHeight,e=this.scroller.scrollTop+this.scroller.clientHeight;return t-e},n.onResize=function(){this.updateMeasurements()},i.debounceMethod(e,"onResize",150),e}),function(t,e){"function"==typeof define&&define.amd?define("infinite-scroll/js/history",["./core","fizzy-ui-utils/utils"],function(i,n){return e(t,i,n)}):"object"==typeof module&&module.exports?module.exports=e(t,require("./core"),require("fizzy-ui-utils")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){var n=e.prototype;e.defaults.history="replace";var o=document.createElement("a");return e.create.history=function(){if(this.options.history){o.href=this.getAbsolutePath();var t=o.origin||o.protocol+"//"+o.host,e=t==location.origin;return e?void(this.options.append?this.createHistoryAppend():this.createHistoryPageLoad()):void console.error("[InfiniteScroll] cannot set history with different origin: "+o.origin+" on "+location.origin+" . History behavior disabled.")}},n.createHistoryAppend=function(){this.updateMeasurements(),this.updateScroller(),this.scrollPages=[{top:0,path:location.href,title:document.title}],this.scrollPageIndex=0,this.scrollHistoryHandler=this.onScrollHistory.bind(this),this.unloadHandler=this.onUnload.bind(this),this.scroller.addEventListener("scroll",this.scrollHistoryHandler),this.on("append",this.onAppendHistory),this.bindHistoryAppendEvents(!0)},n.bindHistoryAppendEvents=function(e){var i=e?"addEventListener":"removeEventListener";this.scroller[i]("scroll",this.scrollHistoryHandler),t[i]("unload",this.unloadHandler)},n.createHistoryPageLoad=function(){this.on("load",this.onPageLoadHistory)},e.destroy.history=n.destroyHistory=function(){var t=this.options.history&&this.options.append;t&&this.bindHistoryAppendEvents(!1)},n.onAppendHistory=function(t,e,i){if(i&&i.length){var n=i[0],r=this.getElementScrollY(n);o.href=e,this.scrollPages.push({top:r,path:o.href,title:t.title})}},n.getElementScrollY=function(t){return this.options.elementScroll?this.getElementElementScrollY(t):this.getElementWindowScrollY(t)},n.getElementWindowScrollY=function(e){var i=e.getBoundingClientRect();return i.top+t.pageYOffset},n.getElementElementScrollY=function(t){return t.offsetTop-this.top},n.onScrollHistory=function(){for(var t,e,i=this.getScrollViewY(),n=0;n=i)break;t=n,e=o}t!=this.scrollPageIndex&&(this.scrollPageIndex=t,this.setHistory(e.title,e.path))},i.debounceMethod(e,"onScrollHistory",150),n.getScrollViewY=function(){return this.options.elementScroll?this.scroller.scrollTop+this.scroller.clientHeight/2:t.pageYOffset+this.windowHeight/2},n.setHistory=function(t,e){var i=this.options.history,n=i&&history[i+"State"];n&&(history[i+"State"](null,t,e),this.options.historyTitle&&(document.title=t),this.dispatchEvent("history",null,[t,e]))},n.onUnload=function(){var e=this.scrollPageIndex;if(0!==e){var i=this.scrollPages[e],n=t.pageYOffset-i.top+this.top;this.destroyHistory(),scrollTo(0,n)}},n.onPageLoadHistory=function(t,e){this.setHistory(t.title,e)},e}),function(t,e){"function"==typeof define&&define.amd?define("infinite-scroll/js/button",["./core","fizzy-ui-utils/utils"],function(i,n){return e(t,i,n)}):"object"==typeof module&&module.exports?module.exports=e(t,require("./core"),require("fizzy-ui-utils")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){function n(t,e){this.element=t,this.infScroll=e,this.clickHandler=this.onClick.bind(this),this.element.addEventListener("click",this.clickHandler),e.on("request",this.disable.bind(this)),e.on("load",this.enable.bind(this)),e.on("error",this.hide.bind(this)),e.on("last",this.hide.bind(this))}return e.create.button=function(){var t=i.getQueryElement(this.options.button);if(t)return void(this.button=new n(t,this))},e.destroy.button=function(){this.button&&this.button.destroy()},n.prototype.onClick=function(t){t.preventDefault(),this.infScroll.loadNextPage()},n.prototype.enable=function(){this.element.removeAttribute("disabled")},n.prototype.disable=function(){this.element.disabled="disabled"},n.prototype.hide=function(){this.element.style.display="none"},n.prototype.destroy=function(){this.element.removeEventListener("click",this.clickHandler)},e.Button=n,e}),function(t,e){"function"==typeof define&&define.amd?define("infinite-scroll/js/status",["./core","fizzy-ui-utils/utils"],function(i,n){return e(t,i,n)}):"object"==typeof module&&module.exports?module.exports=e(t,require("./core"),require("fizzy-ui-utils")):e(t,t.InfiniteScroll,t.fizzyUIUtils)}(window,function(t,e,i){function n(t){r(t,"none")}function o(t){r(t,"block")}function r(t,e){t&&(t.style.display=e)}var s=e.prototype;return e.create.status=function(){var t=i.getQueryElement(this.options.status);t&&(this.statusElement=t,this.statusEventElements={request:t.querySelector(".infinite-scroll-request"),error:t.querySelector(".infinite-scroll-error"),last:t.querySelector(".infinite-scroll-last")},this.on("request",this.showRequestStatus),this.on("error",this.showErrorStatus),this.on("last",this.showLastStatus),this.bindHideStatus("on"))},s.bindHideStatus=function(t){var e=this.options.append?"append":"load";this[t](e,this.hideAllStatus)},s.showRequestStatus=function(){this.showStatus("request")},s.showErrorStatus=function(){this.showStatus("error")},s.showLastStatus=function(){this.showStatus("last"),this.bindHideStatus("off")},s.showStatus=function(t){o(this.statusElement),this.hideStatusEventElements();var e=this.statusEventElements[t];o(e)},s.hideAllStatus=function(){n(this.statusElement),this.hideStatusEventElements()},s.hideStatusEventElements=function(){for(var t in this.statusEventElements){var e=this.statusEventElements[t];n(e)}},e}),function(t,e){"function"==typeof define&&define.amd?define(["infinite-scroll/js/core","infinite-scroll/js/page-load","infinite-scroll/js/scroll-watch","infinite-scroll/js/history","infinite-scroll/js/button","infinite-scroll/js/status"],e):"object"==typeof module&&module.exports&&(module.exports=e(require("./core"),require("./page-load"),require("./scroll-watch"),require("./history"),require("./button"),require("./status")))}(window,function(t){return t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("imagesloaded/imagesloaded",["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){if(Array.isArray(t))return t;var e="object"==typeof t&&"number"==typeof t.length;return e?h.call(t):[t]}function o(t,e,r){if(!(this instanceof o))return new o(t,e,r);var s=t;return"string"==typeof t&&(s=document.querySelectorAll(t)),s?(this.elements=n(s),this.options=i({},this.options),"function"==typeof e?r=e:i(this.options,e),r&&this.on("always",r),this.getImages(),l&&(this.jqDeferred=new l.Deferred),void setTimeout(this.check.bind(this))):void a.error("Bad element for imagesLoaded "+(s||t))}function r(t){this.img=t}function s(t,e){this.url=t,this.element=e,this.img=new Image}var l=t.jQuery,a=t.console,h=Array.prototype.slice;o.prototype=Object.create(e.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(t){"IMG"==t.nodeName&&this.addImage(t),this.options.background===!0&&this.addElementBackgroundImages(t);var e=t.nodeType;if(e&&c[e]){for(var i=t.querySelectorAll("img"),n=0;n", defaults={'page': 1}) -@app.route("/author//'") +@app.route("/author//") @login_required_if_no_ano def author(book_id, page): entries, __, pagination = fill_indexpage(page, db.Books, db.Books.authors.any(db.Authors.id == book_id), @@ -1861,15 +1861,6 @@ def shutdown(): abort(404) -'''@app.route("/update") -@login_required -@admin_required -def update(): - # updater.updater_thread = helper.Updater() - flash(_(u"Update done"), category="info") - return abort(404)''' - - @app.route("/search", methods=["GET"]) @login_required_if_no_ano def search(): From 9128615f48e7ca2ef47dbb6b1b7383d33ee4632a Mon Sep 17 00:00:00 2001 From: Ozzieisaacs Date: Sat, 26 Jan 2019 09:43:17 +0100 Subject: [PATCH 07/20] Fix #424 Fix #425 --- cps/static/js/libs/plugins.js | 27 +++++++++++++-------------- cps/static/js/main.js | 22 +++------------------- 2 files changed, 16 insertions(+), 33 deletions(-) diff --git a/cps/static/js/libs/plugins.js b/cps/static/js/libs/plugins.js index 53b6f241..708e4df1 100644 --- a/cps/static/js/libs/plugins.js +++ b/cps/static/js/libs/plugins.js @@ -1,7 +1,7 @@ -/*! modernizr 3.5.0 (Custom Build) | MIT * - * https://modernizr.com/download/?-inputtypes-addtest-setclasses !*/ -!function(e,t,n){function o(e,t){return typeof e===t}function i(){var e,t,n,i,s,a,l;for(var f in u)if(u.hasOwnProperty(f)){if(e=[],t=u[f],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;nr;r++)d.setAttribute("type",o=e[r]),s="text"!==d.type&&"style"in d,s&&(d.value=l,d.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(o)&&d.style.WebkitAppearance!==n?(c.appendChild(d),i=t.defaultView,s=i.getComputedStyle&&"textfield"!==i.getComputedStyle(d,null).WebkitAppearance&&0!==d.offsetHeight,c.removeChild(d)):/^(search|tel)$/.test(o)||(s=/^(url|email)$/.test(o)?d.checkValidity&&d.checkValidity()===!1:d.value!=l)),m[e[r]]=!!s;return m}(h);var g;!function(){var e={}.hasOwnProperty;g=o(e,"undefined")||o(e.call,"undefined")?function(e,t){return t in e&&o(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),f._l={},f.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),Modernizr.hasOwnProperty(e)&&setTimeout(function(){Modernizr._trigger(e,Modernizr[e])},0)},f._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e,o;for(e=0;er;r++)p.setAttribute("type",a=e[r]),i="text"!==p.type&&"style"in p,i&&(p.value=l,p.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(a)&&p.style.WebkitAppearance!==n?(u.appendChild(p),s=t.defaultView,i=s.getComputedStyle&&"textfield"!==s.getComputedStyle(p,null).WebkitAppearance&&0!==p.offsetHeight,u.removeChild(p)):/^(search|tel)$/.test(a)||(i=/^(url|email)$/.test(a)?p.checkValidity&&p.checkValidity()===!1:p.value!=l)),m[e[r]]=!!i;return m}(d),s(),i(l),delete c.addTest,delete c.addAsyncTest;for(var h=0;h0){return}var ba=a9.originalEvent?a9.originalEvent:a9;var a8,a7=a?ba.touches[0]:ba;W=f;if(a){T=ba.touches.length}else{a9.preventDefault()}ac=0;aL=null;aF=null;Y=0;aX=0;aV=0;D=1;am=0;aM=af();J=X();O();if(!a||(T===aq.fingers||aq.fingers===h)||aT()){ae(0,a7);Q=ao();if(T==2){ae(1,ba.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}if(aq.swipeStatus||aq.pinchStatus){a8=L(ba,W)}}else{a8=false}if(a8===false){W=p;L(ba,W);return a8}else{ak(true)}return null}function aZ(ba){var bd=ba.originalEvent?ba.originalEvent:ba;if(W===g||W===p||ai()){return}var a9,a8=a?bd.touches[0]:bd;var bb=aD(a8);aY=ao();if(a){T=bd.touches.length}W=j;if(T==2){if(aX==0){ae(1,bd.touches[1]);aX=aV=ap(aM[0].start,aM[1].start)}else{aD(bd.touches[1]);aV=ap(aM[0].end,aM[1].end);aF=an(aM[0].end,aM[1].end)}D=a3(aX,aV);am=Math.abs(aX-aV)}if((T===aq.fingers||aq.fingers===h)||!a||aT()){aL=aH(bb.start,bb.end);ah(ba,aL);ac=aO(bb.start,bb.end);Y=aI();aE(aL,ac);if(aq.swipeStatus||aq.pinchStatus){a9=L(bd,W)}if(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave){var a7=true;if(aq.triggerOnTouchLeave){var bc=aU(this);a7=B(bb.end,bc)}if(!aq.triggerOnTouchEnd&&a7){W=ay(j)}else{if(aq.triggerOnTouchLeave&&!a7){W=ay(g)}}if(W==p||W==g){L(bd,W)}}}else{W=p;L(bd,W)}if(a9===false){W=p;L(bd,W)}}function I(a7){var a8=a7.originalEvent;if(a){if(a8.touches.length>0){C();return true}}if(ai()){T=aa}a7.preventDefault();aY=ao();Y=aI();if(a6()){W=p;L(a8,W)}else{if(aq.triggerOnTouchEnd||(aq.triggerOnTouchEnd==false&&W===j)){W=g;L(a8,W)}else{if(!aq.triggerOnTouchEnd&&a2()){W=g;aB(a8,W,x)}else{if(W===j){W=p;L(a8,W)}}}}ak(false);return null}function a5(){T=0;aY=0;Q=0;aX=0;aV=0;D=1;O();ak(false)}function H(a7){var a8=a7.originalEvent;if(aq.triggerOnTouchLeave){W=ay(g);L(a8,W)}}function aG(){aN.unbind(G,aJ);aN.unbind(az,a5);aN.unbind(au,aZ);aN.unbind(R,I);if(P){aN.unbind(P,H)}ak(false)}function ay(bb){var ba=bb;var a9=aw();var a8=aj();var a7=a6();if(!a9||a7){ba=p}else{if(a8&&bb==j&&(!aq.triggerOnTouchEnd||aq.triggerOnTouchLeave)){ba=g}else{if(!a8&&bb==g&&aq.triggerOnTouchLeave){ba=p}}}return ba}function L(a9,a7){var a8=undefined;if(F()||S()){a8=aB(a9,a7,k)}else{if((M()||aT())&&a8!==false){a8=aB(a9,a7,s)}}if(aC()&&a8!==false){a8=aB(a9,a7,i)}else{if(al()&&a8!==false){a8=aB(a9,a7,b)}else{if(ad()&&a8!==false){a8=aB(a9,a7,x)}}}if(a7===p){a5(a9)}if(a7===g){if(a){if(a9.touches.length==0){a5(a9)}}else{a5(a9)}}return a8}function aB(ba,a7,a9){var a8=undefined;if(a9==k){aN.trigger("swipeStatus",[a7,aL||null,ac||0,Y||0,T]);if(aq.swipeStatus){a8=aq.swipeStatus.call(aN,ba,a7,aL||null,ac||0,Y||0,T);if(a8===false){return false}}if(a7==g&&aR()){aN.trigger("swipe",[aL,ac,Y,T]);if(aq.swipe){a8=aq.swipe.call(aN,ba,aL,ac,Y,T);if(a8===false){return false}}switch(aL){case o:aN.trigger("swipeLeft",[aL,ac,Y,T]);if(aq.swipeLeft){a8=aq.swipeLeft.call(aN,ba,aL,ac,Y,T)}break;case n:aN.trigger("swipeRight",[aL,ac,Y,T]);if(aq.swipeRight){a8=aq.swipeRight.call(aN,ba,aL,ac,Y,T)}break;case d:aN.trigger("swipeUp",[aL,ac,Y,T]);if(aq.swipeUp){a8=aq.swipeUp.call(aN,ba,aL,ac,Y,T)}break;case v:aN.trigger("swipeDown",[aL,ac,Y,T]);if(aq.swipeDown){a8=aq.swipeDown.call(aN,ba,aL,ac,Y,T)}break}}}if(a9==s){aN.trigger("pinchStatus",[a7,aF||null,am||0,Y||0,T,D]);if(aq.pinchStatus){a8=aq.pinchStatus.call(aN,ba,a7,aF||null,am||0,Y||0,T,D);if(a8===false){return false}}if(a7==g&&a4()){switch(aF){case c:aN.trigger("pinchIn",[aF||null,am||0,Y||0,T,D]);if(aq.pinchIn){a8=aq.pinchIn.call(aN,ba,aF||null,am||0,Y||0,T,D)}break;case w:aN.trigger("pinchOut",[aF||null,am||0,Y||0,T,D]);if(aq.pinchOut){a8=aq.pinchOut.call(aN,ba,aF||null,am||0,Y||0,T,D)}break}}}if(a9==x){if(a7===p||a7===g){clearTimeout(aS);if(V()&&!E()){K=ao();aS=setTimeout(e.proxy(function(){K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}},this),aq.doubleTapThreshold)}else{K=null;aN.trigger("tap",[ba.target]);if(aq.tap){a8=aq.tap.call(aN,ba,ba.target)}}}}else{if(a9==i){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("doubletap",[ba.target]);if(aq.doubleTap){a8=aq.doubleTap.call(aN,ba,ba.target)}}}else{if(a9==b){if(a7===p||a7===g){clearTimeout(aS);K=null;aN.trigger("longtap",[ba.target]);if(aq.longTap){a8=aq.longTap.call(aN,ba,ba.target)}}}}}return a8}function aj(){var a7=true;if(aq.threshold!==null){a7=ac>=aq.threshold}return a7}function a6(){var a7=false;if(aq.cancelThreshold!==null&&aL!==null){a7=(aP(aL)-ac)>=aq.cancelThreshold}return a7}function ab(){if(aq.pinchThreshold!==null){return am>=aq.pinchThreshold}return true}function aw(){var a7;if(aq.maxTimeThreshold){if(Y>=aq.maxTimeThreshold){a7=false}else{a7=true}}else{a7=true}return a7}function ah(a7,a8){if(aq.allowPageScroll===l||aT()){a7.preventDefault()}else{var a9=aq.allowPageScroll===r;switch(a8){case o:if((aq.swipeLeft&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case n:if((aq.swipeRight&&a9)||(!a9&&aq.allowPageScroll!=A)){a7.preventDefault()}break;case d:if((aq.swipeUp&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break;case v:if((aq.swipeDown&&a9)||(!a9&&aq.allowPageScroll!=t)){a7.preventDefault()}break}}}function a4(){var a8=aK();var a7=U();var a9=ab();return a8&&a7&&a9}function aT(){return !!(aq.pinchStatus||aq.pinchIn||aq.pinchOut)}function M(){return !!(a4()&&aT())}function aR(){var ba=aw();var bc=aj();var a9=aK();var a7=U();var a8=a6();var bb=!a8&&a7&&a9&&bc&&ba;return bb}function S(){return !!(aq.swipe||aq.swipeStatus||aq.swipeLeft||aq.swipeRight||aq.swipeUp||aq.swipeDown)}function F(){return !!(aR()&&S())}function aK(){return((T===aq.fingers||aq.fingers===h)||!a)}function U(){return aM[0].end.x!==0}function a2(){return !!(aq.tap)}function V(){return !!(aq.doubleTap)}function aQ(){return !!(aq.longTap)}function N(){if(K==null){return false}var a7=ao();return(V()&&((a7-K)<=aq.doubleTapThreshold))}function E(){return N()}function at(){return((T===1||!a)&&(isNaN(ac)||ac===0))}function aW(){return((Y>aq.longTapThreshold)&&(ac=0)){return o}else{if((a9<=360)&&(a9>=315)){return o}else{if((a9>=135)&&(a9<=225)){return n}else{if((a9>45)&&(a9<135)){return v}else{return d}}}}}function ao(){var a7=new Date();return a7.getTime()}function aU(a7){a7=e(a7);var a9=a7.offset();var a8={left:a9.left,right:a9.left+a7.outerWidth(),top:a9.top,bottom:a9.top+a7.outerHeight()};return a8}function B(a7,a8){return(a7.x>a8.left&&a7.xa8.top&&a7.y"+d+"{#modernizr{height:3px}}"+"").appendTo("head"),f=b('
').appendTo("html");a=f.height()===3,f.remove(),e.remove()}return a},csstransitions:function(){return!!j}},l;if(e)for(l in k)e.hasOwnProperty(l)||e.addTest(l,k[l]);else{e=a.Modernizr={_version:"1.6ish: miniModernizr for Isotope"};var m=" ",n;for(l in k)n=k[l](),e[l]=n,m+=" "+(n?"":"no-")+l;b("html").addClass(m)}if(e.csstransforms){var o=e.csstransforms3d?{translate:function(a){return"translate3d("+a[0]+"px, "+a[1]+"px, 0) "},scale:function(a){return"scale3d("+a+", "+a+", 1) "}}:{translate:function(a){return"translate("+a[0]+"px, "+a[1]+"px) "},scale:function(a){return"scale("+a+") "}},p=function(a,c,d){var e=b.data(a,"isoTransform")||{},f={},g,h={},j;f[c]=d,b.extend(e,f);for(g in e)j=e[g],h[g]=o[g](j);var k=h.translate||"",l=h.scale||"",m=k+l;b.data(a,"isoTransform",e),a.style[i]=m};b.cssNumber.scale=!0,b.cssHooks.scale={set:function(a,b){p(a,"scale",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.scale?d.scale:1}},b.fx.step.scale=function(a){b.cssHooks.scale.set(a.elem,a.now+a.unit)},b.cssNumber.translate=!0,b.cssHooks.translate={set:function(a,b){p(a,"translate",b)},get:function(a,c){var d=b.data(a,"isoTransform");return d&&d.translate?d.translate:[0,0]}}}var q,r;e.csstransitions&&(q={WebkitTransitionProperty:"webkitTransitionEnd",MozTransitionProperty:"transitionend",OTransitionProperty:"oTransitionEnd otransitionend",transitionProperty:"transitionend"}[j],r=h("transitionDuration"));var s=b.event,t=b.event.handle?"handle":"dispatch",u;s.special.smartresize={setup:function(){b(this).bind("resize",s.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",s.special.smartresize.handler)},handler:function(a,b){var c=this,d=arguments;a.type="smartresize",u&&clearTimeout(u),u=setTimeout(function(){s[t].apply(c,d)},b==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Isotope=function(a,c,d){this.element=b(c),this._create(a),this._init(d)};var v=["width","height"],w=b(a);b.Isotope.settings={resizable:!0,layoutMode:"masonry",containerClass:"isotope",itemClass:"isotope-item",hiddenClass:"isotope-hidden",hiddenStyle:{opacity:0,scale:.001},visibleStyle:{opacity:1,scale:1},containerStyle:{position:"relative",overflow:"hidden"},animationEngine:"best-available",animationOptions:{queue:!1,duration:800},sortBy:"original-order",sortAscending:!0,resizesContainer:!0,transformsEnabled:!0,itemPositionDataEnabled:!1},b.Isotope.prototype={_create:function(a){this.options=b.extend({},b.Isotope.settings,a),this.styleQueue=[],this.elemCount=0;var c=this.element[0].style;this.originalStyle={};var d=v.slice(0);for(var e in this.options.containerStyle)d.push(e);for(var f=0,g=d.length;fg?1:f0&&(i=function(a,b){b.$el[d](b.style,f).one(q,k)},j=!1)}}b.each(this.styleQueue,i),j&&k(),this.styleQueue=[]},resize:function(){this["_"+this.options.layoutMode+"ResizeChanged"]()&&this.reLayout()},reLayout:function(a){this["_"+this.options.layoutMode+"Reset"](),this.layout(this.$filteredAtoms,a)},addItems:function(a,b){var c=this._getAtoms(a);this.$allAtoms=this.$allAtoms.add(c),b&&b(c)},insert:function(a,b){this.element.append(a);var c=this;this.addItems(a,function(a){var d=c._filter(a);c._addHideAppended(d),c._sort(),c.reLayout(),c._revealAppended(d,b)})},appended:function(a,b){var c=this;this.addItems(a,function(a){c._addHideAppended(a),c.layout(a),c._revealAppended(a,b)})},_addHideAppended:function(a){this.$filteredAtoms=this.$filteredAtoms.add(a),a.addClass("no-transition"),this._isInserting=!0,this.styleQueue.push({$el:a,style:this.options.hiddenStyle})},_revealAppended:function(a,b){var c=this;setTimeout(function(){a.removeClass("no-transition"),c.styleQueue.push({$el:a,style:c.options.visibleStyle}),c._isInserting=!1,c._processStyleQueue(a,b)},10)},reloadItems:function(){this.$allAtoms=this._getAtoms(this.element.children())},remove:function(a,b){this.$allAtoms=this.$allAtoms.not(a),this.$filteredAtoms=this.$filteredAtoms.not(a);var c=this,d=function(){a.remove(),b&&b.call(c.element)};a.filter(":not(."+this.options.hiddenClass+")").length?(this.styleQueue.push({$el:a,style:this.options.hiddenStyle}),this._sort(),this.reLayout(d)):d()},shuffle:function(a){this.updateSortData(this.$allAtoms),this.options.sortBy="random",this._sort(),this.reLayout(a)},destroy:function(){var a=this.usingTransforms,b=this.options;this.$allAtoms.removeClass(b.hiddenClass+" "+b.itemClass).each(function(){var b=this.style;b.position="",b.top="",b.left="",b.opacity="",a&&(b[i]="")});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".isotope").undelegate("."+b.hiddenClass,"click").removeClass(b.containerClass).removeData("isotope"),w.unbind(".isotope")},_getSegments:function(a){var b=this.options.layoutMode,c=a?"rowHeight":"columnWidth",d=a?"height":"width",e=a?"rows":"cols",g=this.element[d](),h,i=this.options[b]&&this.options[b][c]||this.$filteredAtoms["outer"+f(d)](!0)||g;h=Math.floor(g/i),h=Math.max(h,1),this[b][e]=h,this[b][c]=i},_checkIfSegmentsChanged:function(a){var b=this.options.layoutMode,c=a?"rows":"cols",d=this[b][c];return this._getSegments(a),this[b][c]!==d},_masonryReset:function(){this.masonry={},this._getSegments();var a=this.masonry.cols;this.masonry.colYs=[];while(a--)this.masonry.colYs.push(0)},_masonryLayout:function(a){var c=this,d=c.masonry;a.each(function(){var a=b(this),e=Math.ceil(a.outerWidth(!0)/d.columnWidth);e=Math.min(e,d.cols);if(e===1)c._masonryPlaceBrick(a,d.colYs);else{var f=d.cols+1-e,g=[],h,i;for(i=0;id&&(e.x=0,e.y=e.height),c._pushPosition(a,e.x,e.y),e.height=Math.max(e.y+g,e.height),e.x+=f})},_fitRowsGetContainerSize:function(){return{height:this.fitRows.height}},_fitRowsResizeChanged:function(){return!0},_cellsByRowReset:function(){this.cellsByRow={index:0},this._getSegments(),this._getSegments(!0)},_cellsByRowLayout:function(a){var c=this,d=this.cellsByRow;a.each(function(){var a=b(this),e=d.index%d.cols,f=Math.floor(d.index/d.cols),g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByRowGetContainerSize:function(){return{height:Math.ceil(this.$filteredAtoms.length/this.cellsByRow.cols)*this.cellsByRow.rowHeight+this.offset.top}},_cellsByRowResizeChanged:function(){return this._checkIfSegmentsChanged()},_straightDownReset:function(){this.straightDown={y:0}},_straightDownLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,0,c.straightDown.y),c.straightDown.y+=d.outerHeight(!0)})},_straightDownGetContainerSize:function(){return{height:this.straightDown.y}},_straightDownResizeChanged:function(){return!0},_masonryHorizontalReset:function(){this.masonryHorizontal={},this._getSegments(!0);var a=this.masonryHorizontal.rows;this.masonryHorizontal.rowXs=[];while(a--)this.masonryHorizontal.rowXs.push(0)},_masonryHorizontalLayout:function(a){var c=this,d=c.masonryHorizontal;a.each(function(){var a=b(this),e=Math.ceil(a.outerHeight(!0)/d.rowHeight);e=Math.min(e,d.rows);if(e===1)c._masonryHorizontalPlaceBrick(a,d.rowXs);else{var f=d.rows+1-e,g=[],h,i;for(i=0;id&&(e.x=e.width,e.y=0),c._pushPosition(a,e.x,e.y),e.width=Math.max(e.x+f,e.width),e.y+=g})},_fitColumnsGetContainerSize:function(){return{width:this.fitColumns.width}},_fitColumnsResizeChanged:function(){return!0},_cellsByColumnReset:function(){this.cellsByColumn={index:0},this._getSegments(),this._getSegments(!0)},_cellsByColumnLayout:function(a){var c=this,d=this.cellsByColumn;a.each(function(){var a=b(this),e=Math.floor(d.index/d.rows),f=d.index%d.rows,g=(e+.5)*d.columnWidth-a.outerWidth(!0)/2,h=(f+.5)*d.rowHeight-a.outerHeight(!0)/2;c._pushPosition(a,g,h),d.index++})},_cellsByColumnGetContainerSize:function(){return{width:Math.ceil(this.$filteredAtoms.length/this.cellsByColumn.rows)*this.cellsByColumn.columnWidth}},_cellsByColumnResizeChanged:function(){return this._checkIfSegmentsChanged(!0)},_straightAcrossReset:function(){this.straightAcross={x:0}},_straightAcrossLayout:function(a){var c=this;a.each(function(a){var d=b(this);c._pushPosition(d,c.straightAcross.x,0),c.straightAcross.x+=d.outerWidth(!0)})},_straightAcrossGetContainerSize:function(){return{width:this.straightAcross.x}},_straightAcrossResizeChanged:function(){return!0}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var x=function(b){a.console&&a.console.error(b)};b.fn.isotope=function(a,c){if(typeof a=="string"){var d=Array.prototype.slice.call(arguments,1);this.each(function(){var c=b.data(this,"isotope");if(!c){x("cannot call methods on isotope prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(c[a])||a.charAt(0)==="_"){x("no such method '"+a+"' for isotope instance");return}c[a].apply(c,d)})}else this.each(function(){var d=b.data(this,"isotope");d?(d.option(a),d._init(c)):b.data(this,"isotope",new b.Isotope(a,this,c))});return this}})(window,jQuery); + +!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,o){var n,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,o);n=void 0===n?l:n}),void 0!==n?n:t}function h(t,e){t.each(function(t,o){var n=a.data(o,i);n?(n.option(e),n._init()):(n=new s(o,e),a.data(o,i,n))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=n.call(arguments,1);return u(this,t,e)}return h(this,t),this},o(a))}function o(t){!t||t&&t.bridget||(t.bridget=i)}var n=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return o(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},o=i[t]=i[t]||[];return o.indexOf(e)==-1&&o.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},o=i[t]=i[t]||{};return o[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var o=i.indexOf(e);return o!=-1&&i.splice(o,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var o=this._onceEvents&&this._onceEvents[t],n=0;n
@@ -632,8 +632,8 @@ Incomming connection 127.0.0.1:54218 aria-hidden="true">×
-
pt3.2: Incomming connection 127.0.0.1:54222
-127.0.0.1:54222 Timeouted
+
pt3.2: Incomming connection 127.0.0.1:44856
+127.0.0.1:44856 Timeouted
@@ -656,14 +656,14 @@ Incomming connection 127.0.0.1:54218 aria-hidden="true">×
-
pt3.3: Incomming connection 127.0.0.1:54224
+                
pt3.3: Incomming connection 127.0.0.1:44862
 Received: EHLO
 Received: AUTH
 User: name@host.com, Password: 10234
 Received: MAIL
 Received: RCPT
 Received: DATA
-('Receiving message from:', ('127.0.0.1', 54224))
+('Receiving message from:', ('127.0.0.1', 44862))
 ('Message addressed from:', '<name@host.com> size=30379')
 ('Message addressed to  :', ['a1@b.com'])
 ('Message length        :', 30378)
@@ -690,17 +690,17 @@ Received: QUIT
aria-hidden="true">×
-
pt3.4: Incomming connection 127.0.0.1:54226
+                
pt3.4: Incomming connection 127.0.0.1:44864
 Received: EHLO
 Received: AUTH
 User: name@host.com, Password: 10234
 Received: MAIL
 Received: RCPT
 Received: DATA
-('Receiving message from:', ('127.0.0.1', 54226))
-('Message addressed from:', '<name@host.com> size=507')
+('Receiving message from:', ('127.0.0.1', 44864))
+('Message addressed from:', '<name@host.com> size=508')
 ('Message addressed to  :', ['a1@b.com'])
-('Message length        :', 506)
+('Message length        :', 507)
 Received: QUIT
@@ -735,8 +735,8 @@ Received: QUIT aria-hidden="true">×
-
pt4.1: Incomming connection 127.0.0.1:54318
-127.0.0.1:54318 Timeouted
+
pt4.1: Incomming connection 127.0.0.1:44964
+127.0.0.1:44964 Timeouted
@@ -759,8 +759,8 @@ Received: QUIT aria-hidden="true">×
-
pt4.2: Incomming connection 127.0.0.1:54324
-127.0.0.1:54324 Timeouted
+
pt4.2: Incomming connection 127.0.0.1:44970
+127.0.0.1:44970 Timeouted
@@ -783,17 +783,17 @@ Received: QUIT aria-hidden="true">×
-
pt4.3: Incomming connection 127.0.0.1:54326
+                
pt4.3: Incomming connection 127.0.0.1:44972
 Received: EHLO
 Received: AUTH
 User: name@host.com, Password: 10234
 Received: MAIL
 Received: RCPT
 Received: DATA
-('Receiving message from:', ('127.0.0.1', 54326))
-('Message addressed from:', '<name@host.com> size=30788')
+('Receiving message from:', ('127.0.0.1', 44972))
+('Message addressed from:', '<name@host.com> size=30787')
 ('Message addressed to  :', ['a1@b.com'])
-('Message length        :', 30378)
+('Message length        :', 30377)
 Received: QUIT
@@ -905,12 +905,12 @@ AssertionError: logfile config value is not empty after reseting to default - + test_logging.test_logging_Python36 5 - 2 - 1 + 3 1 + 0 1 Detail @@ -951,54 +951,32 @@ AssertionError: logfile config value is not empty after reseting to default - +
test_logfile_change
- -
- FAIL -
- - - - + PASS - +
test_logfile_recover
- ERROR + FAIL
-