diff --git a/cps/book_formats.py b/cps/book_formats.py index 5acbc4c4..5cff0232 100644 --- a/cps/book_formats.py +++ b/cps/book_formats.py @@ -49,8 +49,8 @@ def process(tmp_file_path, original_file_name, original_file_extension): meta = epub.get_epub_info(tmp_file_path, original_file_name, original_file_extension) if ".FB2" == original_file_extension.upper() and use_fb2_meta is True: meta = fb2.get_fb2_info(tmp_file_path, original_file_extension) - except Exception as e: - logger.warning('cannot parse metadata, using default: %s', e) + except Exception as ex: + logger.warning('cannot parse metadata, using default: %s', ex) if meta and meta.title.strip() and meta.author.strip(): return meta @@ -111,6 +111,7 @@ def pdf_preview(tmp_file_path, tmp_dir): img.save(filename=os.path.join(tmp_dir, cover_file_name)) return cover_file_name + def get_versions(): if not use_generic_pdf_cover: IVersion=ImageVersion.MAGICK_VERSION @@ -120,4 +121,4 @@ def get_versions(): PVersion=PyPdfVersion else: PVersion=_(u'not installed') - return {'ImageVersion':IVersion,'PyPdfVersion':PVersion} + return {'ImageVersion': IVersion, 'PyPdfVersion': PVersion} diff --git a/cps/db.py b/cps/db.py index 7428eba1..1c274baa 100755 --- a/cps/db.py +++ b/cps/db.py @@ -26,12 +26,15 @@ def title_sort(title): title = title.replace(prep, '') + ', ' + prep return title.strip() + def lcase(s): return s.lower() + def ucase(s): return s.upper() + Base = declarative_base() books_authors_link = Table('books_authors_link', Base.metadata, @@ -64,6 +67,7 @@ books_publishers_link = Table('books_publishers_link', Base.metadata, Column('publisher', Integer, ForeignKey('publishers.id'), primary_key=True) ) + class Identifiers(Base): __tablename__ = 'identifiers' @@ -197,6 +201,7 @@ class Languages(Base): def __repr__(self): return u"".format(self.lang_code) + class Publishers(Base): __tablename__ = 'publishers' @@ -204,7 +209,7 @@ class Publishers(Base): name = Column(String) sort = Column(String) - def __init__(self, name,sort): + def __init__(self, name, sort): self.name = name self.sort = sort @@ -212,7 +217,6 @@ class Publishers(Base): return u"".format(self.name, self.sort) - class Data(Base): __tablename__ = 'data' @@ -260,7 +264,7 @@ class Books(Base): identifiers = relationship('Identifiers', backref='books') def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, - authors, tags, languages = None): + authors, tags, languages=None): self.title = title self.sort = sort self.author_sort = author_sort @@ -300,7 +304,7 @@ def setup_db(): global session global cc_classes - if config.config_calibre_dir is None or config.config_calibre_dir == u'': + if config.config_calibre_dir is None or config.config_calibre_dir == u'': content = ub.session.query(ub.Settings).first() content.config_calibre_dir = None content.db_configured = False @@ -309,7 +313,7 @@ def setup_db(): return False dbpath = os.path.join(config.config_calibre_dir, "metadata.db") - engine = create_engine('sqlite:///'+ dbpath, echo=False, isolation_level="SERIALIZABLE") + engine = create_engine('sqlite:///' + dbpath, echo=False, isolation_level="SERIALIZABLE") try: conn = engine.connect() except Exception: diff --git a/cps/epub.py b/cps/epub.py index dd9ad28b..10665576 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -12,7 +12,7 @@ def extractCover(zipFile, coverFile, coverpath, tmp_file_name): if coverFile is None: return None else: - zipCoverPath = os.path.join(coverpath , coverFile).replace('\\','/') + zipCoverPath = os.path.join(coverpath, coverFile).replace('\\', '/') cf = zipFile.read(zipCoverPath) prefix = os.path.splitext(tmp_file_name)[0] tmp_cover_name = prefix + '.' + os.path.basename(zipCoverPath) @@ -93,7 +93,7 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='"+meta_cover[0]+"']/@href", namespaces=ns) if len(coversection) > 0: filetype = coversection[0].rsplit('.', 1)[-1] - if filetype == "xhtml" or filetype == "html": #if cover is (x)html format + if filetype == "xhtml" or filetype == "html": # if cover is (x)html format markup = epubZip.read(os.path.join(coverpath, coversection[0])) markupTree = etree.fromstring(markup) # no matter xhtml or html with no namespace diff --git a/cps/fb2.py b/cps/fb2.py index 65d44848..262a084f 100644 --- a/cps/fb2.py +++ b/cps/fb2.py @@ -3,10 +3,7 @@ from lxml import etree import uploader -#try: -# from io import StringIO -#except ImportError: -# import StringIO + def get_fb2_info(tmp_file_path, original_file_extension): diff --git a/cps/helper.py b/cps/helper.py index 2a85f8fc..efb88203 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -45,7 +45,7 @@ import web try: import unidecode use_unidecode = True -except Exception as e: +except ImportError: use_unidecode = False # Global variables @@ -55,6 +55,7 @@ updater_thread = None RET_SUCCESS = 1 RET_FAIL = 0 + def update_download(book_id, user_id): check = ub.session.query(ub.Downloads).filter(ub.Downloads.user_id == user_id).filter(ub.Downloads.book_id == book_id).first() @@ -101,7 +102,7 @@ def make_mobi(book_id, calibrepath): if nextline != "\r\n": # Format of error message (kindlegen translates its output texts): # Error(prcgen):E23006: Language not recognized in metadata.The dc:Language field is mandatory.Aborting. - conv_error=re.search(".*\(.*\):(E\d+):\s(.*)",nextline) + conv_error = re.search(".*\(.*\):(E\d+):\s(.*)", nextline) # If error occoures, log in every case if conv_error: error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s", @@ -123,7 +124,7 @@ def make_mobi(book_id, calibrepath): else: app.logger.info("make_mobi: kindlegen failed with error while converting book") if not error_message: - error_message='kindlegen failed, no excecution permissions' + error_message = 'kindlegen failed, no excecution permissions' return error_message, RET_FAIL else: error_message = "make_mobi: epub not found: %s.epub" % file_path @@ -182,9 +183,9 @@ def send_raw_email(kindle_mail, msg): smtplib.stderr = org_stderr - except (socket.error, smtplib.SMTPRecipientsRefused, smtplib.SMTPException) as e: + except (socket.error, smtplib.SMTPRecipientsRefused, smtplib.SMTPException) as ex: app.logger.error(traceback.print_exc()) - return _("Failed to send mail: %s" % str(e)) + return _("Failed to send mail: %s" % str(ex)) return None @@ -230,8 +231,8 @@ def send_mail(book_id, kindle_mail, calibrepath): if resultCode == RET_SUCCESS: msg.attach(get_attachment(data)) else: - app.logger.error = (data) - return data #_("Could not convert epub to mobi") + app.logger.error = data + return data # _("Could not convert epub to mobi") elif 'pdf' in formats: msg.attach(get_attachment(formats['pdf'])) else: @@ -255,7 +256,7 @@ def get_attachment(file_path): return attachment except IOError: traceback.print_exc() - app.logger.error = (u'The requested file could not be read. Maybe wrong permissions?') + app.logger.error = u'The requested file could not be read. Maybe wrong permissions?' return None @@ -268,18 +269,18 @@ def get_valid_filename(value, replace_whitespace=True): value = value[:-1]+u'_' value = value.replace("/", "_").replace(":", "_").strip('\0') if use_unidecode: - value=(unidecode.unidecode(value)).strip() + value = (unidecode.unidecode(value)).strip() else: - value=value.replace(u'§',u'SS') - value=value.replace(u'ß',u'ss') + value = value.replace(u'§', u'SS') + value = value.replace(u'ß', u'ss') value = unicodedata.normalize('NFKD', value) re_slugify = re.compile('[\W\s-]', re.UNICODE) - if isinstance(value, str): #Python3 str, Python2 unicode + if isinstance(value, str): # Python3 str, Python2 unicode value = re_slugify.sub('', value).strip() else: value = unicode(re_slugify.sub('', value).strip()) if replace_whitespace: - #*+:\"/<>? are replaced by _ + # *+:\"/<>? are replaced by _ value = re.sub(r'[\*\+:\\\"/<>\?]+', u'_', value, flags=re.U) # pipe has to be replaced with comma value = re.sub(r'[\|]+', u',', value, flags=re.U) @@ -289,48 +290,66 @@ def get_valid_filename(value, replace_whitespace=True): return value + def get_sorted_author(value): - regexes = ["^(JR|SR)\.?$","^I{1,3}\.?$","^IV\.?$"] + regexes = ["^(JR|SR)\.?$", "^I{1,3}\.?$", "^IV\.?$"] combined = "(" + ")|(".join(regexes) + ")" - value = value.split(" ") - if re.match(combined, value[-1].upper()): - value2 = value[-2] + ", " + " ".join(value[:-2]) + " " + value[-1] - else: - value2 = value[-1] + ", " + " ".join(value[:-1]) + try: + value = value.split(" ") + if re.match(combined, value[-1].upper()): + value2 = value[-2] + ", " + " ".join(value[:-2]) + " " + value[-1] + else: + value2 = value[-1] + ", " + " ".join(value[:-1]) + except Exception: + logging.getLogger('cps.web').error("Sorting author " + str(value) + "failed") + value2 = value return value2 + def delete_book(book, calibrepath): - path = os.path.join(calibrepath, book.path)#.replace('/',os.path.sep)).replace('\\',os.path.sep) + path = os.path.join(calibrepath, book.path) # .replace('/',os.path.sep)).replace('\\',os.path.sep) shutil.rmtree(path, ignore_errors=True) + +# ToDo: Implement delete book on gdrive def delete_book_gdrive(book): pass -def update_dir_stucture(book_id, calibrepath): - db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort) - book = db.session.query(db.Books).filter(db.Books.id == book_id).first() - path = os.path.join(calibrepath, book.path) - authordir = book.path.split('/')[0] - new_authordir = get_valid_filename(book.authors[0].name) - titledir = book.path.split('/')[1] - new_titledir = get_valid_filename(book.title) + " (" + str(book_id) + ")" +def update_dir_stucture(book_id, calibrepath): + localbook = db.session.query(db.Books).filter(db.Books.id == book_id).first() + path = os.path.join(calibrepath, localbook.path) + + authordir = localbook.path.split('/')[0] + new_authordir = get_valid_filename(localbook.authors[0].name) + + titledir = localbook.path.split('/')[1] + new_titledir = get_valid_filename(localbook.title) + " (" + str(book_id) + ")" if titledir != new_titledir: - new_title_path = os.path.join(os.path.dirname(path), new_titledir) - os.rename(path, new_title_path) - path = new_title_path - book.path = book.path.split('/')[0] + '/' + new_titledir - + try: + new_title_path = os.path.join(os.path.dirname(path), new_titledir) + os.renames(path, new_title_path) + path = new_title_path + localbook.path = localbook.path.split('/')[0] + '/' + new_titledir + except OSError as ex: + logging.getLogger('cps.web').error("Rename title from: " + path + " to " + new_title_path) + logging.getLogger('cps.web').error(ex, exc_info=True) + return _('Rename title from: "%s" to "%s" failed with error: %s' % (path, new_title_path, str(ex))) if authordir != new_authordir: - new_author_path = os.path.join(os.path.join(calibrepath, new_authordir), os.path.basename(path)) - os.renames(path, new_author_path) - book.path = new_authordir + '/' + book.path.split('/')[1] - db.session.commit() + try: + new_author_path = os.path.join(os.path.join(calibrepath, new_authordir), os.path.basename(path)) + os.renames(path, new_author_path) + localbook.path = new_authordir + '/' + localbook.path.split('/')[1] + except OSError as ex: + logging.getLogger('cps.web').error("Rename author from: " + path + " to " + new_author_path) + logging.getLogger('cps.web').error(ex, exc_info=True) + return _('Rename author from: "%s" to "%s" failed with error: %s' % (path, new_title_path, str(ex))) + return False def update_dir_structure_gdrive(book_id): - db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort) + error = False book = db.session.query(db.Books).filter(db.Books.id == book_id).first() authordir = book.path.split('/')[0] @@ -340,24 +359,24 @@ def update_dir_structure_gdrive(book_id): if titledir != new_titledir: print (titledir) - gFile=gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive,os.path.dirname(book.path),titledir) - gFile['title']= new_titledir + gFile = gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive, os.path.dirname(book.path), titledir) + gFile['title'] = new_titledir gFile.Upload() book.path = book.path.split('/')[0] + '/' + new_titledir if authordir != new_authordir: - gFile=gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive,None,authordir) + gFile = gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive, None, authordir) gFile['title'] = new_authordir gFile.Upload() book.path = new_authordir + '/' + book.path.split('/')[1] + return error - db.session.commit() class Updater(threading.Thread): def __init__(self): threading.Thread.__init__(self) - self.status=0 + self.status = 0 def run(self): global global_task @@ -370,7 +389,7 @@ class Updater(threading.Thread): 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.update_source(os.path.join(tmp_dir, os.path.splitext(fname)[0]), ub.config.get_main_dir) self.status = 5 global_task = 0 db.session.close() @@ -391,8 +410,8 @@ class Updater(threading.Thread): return self.status @classmethod - def file_to_list(self, file): - return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')] + 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): @@ -401,8 +420,8 @@ class Updater(threading.Thread): @classmethod def reduce_dirs(self, delete_files, new_list): new_delete = [] - for file in delete_files: - parts = file.split(os.sep) + for filename in delete_files: + parts = filename.split(os.sep) sub = '' for part in parts: sub = os.path.join(sub, part) @@ -460,8 +479,8 @@ class Updater(threading.Thread): if change_permissions: try: os.chown(dst_file, permission.st_uid, permission.st_gid) - except Exception as e: - e = sys.exc_info() + except Exception: + # 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: ' @@ -508,4 +527,3 @@ class Updater(threading.Thread): except Exception: logging.getLogger('cps.web').debug("Could not remove:" + item_path) shutil.rmtree(source, ignore_errors=True) - diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 9474ea9a..d19f5e44 100644 Binary files a/cps/translations/de/LC_MESSAGES/messages.mo and b/cps/translations/de/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index 2213e2ba..1aaf8250 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2016-07-12 19:54+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" @@ -32,184 +32,194 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "Nicht installiert" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "Kindlegen Programm %(kindlepath)s nicht gefunden" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "epub Format für Bücher-ID %(book)d nicht gefunden" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "Kindlegen Aufruf fehlgeschlagen, keine Ausführungsberechtigung" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen " -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "E-Mail: %s konnte nicht gesendet werden" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Calibre-web Test E-Mail" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Die E-Mail wurde via calibre-web versendet" -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "An Kindle senden" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "" "Konnte keine Formate finden welche für das versenden per E-Mail geeignet " "sind" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "Umbenennen des Titelpfades \"%s\" nach \"%s\" schlug fehl: %s" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "Umbenennen des Authorpfades \"%s\" nach \"%s\" schlug fehl: %s" + #: cps/ub.py:577 msgid "Guest" msgstr "Gast" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Frage Update Paket an" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Lade Update Paket herunter" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Entpacke Update Paket" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Ersetze Dateien" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Schließe Datenbankverbindungen" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Stoppe Server" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "Kürzlich hinzugefügte Bücher" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "Neueste Bücher" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "Älteste Bücher" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "Bücher (A-Z)" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "Bücher (Z-A)" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Beliebte Bücher (die meisten Downloads)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Best bewertete Bücher" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Zufällige Bücher" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Autorenliste" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Liste Serien" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Verfügbare Sprachen" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Sprache: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Kategorieliste" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Kategorie: %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "Ausführungsberechtigung nicht vorhanden" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Statistiken" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Server neu gestartet,bitte Seite neu laden" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Server wird runtergefahren, bitte Fenster schließen" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Update durchgeführt" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "Suche" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Gelesene Bücher" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Ungelesene Bücher" @@ -217,7 +227,7 @@ msgstr "Ungelesene Bücher" msgid "Read a Book" msgstr "Lese ein Buch" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "Bitte alle Felder ausfüllen!" @@ -272,7 +282,7 @@ msgstr "Buch erfolgreich versandt an %(kindlemail)s" msgid "There was an error sending this book: %(res)s" msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s" -#: cps/web.py:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..." @@ -281,181 +291,181 @@ msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..." msgid "Book has been added to shelf: %(sname)s" msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt" -#: cps/web.py:2164 +#: cps/web.py:2166 #, 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:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'" -#: cps/web.py:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Bücherregal %(title)s erzeugt" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Es trat ein Fehler auf" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "Bücherregal erzeugen" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Bücherregal %(title)s verändert" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Bücherregal editieren" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Bücherregal %(name)s erfolgreich gelöscht" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Bücherregal: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 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:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Reihenfolge in Bücherregal '%(name)s' verändern" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Es existiert ein Benutzerkonto für diese E-Mailadresse" -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's Profil" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Profil aktualisiert" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Admin Seite" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Calibre-web Konfiguration wurde aktualisiert" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Basis Konfiguration" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren" -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Neuen Benutzer hinzufügen" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Benutzer '%(user)s' angelegt" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "" "Es existiert ein Benutzerkonto für diese Emailadresse oder den " "Benutzernamen." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "E-Mail Einstellungen aktualisiert" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Fehler beim versenden der Test E-Mail: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "E-Mail Einstellungen wurde aktualisiert" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "E-Mail Einstellungen editieren" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Benutzer '%(nick)s' gelöscht" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Benutzer '%(nick)s' aktualisiert" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Es ist ein unbekanter Fehler aufgetreten" -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Benutzer %(nick)s bearbeiten" -#: cps/web.py:2802 +#: cps/web.py:2803 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:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "Metadaten editieren" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Die Dateiendung \"%s\" kann nicht auf diesen Server hochgeladen werden" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." -msgstr "" +msgstr "Fehler beim speichern der Datei %s." -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "Unbekannt" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Datei müssen eine Erweiterung haben, um hochgeladen zu werden" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)" @@ -660,7 +670,7 @@ msgstr "Beschreibung" msgid "Tags" msgstr "Tags" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Serien" @@ -695,7 +705,7 @@ msgstr "Nein" #: cps/templates/book_edit.html:121 msgid "Upload format" -msgstr "" +msgstr "Format hochladen" #: cps/templates/book_edit.html:130 msgid "view book after edit" @@ -747,7 +757,7 @@ msgstr "Klicke auf das Bild um die Metadaten zu übertragen" msgid "Loading..." msgstr "Lade..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Schließen" @@ -956,7 +966,7 @@ msgstr "Einstellungen speichern" msgid "Save settings and send Test E-Mail" msgstr "Einstellungen speichern und Test E-Mail versenden" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Nächste" @@ -1001,7 +1011,7 @@ msgstr "Die neuesten Bücher" msgid "Show Random Books" msgstr "Zeige zufällige Bücher" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Autoren" @@ -1066,39 +1076,39 @@ msgstr "Aufsteigend" msgid "Descending" msgstr "Absteigend" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Entdecke" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Kategorien" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Sprachen" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Öffentiche Bücherregale" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Deine Bücherregale" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Bücherregal erzeugen" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "Über" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "Voerheriger" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "Buchdetails" @@ -1274,11 +1284,11 @@ msgstr "Zeige Zufällige Bücher" #: cps/templates/user_edit.html:50 msgid "Show recent books" -msgstr "" +msgstr " kürzlich hinzugefügte Bücher" #: cps/templates/user_edit.html:54 msgid "Show sorted books" -msgstr "" +msgstr "Zeige Bücher sortiert" #: cps/templates/user_edit.html:58 msgid "Show hot books" diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index 8a23731d..c9dbaa11 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Juan F. Villa \n" "Language: es\n" @@ -25,180 +25,190 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "No instalado" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Fallo al enviar el correo : %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Prueba de Correo Calibre-web" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Este mensaje ha sido enviado via Calibre Web." -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Enviar a Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "Formato no compatible para enviar por correo electronico" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "Invitado" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Solicitando paquete de actualización" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Descargando paquete de actualización" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Descomprimiendo paquete de actualización" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Ficheros sustituidos" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Los conexiones de base datos están cerradas" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "El servidor está detenido" -#: cps/web.py:970 +#: cps/web.py:973 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:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Libros populares (los mas descargados)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Libros mejor valorados" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Libros al azar" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Lista de autores" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Lista de series" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Lenguajes disponibles" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Lenguaje: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Lista de categorias" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Categoría : %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Estadisticas" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Servidor reiniciado. Por favor, recargue la página" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Actualización realizada" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "búsqueda" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Libros leídos" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Libros no leídos" @@ -206,7 +216,7 @@ msgstr "Libros no leídos" msgid "Read a Book" msgstr "Leer un libro" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "¡Por favor completar todos los campos!" @@ -261,7 +271,7 @@ msgstr "Envio de Libro a %(kindlemail)s correctamente" msgid "There was an error sending this book: %(res)s" msgstr "Ha sucedido un error en el envio del Libro: %(res)s" -#: cps/web.py:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Configurar primero la dirección de correo Kindle por favor..." @@ -270,179 +280,179 @@ msgstr "Configurar primero la dirección de correo Kindle por favor..." msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue removido del estante: %(sname)s" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, 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:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Ha sucedido un error" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "crear un estante" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Estante %(title)s cambiado" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Editar un estante" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Cambiar orden del estante: '%(name)s'" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Existe una cuenta vinculada a esta dirección de correo." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Página de administración" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Configuración de Calibre-web actualizada" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Configuración básica" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "Localicación de la BD inválida. Por favor, introduzca la ruta correcta." -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "" "Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre" " de usuario." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Parámetros de correo actualizados" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Error al realizar envio de prueba a E-Mail: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Ajustes de correo electrónico actualizados" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Editar parametros de correo" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' actualizado" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Error inesperado." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "editar metainformación" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión \"%s\" a este servidor" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fallo al crear la ruta %s (permiso negado)" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fallo al almacenar el archivo %s (permiso negado)" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fallo al borrar el archivo %s (permiso negado)" @@ -647,7 +657,7 @@ msgstr "Descripcion" msgid "Tags" msgstr "Etiqueta" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Series" @@ -734,7 +744,7 @@ msgstr "Haga clic en la portada para cargar la metainformación en el formulario msgid "Loading..." msgstr "Cargando..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Cerrar" @@ -943,7 +953,7 @@ msgstr "Guardar cambios" msgid "Save settings and send Test E-Mail" msgstr "Guardar cambios y enviar un correo de prueba" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Siguiente" @@ -988,7 +998,7 @@ msgstr "Libros recientes" msgid "Show Random Books" msgstr "Mostrar libros al azar" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Autores" @@ -1053,39 +1063,39 @@ msgstr "" msgid "Descending" msgstr "" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Descubrir" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Categoria" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Lenguaje" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Estantes públicos" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Sus estantes" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Crear un estante" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "Acerca de" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "" diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 01a46efb..28fc847b 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-10-26 22:42+0200\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -31,182 +31,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "non installé" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Impossible d'envoyer le courriel : %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Ce message a été envoyé depuis calibre web." -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Envoyer vers Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "Impossible de trouver un format adapté à envoyer par courriel" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "Invité" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Téléchargement la mise à jour" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Décompression de la mise à jour" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Fichiers remplacés" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Connexion à la base de donnée fermée" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Serveur arrêté" -#: cps/web.py:970 +#: cps/web.py:973 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:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "Ajouts récents" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "Livres récents" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "Anciens livres" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "Livres (A-Z)" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "Livres (Z-A)" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Livres les mieux notés" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Liste des auteurs" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Serveur redémarré, merci de rafraîchir la page" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Mise à jour effectuée" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "recherche" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Livres lus" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Livres non-lus" @@ -214,7 +224,7 @@ msgstr "Livres non-lus" msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" @@ -269,7 +279,7 @@ msgstr "Livres envoyés à %(kindlemail)s avec succès" 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:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Veuillez configurer votre adresse kindle d'abord..." @@ -278,179 +288,179 @@ msgstr "Veuillez configurer votre adresse kindle d'abord..." msgid "Book has been added to shelf: %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, 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:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, 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:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "créer une étagère" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Modifier une étagère" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "l’étagère %(name)s a été supprimé avec succès" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Un compte avec cette adresse de courriel existe déjà." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Page administrateur" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Configuration de Calibre-web mise à jour" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Configuration basique" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "Un compte avec cette adresse de courriel ou ce surnom existe déjà." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Paramètres de courriel mis à jour" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Préférences e-mail mises à jour" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Éditer les paramètres de courriel" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 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:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "modifier les métadonnées" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "inconnu" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Pour être téléverser le fichier doit avoir une extension" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossible de créer le chemin %s (permission refusée)" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossible de supprimer le fichier %s (permission refusée)" @@ -655,7 +665,7 @@ msgstr "Description" msgid "Tags" msgstr "Étiquette" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Séries" @@ -742,7 +752,7 @@ msgstr "" msgid "Loading..." msgstr "Chargement…" -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Fermer" @@ -951,7 +961,7 @@ msgstr "Sauvegarder les réglages" msgid "Save settings and send Test E-Mail" msgstr "Sauvegarder les réglages et tester l’envoi d’e-mail" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Suivant" @@ -998,7 +1008,7 @@ msgstr "Les derniers livres" msgid "Show Random Books" msgstr "Montrer des livres au hasard" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Auteurs" @@ -1063,39 +1073,39 @@ msgstr "Ascendant" msgid "Descending" msgstr "Descendant" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Découvrir" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Catégories" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Langues" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Étagères publiques" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Vos étagères" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Créer une étagère" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "À propos" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "Précédent" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "Détails du livre" diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po index 39e0bbc9..1e2febe8 100644 --- a/cps/translations/it/LC_MESSAGES/messages.po +++ b/cps/translations/it/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Marco Picone \n" "Language: it\n" @@ -25,182 +25,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "non installato" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "Non trovato" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "formato epub non trovato" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "non ci sono permessi" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "errore" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Impossibile inviare email: %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "test email Calibre-web" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "L'email è stata inviata tramite Calibre Web." -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Invia a Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "Impossibile trovare i formati adatti per l'invio tramite email" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "ospite" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Richiesta del pacchetto di aggiornamento" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Scaricare il pacchetto di aggiornamento" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Decomprimere pacchetto di aggiornamento" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "I file vengono sostituiti" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Le connessioni di database sono chiuse" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Il server viene arrestato" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "Aggiornamento completato, prego premere bene e ricaricare pagina" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "Libri aggiunti di recente" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "I più nuovi libri" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "Libri più vecchi" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "Ebook (A-Z)" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "Ebook (Z-A)" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Hot Books (più scaricati)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "I migliori libri valutati" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Libri casuali" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Elenco degli autori" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Lista delle serie" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Serie :" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Lingue disponibili" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Lingue: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Elenco categorie" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Categoria : %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "Mancano autorizzazioni di esecuzione" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Statistica" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Server riavviato, ricarica pagina" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Eseguire l'arresto del server, chiudi la finestra." -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Aggiornamento fatto" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "ricerca" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Leggere libri" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Libri non letti" @@ -208,7 +218,7 @@ msgstr "Libri non letti" msgid "Read a Book" msgstr "Leggere un libro" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "Compila tutti i campi" @@ -263,7 +273,7 @@ msgstr "Libro inviare con successo %(kindlemail)s correttamente" 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:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Si prega di configurare innanzitutto il tuo indirizzo email..." @@ -272,183 +282,183 @@ msgstr "Si prega di configurare innanzitutto il tuo indirizzo email..." msgid "Book has been added to shelf: %(sname)s" msgstr "Il libro è stato aggiunto alla mensola: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Il libro è stato rimosso dalla mensola: %(sname)s" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, 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:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Mensola %(title)s creato" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "c'era un errore" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "creare uno scaffale" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Mensola %(title)s cambiato" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Modifica un ripiano" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "cancellato con successo il ripiano %(name)s" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Mensola: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 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:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Modificare l'ordine della mensola: '%(name)s'" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Trovato un account esistente per questo indirizzo email." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "Profilo di %(name)s" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Profilo aggiornato" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Pagina di amministrazione" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Aggiornamento della configurazione del calibro-web" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Configurazione di base" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "Posizione DB non valida. Inserisci il percorso corretto." -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Aggiungi un nuovo utente" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "utente '%(user)s' creato" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "" "È stato trovato un account collegato a questo indirizzo e-mail o nome " "utente." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Parametri di posta aggiornati" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Successo quando invii il test a %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Impossibile inviare il test a E-Mail: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Impostazioni email aggiornate" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Modificare i parametri della posta" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "utente '%(nick)s' cancellati" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "utente '%(nick)s' aggiornato" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Errore imprevisto." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Modifica utente %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 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:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "modificare la metainformazione" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Non è consentito caricare i file con l'estensione \"%s\" a questo server" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "Sconosciuto" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Il file da caricare deve avere un'estensione" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossibile creare il percorso %s (autorizzazione negata)" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossibile archiviare il file %s (autorizzazione negata)" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossibile eliminare il file %s (autorizzazione negata)" @@ -653,7 +663,7 @@ msgstr "Descrizione" msgid "Tags" msgstr "Tags" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Serie" @@ -740,7 +750,7 @@ msgstr "Fai clic sul coperchio per caricare i metadati nel modulo" msgid "Loading..." msgstr "Caricamento in corso..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Chiuso" @@ -949,7 +959,7 @@ msgstr "Salva le impostazioni" msgid "Save settings and send Test E-Mail" msgstr "Salvare le impostazioni e inviare Test e-mail" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Prossimo" @@ -994,7 +1004,7 @@ msgstr "Gli ultimi Libri" msgid "Show Random Books" msgstr "Mostra libri casuali" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Autori" @@ -1059,39 +1069,39 @@ msgstr "Ascendente" msgid "Descending" msgstr "Discendente" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Per scoprire" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Categoria" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "lingua" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Ripiani pubblici" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "I tuoi scaffali" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Crea una mensola" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "Di" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "Precedente" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "Dettagli ebook" diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 2e29210b..18a36030 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -22,7 +22,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: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-06-21 20:15+0200\n" "Last-Translator: \n" "Language: nl\n" @@ -33,182 +33,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "niet geïnstalleerd" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "kindlegen binary %(kindlepath)s niet gevonden" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "epub type niet gevonden voor boek met id: %(book)d" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "kindlegen gefaald, geen rechten om uit te voeren" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen gefaald met Error %(error)s. Bericht: %(message)s" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Mail sturen gefaald: %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Calibre-web test email" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Deze mail werd verstuurd met calibre web." -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Stuur naar Kindle:" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "Kon geen geschikte formaten vinden om te verzenden per email" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "Gast" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Update pakket wordt aangevraagd" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Update pakket wordt gedownload" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Update pakket wordt uitgepakt" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Bestanden zijn vervangen" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Database verbindingen zijn gesloten" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Server is gestopt" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "Update voltooid, klik op ok en herlaad de pagina" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "Recent toegevoegde boeken" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "Nieuwste boeken" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "Oudste boeken" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "Boeken (A-Z)" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "Boeken (A-Z)" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Populaire boeken (meeste downloads)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Best beoordeelde boeken" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Willekeurige boeken" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Auteur lijst" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Serie lijst" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Beschikbare talen" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Taal: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Categorie lijst" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Categorie: %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "Rechten om uit te voeren ontbreken" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Statistieken" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Server herstart, gelieve de pagina herladen" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Bezig met het stoppen van de server, gelieve venster te sluiten" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Update voltooid" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "zoek" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Gelezen Boeken" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Ongelezen Boeken" @@ -216,7 +226,7 @@ msgstr "Ongelezen Boeken" msgid "Read a Book" msgstr "Lees een boek" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "Gelieve alle velden in te vullen!" @@ -271,7 +281,7 @@ msgstr "Boek met succes verstuurd naar %(kindlemail)s" 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:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Gelieve eerst je kindle email adres te configureren..." @@ -280,179 +290,179 @@ msgstr "Gelieve eerst je kindle email adres te configureren..." msgid "Book has been added to shelf: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boek werd verwijderd van boekenplank: %(sname)s" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, 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:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Boekenplank %(title)s aangemaakt" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Er deed zich een fout voor" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "maak een boekenplank" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Boekenplank %(title)s gewijzigd" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Bewerk een boekenplank" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Boekenplank %(name)s succesvol gewist" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Boekenplank: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 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:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Verander volgorde van Boekenplank: '%(name)s'" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Een bestaand gebruiker gevonden voor dit email adres." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's profiel" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Profiel aangepast" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Administratie pagina" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Calibre-web configuratie aangepast" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Basis configuratie" -#: cps/web.py:2520 +#: cps/web.py:2521 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:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Voeg nieuwe gebruiker toe" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Gebruiker '%(user)s' aangemaakt" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "Een bestaande gebruiker gevonden voor dit emailadres of gebruikersnaam." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Mail instellingen aangepast" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test email met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Er trad een fout op met het versturen van de test email: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Email instellingen aangepast" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Bewerk mail instellingen" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Gebruiker '%(nick)s' verwijderd" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Gebruiker '%(nick)s' aangepast" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Een onbekende fout deed zich voor." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Bewerk gebruiker '%(nick)s'" -#: cps/web.py:2802 +#: cps/web.py:2803 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:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "Bewerk metadata" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Het uploaden van bestandsextensie \"%s\" is niet toegestaan op deze server" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "Bestand opslaan niet gelukt voor %s." -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "onbekend" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Up te loaden bestanden dienen een extensie te hebben" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Het pad %s aanmaken mislukt (Geen toestemming)." -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Bestand %s opslaan mislukt (Geen toestemming)." -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Bestand %s wissen mislukt (Geen toestemming)." @@ -657,7 +667,7 @@ msgstr "Omschrijving" msgid "Tags" msgstr "Tags" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Series" @@ -744,7 +754,7 @@ msgstr "Klik op de omslag om de metatadata in het formulier te laden" msgid "Loading..." msgstr "Aan het laden..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Sluit" @@ -953,7 +963,7 @@ msgstr "Bewaar instelling" msgid "Save settings and send Test E-Mail" msgstr "Bewaar instellingen en stuur test email" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Volgende" @@ -998,7 +1008,7 @@ msgstr "Recentste boeken" msgid "Show Random Books" msgstr "Toon Willekeurige Boeken" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Auteurs" @@ -1063,39 +1073,39 @@ msgstr "Oplopend" msgid "Descending" msgstr "Aflopend" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Ontdek" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Categorieën" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Talen" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Publieke Boekenplanken" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Jou Boekenplanken" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Maak een boekenplank" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "Over" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "Vorige" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "Boek Details" diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index 4e00030b..6adf346c 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -12,7 +12,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: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-04-11 22:51+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -24,182 +24,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "nie zainstalowane" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Nie można wysłać poczty: %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Calibre-web testowy email" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Ten e-mail został wysłany przez Calibre Web." -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Wyślij do Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "" "Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą " "e-mail" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "Gość" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Żądanie o pakiet aktualizacji" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Pobieranie pakietu aktualizacji" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Rozpakowywanie pakietu aktualizacji" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Pliki zostały zastąpione" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Połączenia z bazą danych zostały zakończone" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Serwer jest zatrzymany" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Lista autorów" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 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/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Seria: %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Aktualizacja zakończona" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "szukaj" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Przeczytane książki" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Nieprzeczytane książki" @@ -207,7 +217,7 @@ msgstr "Nieprzeczytane książki" msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" @@ -262,7 +272,7 @@ msgstr "Książka została pomyślnie wysłana do %(kindlemail)s" 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:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." @@ -271,177 +281,177 @@ msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." msgid "Book has been added to shelf: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, 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:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Znaleziono istniejące konto dla tego adresu e-mail." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Konfiguracja Calibre-web została zaktualizowana" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:2520 +#: cps/web.py:2521 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:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "Znaleziono istniejące konto dla tego adresu e-mail lub nazwy użytkownika." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Zaktualizowano ustawienia poczty e-mail" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Wystąpił błąd podczas wysyłania testowej wiadomości e-mail: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Zaktualizowano ustawienia e-mail" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Edytuj ustawienia poczty e-mail" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Plik do przesłania musi mieć rozszerzenie" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." @@ -646,7 +656,7 @@ msgstr "Opis" msgid "Tags" msgstr "Tagi" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Seria" @@ -733,7 +743,7 @@ msgstr "Kliknij okładkę, aby załadować metadane do formularza" msgid "Loading..." msgstr "Ładowanie..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Zamknij" @@ -943,7 +953,7 @@ msgstr "Zapisz ustawienia" msgid "Save settings and send Test E-Mail" msgstr "Zapisz ustawienia i wyślij testową wiadomość e-mail" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Następne" @@ -988,7 +998,7 @@ msgstr "Ostatnie książki" msgid "Show Random Books" msgstr "Pokazuj losowe książki" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Autorzy" @@ -1053,39 +1063,39 @@ msgstr "" msgid "Descending" msgstr "" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Odkrywaj" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Kategorie" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Języki" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Publiczne półki" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Twoje półki" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Utwórz półkę" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "O programie" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "" diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index be51eb93..cb6d86b8 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: Pavel Korovin \n" "Language: ru\n" @@ -26,180 +26,190 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "Отсутствует" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "Ошибка отправки письма: %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Тестовое письмо от Calibre-web" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "Письмо было отправлено через calibre web" -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "Отправить на Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "Невозоможно найти формат, подходящий для отправки по email" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "Гость" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "Проверка обновлений" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "Загрузка обновлений" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "Распаковка обновлений" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "Файлы заменены" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "Соеднинения с базой данных закрыты" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "Сервер остановлен" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "Популярные книги (часто загружаемые)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "Книги с наивысшим рейтингом" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "Случайный выбор" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "Авторы" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Невозможно открыть книгу. Файл не существует или недоступен." -#: cps/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "Серии" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "Серии: %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "Языки" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "Язык: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "Категории" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "Категория: %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "Статистика" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "Производится остановка сервера, пожалуйста, закройте окно" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "Обновление закончено" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "поиск" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "Прочитанные" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "Непрочитанные" @@ -207,7 +217,7 @@ msgstr "Непрочитанные" msgid "Read a Book" msgstr "Читать книгу" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "Пожалуйста, заполните все поля!" @@ -262,7 +272,7 @@ msgstr "Книга успешно отправлена на %(kindlemail)s" msgid "There was an error sending this book: %(res)s" msgstr "Ошибка при отправке книги: %(res)s" -#: cps/web.py:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "Пожалуйста, сначала укажите ваш kindle email..." @@ -271,177 +281,177 @@ msgstr "Пожалуйста, сначала укажите ваш kindle email. msgid "Book has been added to shelf: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Книга удалена с книжной полки: %(sname)s" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Книжкная полка с названием '%(title)s' уже существует." -#: cps/web.py:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "Создана книжная полка %(title)s" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "Произошла ошибка" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "создать книжную полку" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "Книжная полка %(title)s изменена" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "Изменить книжную полку" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Книжная полка %(name)s удалена" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "Книжная полка: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Изменить расположение книжной полки '%(name)s'" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "Найдена учётная запись для для данного адреса email." -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "Профиль %(name)s" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "Профиль обновлён" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "Администрирование" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Конфигурация Calibre-web обновлена" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "Настройки сервера" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД" -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "Добавить пользователя" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "Пользователь '%(user)s' добавлен" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "Для указанного адреса или имени найдена существующая учётная запись." -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "Настройки почты изменены" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Ошибка отправки тестового сообщения: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "Обновлены настройки e-mail" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "Изменить почтовые настройки" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "Пользователь '%(nick)s' удалён" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "Пользователь '%(nick)s' обновлён" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "Произошла неизвестная ошибка." -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "Изменить пользователя %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "изменить метаданные" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Запрещена загрузка файлов с расширением \"%s\"" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "неизвестно" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "Загружаемый файл должен иметь расширение" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Ошибка при создании пути %s (доступ запрещён)" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Ошибка записи файоа %s (доступ запрещён)" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Ошибка удаления файла %s (доступ запрещён)" @@ -646,7 +656,7 @@ msgstr "Описание" msgid "Tags" msgstr "Теги" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Серии" @@ -733,7 +743,7 @@ msgstr "Нажмите на обложку, чтобы получить мета msgid "Loading..." msgstr "Загрузка..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "Закрыть" @@ -940,7 +950,7 @@ msgstr "Сохранить настройки" msgid "Save settings and send Test E-Mail" msgstr "Сохранить настройки и отправить тестовое письмо" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "Дальше" @@ -985,7 +995,7 @@ msgstr "Последние поступления" msgid "Show Random Books" msgstr "Показывать случайные книги" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "Авторы" @@ -1050,39 +1060,39 @@ msgstr "" msgid "Descending" msgstr "" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "Обзор" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "Категории" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "Языки" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "Общие книжные полки" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "Ваши книжные полки" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "Создать книжную полку" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "О программе" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index a5b1cded..190ef138 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -26,180 +26,190 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "未安装" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "找不到kindlegen二进制 %(kindlepath)s" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "没有找到书籍ID %(book)d 的epub格式" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "kindlegen失败,没有可执行权限" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "发送邮件失败: %s" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "Calibre-web 测试邮件" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "此邮件由calibre web发送" -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "发送到Kindle" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "无法找到适合邮件发送的格式" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "游客" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "正在请求更新包" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "正在下载更新包" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "正在解压更新包" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "文件已替换" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "数据库连接已关闭" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "服务器已停止" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "更新完成,请按确定并刷新页面" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "最近添加的书籍" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "最新书籍" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "最旧书籍" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "书籍 (A-Z)" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "书籍 (Z-A)" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "最高评分书籍" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "作者列表" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "分类列表" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "可执行权限缺失" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "统计" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "服务器已重启,请刷新页面" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "更新完成" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "搜索" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "已读书籍" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "未读书籍" @@ -207,7 +217,7 @@ msgstr "未读书籍" msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "请填写所有字段" @@ -262,7 +272,7 @@ msgstr "此书已被成功发给 %(kindlemail)s" msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "请先配置您的kindle电子邮箱地址..." @@ -271,177 +281,177 @@ msgstr "请先配置您的kindle电子邮箱地址..." msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "打开书架出错。书架不存在或不可访问" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "找到已使用此邮箱的账号。" -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "管理页" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "Calibre-web配置已更新" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "已存在使用此邮箱或昵称的账号。" -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "邮箱设置已更新" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "E-Mail 设置已更新" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "编辑邮箱设置" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:2802 +#: cps/web.py:2803 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "打开电子书出错。文件不存在或不可访问" -#: cps/web.py:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "编辑元数据" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "未知" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须有一个后缀" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "创建路径 %s 失败(权限拒绝)。" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "存储文件 %s 失败(权限拒绝)。" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "删除文件 %s 失败(权限拒绝)。" @@ -646,7 +656,7 @@ msgstr "简介" msgid "Tags" msgstr "标签" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "丛书" @@ -733,7 +743,7 @@ msgstr "点击封面加载元数据到表单" msgid "Loading..." msgstr "加载中..." -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "关闭" @@ -940,7 +950,7 @@ msgstr "保存设置" msgid "Save settings and send Test E-Mail" msgstr "保存设置并发送测试邮件" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "下一个" @@ -985,7 +995,7 @@ msgstr "最新书籍" msgid "Show Random Books" msgstr "显示随机书籍" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "作者" @@ -1050,39 +1060,39 @@ msgstr "升序" msgid "Descending" msgstr "降序" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "发现" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "分类" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "语言" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "公开书架" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "您的书架" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "创建书架" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "关于" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr "" diff --git a/cps/ub.py b/cps/ub.py index 7b1f92ba..5f4d5df0 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -47,12 +47,9 @@ DEFAULT_PASS = "admin123" DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083)) - DEVELOPMENT = False - - class UserBase: @property def is_authenticated(self): @@ -203,6 +200,7 @@ class Anonymous(AnonymousUserMixin, UserBase): def is_authenticated(self): return False + # Baseclass representing Shelfs in calibre-web inapp.db class Shelf(Base): __tablename__ = 'shelf' @@ -290,7 +288,7 @@ class Settings(Base): config_google_drive_folder = Column(String) config_google_drive_calibre_url_base = Column(String) config_google_drive_watch_changes_response = Column(String) - config_columns_to_ignore = Column(String) + #config_columns_to_ignore = Column(String) config_remote_login = Column(Boolean) config_use_goodreads = Column(Boolean) config_goodreads_api_key = Column(String) @@ -403,22 +401,22 @@ class Config: (self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS)) def mature_content_tags(self): - if (sys.version_info > (3, 0)): #Python3 str, Python2 unicode + if sys.version_info > (3, 0): # Python3 str, Python2 unicode lstrip = str.lstrip else: lstrip = unicode.lstrip return list(map(lstrip, self.config_mature_content_tags.split(","))) def get_Log_Level(self): - ret_value="" + ret_value = "" if self.config_log_level == logging.INFO: - ret_value='INFO' + ret_value = 'INFO' elif self.config_log_level == logging.DEBUG: - ret_value='DEBUG' + ret_value = 'DEBUG' elif self.config_log_level == logging.WARNING: - ret_value='WARNING' + ret_value = 'WARNING' elif self.config_log_level == logging.ERROR: - ret_value='ERROR' + ret_value = 'ERROR' return ret_value @@ -495,7 +493,7 @@ def migrate_Database(): conn = engine.connect() conn.execute("ALTER TABLE user ADD column `sidebar_view` Integer DEFAULT 1") session.commit() - create=True + create = True try: if create: conn = engine.connect() @@ -535,11 +533,13 @@ def migrate_Database(): conn = engine.connect() conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''") + def clean_database(): # Remove expired remote login tokens now = datetime.datetime.now() session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete() + def create_default_config(): settings = Settings() settings.mail_server = "mail.example.com" diff --git a/cps/uploader.py b/cps/uploader.py index 2772e033..40741bfd 100644 --- a/cps/uploader.py +++ b/cps/uploader.py @@ -14,17 +14,17 @@ BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, d """ -def upload(file): +def upload(uploadfile): tmp_dir = os.path.join(gettempdir(), 'calibre_web') if not os.path.isdir(tmp_dir): os.mkdir(tmp_dir) - filename = file.filename + filename = uploadfile.filename filename_root, file_extension = os.path.splitext(filename) md5 = hashlib.md5() md5.update(filename.encode('utf-8')) tmp_file_path = os.path.join(tmp_dir, md5.hexdigest()) - file.save(tmp_file_path) + uploadfile.save(tmp_file_path) meta = book_formats.process(tmp_file_path, filename_root, file_extension) return meta diff --git a/cps/web.py b/cps/web.py index 61122591..06c4a18a 100755 --- a/cps/web.py +++ b/cps/web.py @@ -103,6 +103,7 @@ global_task = None ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2']) + def md5(fname): hash_md5 = hashlib.md5() with open(fname, "rb") as f: @@ -110,6 +111,7 @@ def md5(fname): hash_md5.update(chunk) return hash_md5.hexdigest() + class Singleton: """ A non-thread-safe helper class to ease implementing singletons. @@ -437,7 +439,7 @@ def formatdate(val): def format_date_input(val): conformed_timestamp = re.sub(r"[:]|([-](?!((\d{2}[:]\d{2})|(\d{4}))$))", '', val) date_obj = datetime.datetime.strptime(conformed_timestamp[:15], "%Y%m%d %H%M%S") - input_date = date_obj.isoformat().split('T', 1)[0] # Hack to support dates <1900 + input_date = date_obj.isoformat().split('T', 1)[0] # Hack to support dates <1900 return '' if input_date == "0101-01-01" else input_date @@ -600,7 +602,7 @@ def modify_database_object(input_elements, db_book_object, db_object, db_session # if no element is found add it if new_element is None: if db_type == 'author': - new_element = db_object(add_element, add_element.replace('|',','), "") + new_element = db_object(add_element, add_element.replace('|', ','), "") elif db_type == 'series': new_element = db_object(add_element, add_element) elif db_type == 'custom': @@ -831,7 +833,7 @@ def feed_series(book_id): if not off: off = 0 entries, random, pagination = fill_indexpage((int(off) / (int(config.config_books_per_page)) + 1), - db.Books, db.Books.series.any(db.Series.id == book_id),db.Books.series_index) + db.Books, db.Books.series.any(db.Series.id == book_id), db.Books.series_index) xml = render_title_template('feed.xml', entries=entries, pagination=pagination) response = make_response(xml) response.headers["Content-Type"] = "application/atom+xml; charset=utf-8" @@ -850,6 +852,7 @@ def do_gdrive_download(df, headers): total_size = int(df.metadata.get('fileSize')) download_url = df.metadata.get('downloadUrl') s = partial(total_size, 1024 * 1024) # I'm downloading BIG files, so 100M chunk size is fine for me + def stream(): for byte in s: headers = {"Range": 'bytes=%s-%s' % (byte[0], byte[1])} @@ -969,13 +972,13 @@ def get_updater_status(): "6": _(u'Server is stopped'), "7": _(u'Update finished, please press okay and reload page') } - status['text']=text + status['text'] = text helper.updater_thread = helper.Updater() helper.updater_thread.start() - status['status']=helper.updater_thread.get_update_status() + status['status'] = helper.updater_thread.get_update_status() elif request.method == "GET": try: - status['status']=helper.updater_thread.get_update_status() + status['status'] = helper.updater_thread.get_update_status() except Exception: status['status'] = 7 return json.dumps(status) @@ -1055,6 +1058,7 @@ def newest_books(page): else: abort(404) + @app.route('/books/oldest', defaults={'page': 1}) @app.route('/books/oldest/page/') @login_required_if_no_ano @@ -1136,7 +1140,7 @@ def best_rated_books(page): def discover(page): if current_user.show_random_books(): entries, __, pagination = fill_indexpage(page, db.Books, True, func.randomblob(2)) - pagination = Pagination(1, config.config_books_per_page,config.config_books_per_page) + pagination = Pagination(1, config.config_books_per_page, config.config_books_per_page) return render_title_template('discover.html', entries=entries, pagination=pagination, title=_(u"Random Books")) else: abort(404) @@ -1150,7 +1154,7 @@ def author_list(): .join(db.books_authors_link).join(db.Books).filter(common_filters())\ .group_by('books_authors_link.author').order_by(db.Authors.sort).all() for entry in entries: - entry.Authors.name=entry.Authors.name.replace('|',',') + entry.Authors.name = entry.Authors.name.replace('|', ',') return render_title_template('list.html', entries=entries, folder='author', title=_(u"Author list")) else: abort(404) @@ -1166,7 +1170,7 @@ def author(book_id, page): flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error") return redirect(url_for("index")) - name = (db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name).replace('|',',') + name = (db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name).replace('|', ',') author_info = None other_books = [] @@ -1198,7 +1202,6 @@ def get_unique_other_books(library_books, author_books): return other_books - @app.route("/series") @login_required_if_no_ano def series_list(): @@ -1436,9 +1439,9 @@ def delete_book(book_id): ub.session.commit() if config.config_use_google_drive: - helper.delete_book_gdrive(book) # ToDo really delete file + helper.delete_book_gdrive(book) # ToDo really delete file else: - helper.delete_book(book,config.config_calibre_dir) + helper.delete_book(book, config.config_calibre_dir) # check if only this book links to: # author, language, series, tags, custom columns modify_database_object([u''], book.authors, db.Authors, db.session, 'author') @@ -1466,7 +1469,7 @@ def delete_book(book_id): getattr(book, cc_string).remove(del_cc) db.session.delete(del_cc) else: - modify_database_object([u''], getattr(book, cc_string),db.cc_classes[c.id], db.session, 'custom') + modify_database_object([u''], getattr(book, cc_string), db.cc_classes[c.id], db.session, 'custom') db.session.query(db.Books).filter(db.Books.id == book_id).delete() db.session.commit() else: @@ -1474,6 +1477,7 @@ def delete_book(book_id): app.logger.info('Book with id "'+str(book_id)+'" could not be deleted') return redirect(url_for('index')) + @app.route("/gdrive/authenticate") @login_required @admin_required @@ -1619,10 +1623,10 @@ def search(): db.Books.publishers.any(db.Publishers.name.ilike("%" + term + "%")), db.Books.title.ilike("%" + term + "%")))\ .filter(common_filters()).all() -# entries = db.session.query(db.Books).with_entities(db.Books.title).filter(db.Books.title.ilike("%" + term + "%")).all() - #result = db.session.execute("select name from authors where lower(name) like '%" + term.lower() + "%'") - #entries = result.fetchall() - #result.close() + # entries = db.session.query(db.Books).with_entities(db.Books.title).filter(db.Books.title.ilike("%" + term + "%")).all() + # result = db.session.execute("select name from authors where lower(name) like '%" + term.lower() + "%'") + # entries = result.fetchall() + # result.close() return render_title_template('search.html', searchterm=term, entries=entries) else: return render_title_template('search.html', searchterm="") @@ -1724,9 +1728,10 @@ def get_cover(cover_path): else: return send_from_directory(os.path.join(config.config_calibre_dir, cover_path), "cover.jpg") + @app.route("/show//") @login_required_if_no_ano -def serve_book(book_id,book_format): +def serve_book(book_id, book_format): book_format = book_format.split(".")[0] book = db.session.query(db.Books).filter(db.Books.id == book_id).first() data = db.session.query(db.Data).filter(db.Data.book == book.id).filter(db.Data.format == book_format.upper()).first() @@ -1858,7 +1863,7 @@ def read_book(book_id, book_format): elif book_format.lower() == "txt": return render_title_template('readtxt.html', txtfile=book_id, title=_(u"Read a Book")) else: - for fileext in ["cbr","cbt","cbz"]: + for fileext in ["cbr", "cbt", "cbz"]: if book_format.lower() == fileext: all_name = str(book_id) + "/" + book.data[0].name + "." + fileext tmp_file = os.path.join(book_dir, book.data[0].name) + "." + fileext @@ -1960,7 +1965,7 @@ def login(): flash(_(u"you are now logged in as: '%(nickname)s'", nickname=user.nickname), category="success") return redirect_back(url_for("index")) else: - ipAdress=request.headers.get('X-Forwarded-For', request.remote_addr) + ipAdress = request.headers.get('X-Forwarded-For', request.remote_addr) app.logger.info('Login failed for user "' + form['username'] + '" IP-adress: ' + ipAdress) flash(_(u"Wrong Username or Password"), category="error") @@ -2265,7 +2270,6 @@ def show_shelf(shelf_id): return redirect(url_for("index")) - @app.route("/shelf/order/", methods=["GET", "POST"]) @login_required def order_shelf(shelf_id): @@ -2402,7 +2406,7 @@ def configuration_helper(origin): success = False if request.method == "POST": to_save = request.form.to_dict() - content = ub.session.query(ub.Settings).first() # type: ub.Settings + content = ub.session.query(ub.Settings).first() # type: ub.Settings if "config_calibre_dir" in to_save: if content.config_calibre_dir != to_save["config_calibre_dir"]: content.config_calibre_dir = to_save["config_calibre_dir"] @@ -2806,7 +2810,7 @@ def edit_book(book_id): except Exception: book.languages[index].language_name = _(isoLanguages.get(part3=book.languages[index].lang_code).name) for author in book.authors: - author_names.append(author.name.replace('|',',')) + author_names.append(author.name.replace('|', ',')) # Show form if request.method != 'POST': @@ -2845,172 +2849,184 @@ def edit_book(book_id): db.session.add(db_format) to_save = request.form.to_dict() + if book.title != to_save["book_title"]: book.title = to_save["book_title"] edited_books_id.add(book.id) + input_authors = to_save["author_name"].split('&') - input_authors = map(lambda it: it.strip().replace(',','|'), input_authors) + input_authors = map(lambda it: it.strip().replace(',', '|'), input_authors) # we have all author names now if input_authors == ['']: input_authors = [_(u'unknown')] # prevent empty Author if book.authors: author0_before_edit = book.authors[0].name else: - author0_before_edit = db.Authors(_(u'unknown'),'',0) + author0_before_edit = db.Authors(_(u'unknown'), '', 0) modify_database_object(input_authors, book.authors, db.Authors, db.session, 'author') if book.authors: if author0_before_edit != book.authors[0].name: edited_books_id.add(book.id) book.author_sort = helper.get_sorted_author(input_authors[0]) - if to_save["cover_url"] and save_cover(to_save["cover_url"], book.path): - book.has_cover = 1 - - if book.series_index != to_save["series_index"]: - book.series_index = to_save["series_index"] - - if len(book.comments): - book.comments[0].text = to_save["description"] - else: - book.comments.append(db.Comments(text=to_save["description"], book=book.id)) - - input_tags = to_save["tags"].split(',') - input_tags = map(lambda it: it.strip(), input_tags) - modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags') - - input_series = [to_save["series"].strip()] - input_series = [x for x in input_series if x != ''] - modify_database_object(input_series, book.series, db.Series, db.session, 'series') - - input_languages = to_save["languages"].split(',') - input_languages = map(lambda it: it.strip().lower(), input_languages) - - if to_save["pubdate"]: - try: - book.pubdate = datetime.datetime.strptime(to_save["pubdate"], "%Y-%m-%d") - except ValueError: - book.pubdate = db.Books.DEFAULT_PUBDATE - else: - book.pubdate = db.Books.DEFAULT_PUBDATE - - # retranslate displayed text to language codes - languages = db.session.query(db.Languages).all() - input_l = [] - for lang in languages: - try: - lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower() - except Exception: - lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower() - for inp_lang in input_languages: - if inp_lang == lang.name: - input_l.append(lang.lang_code) - modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages') - - if to_save["rating"].strip(): - old_rating = False - if len(book.ratings) > 0: - old_rating = book.ratings[0].rating - ratingx2 = int(float(to_save["rating"]) * 2) - if ratingx2 != old_rating: - is_rating = db.session.query(db.Ratings).filter(db.Ratings.rating == ratingx2).first() - if is_rating: - book.ratings.append(is_rating) - else: - new_rating = db.Ratings(rating=ratingx2) - book.ratings.append(new_rating) - if old_rating: - book.ratings.remove(book.ratings[0]) - else: - if len(book.ratings) > 0: - book.ratings.remove(book.ratings[0]) - - for c in cc: - cc_string = "custom_column_" + str(c.id) - if not c.is_multiple: - if len(getattr(book, cc_string)) > 0: - cc_db_value = getattr(book, cc_string)[0].value - else: - cc_db_value = None - if to_save[cc_string].strip(): - if c.datatype == 'bool': - if to_save[cc_string] == 'None': - to_save[cc_string] = None - else: - to_save[cc_string] = 1 if to_save[cc_string] == 'True' else 0 - if to_save[cc_string] != cc_db_value: - if cc_db_value is not None: - if to_save[cc_string] is not None: - setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string]) - else: - del_cc = getattr(book, cc_string)[0] - getattr(book, cc_string).remove(del_cc) - db.session.delete(del_cc) - else: - cc_class = db.cc_classes[c.id] - new_cc = cc_class(value=to_save[cc_string], book=book_id) - db.session.add(new_cc) - elif c.datatype == 'int': - if to_save[cc_string] == 'None': - to_save[cc_string] = None - if to_save[cc_string] != cc_db_value: - if cc_db_value is not None: - if to_save[cc_string] is not None: - setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string]) - else: - del_cc = getattr(book, cc_string)[0] - getattr(book, cc_string).remove(del_cc) - db.session.delete(del_cc) - else: - cc_class = db.cc_classes[c.id] - new_cc = cc_class(value=to_save[cc_string], book=book_id) - db.session.add(new_cc) - - else: - if c.datatype == 'rating': - to_save[cc_string] = str(int(float(to_save[cc_string]) * 2)) - if to_save[cc_string].strip() != cc_db_value: - if cc_db_value is not None: - # remove old cc_val - del_cc = getattr(book, cc_string)[0] - getattr(book, cc_string).remove(del_cc) - if len(del_cc.books) == 0: - db.session.delete(del_cc) - cc_class = db.cc_classes[c.id] - new_cc = db.session.query(cc_class).filter( - cc_class.value == to_save[cc_string].strip()).first() - # if no cc val is found add it - if new_cc is None: - new_cc = cc_class(value=to_save[cc_string].strip()) - db.session.add(new_cc) - new_cc = db.session.query(cc_class).filter( - cc_class.value == to_save[cc_string].strip()).first() - # add cc value to book - getattr(book, cc_string).append(new_cc) - else: - if cc_db_value is not None: - # remove old cc_val - del_cc = getattr(book, cc_string)[0] - getattr(book, cc_string).remove(del_cc) - if len(del_cc.books) == 0: - db.session.delete(del_cc) - else: - input_tags = to_save[cc_string].split(',') - input_tags = map(lambda it: it.strip(), input_tags) - modify_database_object(input_tags, getattr(book, cc_string),db.cc_classes[c.id], db.session, 'custom') - db.session.commit() - author_names = [] - for author in book.authors: - author_names.append(author.name) + error = False for b in edited_books_id: if config.config_use_google_drive: - helper.update_dir_structure_gdrive(b) + error = helper.update_dir_structure_gdrive(b) else: - helper.update_dir_stucture(b, config.config_calibre_dir) + error = helper.update_dir_stucture(b, config.config_calibre_dir) + if error: # stop on error + break if config.config_use_google_drive: updateGdriveCalibreFromLocal() - if "detail_view" in to_save: - return redirect(url_for('show_book', book_id=book.id)) + + if not error: + if to_save["cover_url"] and save_cover(to_save["cover_url"], book.path): + book.has_cover = 1 + + if book.series_index != to_save["series_index"]: + book.series_index = to_save["series_index"] + + if len(book.comments): + book.comments[0].text = to_save["description"] + else: + book.comments.append(db.Comments(text=to_save["description"], book=book.id)) + + input_tags = to_save["tags"].split(',') + input_tags = map(lambda it: it.strip(), input_tags) + modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags') + + input_series = [to_save["series"].strip()] + input_series = [x for x in input_series if x != ''] + modify_database_object(input_series, book.series, db.Series, db.session, 'series') + + input_languages = to_save["languages"].split(',') + input_languages = map(lambda it: it.strip().lower(), input_languages) + + if to_save["pubdate"]: + try: + book.pubdate = datetime.datetime.strptime(to_save["pubdate"], "%Y-%m-%d") + except ValueError: + book.pubdate = db.Books.DEFAULT_PUBDATE + else: + book.pubdate = db.Books.DEFAULT_PUBDATE + + # retranslate displayed text to language codes + languages = db.session.query(db.Languages).all() + input_l = [] + for lang in languages: + try: + lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower() + except Exception: + lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower() + for inp_lang in input_languages: + if inp_lang == lang.name: + input_l.append(lang.lang_code) + modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages') + + if to_save["rating"].strip(): + old_rating = False + if len(book.ratings) > 0: + old_rating = book.ratings[0].rating + ratingx2 = int(float(to_save["rating"]) * 2) + if ratingx2 != old_rating: + is_rating = db.session.query(db.Ratings).filter(db.Ratings.rating == ratingx2).first() + if is_rating: + book.ratings.append(is_rating) + else: + new_rating = db.Ratings(rating=ratingx2) + book.ratings.append(new_rating) + if old_rating: + book.ratings.remove(book.ratings[0]) + else: + if len(book.ratings) > 0: + book.ratings.remove(book.ratings[0]) + + for c in cc: + cc_string = "custom_column_" + str(c.id) + if not c.is_multiple: + if len(getattr(book, cc_string)) > 0: + cc_db_value = getattr(book, cc_string)[0].value + else: + cc_db_value = None + if to_save[cc_string].strip(): + if c.datatype == 'bool': + if to_save[cc_string] == 'None': + to_save[cc_string] = None + else: + to_save[cc_string] = 1 if to_save[cc_string] == 'True' else 0 + if to_save[cc_string] != cc_db_value: + if cc_db_value is not None: + if to_save[cc_string] is not None: + setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string]) + else: + del_cc = getattr(book, cc_string)[0] + getattr(book, cc_string).remove(del_cc) + db.session.delete(del_cc) + else: + cc_class = db.cc_classes[c.id] + new_cc = cc_class(value=to_save[cc_string], book=book_id) + db.session.add(new_cc) + elif c.datatype == 'int': + if to_save[cc_string] == 'None': + to_save[cc_string] = None + if to_save[cc_string] != cc_db_value: + if cc_db_value is not None: + if to_save[cc_string] is not None: + setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string]) + else: + del_cc = getattr(book, cc_string)[0] + getattr(book, cc_string).remove(del_cc) + db.session.delete(del_cc) + else: + cc_class = db.cc_classes[c.id] + new_cc = cc_class(value=to_save[cc_string], book=book_id) + db.session.add(new_cc) + + else: + if c.datatype == 'rating': + to_save[cc_string] = str(int(float(to_save[cc_string]) * 2)) + if to_save[cc_string].strip() != cc_db_value: + if cc_db_value is not None: + # remove old cc_val + del_cc = getattr(book, cc_string)[0] + getattr(book, cc_string).remove(del_cc) + if len(del_cc.books) == 0: + db.session.delete(del_cc) + cc_class = db.cc_classes[c.id] + new_cc = db.session.query(cc_class).filter( + cc_class.value == to_save[cc_string].strip()).first() + # if no cc val is found add it + if new_cc is None: + new_cc = cc_class(value=to_save[cc_string].strip()) + db.session.add(new_cc) + new_cc = db.session.query(cc_class).filter( + cc_class.value == to_save[cc_string].strip()).first() + # add cc value to book + getattr(book, cc_string).append(new_cc) + else: + if cc_db_value is not None: + # remove old cc_val + del_cc = getattr(book, cc_string)[0] + getattr(book, cc_string).remove(del_cc) + if len(del_cc.books) == 0: + db.session.delete(del_cc) + else: + input_tags = to_save[cc_string].split(',') + input_tags = map(lambda it: it.strip(), input_tags) + modify_database_object(input_tags, getattr(book, cc_string), db.cc_classes[c.id], db.session, 'custom') + db.session.commit() + author_names = [] + for author in book.authors: + author_names.append(author.name) + if "detail_view" in to_save: + return redirect(url_for('show_book', book_id=book.id)) + else: + return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, + title=_(u"edit metadata")) else: + db.session.rollback() + flash( error, category="error") return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, title=_(u"edit metadata")) @@ -3173,4 +3189,3 @@ def start_gevent(): app.logger.info('Unable to listen on \'\', trying on IPv4 only...') gevent_server = WSGIServer(('0.0.0.0', ub.config.config_port), app) gevent_server.serve_forever() - diff --git a/messages.pot b/messages.pot index da8a4766..27f35ad0 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: 2017-11-12 14:54+0100\n" +"POT-Creation-Date: 2017-11-30 16:45+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,180 +17,190 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.5.1\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1398 +#: cps/book_formats.py:119 cps/book_formats.py:123 cps/web.py:1401 msgid "not installed" msgstr "" -#: cps/helper.py:77 +#: cps/helper.py:78 #, python-format msgid "kindlegen binary %(kindlepath)s not found" msgstr "" -#: cps/helper.py:83 +#: cps/helper.py:84 #, python-format msgid "epub format not found for book id: %(book)d" msgstr "" -#: cps/helper.py:93 +#: cps/helper.py:94 msgid "kindlegen failed, no execution permissions" msgstr "" -#: cps/helper.py:108 +#: cps/helper.py:109 #, python-format msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgstr "" -#: cps/helper.py:187 +#: cps/helper.py:188 #, python-format msgid "Failed to send mail: %s" msgstr "" -#: cps/helper.py:194 +#: cps/helper.py:195 msgid "Calibre-web test email" msgstr "" -#: cps/helper.py:195 cps/helper.py:207 +#: cps/helper.py:196 cps/helper.py:208 msgid "This email has been sent via calibre web." msgstr "" -#: cps/helper.py:204 cps/templates/detail.html:43 +#: cps/helper.py:205 cps/templates/detail.html:43 msgid "Send to Kindle" msgstr "" -#: cps/helper.py:224 cps/helper.py:238 +#: cps/helper.py:225 cps/helper.py:239 msgid "Could not find any formats suitable for sending by email" msgstr "" +#: cps/helper.py:338 +#, python-format +msgid "Rename title from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + +#: cps/helper.py:347 +#, python-format +msgid "Rename author from: \"%s\" to \"%s\" failed with error: %s" +msgstr "" + #: cps/ub.py:577 msgid "Guest" msgstr "" -#: cps/web.py:964 +#: cps/web.py:967 msgid "Requesting update package" msgstr "" -#: cps/web.py:965 +#: cps/web.py:968 msgid "Downloading update package" msgstr "" -#: cps/web.py:966 +#: cps/web.py:969 msgid "Unzipping update package" msgstr "" -#: cps/web.py:967 +#: cps/web.py:970 msgid "Files are replaced" msgstr "" -#: cps/web.py:968 +#: cps/web.py:971 msgid "Database connections are closed" msgstr "" -#: cps/web.py:969 +#: cps/web.py:972 msgid "Server is stopped" msgstr "" -#: cps/web.py:970 +#: cps/web.py:973 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1044 +#: cps/web.py:1047 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1054 +#: cps/web.py:1057 msgid "Newest Books" msgstr "" -#: cps/web.py:1065 +#: cps/web.py:1069 msgid "Oldest Books" msgstr "" -#: cps/web.py:1077 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1088 +#: cps/web.py:1092 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1116 +#: cps/web.py:1120 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:1129 +#: cps/web.py:1133 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:32 cps/web.py:1140 +#: cps/templates/index.xml:32 cps/web.py:1144 msgid "Random Books" msgstr "" -#: cps/web.py:1154 +#: cps/web.py:1158 msgid "Author list" msgstr "" -#: cps/web.py:1166 cps/web.py:1225 cps/web.py:1355 cps/web.py:1827 +#: cps/web.py:1170 cps/web.py:1228 cps/web.py:1358 cps/web.py:1827 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/templates/index.xml:64 cps/web.py:1209 +#: cps/templates/index.xml:64 cps/web.py:1212 msgid "Series list" msgstr "" -#: cps/web.py:1223 +#: cps/web.py:1226 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:1256 +#: cps/web.py:1259 msgid "Available languages" msgstr "" -#: cps/web.py:1273 +#: cps/web.py:1276 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:58 cps/web.py:1283 +#: cps/templates/index.xml:58 cps/web.py:1286 msgid "Category list" msgstr "" -#: cps/web.py:1297 +#: cps/web.py:1300 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/web.py:1409 +#: cps/web.py:1412 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1423 +#: cps/web.py:1426 msgid "Statistics" msgstr "" -#: cps/web.py:1587 +#: cps/web.py:1591 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1589 +#: cps/web.py:1593 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1605 +#: cps/web.py:1609 msgid "Update done" msgstr "" -#: cps/web.py:1687 cps/web.py:1700 +#: cps/web.py:1691 cps/web.py:1704 msgid "search" msgstr "" #: cps/templates/index.xml:39 cps/templates/index.xml:42 -#: cps/templates/layout.html:131 cps/web.py:1782 +#: cps/templates/layout.html:132 cps/web.py:1782 msgid "Read Books" msgstr "" -#: cps/templates/index.xml:45 cps/templates/index.xml:48 -#: cps/templates/layout.html:132 cps/web.py:1785 +#: cps/templates/index.xml:46 cps/templates/index.xml:49 +#: cps/templates/layout.html:134 cps/web.py:1785 msgid "Unread Books" msgstr "" @@ -198,7 +208,7 @@ msgstr "" msgid "Read a Book" msgstr "" -#: cps/web.py:1925 cps/web.py:2555 +#: cps/web.py:1925 cps/web.py:2556 msgid "Please fill out all fields!" msgstr "" @@ -253,7 +263,7 @@ msgstr "" msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:2085 cps/web.py:2640 +#: cps/web.py:2085 cps/web.py:2641 msgid "Please configure your kindle email address first..." msgstr "" @@ -262,177 +272,177 @@ msgstr "" msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2164 +#: cps/web.py:2166 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:2183 cps/web.py:2207 +#: cps/web.py:2185 cps/web.py:2209 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:2188 +#: cps/web.py:2190 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:2190 cps/web.py:2218 +#: cps/web.py:2192 cps/web.py:2220 msgid "There was an error" msgstr "" -#: cps/web.py:2191 cps/web.py:2193 +#: cps/web.py:2193 cps/web.py:2195 msgid "create a shelf" msgstr "" -#: cps/web.py:2216 +#: cps/web.py:2218 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2219 cps/web.py:2221 +#: cps/web.py:2221 cps/web.py:2223 msgid "Edit a shelf" msgstr "" -#: cps/web.py:2242 +#: cps/web.py:2244 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:2264 +#: cps/web.py:2266 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2267 +#: cps/web.py:2269 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2299 +#: cps/web.py:2300 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2368 +#: cps/web.py:2369 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:2370 cps/web.py:2374 +#: cps/web.py:2371 cps/web.py:2375 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2371 +#: cps/web.py:2372 msgid "Profile updated" msgstr "" -#: cps/web.py:2385 +#: cps/web.py:2386 msgid "Admin page" msgstr "" -#: cps/web.py:2509 +#: cps/web.py:2510 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2516 cps/web.py:2522 cps/web.py:2536 +#: cps/web.py:2517 cps/web.py:2523 cps/web.py:2537 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2520 +#: cps/web.py:2521 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2557 cps/web.py:2610 +#: cps/templates/admin.html:34 cps/web.py:2558 cps/web.py:2611 msgid "Add new user" msgstr "" -#: cps/web.py:2602 +#: cps/web.py:2603 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:2606 +#: cps/web.py:2607 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:2628 +#: cps/web.py:2629 msgid "Mail settings updated" msgstr "" -#: cps/web.py:2635 +#: cps/web.py:2636 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2638 +#: cps/web.py:2639 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2642 +#: cps/web.py:2643 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2643 +#: cps/web.py:2644 msgid "Edit mail settings" msgstr "" -#: cps/web.py:2672 +#: cps/web.py:2673 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:2780 +#: cps/web.py:2781 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:2783 +#: cps/web.py:2784 msgid "An unknown error occured." msgstr "" -#: cps/web.py:2786 +#: cps/web.py:2787 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2802 +#: cps/web.py:2803 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2817 cps/web.py:3018 cps/web.py:3161 +#: cps/web.py:2818 cps/web.py:3026 cps/web.py:3031 cps/web.py:3174 msgid "edit metadata" msgstr "" -#: cps/web.py:2827 cps/web.py:3055 +#: cps/web.py:2828 cps/web.py:3068 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2838 +#: cps/web.py:2839 #, python-format msgid "Failed to store file %s." msgstr "" -#: cps/web.py:2858 cps/web.py:2862 +#: cps/web.py:2861 cps/web.py:2865 msgid "unknown" msgstr "" -#: cps/web.py:3061 +#: cps/web.py:3074 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:3080 +#: cps/web.py:3093 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:3085 +#: cps/web.py:3098 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:3090 +#: cps/web.py:3103 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" @@ -637,7 +647,7 @@ msgstr "" msgid "Tags" msgstr "" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:141 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:143 #: cps/templates/search_form.html:37 msgid "Series" msgstr "" @@ -724,7 +734,7 @@ msgstr "" msgid "Loading..." msgstr "" -#: cps/templates/book_edit.html:196 cps/templates/layout.html:205 +#: cps/templates/book_edit.html:196 cps/templates/layout.html:207 msgid "Close" msgstr "" @@ -931,7 +941,7 @@ msgstr "" msgid "Save settings and send Test E-Mail" msgstr "" -#: cps/templates/feed.xml:20 cps/templates/layout.html:189 +#: cps/templates/feed.xml:20 cps/templates/layout.html:191 msgid "Next" msgstr "" @@ -976,7 +986,7 @@ msgstr "" msgid "Show Random Books" msgstr "" -#: cps/templates/index.xml:52 cps/templates/layout.html:144 +#: cps/templates/index.xml:52 cps/templates/layout.html:146 msgid "Authors" msgstr "" @@ -1041,39 +1051,39 @@ msgstr "" msgid "Descending" msgstr "" -#: cps/templates/layout.html:135 +#: cps/templates/layout.html:137 msgid "Discover" msgstr "" -#: cps/templates/layout.html:138 +#: cps/templates/layout.html:140 msgid "Categories" msgstr "" -#: cps/templates/layout.html:147 cps/templates/search_form.html:58 +#: cps/templates/layout.html:149 cps/templates/search_form.html:58 msgid "Languages" msgstr "" -#: cps/templates/layout.html:150 +#: cps/templates/layout.html:152 msgid "Public Shelves" msgstr "" -#: cps/templates/layout.html:154 +#: cps/templates/layout.html:156 msgid "Your Shelves" msgstr "" -#: cps/templates/layout.html:159 +#: cps/templates/layout.html:161 msgid "Create a Shelf" msgstr "" -#: cps/templates/layout.html:160 cps/templates/stats.html:3 +#: cps/templates/layout.html:162 cps/templates/stats.html:3 msgid "About" msgstr "" -#: cps/templates/layout.html:174 +#: cps/templates/layout.html:176 msgid "Previous" msgstr "" -#: cps/templates/layout.html:201 +#: cps/templates/layout.html:203 msgid "Book Details" msgstr ""