Improved error handling for renaming authors and titles (changes related to filesystem and not only to database)

pull/453/head
OzzieIsaacs 7 years ago
parent b4aede78bc
commit f1fac28203

@ -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) 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: if ".FB2" == original_file_extension.upper() and use_fb2_meta is True:
meta = fb2.get_fb2_info(tmp_file_path, original_file_extension) meta = fb2.get_fb2_info(tmp_file_path, original_file_extension)
except Exception as e: except Exception as ex:
logger.warning('cannot parse metadata, using default: %s', e) logger.warning('cannot parse metadata, using default: %s', ex)
if meta and meta.title.strip() and meta.author.strip(): if meta and meta.title.strip() and meta.author.strip():
return meta 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)) img.save(filename=os.path.join(tmp_dir, cover_file_name))
return cover_file_name return cover_file_name
def get_versions(): def get_versions():
if not use_generic_pdf_cover: if not use_generic_pdf_cover:
IVersion=ImageVersion.MAGICK_VERSION IVersion=ImageVersion.MAGICK_VERSION
@ -120,4 +121,4 @@ def get_versions():
PVersion=PyPdfVersion PVersion=PyPdfVersion
else: else:
PVersion=_(u'not installed') PVersion=_(u'not installed')
return {'ImageVersion':IVersion,'PyPdfVersion':PVersion} return {'ImageVersion': IVersion, 'PyPdfVersion': PVersion}

@ -26,12 +26,15 @@ def title_sort(title):
title = title.replace(prep, '') + ', ' + prep title = title.replace(prep, '') + ', ' + prep
return title.strip() return title.strip()
def lcase(s): def lcase(s):
return s.lower() return s.lower()
def ucase(s): def ucase(s):
return s.upper() return s.upper()
Base = declarative_base() Base = declarative_base()
books_authors_link = Table('books_authors_link', Base.metadata, 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) Column('publisher', Integer, ForeignKey('publishers.id'), primary_key=True)
) )
class Identifiers(Base): class Identifiers(Base):
__tablename__ = 'identifiers' __tablename__ = 'identifiers'
@ -197,6 +201,7 @@ class Languages(Base):
def __repr__(self): def __repr__(self):
return u"<Languages('{0}')>".format(self.lang_code) return u"<Languages('{0}')>".format(self.lang_code)
class Publishers(Base): class Publishers(Base):
__tablename__ = 'publishers' __tablename__ = 'publishers'
@ -204,7 +209,7 @@ class Publishers(Base):
name = Column(String) name = Column(String)
sort = Column(String) sort = Column(String)
def __init__(self, name,sort): def __init__(self, name, sort):
self.name = name self.name = name
self.sort = sort self.sort = sort
@ -212,7 +217,6 @@ class Publishers(Base):
return u"<Publishers('{0},{1}')>".format(self.name, self.sort) return u"<Publishers('{0},{1}')>".format(self.name, self.sort)
class Data(Base): class Data(Base):
__tablename__ = 'data' __tablename__ = 'data'
@ -260,7 +264,7 @@ class Books(Base):
identifiers = relationship('Identifiers', backref='books') identifiers = relationship('Identifiers', backref='books')
def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, 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.title = title
self.sort = sort self.sort = sort
self.author_sort = author_sort self.author_sort = author_sort
@ -300,7 +304,7 @@ def setup_db():
global session global session
global cc_classes 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 = ub.session.query(ub.Settings).first()
content.config_calibre_dir = None content.config_calibre_dir = None
content.db_configured = False content.db_configured = False
@ -309,7 +313,7 @@ def setup_db():
return False return False
dbpath = os.path.join(config.config_calibre_dir, "metadata.db") 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: try:
conn = engine.connect() conn = engine.connect()
except Exception: except Exception:

@ -12,7 +12,7 @@ def extractCover(zipFile, coverFile, coverpath, tmp_file_name):
if coverFile is None: if coverFile is None:
return None return None
else: else:
zipCoverPath = os.path.join(coverpath , coverFile).replace('\\','/') zipCoverPath = os.path.join(coverpath, coverFile).replace('\\', '/')
cf = zipFile.read(zipCoverPath) cf = zipFile.read(zipCoverPath)
prefix = os.path.splitext(tmp_file_name)[0] prefix = os.path.splitext(tmp_file_name)[0]
tmp_cover_name = prefix + '.' + os.path.basename(zipCoverPath) 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) coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='"+meta_cover[0]+"']/@href", namespaces=ns)
if len(coversection) > 0: if len(coversection) > 0:
filetype = coversection[0].rsplit('.', 1)[-1] 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])) markup = epubZip.read(os.path.join(coverpath, coversection[0]))
markupTree = etree.fromstring(markup) markupTree = etree.fromstring(markup)
# no matter xhtml or html with no namespace # no matter xhtml or html with no namespace

@ -3,10 +3,7 @@
from lxml import etree from lxml import etree
import uploader import uploader
#try:
# from io import StringIO
#except ImportError:
# import StringIO
def get_fb2_info(tmp_file_path, original_file_extension): def get_fb2_info(tmp_file_path, original_file_extension):

@ -45,7 +45,7 @@ import web
try: try:
import unidecode import unidecode
use_unidecode = True use_unidecode = True
except Exception as e: except ImportError:
use_unidecode = False use_unidecode = False
# Global variables # Global variables
@ -55,6 +55,7 @@ updater_thread = None
RET_SUCCESS = 1 RET_SUCCESS = 1
RET_FAIL = 0 RET_FAIL = 0
def update_download(book_id, user_id): 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 == check = ub.session.query(ub.Downloads).filter(ub.Downloads.user_id == user_id).filter(ub.Downloads.book_id ==
book_id).first() book_id).first()
@ -101,7 +102,7 @@ def make_mobi(book_id, calibrepath):
if nextline != "\r\n": if nextline != "\r\n":
# Format of error message (kindlegen translates its output texts): # Format of error message (kindlegen translates its output texts):
# Error(prcgen):E23006: Language not recognized in metadata.The dc:Language field is mandatory.Aborting. # 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 error occoures, log in every case
if conv_error: if conv_error:
error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s", error_message = _(u"Kindlegen failed with Error %(error)s. Message: %(message)s",
@ -123,7 +124,7 @@ def make_mobi(book_id, calibrepath):
else: else:
app.logger.info("make_mobi: kindlegen failed with error while converting book") app.logger.info("make_mobi: kindlegen failed with error while converting book")
if not error_message: if not error_message:
error_message='kindlegen failed, no excecution permissions' error_message = 'kindlegen failed, no excecution permissions'
return error_message, RET_FAIL return error_message, RET_FAIL
else: else:
error_message = "make_mobi: epub not found: %s.epub" % file_path 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 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()) app.logger.error(traceback.print_exc())
return _("Failed to send mail: %s" % str(e)) return _("Failed to send mail: %s" % str(ex))
return None return None
@ -230,8 +231,8 @@ def send_mail(book_id, kindle_mail, calibrepath):
if resultCode == RET_SUCCESS: if resultCode == RET_SUCCESS:
msg.attach(get_attachment(data)) msg.attach(get_attachment(data))
else: else:
app.logger.error = (data) app.logger.error = data
return data #_("Could not convert epub to mobi") return data # _("Could not convert epub to mobi")
elif 'pdf' in formats: elif 'pdf' in formats:
msg.attach(get_attachment(formats['pdf'])) msg.attach(get_attachment(formats['pdf']))
else: else:
@ -255,7 +256,7 @@ def get_attachment(file_path):
return attachment return attachment
except IOError: except IOError:
traceback.print_exc() 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 return None
@ -268,18 +269,18 @@ def get_valid_filename(value, replace_whitespace=True):
value = value[:-1]+u'_' value = value[:-1]+u'_'
value = value.replace("/", "_").replace(":", "_").strip('\0') value = value.replace("/", "_").replace(":", "_").strip('\0')
if use_unidecode: if use_unidecode:
value=(unidecode.unidecode(value)).strip() value = (unidecode.unidecode(value)).strip()
else: 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) value = unicodedata.normalize('NFKD', value)
re_slugify = re.compile('[\W\s-]', re.UNICODE) 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() value = re_slugify.sub('', value).strip()
else: else:
value = unicode(re_slugify.sub('', value).strip()) value = unicode(re_slugify.sub('', value).strip())
if replace_whitespace: if replace_whitespace:
#*+:\"/<>? are replaced by _ # *+:\"/<>? are replaced by _
value = re.sub(r'[\*\+:\\\"/<>\?]+', u'_', value, flags=re.U) value = re.sub(r'[\*\+:\\\"/<>\?]+', u'_', value, flags=re.U)
# pipe has to be replaced with comma # pipe has to be replaced with comma
value = re.sub(r'[\|]+', u',', value, flags=re.U) value = re.sub(r'[\|]+', u',', value, flags=re.U)
@ -289,48 +290,66 @@ def get_valid_filename(value, replace_whitespace=True):
return value return value
def get_sorted_author(value): def get_sorted_author(value):
regexes = ["^(JR|SR)\.?$","^I{1,3}\.?$","^IV\.?$"] regexes = ["^(JR|SR)\.?$", "^I{1,3}\.?$", "^IV\.?$"]
combined = "(" + ")|(".join(regexes) + ")" combined = "(" + ")|(".join(regexes) + ")"
value = value.split(" ") try:
if re.match(combined, value[-1].upper()): value = value.split(" ")
value2 = value[-2] + ", " + " ".join(value[:-2]) + " " + value[-1] if re.match(combined, value[-1].upper()):
else: value2 = value[-2] + ", " + " ".join(value[:-2]) + " " + value[-1]
value2 = value[-1] + ", " + " ".join(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 return value2
def delete_book(book, calibrepath): 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) shutil.rmtree(path, ignore_errors=True)
# ToDo: Implement delete book on gdrive
def delete_book_gdrive(book): def delete_book_gdrive(book):
pass pass
def update_dir_stucture(book_id, calibrepath): def update_dir_stucture(book_id, calibrepath):
db.session.connection().connection.connection.create_function("title_sort", 1, db.title_sort) localbook = db.session.query(db.Books).filter(db.Books.id == book_id).first()
book = db.session.query(db.Books).filter(db.Books.id == book_id).first() path = os.path.join(calibrepath, localbook.path)
path = os.path.join(calibrepath, book.path)
authordir = book.path.split('/')[0] authordir = localbook.path.split('/')[0]
new_authordir = get_valid_filename(book.authors[0].name) new_authordir = get_valid_filename(localbook.authors[0].name)
titledir = book.path.split('/')[1]
new_titledir = get_valid_filename(book.title) + " (" + str(book_id) + ")"
if titledir != new_titledir: titledir = localbook.path.split('/')[1]
new_title_path = os.path.join(os.path.dirname(path), new_titledir) new_titledir = get_valid_filename(localbook.title) + " (" + str(book_id) + ")"
os.rename(path, new_title_path)
path = new_title_path
book.path = book.path.split('/')[0] + '/' + new_titledir
if titledir != 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: if authordir != new_authordir:
new_author_path = os.path.join(os.path.join(calibrepath, new_authordir), os.path.basename(path)) try:
os.renames(path, new_author_path) new_author_path = os.path.join(os.path.join(calibrepath, new_authordir), os.path.basename(path))
book.path = new_authordir + '/' + book.path.split('/')[1] os.renames(path, new_author_path)
db.session.commit() 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): 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() book = db.session.query(db.Books).filter(db.Books.id == book_id).first()
authordir = book.path.split('/')[0] authordir = book.path.split('/')[0]
@ -340,24 +359,24 @@ def update_dir_structure_gdrive(book_id):
if titledir != new_titledir: if titledir != new_titledir:
print (titledir) print (titledir)
gFile=gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive,os.path.dirname(book.path),titledir) gFile = gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive, os.path.dirname(book.path), titledir)
gFile['title']= new_titledir gFile['title'] = new_titledir
gFile.Upload() gFile.Upload()
book.path = book.path.split('/')[0] + '/' + new_titledir book.path = book.path.split('/')[0] + '/' + new_titledir
if authordir != new_authordir: 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['title'] = new_authordir
gFile.Upload() gFile.Upload()
book.path = new_authordir + '/' + book.path.split('/')[1] book.path = new_authordir + '/' + book.path.split('/')[1]
return error
db.session.commit()
class Updater(threading.Thread): class Updater(threading.Thread):
def __init__(self): def __init__(self):
threading.Thread.__init__(self) threading.Thread.__init__(self)
self.status=0 self.status = 0
def run(self): def run(self):
global global_task global global_task
@ -370,7 +389,7 @@ class Updater(threading.Thread):
tmp_dir = gettempdir() tmp_dir = gettempdir()
z.extractall(tmp_dir) z.extractall(tmp_dir)
self.status = 4 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 self.status = 5
global_task = 0 global_task = 0
db.session.close() db.session.close()
@ -391,8 +410,8 @@ class Updater(threading.Thread):
return self.status return self.status
@classmethod @classmethod
def file_to_list(self, file): def file_to_list(self, filelist):
return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')] return [x.strip() for x in open(filelist, 'r') if not x.startswith('#EXT')]
@classmethod @classmethod
def one_minus_two(self, one, two): def one_minus_two(self, one, two):
@ -401,8 +420,8 @@ class Updater(threading.Thread):
@classmethod @classmethod
def reduce_dirs(self, delete_files, new_list): def reduce_dirs(self, delete_files, new_list):
new_delete = [] new_delete = []
for file in delete_files: for filename in delete_files:
parts = file.split(os.sep) parts = filename.split(os.sep)
sub = '' sub = ''
for part in parts: for part in parts:
sub = os.path.join(sub, part) sub = os.path.join(sub, part)
@ -460,8 +479,8 @@ class Updater(threading.Thread):
if change_permissions: if change_permissions:
try: try:
os.chown(dst_file, permission.st_uid, permission.st_gid) os.chown(dst_file, permission.st_uid, permission.st_gid)
except Exception as e: except Exception:
e = sys.exc_info() # ex = sys.exc_info()
old_permissions = os.stat(dst_file) old_permissions = os.stat(dst_file)
logging.getLogger('cps.web').debug('Fail change permissions of ' + str(dst_file) + '. Before: ' logging.getLogger('cps.web').debug('Fail change permissions of ' + str(dst_file) + '. Before: '
+ str(old_permissions.st_uid) + ':' + str(old_permissions.st_gid) + ' After: ' + str(old_permissions.st_uid) + ':' + str(old_permissions.st_gid) + ' After: '
@ -508,4 +527,3 @@ class Updater(threading.Thread):
except Exception: except Exception:
logging.getLogger('cps.web').debug("Could not remove:" + item_path) logging.getLogger('cps.web').debug("Could not remove:" + item_path)
shutil.rmtree(source, ignore_errors=True) shutil.rmtree(source, ignore_errors=True)

@ -21,7 +21,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2016-07-12 19:54+0200\n"
"Last-Translator: Ozzie Isaacs\n" "Last-Translator: Ozzie Isaacs\n"
"Language: de\n" "Language: de\n"
@ -32,184 +32,194 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "Nicht installiert" msgstr "Nicht installiert"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "Kindlegen Programm %(kindlepath)s nicht gefunden" msgstr "Kindlegen Programm %(kindlepath)s nicht gefunden"
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "epub Format für Bücher-ID %(book)d nicht gefunden" 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" msgid "kindlegen failed, no execution permissions"
msgstr "Kindlegen Aufruf fehlgeschlagen, keine Ausführungsberechtigung" msgstr "Kindlegen Aufruf fehlgeschlagen, keine Ausführungsberechtigung"
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen " msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen "
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "E-Mail: %s konnte nicht gesendet werden" msgstr "E-Mail: %s konnte nicht gesendet werden"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "Calibre-web Test E-Mail" 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." msgid "This email has been sent via calibre web."
msgstr "Die E-Mail wurde via calibre-web versendet" 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" msgid "Send to Kindle"
msgstr "An Kindle senden" 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" msgid "Could not find any formats suitable for sending by email"
msgstr "" msgstr ""
"Konnte keine Formate finden welche für das versenden per E-Mail geeignet " "Konnte keine Formate finden welche für das versenden per E-Mail geeignet "
"sind" "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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Gast" msgstr "Gast"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Frage Update Paket an" msgstr "Frage Update Paket an"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Lade Update Paket herunter" msgstr "Lade Update Paket herunter"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Entpacke Update Paket" msgstr "Entpacke Update Paket"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Ersetze Dateien" msgstr "Ersetze Dateien"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Schließe Datenbankverbindungen" msgstr "Schließe Datenbankverbindungen"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Stoppe Server" msgstr "Stoppe Server"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden" msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "Kürzlich hinzugefügte Bücher" msgstr "Kürzlich hinzugefügte Bücher"
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "Neueste Bücher" msgstr "Neueste Bücher"
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "Älteste Bücher" msgstr "Älteste Bücher"
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "Bücher (A-Z)" msgstr "Bücher (A-Z)"
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "Bücher (Z-A)" msgstr "Bücher (Z-A)"
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Beliebte Bücher (die meisten Downloads)" msgstr "Beliebte Bücher (die meisten Downloads)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Best bewertete Bücher" 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" msgid "Random Books"
msgstr "Zufällige Bücher" msgstr "Zufällige Bücher"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Autorenliste" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
"Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht " "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht "
"zugänglich." "zugänglich."
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "Liste Serien" msgstr "Liste Serien"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Serie: %(serie)s" msgstr "Serie: %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Verfügbare Sprachen" msgstr "Verfügbare Sprachen"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Sprache: %(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" msgid "Category list"
msgstr "Kategorieliste" msgstr "Kategorieliste"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Kategorie: %(name)s" msgstr "Kategorie: %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "Ausführungsberechtigung nicht vorhanden" msgstr "Ausführungsberechtigung nicht vorhanden"
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Statistiken" msgstr "Statistiken"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Server neu gestartet,bitte Seite neu laden" msgstr "Server neu gestartet,bitte Seite neu laden"
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "Server wird runtergefahren, bitte Fenster schließen" msgstr "Server wird runtergefahren, bitte Fenster schließen"
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Update durchgeführt" msgstr "Update durchgeführt"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "Suche" msgstr "Suche"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Gelesene Bücher" msgstr "Gelesene Bücher"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Ungelesene Bücher" msgstr "Ungelesene Bücher"
@ -217,7 +227,7 @@ msgstr "Ungelesene Bücher"
msgid "Read a Book" msgid "Read a Book"
msgstr "Lese ein Buch" 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!" msgid "Please fill out all fields!"
msgstr "Bitte alle Felder ausfüllen!" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Beim Senden des Buchs trat ein Fehler auf: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt" msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Das Buch wurde aus dem Bücherregal: %(sname)s entfernt" 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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'" msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'"
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Bücherregal %(title)s erzeugt" 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" msgid "There was an error"
msgstr "Es trat ein Fehler auf" 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" msgid "create a shelf"
msgstr "Bücherregal erzeugen" msgstr "Bücherregal erzeugen"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Bücherregal %(title)s verändert" 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" msgid "Edit a shelf"
msgstr "Bücherregal editieren" msgstr "Bücherregal editieren"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "Bücherregal %(name)s erfolgreich gelöscht" msgstr "Bücherregal %(name)s erfolgreich gelöscht"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Bücherregal: '%(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" 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" msgstr "Fehler beim Öffnen. Bücherregel exisitert nicht oder ist nicht zugänglich"
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Reihenfolge in Bücherregal '%(name)s' verändern" 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." msgid "Found an existing account for this email address."
msgstr "Es existiert ein Benutzerkonto für diese E-Mailadresse" 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "%(name)s's Profil" msgstr "%(name)s's Profil"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Profil aktualisiert" msgstr "Profil aktualisiert"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Admin Seite" msgstr "Admin Seite"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Calibre-web Konfiguration wurde aktualisiert" 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" msgid "Basic Configuration"
msgstr "Basis Konfiguration" msgstr "Basis Konfiguration"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren" 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" msgid "Add new user"
msgstr "Neuen Benutzer hinzufügen" msgstr "Neuen Benutzer hinzufügen"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Benutzer '%(user)s' angelegt" msgstr "Benutzer '%(user)s' angelegt"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "" msgstr ""
"Es existiert ein Benutzerkonto für diese Emailadresse oder den " "Es existiert ein Benutzerkonto für diese Emailadresse oder den "
"Benutzernamen." "Benutzernamen."
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "E-Mail Einstellungen aktualisiert" msgstr "E-Mail Einstellungen aktualisiert"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet" msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Fehler beim versenden der 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" msgid "E-Mail settings updated"
msgstr "E-Mail Einstellungen wurde aktualisiert" msgstr "E-Mail Einstellungen wurde aktualisiert"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "E-Mail Einstellungen editieren" msgstr "E-Mail Einstellungen editieren"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Benutzer '%(nick)s' gelöscht" msgstr "Benutzer '%(nick)s' gelöscht"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Benutzer '%(nick)s' aktualisiert" msgstr "Benutzer '%(nick)s' aktualisiert"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Es ist ein unbekanter Fehler aufgetreten" msgstr "Es ist ein unbekanter Fehler aufgetreten"
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Benutzer %(nick)s bearbeiten" 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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" msgstr ""
"Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht " "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht "
"zugänglich" "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" msgid "edit metadata"
msgstr "Metadaten editieren" msgstr "Metadaten editieren"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "Die Dateiendung \"%s\" kann nicht auf diesen Server hochgeladen werden" msgstr "Die Dateiendung \"%s\" kann nicht auf diesen Server hochgeladen werden"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." 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" msgid "unknown"
msgstr "Unbekannt" msgstr "Unbekannt"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Datei müssen eine Erweiterung haben, um hochgeladen zu werden" msgstr "Datei müssen eine Erweiterung haben, um hochgeladen zu werden"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)" msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)" msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)" msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)"
@ -660,7 +670,7 @@ msgstr "Beschreibung"
msgid "Tags" msgid "Tags"
msgstr "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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Serien" msgstr "Serien"
@ -695,7 +705,7 @@ msgstr "Nein"
#: cps/templates/book_edit.html:121 #: cps/templates/book_edit.html:121
msgid "Upload format" msgid "Upload format"
msgstr "" msgstr "Format hochladen"
#: cps/templates/book_edit.html:130 #: cps/templates/book_edit.html:130
msgid "view book after edit" msgid "view book after edit"
@ -747,7 +757,7 @@ msgstr "Klicke auf das Bild um die Metadaten zu übertragen"
msgid "Loading..." msgid "Loading..."
msgstr "Lade..." 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" msgid "Close"
msgstr "Schließen" msgstr "Schließen"
@ -956,7 +966,7 @@ msgstr "Einstellungen speichern"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Einstellungen speichern und Test E-Mail versenden" 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" msgid "Next"
msgstr "Nächste" msgstr "Nächste"
@ -1001,7 +1011,7 @@ msgstr "Die neuesten Bücher"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Zeige zufällige Bücher" 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" msgid "Authors"
msgstr "Autoren" msgstr "Autoren"
@ -1066,39 +1076,39 @@ msgstr "Aufsteigend"
msgid "Descending" msgid "Descending"
msgstr "Absteigend" msgstr "Absteigend"
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Entdecke" msgstr "Entdecke"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Kategorien" 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" msgid "Languages"
msgstr "Sprachen" msgstr "Sprachen"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Öffentiche Bücherregale" msgstr "Öffentiche Bücherregale"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Deine Bücherregale" msgstr "Deine Bücherregale"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Bücherregal erzeugen" 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" msgid "About"
msgstr "Über" msgstr "Über"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "Voerheriger" msgstr "Voerheriger"
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "Buchdetails" msgstr "Buchdetails"
@ -1274,11 +1284,11 @@ msgstr "Zeige Zufällige Bücher"
#: cps/templates/user_edit.html:50 #: cps/templates/user_edit.html:50
msgid "Show recent books" msgid "Show recent books"
msgstr "" msgstr " kürzlich hinzugefügte Bücher"
#: cps/templates/user_edit.html:54 #: cps/templates/user_edit.html:54
msgid "Show sorted books" msgid "Show sorted books"
msgstr "" msgstr "Zeige Bücher sortiert"
#: cps/templates/user_edit.html:58 #: cps/templates/user_edit.html:58
msgid "Show hot books" msgid "Show hot books"

@ -14,7 +14,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2017-04-04 15:09+0200\n"
"Last-Translator: Juan F. Villa <juan.villa@paisdelconocimiento.org>\n" "Last-Translator: Juan F. Villa <juan.villa@paisdelconocimiento.org>\n"
"Language: es\n" "Language: es\n"
@ -25,180 +25,190 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "No instalado" msgstr "No instalado"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "" msgstr ""
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "" msgstr ""
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "" msgstr ""
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Fallo al enviar el correo : %s" msgstr "Fallo al enviar el correo : %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "Prueba de Correo Calibre-web" 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." msgid "This email has been sent via calibre web."
msgstr "Este mensaje ha sido enviado 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" msgid "Send to Kindle"
msgstr "Enviar a 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" msgid "Could not find any formats suitable for sending by email"
msgstr "Formato no compatible para enviar por correo electronico" 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Invitado" msgstr "Invitado"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Solicitando paquete de actualización" msgstr "Solicitando paquete de actualización"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Descargando paquete de actualización" msgstr "Descargando paquete de actualización"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Descomprimiendo paquete de actualización" msgstr "Descomprimiendo paquete de actualización"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Ficheros sustituidos" msgstr "Ficheros sustituidos"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Los conexiones de base datos están cerradas" msgstr "Los conexiones de base datos están cerradas"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "El servidor está detenido" msgstr "El servidor está detenido"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Actualización finalizada. Por favor, pulse OK y recargue la página" 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" msgid "Recently Added Books"
msgstr "" msgstr ""
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "" msgstr ""
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "" msgstr ""
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "" msgstr ""
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "" msgstr ""
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Libros populares (los mas descargados)" msgstr "Libros populares (los mas descargados)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Libros mejor valorados" 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" msgid "Random Books"
msgstr "Libros al azar" msgstr "Libros al azar"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Lista de autores" 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:" 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:" 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" msgid "Series list"
msgstr "Lista de series" msgstr "Lista de series"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Series : %(serie)s" msgstr "Series : %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Lenguajes disponibles" msgstr "Lenguajes disponibles"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Lenguaje: %(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" msgid "Category list"
msgstr "Lista de categorias" msgstr "Lista de categorias"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Categoría : %(name)s" msgstr "Categoría : %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "" msgstr ""
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Estadisticas" msgstr "Estadisticas"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Servidor reiniciado. Por favor, recargue la página" 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" msgid "Performing shutdown of server, please close window"
msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana."
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Actualización realizada" msgstr "Actualización realizada"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "búsqueda" msgstr "búsqueda"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Libros leídos" msgstr "Libros leídos"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Libros no leídos" msgstr "Libros no leídos"
@ -206,7 +216,7 @@ msgstr "Libros no leídos"
msgid "Read a Book" msgid "Read a Book"
msgstr "Leer un libro" 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!" msgid "Please fill out all fields!"
msgstr "¡Por favor completar todos los campos!" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Ha sucedido un error en el envio del Libro: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Configurar primero la dirección de correo Kindle por favor..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "El libro fue agregado a el estante: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "El libro fue removido del estante: %(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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Une étagère de ce nom '%(title)s' existe déjà." msgstr "Une étagère de ce nom '%(title)s' existe déjà."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Estante %(title)s creado" 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" msgid "There was an error"
msgstr "Ha sucedido un 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" msgid "create a shelf"
msgstr "crear un estante" msgstr "crear un estante"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Estante %(title)s cambiado" 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" msgid "Edit a shelf"
msgstr "Editar un estante" msgstr "Editar un estante"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "Estante %(name)s fue borrado correctamente" msgstr "Estante %(name)s fue borrado correctamente"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Estante: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Cambiar orden del estante: '%(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." msgid "Found an existing account for this email address."
msgstr "Existe una cuenta vinculada a esta dirección de correo." 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "Perfil de %(name)s" msgstr "Perfil de %(name)s"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Perfil actualizado" msgstr "Perfil actualizado"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Página de administración" msgstr "Página de administración"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Configuración de Calibre-web actualizada" 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" msgid "Basic Configuration"
msgstr "Configuración básica" msgstr "Configuración básica"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "Localicación de la BD inválida. Por favor, introduzca la ruta correcta." 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" msgid "Add new user"
msgstr "Agregar un nuevo usuario" msgstr "Agregar un nuevo usuario"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Usuario '%(user)s' creado" msgstr "Usuario '%(user)s' creado"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "" msgstr ""
"Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre" "Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre"
" de usuario." " de usuario."
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "Parámetros de correo actualizados" msgstr "Parámetros de correo actualizados"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Exito al realizar envio de prueba a %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Error al realizar envio de prueba a 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" msgid "E-Mail settings updated"
msgstr "Ajustes de correo electrónico actualizados" msgstr "Ajustes de correo electrónico actualizados"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Editar parametros de correo" msgstr "Editar parametros de correo"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Usuario '%(nick)s' borrado" msgstr "Usuario '%(nick)s' borrado"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Usuario '%(nick)s' actualizado" msgstr "Usuario '%(nick)s' actualizado"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Error inesperado." msgstr "Error inesperado."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Editar Usuario %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" 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" msgid "edit metadata"
msgstr "editar metainformación" msgstr "editar metainformación"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" 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" msgstr "No se permite subir archivos con la extensión \"%s\" a este servidor"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "El archivo a subir debe tener una extensión" msgstr "El archivo a subir debe tener una extensión"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Fallo al crear la ruta %s (permiso negado)" msgstr "Fallo al crear la ruta %s (permiso negado)"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Fallo al almacenar el archivo %s (permiso negado)" msgstr "Fallo al almacenar el archivo %s (permiso negado)"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Fallo al borrar el archivo %s (permiso negado)" msgstr "Fallo al borrar el archivo %s (permiso negado)"
@ -647,7 +657,7 @@ msgstr "Descripcion"
msgid "Tags" msgid "Tags"
msgstr "Etiqueta" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Series" msgstr "Series"
@ -734,7 +744,7 @@ msgstr "Haga clic en la portada para cargar la metainformación en el formulario
msgid "Loading..." msgid "Loading..."
msgstr "Cargando..." 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" msgid "Close"
msgstr "Cerrar" msgstr "Cerrar"
@ -943,7 +953,7 @@ msgstr "Guardar cambios"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Guardar cambios y enviar un correo de prueba" 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" msgid "Next"
msgstr "Siguiente" msgstr "Siguiente"
@ -988,7 +998,7 @@ msgstr "Libros recientes"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Mostrar libros al azar" 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" msgid "Authors"
msgstr "Autores" msgstr "Autores"
@ -1053,39 +1063,39 @@ msgstr ""
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Descubrir" msgstr "Descubrir"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Categoria" 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" msgid "Languages"
msgstr "Lenguaje" msgstr "Lenguaje"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Estantes públicos" msgstr "Estantes públicos"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Sus estantes" msgstr "Sus estantes"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Crear un estante" 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" msgid "About"
msgstr "Acerca de" msgstr "Acerca de"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "" msgstr ""

@ -20,7 +20,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2017-10-26 22:42+0200\n"
"Last-Translator: Nicolas Roudninski <nicoroud@gmail.com>\n" "Last-Translator: Nicolas Roudninski <nicoroud@gmail.com>\n"
"Language: fr\n" "Language: fr\n"
@ -31,182 +31,192 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "non installé" msgstr "non installé"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "" msgstr ""
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "" msgstr ""
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "" msgstr ""
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Impossible d'envoyer le courriel : %s" msgstr "Impossible d'envoyer le courriel : %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "" 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." msgid "This email has been sent via calibre web."
msgstr "Ce message a été envoyé depuis 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" msgid "Send to Kindle"
msgstr "Envoyer vers 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" msgid "Could not find any formats suitable for sending by email"
msgstr "Impossible de trouver un format adapté à envoyer par courriel" 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Invité" msgstr "Invité"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "" msgstr ""
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Téléchargement la mise à jour" msgstr "Téléchargement la mise à jour"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Décompression de la mise à jour" msgstr "Décompression de la mise à jour"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Fichiers remplacés" msgstr "Fichiers remplacés"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Connexion à la base de donnée fermée" msgstr "Connexion à la base de donnée fermée"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Serveur arrêté" msgstr "Serveur arrêté"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Mise à jour terminée, merci dappuyer sur okay et de rafraîchir la page" msgstr "Mise à jour terminée, merci dappuyer sur okay et de rafraîchir la page"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "Ajouts récents" msgstr "Ajouts récents"
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "Livres récents" msgstr "Livres récents"
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "Anciens livres" msgstr "Anciens livres"
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "Livres (A-Z)" msgstr "Livres (A-Z)"
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "Livres (Z-A)" msgstr "Livres (Z-A)"
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Livres populaires (les plus téléchargés)" msgstr "Livres populaires (les plus téléchargés)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Livres les mieux notés" 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" msgid "Random Books"
msgstr "Livres au hasard" msgstr "Livres au hasard"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Liste des auteurs" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
"Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est " "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est "
"pas accessible :" "pas accessible :"
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "Liste des séries" msgstr "Liste des séries"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Séries : %(serie)s" msgstr "Séries : %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Langues disponibles" msgstr "Langues disponibles"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Langue : %(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" msgid "Category list"
msgstr "Liste des catégories" msgstr "Liste des catégories"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Catégorie : %(name)s" msgstr "Catégorie : %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "" msgstr ""
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Statistiques" msgstr "Statistiques"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Serveur redémarré, merci de rafraîchir la 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" msgid "Performing shutdown of server, please close window"
msgstr "" msgstr ""
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Mise à jour effectuée" msgstr "Mise à jour effectuée"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "recherche" msgstr "recherche"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Livres lus" msgstr "Livres lus"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Livres non-lus" msgstr "Livres non-lus"
@ -214,7 +224,7 @@ msgstr "Livres non-lus"
msgid "Read a Book" msgid "Read a Book"
msgstr "Lire un livre" 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!" msgid "Please fill out all fields!"
msgstr "SVP, complétez tous les champs !" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Il y a eu une erreur en envoyant ce livre : %(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..." msgid "Please configure your kindle email address first..."
msgstr "Veuillez configurer votre adresse kindle d'abord..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Le livre a été supprimé de l'étagère %(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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Une étagère de ce nom '%(title)s' existe déjà." msgstr "Une étagère de ce nom '%(title)s' existe déjà."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Étagère %(title)s créée" 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" msgid "There was an error"
msgstr "Il y a eu une erreur" 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" msgid "create a shelf"
msgstr "créer une étagère" msgstr "créer une étagère"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "" msgstr ""
#: cps/web.py:2219 cps/web.py:2221 #: cps/web.py:2221 cps/web.py:2223
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "Modifier une étagère" msgstr "Modifier une étagère"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "létagère %(name)s a été supprimé avec succès" msgstr "létagère %(name)s a été supprimé avec succès"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Étagère : '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "" msgstr ""
#: cps/web.py:2368 #: cps/web.py:2369
msgid "Found an existing account for this email address." msgid "Found an existing account for this email address."
msgstr "Un compte avec cette adresse de courriel existe déjà." 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "Profil de %(name)s" msgstr "Profil de %(name)s"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Profil mis à jour" msgstr "Profil mis à jour"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Page administrateur" msgstr "Page administrateur"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Configuration de Calibre-web mise à jour" 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" msgid "Basic Configuration"
msgstr "Configuration basique" msgstr "Configuration basique"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "" 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" msgid "Add new user"
msgstr "Ajouter un nouvel utilisateur" msgstr "Ajouter un nouvel utilisateur"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Utilisateur '%(user)s' créé" msgstr "Utilisateur '%(user)s' créé"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." 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à." 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" msgid "Mail settings updated"
msgstr "Paramètres de courriel mis à jour" msgstr "Paramètres de courriel mis à jour"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:2642 #: cps/web.py:2643
msgid "E-Mail settings updated" msgid "E-Mail settings updated"
msgstr "Préférences e-mail mises à jour" msgstr "Préférences e-mail mises à jour"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Éditer les paramètres de courriel" msgstr "Éditer les paramètres de courriel"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Utilisateur '%(nick)s' supprimé" msgstr "Utilisateur '%(nick)s' supprimé"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Utilisateur '%(nick)s' mis à jour" msgstr "Utilisateur '%(nick)s' mis à jour"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Oups ! Une erreur inconnue a eu lieu." msgstr "Oups ! Une erreur inconnue a eu lieu."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Éditer l'utilisateur %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" msgstr ""
"Erreur à louverture du livre. Le fichier nexiste pas ou nest pas " "Erreur à louverture du livre. Le fichier nexiste pas ou nest pas "
"accessible" "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" msgid "edit metadata"
msgstr "modifier les métadonnées" msgstr "modifier les métadonnées"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "" msgstr ""
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "inconnu" msgstr "inconnu"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Pour être téléverser le fichier doit avoir une extension" msgstr "Pour être téléverser le fichier doit avoir une extension"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Impossible de créer le chemin %s (permission refusée)" msgstr "Impossible de créer le chemin %s (permission refusée)"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" msgstr "Impossible d'enregistrer le fichier %s (permission refusée)"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Impossible de supprimer le fichier %s (permission refusée)" msgstr "Impossible de supprimer le fichier %s (permission refusée)"
@ -655,7 +665,7 @@ msgstr "Description"
msgid "Tags" msgid "Tags"
msgstr "Étiquette" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Séries" msgstr "Séries"
@ -742,7 +752,7 @@ msgstr ""
msgid "Loading..." msgid "Loading..."
msgstr "Chargement…" 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" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
@ -951,7 +961,7 @@ msgstr "Sauvegarder les réglages"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Sauvegarder les réglages et tester lenvoi de-mail" msgstr "Sauvegarder les réglages et tester lenvoi de-mail"
#: cps/templates/feed.xml:20 cps/templates/layout.html:189 #: cps/templates/feed.xml:20 cps/templates/layout.html:191
msgid "Next" msgid "Next"
msgstr "Suivant" msgstr "Suivant"
@ -998,7 +1008,7 @@ msgstr "Les derniers livres"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Montrer des livres au hasard" 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" msgid "Authors"
msgstr "Auteurs" msgstr "Auteurs"
@ -1063,39 +1073,39 @@ msgstr "Ascendant"
msgid "Descending" msgid "Descending"
msgstr "Descendant" msgstr "Descendant"
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Découvrir" msgstr "Découvrir"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Catégories" 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" msgid "Languages"
msgstr "Langues" msgstr "Langues"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Étagères publiques" msgstr "Étagères publiques"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Vos étagères" msgstr "Vos étagères"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Créer une étagère" 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" msgid "About"
msgstr "À propos" msgstr "À propos"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "Précédent" msgstr "Précédent"
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "Détails du livre" msgstr "Détails du livre"

@ -14,7 +14,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2017-04-04 15:09+0200\n"
"Last-Translator: Marco Picone <marcovendere@gmail.com>\n" "Last-Translator: Marco Picone <marcovendere@gmail.com>\n"
"Language: it\n" "Language: it\n"
@ -25,182 +25,192 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "non installato" msgstr "non installato"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "Non trovato" msgstr "Non trovato"
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "formato epub non trovato" msgstr "formato epub non trovato"
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "non ci sono permessi" msgstr "non ci sono permessi"
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "errore" msgstr "errore"
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Impossibile inviare email: %s" msgstr "Impossibile inviare email: %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "test email Calibre-web" 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." msgid "This email has been sent via calibre web."
msgstr "L'email è stata inviata tramite 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" msgid "Send to Kindle"
msgstr "Invia a 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" msgid "Could not find any formats suitable for sending by email"
msgstr "Impossibile trovare i formati adatti per l'invio tramite 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "ospite" msgstr "ospite"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Richiesta del pacchetto di aggiornamento" msgstr "Richiesta del pacchetto di aggiornamento"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Scaricare il pacchetto di aggiornamento" msgstr "Scaricare il pacchetto di aggiornamento"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Decomprimere pacchetto di aggiornamento" msgstr "Decomprimere pacchetto di aggiornamento"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "I file vengono sostituiti" msgstr "I file vengono sostituiti"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Le connessioni di database sono chiuse" msgstr "Le connessioni di database sono chiuse"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Il server viene arrestato" msgstr "Il server viene arrestato"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Aggiornamento completato, prego premere bene e ricaricare pagina" msgstr "Aggiornamento completato, prego premere bene e ricaricare pagina"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "Libri aggiunti di recente" msgstr "Libri aggiunti di recente"
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "I più nuovi libri" msgstr "I più nuovi libri"
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "Libri più vecchi" msgstr "Libri più vecchi"
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "Ebook (A-Z)" msgstr "Ebook (A-Z)"
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "Ebook (Z-A)" msgstr "Ebook (Z-A)"
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Hot Books (più scaricati)" msgstr "Hot Books (più scaricati)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "I migliori libri valutati" 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" msgid "Random Books"
msgstr "Libri casuali" msgstr "Libri casuali"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Elenco degli autori" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
"Errore durante l'apertura di eBook. Il file non esiste o il file non è " "Errore durante l'apertura di eBook. Il file non esiste o il file non è "
"accessibile:" "accessibile:"
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "Lista delle serie" msgstr "Lista delle serie"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Serie :" msgstr "Serie :"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Lingue disponibili" msgstr "Lingue disponibili"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Lingue: %(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" msgid "Category list"
msgstr "Elenco categorie" msgstr "Elenco categorie"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Categoria : %(name)s" msgstr "Categoria : %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "Mancano autorizzazioni di esecuzione" msgstr "Mancano autorizzazioni di esecuzione"
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Statistica" msgstr "Statistica"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Server riavviato, ricarica pagina" msgstr "Server riavviato, ricarica pagina"
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "Eseguire l'arresto del server, chiudi la finestra." msgstr "Eseguire l'arresto del server, chiudi la finestra."
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Aggiornamento fatto" msgstr "Aggiornamento fatto"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "ricerca" msgstr "ricerca"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Leggere libri" msgstr "Leggere libri"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Libri non letti" msgstr "Libri non letti"
@ -208,7 +218,7 @@ msgstr "Libri non letti"
msgid "Read a Book" msgid "Read a Book"
msgstr "Leggere un libro" 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!" msgid "Please fill out all fields!"
msgstr "Compila tutti i campi" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Si è verificato un errore durante l'invio di questo libro: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Si prega di configurare innanzitutto il tuo indirizzo email..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "Il libro è stato aggiunto alla mensola: %(sname)s" msgstr "Il libro è stato aggiunto alla mensola: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Il libro è stato rimosso dalla mensola: %(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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Uno scaffale con il nome '%(title)s' esiste già." msgstr "Uno scaffale con il nome '%(title)s' esiste già."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Mensola %(title)s creato" 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" msgid "There was an error"
msgstr "c'era un errore" 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" msgid "create a shelf"
msgstr "creare uno scaffale" msgstr "creare uno scaffale"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Mensola %(title)s cambiato" 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" msgid "Edit a shelf"
msgstr "Modifica un ripiano" msgstr "Modifica un ripiano"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "cancellato con successo il ripiano %(name)s" msgstr "cancellato con successo il ripiano %(name)s"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Mensola: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
"Errore durante l'apertura dello scaffale. La mensola non esiste o non è " "Errore durante l'apertura dello scaffale. La mensola non esiste o non è "
"accessibile" "accessibile"
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Modificare l'ordine della mensola: '%(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." msgid "Found an existing account for this email address."
msgstr "Trovato un account esistente per questo indirizzo email." 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "Profilo di %(name)s" msgstr "Profilo di %(name)s"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Profilo aggiornato" msgstr "Profilo aggiornato"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Pagina di amministrazione" msgstr "Pagina di amministrazione"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Aggiornamento della configurazione del calibro-web" 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" msgid "Basic Configuration"
msgstr "Configurazione di base" msgstr "Configurazione di base"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "Posizione DB non valida. Inserisci il percorso corretto." 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" msgid "Add new user"
msgstr "Aggiungi un nuovo utente" msgstr "Aggiungi un nuovo utente"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "utente '%(user)s' creato" msgstr "utente '%(user)s' creato"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "" msgstr ""
"È stato trovato un account collegato a questo indirizzo e-mail o nome " "È stato trovato un account collegato a questo indirizzo e-mail o nome "
"utente." "utente."
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "Parametri di posta aggiornati" msgstr "Parametri di posta aggiornati"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Successo quando invii il test a %(kindlemail)s" msgstr "Successo quando invii il test a %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Impossibile inviare il test a 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" msgid "E-Mail settings updated"
msgstr "Impostazioni email aggiornate" msgstr "Impostazioni email aggiornate"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Modificare i parametri della posta" msgstr "Modificare i parametri della posta"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "utente '%(nick)s' cancellati" msgstr "utente '%(nick)s' cancellati"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "utente '%(nick)s' aggiornato" msgstr "utente '%(nick)s' aggiornato"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Errore imprevisto." msgstr "Errore imprevisto."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Modifica utente %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" msgstr ""
"Errore durante l'apertura di eBook. Il file non esiste o il file non è " "Errore durante l'apertura di eBook. Il file non esiste o il file non è "
"accessibile" "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" msgid "edit metadata"
msgstr "modificare la metainformazione" msgstr "modificare la metainformazione"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" 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" msgstr "Non è consentito caricare i file con l'estensione \"%s\" a questo server"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "Sconosciuto" msgstr "Sconosciuto"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Il file da caricare deve avere un'estensione" msgstr "Il file da caricare deve avere un'estensione"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Impossibile creare il percorso %s (autorizzazione negata)" msgstr "Impossibile creare il percorso %s (autorizzazione negata)"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Impossibile archiviare il file %s (autorizzazione negata)" msgstr "Impossibile archiviare il file %s (autorizzazione negata)"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Impossibile eliminare il file %s (autorizzazione negata)" msgstr "Impossibile eliminare il file %s (autorizzazione negata)"
@ -653,7 +663,7 @@ msgstr "Descrizione"
msgid "Tags" msgid "Tags"
msgstr "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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Serie" msgstr "Serie"
@ -740,7 +750,7 @@ msgstr "Fai clic sul coperchio per caricare i metadati nel modulo"
msgid "Loading..." msgid "Loading..."
msgstr "Caricamento in corso..." 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" msgid "Close"
msgstr "Chiuso" msgstr "Chiuso"
@ -949,7 +959,7 @@ msgstr "Salva le impostazioni"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Salvare le impostazioni e inviare 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" msgid "Next"
msgstr "Prossimo" msgstr "Prossimo"
@ -994,7 +1004,7 @@ msgstr "Gli ultimi Libri"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Mostra libri casuali" 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" msgid "Authors"
msgstr "Autori" msgstr "Autori"
@ -1059,39 +1069,39 @@ msgstr "Ascendente"
msgid "Descending" msgid "Descending"
msgstr "Discendente" msgstr "Discendente"
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Per scoprire" msgstr "Per scoprire"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Categoria" 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" msgid "Languages"
msgstr "lingua" msgstr "lingua"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Ripiani pubblici" msgstr "Ripiani pubblici"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "I tuoi scaffali" msgstr "I tuoi scaffali"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Crea una mensola" 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" msgid "About"
msgstr "Di" msgstr "Di"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "Precedente" msgstr "Precedente"
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "Dettagli ebook" msgstr "Dettagli ebook"

@ -22,7 +22,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web dutch translation by Ed Driesen (GPL V3)\n" "Project-Id-Version: Calibre-web dutch translation by Ed Driesen (GPL V3)\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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" "PO-Revision-Date: 2017-06-21 20:15+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language: nl\n" "Language: nl\n"
@ -33,182 +33,192 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "niet geïnstalleerd" msgstr "niet geïnstalleerd"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "kindlegen binary %(kindlepath)s niet gevonden" msgstr "kindlegen binary %(kindlepath)s niet gevonden"
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "epub type niet gevonden voor boek met 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" msgid "kindlegen failed, no execution permissions"
msgstr "kindlegen gefaald, geen rechten om uit te voeren" msgstr "kindlegen gefaald, geen rechten om uit te voeren"
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen gefaald met Error %(error)s. Bericht: %(message)s" msgstr "Kindlegen gefaald met Error %(error)s. Bericht: %(message)s"
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Mail sturen gefaald: %s" msgstr "Mail sturen gefaald: %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "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." msgid "This email has been sent via calibre web."
msgstr "Deze mail werd verstuurd met 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" msgid "Send to Kindle"
msgstr "Stuur naar 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" msgid "Could not find any formats suitable for sending by email"
msgstr "Kon geen geschikte formaten vinden om te verzenden per 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Gast" msgstr "Gast"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Update pakket wordt aangevraagd" msgstr "Update pakket wordt aangevraagd"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Update pakket wordt gedownload" msgstr "Update pakket wordt gedownload"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Update pakket wordt uitgepakt" msgstr "Update pakket wordt uitgepakt"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Bestanden zijn vervangen" msgstr "Bestanden zijn vervangen"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Database verbindingen zijn gesloten" msgstr "Database verbindingen zijn gesloten"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Server is gestopt" msgstr "Server is gestopt"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Update voltooid, klik op ok en herlaad de pagina" msgstr "Update voltooid, klik op ok en herlaad de pagina"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "Recent toegevoegde boeken" msgstr "Recent toegevoegde boeken"
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "Nieuwste boeken" msgstr "Nieuwste boeken"
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "Oudste boeken" msgstr "Oudste boeken"
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "Boeken (A-Z)" msgstr "Boeken (A-Z)"
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "Boeken (A-Z)" msgstr "Boeken (A-Z)"
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Populaire boeken (meeste downloads)" msgstr "Populaire boeken (meeste downloads)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Best beoordeelde boeken" 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" msgid "Random Books"
msgstr "Willekeurige boeken" msgstr "Willekeurige boeken"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Auteur lijst" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
"Fout bij openen van het boek. Bestand bestaat niet of is niet " "Fout bij openen van het boek. Bestand bestaat niet of is niet "
"toegankelijk:" "toegankelijk:"
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "Serie lijst" msgstr "Serie lijst"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Serie: %(serie)s" msgstr "Serie: %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Beschikbare talen" msgstr "Beschikbare talen"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Taal: %(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" msgid "Category list"
msgstr "Categorie lijst" msgstr "Categorie lijst"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Categorie: %(name)s" msgstr "Categorie: %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "Rechten om uit te voeren ontbreken" msgstr "Rechten om uit te voeren ontbreken"
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Statistieken" msgstr "Statistieken"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Server herstart, gelieve de pagina herladen" msgstr "Server herstart, gelieve de pagina herladen"
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "Bezig met het stoppen van de server, gelieve venster te sluiten" msgstr "Bezig met het stoppen van de server, gelieve venster te sluiten"
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Update voltooid" msgstr "Update voltooid"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "zoek" msgstr "zoek"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Gelezen Boeken" msgstr "Gelezen Boeken"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Ongelezen Boeken" msgstr "Ongelezen Boeken"
@ -216,7 +226,7 @@ msgstr "Ongelezen Boeken"
msgid "Read a Book" msgid "Read a Book"
msgstr "Lees een boek" 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!" msgid "Please fill out all fields!"
msgstr "Gelieve alle velden in te vullen!" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Er trad een fout op bij het versturen van dit boek: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Gelieve eerst je kindle email adres te configureren..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Boek werd verwijderd van boekenplank: %(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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds." msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Boekenplank %(title)s aangemaakt" 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" msgid "There was an error"
msgstr "Er deed zich een fout voor" 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" msgid "create a shelf"
msgstr "maak een boekenplank" msgstr "maak een boekenplank"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Boekenplank %(title)s gewijzigd" 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" msgid "Edit a shelf"
msgstr "Bewerk een boekenplank" msgstr "Bewerk een boekenplank"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "Boekenplank %(name)s succesvol gewist" msgstr "Boekenplank %(name)s succesvol gewist"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Boekenplank: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
"Fout bij openen boekenplank. Boekenplank bestaat niet of is niet " "Fout bij openen boekenplank. Boekenplank bestaat niet of is niet "
"toegankelijk" "toegankelijk"
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Verander volgorde van Boekenplank: '%(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." msgid "Found an existing account for this email address."
msgstr "Een bestaand gebruiker gevonden voor dit email adres." 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "%(name)s's profiel" msgstr "%(name)s's profiel"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Profiel aangepast" msgstr "Profiel aangepast"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Administratie pagina" msgstr "Administratie pagina"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Calibre-web configuratie aangepast" 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" msgid "Basic Configuration"
msgstr "Basis configuratie" msgstr "Basis configuratie"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "DB locatie is niet geldig, gelieve het correcte pad in te geven" 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" msgid "Add new user"
msgstr "Voeg nieuwe gebruiker toe" msgstr "Voeg nieuwe gebruiker toe"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Gebruiker '%(user)s' aangemaakt" msgstr "Gebruiker '%(user)s' aangemaakt"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "Een bestaande gebruiker gevonden voor dit emailadres of gebruikersnaam." msgstr "Een bestaande gebruiker gevonden voor dit emailadres of gebruikersnaam."
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "Mail instellingen aangepast" msgstr "Mail instellingen aangepast"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Test email met succes verstuurd naar %(kindlemail)s" msgstr "Test email met succes verstuurd naar %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" 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" 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" msgid "E-Mail settings updated"
msgstr "Email instellingen aangepast" msgstr "Email instellingen aangepast"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Bewerk mail instellingen" msgstr "Bewerk mail instellingen"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Gebruiker '%(nick)s' verwijderd" msgstr "Gebruiker '%(nick)s' verwijderd"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Gebruiker '%(nick)s' aangepast" msgstr "Gebruiker '%(nick)s' aangepast"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Een onbekende fout deed zich voor." msgstr "Een onbekende fout deed zich voor."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Bewerk gebruiker '%(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" 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" 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" msgid "edit metadata"
msgstr "Bewerk metadata" msgstr "Bewerk metadata"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" 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" msgstr "Het uploaden van bestandsextensie \"%s\" is niet toegestaan op deze server"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "Bestand opslaan niet gelukt voor %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" msgid "unknown"
msgstr "onbekend" msgstr "onbekend"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Up te loaden bestanden dienen een extensie te hebben" msgstr "Up te loaden bestanden dienen een extensie te hebben"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Het pad %s aanmaken mislukt (Geen toestemming)." msgstr "Het pad %s aanmaken mislukt (Geen toestemming)."
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Bestand %s opslaan mislukt (Geen toestemming)." msgstr "Bestand %s opslaan mislukt (Geen toestemming)."
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Bestand %s wissen mislukt (Geen toestemming)." msgstr "Bestand %s wissen mislukt (Geen toestemming)."
@ -657,7 +667,7 @@ msgstr "Omschrijving"
msgid "Tags" msgid "Tags"
msgstr "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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Series" msgstr "Series"
@ -744,7 +754,7 @@ msgstr "Klik op de omslag om de metatadata in het formulier te laden"
msgid "Loading..." msgid "Loading..."
msgstr "Aan het laden..." 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" msgid "Close"
msgstr "Sluit" msgstr "Sluit"
@ -953,7 +963,7 @@ msgstr "Bewaar instelling"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Bewaar instellingen en stuur test email" 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" msgid "Next"
msgstr "Volgende" msgstr "Volgende"
@ -998,7 +1008,7 @@ msgstr "Recentste boeken"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Toon Willekeurige Boeken" 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" msgid "Authors"
msgstr "Auteurs" msgstr "Auteurs"
@ -1063,39 +1073,39 @@ msgstr "Oplopend"
msgid "Descending" msgid "Descending"
msgstr "Aflopend" msgstr "Aflopend"
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Ontdek" msgstr "Ontdek"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Categorieën" 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" msgid "Languages"
msgstr "Talen" msgstr "Talen"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Publieke Boekenplanken" msgstr "Publieke Boekenplanken"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Jou Boekenplanken" msgstr "Jou Boekenplanken"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Maak een boekenplank" 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" msgid "About"
msgstr "Over" msgstr "Over"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "Vorige" msgstr "Vorige"
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "Boek Details" msgstr "Boek Details"

@ -12,7 +12,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre Web - polski (POT: 2017-04-11 22:51)\n" "Project-Id-Version: Calibre Web - polski (POT: 2017-04-11 22:51)\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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" "PO-Revision-Date: 2017-04-11 22:51+0200\n"
"Last-Translator: Radosław Kierznowski <radek.kierznowski@outlook.com>\n" "Last-Translator: Radosław Kierznowski <radek.kierznowski@outlook.com>\n"
"Language: pl\n" "Language: pl\n"
@ -24,182 +24,192 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "nie zainstalowane" msgstr "nie zainstalowane"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "" msgstr ""
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "" msgstr ""
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "" msgstr ""
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Nie można wysłać poczty: %s" msgstr "Nie można wysłać poczty: %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "Calibre-web testowy 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." msgid "This email has been sent via calibre web."
msgstr "Ten e-mail został wysłany przez 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" msgid "Send to Kindle"
msgstr "Wyślij do 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" msgid "Could not find any formats suitable for sending by email"
msgstr "" msgstr ""
"Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą " "Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą "
"e-mail" "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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Gość" msgstr "Gość"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Żądanie o pakiet aktualizacji" msgstr "Żądanie o pakiet aktualizacji"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Pobieranie pakietu aktualizacji" msgstr "Pobieranie pakietu aktualizacji"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Rozpakowywanie pakietu aktualizacji" msgstr "Rozpakowywanie pakietu aktualizacji"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Pliki zostały zastąpione" msgstr "Pliki zostały zastąpione"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Połączenia z bazą danych zostały zakończone" msgstr "Połączenia z bazą danych zostały zakończone"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Serwer jest zatrzymany" msgstr "Serwer jest zatrzymany"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "" msgstr ""
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "" msgstr ""
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "" msgstr ""
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "" msgstr ""
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "" msgstr ""
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Najpopularniejsze książki (najczęściej pobierane)" msgstr "Najpopularniejsze książki (najczęściej pobierane)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Najlepiej oceniane książki" 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" msgid "Random Books"
msgstr "Losowe książki" msgstr "Losowe książki"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Lista autorów" 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:" 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:" 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" msgid "Series list"
msgstr "Lista serii" msgstr "Lista serii"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Seria: %(serie)s" msgstr "Seria: %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Dostępne języki" msgstr "Dostępne języki"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Język: %(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" msgid "Category list"
msgstr "Lista kategorii" msgstr "Lista kategorii"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Kategoria: %(name)s" msgstr "Kategoria: %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "" msgstr ""
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Statystyki" msgstr "Statystyki"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" 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" msgid "Performing shutdown of server, please close window"
msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno"
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Aktualizacja zakończona" msgstr "Aktualizacja zakończona"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "szukaj" msgstr "szukaj"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Przeczytane książki" msgstr "Przeczytane książki"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Nieprzeczytane książki" msgstr "Nieprzeczytane książki"
@ -207,7 +217,7 @@ msgstr "Nieprzeczytane książki"
msgid "Read a Book" msgid "Read a Book"
msgstr "Czytaj książkę" 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!" msgid "Please fill out all fields!"
msgstr "Proszę wypełnić wszystkie pola!" 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" msgid "There was an error sending this book: %(res)s"
msgstr "Wystąpił błąd podczas wysyłania tej książki: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." 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" msgid "Book has been added to shelf: %(sname)s"
msgstr "Książka została dodana do półki: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Książka została usunięta z półki: %(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 #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Półka o nazwie '%(title)s' już istnieje." msgstr "Półka o nazwie '%(title)s' już istnieje."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Półka %(title)s została utworzona" 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" msgid "There was an error"
msgstr "Wystąpił błąd" 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" msgid "create a shelf"
msgstr "utwórz półkę" msgstr "utwórz półkę"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Półka %(title)s została zmieniona" 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" msgid "Edit a shelf"
msgstr "Edytuj półkę" msgstr "Edytuj półkę"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "pomyślnie usunięto półkę %(name)s" msgstr "pomyślnie usunięto półkę %(name)s"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Półka: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Zmieniono kolejność półki: '%(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." msgid "Found an existing account for this email address."
msgstr "Znaleziono istniejące konto dla tego adresu e-mail." 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 #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "Profil użytkownika %(name)s" msgstr "Profil użytkownika %(name)s"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Zaktualizowano profil" msgstr "Zaktualizowano profil"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Portal administracyjny" msgstr "Portal administracyjny"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Konfiguracja Calibre-web została zaktualizowana" 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" msgid "Basic Configuration"
msgstr "Podstawowa konfiguracja" msgstr "Podstawowa konfiguracja"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę" 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" msgid "Add new user"
msgstr "Dodaj nowego użytkownika" msgstr "Dodaj nowego użytkownika"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Użytkownik '%(user)s' został utworzony" 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." 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." 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" msgid "Mail settings updated"
msgstr "Zaktualizowano ustawienia poczty e-mail" msgstr "Zaktualizowano ustawienia poczty e-mail"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s" msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" 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" 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" msgid "E-Mail settings updated"
msgstr "Zaktualizowano ustawienia e-mail" msgstr "Zaktualizowano ustawienia e-mail"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Edytuj ustawienia poczty e-mail" msgstr "Edytuj ustawienia poczty e-mail"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Użytkownik '%(nick)s' został usunięty" msgstr "Użytkownik '%(nick)s' został usunięty"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Użytkownik '%(nick)s' został zaktualizowany" msgstr "Użytkownik '%(nick)s' został zaktualizowany"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Wystąpił nieznany błąd." msgstr "Wystąpił nieznany błąd."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Edytuj użytkownika %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" 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" msgid "edit metadata"
msgstr "edytuj metadane" msgstr "edytuj metadane"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" 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" msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Plik do przesłania musi mieć rozszerzenie" msgstr "Plik do przesłania musi mieć rozszerzenie"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)."
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)."
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)."
@ -646,7 +656,7 @@ msgstr "Opis"
msgid "Tags" msgid "Tags"
msgstr "Tagi" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Seria" msgstr "Seria"
@ -733,7 +743,7 @@ msgstr "Kliknij okładkę, aby załadować metadane do formularza"
msgid "Loading..." msgid "Loading..."
msgstr "Ładowanie..." 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" msgid "Close"
msgstr "Zamknij" msgstr "Zamknij"
@ -943,7 +953,7 @@ msgstr "Zapisz ustawienia"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Zapisz ustawienia i wyślij testową wiadomość 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" msgid "Next"
msgstr "Następne" msgstr "Następne"
@ -988,7 +998,7 @@ msgstr "Ostatnie książki"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Pokazuj losowe książki" 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" msgid "Authors"
msgstr "Autorzy" msgstr "Autorzy"
@ -1053,39 +1063,39 @@ msgstr ""
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Odkrywaj" msgstr "Odkrywaj"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Kategorie" 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" msgid "Languages"
msgstr "Języki" msgstr "Języki"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Publiczne półki" msgstr "Publiczne półki"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Twoje półki" msgstr "Twoje półki"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Utwórz półkę" 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" msgid "About"
msgstr "O programie" msgstr "O programie"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "" msgstr ""

@ -14,7 +14,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2017-04-30 00:47+0300\n"
"Last-Translator: Pavel Korovin <p@tristero.se>\n" "Last-Translator: Pavel Korovin <p@tristero.se>\n"
"Language: ru\n" "Language: ru\n"
@ -26,180 +26,190 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "Отсутствует" msgstr "Отсутствует"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "" msgstr ""
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "" msgstr ""
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "" msgstr ""
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "Ошибка отправки письма: %s" msgstr "Ошибка отправки письма: %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "Тестовое письмо от Calibre-web" 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." msgid "This email has been sent via calibre web."
msgstr "Письмо было отправлено через 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" msgid "Send to Kindle"
msgstr "Отправить на 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" msgid "Could not find any formats suitable for sending by email"
msgstr "Невозоможно найти формат, подходящий для отправки по 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "Гость" msgstr "Гость"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "Проверка обновлений" msgstr "Проверка обновлений"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "Загрузка обновлений" msgstr "Загрузка обновлений"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "Распаковка обновлений" msgstr "Распаковка обновлений"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "Файлы заменены" msgstr "Файлы заменены"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "Соеднинения с базой данных закрыты" msgstr "Соеднинения с базой данных закрыты"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "Сервер остановлен" msgstr "Сервер остановлен"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "" msgstr ""
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "" msgstr ""
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "" msgstr ""
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "" msgstr ""
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "" msgstr ""
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "Популярные книги (часто загружаемые)" msgstr "Популярные книги (часто загружаемые)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "Книги с наивысшим рейтингом" msgstr "Книги с наивысшим рейтингом"
#: cps/templates/index.xml:32 cps/web.py:1140 #: cps/templates/index.xml:32 cps/web.py:1144
msgid "Random Books" msgid "Random Books"
msgstr "Случайный выбор" msgstr "Случайный выбор"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "Авторы" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "Невозможно открыть книгу. Файл не существует или недоступен." msgstr "Невозможно открыть книгу. Файл не существует или недоступен."
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "Серии" msgstr "Серии"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "Серии: %(serie)s" msgstr "Серии: %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "Языки" msgstr "Языки"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "Язык: %(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" msgid "Category list"
msgstr "Категории" msgstr "Категории"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "Категория: %(name)s" msgstr "Категория: %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "" msgstr ""
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "Статистика" msgstr "Статистика"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу"
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "Производится остановка сервера, пожалуйста, закройте окно" msgstr "Производится остановка сервера, пожалуйста, закройте окно"
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "Обновление закончено" msgstr "Обновление закончено"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "поиск" msgstr "поиск"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "Прочитанные" msgstr "Прочитанные"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "Непрочитанные" msgstr "Непрочитанные"
@ -207,7 +217,7 @@ msgstr "Непрочитанные"
msgid "Read a Book" msgid "Read a Book"
msgstr "Читать книгу" msgstr "Читать книгу"
#: cps/web.py:1925 cps/web.py:2555 #: cps/web.py:1925 cps/web.py:2556
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "Пожалуйста, заполните все поля!" msgstr "Пожалуйста, заполните все поля!"
@ -262,7 +272,7 @@ msgstr "Книга успешно отправлена на %(kindlemail)s"
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "Ошибка при отправке книги: %(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..." msgid "Please configure your kindle email address first..."
msgstr "Пожалуйста, сначала укажите ваш kindle email..." msgstr "Пожалуйста, сначала укажите ваш kindle email..."
@ -271,177 +281,177 @@ msgstr "Пожалуйста, сначала укажите ваш kindle email.
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "Книга добавлена на книжную полку: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "Книга удалена с книжной полки: %(sname)s" msgstr "Книга удалена с книжной полки: %(sname)s"
#: cps/web.py:2183 cps/web.py:2207 #: cps/web.py:2185 cps/web.py:2209
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "Книжкная полка с названием '%(title)s' уже существует." msgstr "Книжкная полка с названием '%(title)s' уже существует."
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "Создана книжная полка %(title)s" msgstr "Создана книжная полка %(title)s"
#: cps/web.py:2190 cps/web.py:2218 #: cps/web.py:2192 cps/web.py:2220
msgid "There was an error" msgid "There was an error"
msgstr "Произошла ошибка" msgstr "Произошла ошибка"
#: cps/web.py:2191 cps/web.py:2193 #: cps/web.py:2193 cps/web.py:2195
msgid "create a shelf" msgid "create a shelf"
msgstr "создать книжную полку" msgstr "создать книжную полку"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "Книжная полка %(title)s изменена" msgstr "Книжная полка %(title)s изменена"
#: cps/web.py:2219 cps/web.py:2221 #: cps/web.py:2221 cps/web.py:2223
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "Изменить книжную полку" msgstr "Изменить книжную полку"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "Книжная полка %(name)s удалена" msgstr "Книжная полка %(name)s удалена"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "Книжная полка: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "Изменить расположение книжной полки '%(name)s'" msgstr "Изменить расположение книжной полки '%(name)s'"
#: cps/web.py:2368 #: cps/web.py:2369
msgid "Found an existing account for this email address." msgid "Found an existing account for this email address."
msgstr "Найдена учётная запись для для данного адреса email." msgstr "Найдена учётная запись для для данного адреса email."
#: cps/web.py:2370 cps/web.py:2374 #: cps/web.py:2371 cps/web.py:2375
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "Профиль %(name)s" msgstr "Профиль %(name)s"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "Профиль обновлён" msgstr "Профиль обновлён"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "Администрирование" msgstr "Администрирование"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Конфигурация Calibre-web обновлена" 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" msgid "Basic Configuration"
msgstr "Настройки сервера" msgstr "Настройки сервера"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД" 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" msgid "Add new user"
msgstr "Добавить пользователя" msgstr "Добавить пользователя"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "Пользователь '%(user)s' добавлен" msgstr "Пользователь '%(user)s' добавлен"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "Для указанного адреса или имени найдена существующая учётная запись." msgstr "Для указанного адреса или имени найдена существующая учётная запись."
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "Настройки почты изменены" msgstr "Настройки почты изменены"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s" msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "Ошибка отправки тестового сообщения: %(res)s" msgstr "Ошибка отправки тестового сообщения: %(res)s"
#: cps/web.py:2642 #: cps/web.py:2643
msgid "E-Mail settings updated" msgid "E-Mail settings updated"
msgstr "Обновлены настройки e-mail" msgstr "Обновлены настройки e-mail"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "Изменить почтовые настройки" msgstr "Изменить почтовые настройки"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "Пользователь '%(nick)s' удалён" msgstr "Пользователь '%(nick)s' удалён"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "Пользователь '%(nick)s' обновлён" msgstr "Пользователь '%(nick)s' обновлён"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "Произошла неизвестная ошибка." msgstr "Произошла неизвестная ошибка."
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "Изменить пользователя %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" 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" msgid "edit metadata"
msgstr "изменить метаданные" msgstr "изменить метаданные"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "Запрещена загрузка файлов с расширением \"%s\"" msgstr "Запрещена загрузка файлов с расширением \"%s\""
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "неизвестно" msgstr "неизвестно"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "Загружаемый файл должен иметь расширение" msgstr "Загружаемый файл должен иметь расширение"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "Ошибка при создании пути %s (доступ запрещён)" msgstr "Ошибка при создании пути %s (доступ запрещён)"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "Ошибка записи файоа %s (доступ запрещён)" msgstr "Ошибка записи файоа %s (доступ запрещён)"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "Ошибка удаления файла %s (доступ запрещён)" msgstr "Ошибка удаления файла %s (доступ запрещён)"
@ -646,7 +656,7 @@ msgstr "Описание"
msgid "Tags" msgid "Tags"
msgstr "Теги" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "Серии" msgstr "Серии"
@ -733,7 +743,7 @@ msgstr "Нажмите на обложку, чтобы получить мета
msgid "Loading..." msgid "Loading..."
msgstr "Загрузка..." 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" msgid "Close"
msgstr "Закрыть" msgstr "Закрыть"
@ -940,7 +950,7 @@ msgstr "Сохранить настройки"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "Сохранить настройки и отправить тестовое письмо" msgstr "Сохранить настройки и отправить тестовое письмо"
#: cps/templates/feed.xml:20 cps/templates/layout.html:189 #: cps/templates/feed.xml:20 cps/templates/layout.html:191
msgid "Next" msgid "Next"
msgstr "Дальше" msgstr "Дальше"
@ -985,7 +995,7 @@ msgstr "Последние поступления"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "Показывать случайные книги" msgstr "Показывать случайные книги"
#: cps/templates/index.xml:52 cps/templates/layout.html:144 #: cps/templates/index.xml:52 cps/templates/layout.html:146
msgid "Authors" msgid "Authors"
msgstr "Авторы" msgstr "Авторы"
@ -1050,39 +1060,39 @@ msgstr ""
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "Обзор" msgstr "Обзор"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "Категории" 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" msgid "Languages"
msgstr "Языки" msgstr "Языки"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "Общие книжные полки" msgstr "Общие книжные полки"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "Ваши книжные полки" msgstr "Ваши книжные полки"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "Создать книжную полку" msgstr "Создать книжную полку"
#: cps/templates/layout.html:160 cps/templates/stats.html:3 #: cps/templates/layout.html:162 cps/templates/stats.html:3
msgid "About" msgid "About"
msgstr "О программе" msgstr "О программе"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "" msgstr ""

@ -15,7 +15,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-web\n" "Project-Id-Version: Calibre-web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2017-01-06 17:00+0000\n"
"Last-Translator: dalin <dalin.lin@gmail.com>\n" "Last-Translator: dalin <dalin.lin@gmail.com>\n"
"Language: zh_Hans_CN\n" "Language: zh_Hans_CN\n"
@ -26,180 +26,190 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "未安装" msgstr "未安装"
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "找不到kindlegen二进制 %(kindlepath)s" msgstr "找不到kindlegen二进制 %(kindlepath)s"
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "没有找到书籍ID %(book)d 的epub格式" msgstr "没有找到书籍ID %(book)d 的epub格式"
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "kindlegen失败没有可执行权限" msgstr "kindlegen失败没有可执行权限"
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s" msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s"
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "发送邮件失败: %s" msgstr "发送邮件失败: %s"
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "Calibre-web 测试邮件" 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." msgid "This email has been sent via calibre web."
msgstr "此邮件由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" msgid "Send to Kindle"
msgstr "发送到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" msgid "Could not find any formats suitable for sending by email"
msgstr "无法找到适合邮件发送的格式" 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "游客" msgstr "游客"
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "正在请求更新包" msgstr "正在请求更新包"
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "正在下载更新包" msgstr "正在下载更新包"
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "正在解压更新包" msgstr "正在解压更新包"
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "文件已替换" msgstr "文件已替换"
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "数据库连接已关闭" msgstr "数据库连接已关闭"
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "服务器已停止" msgstr "服务器已停止"
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "更新完成,请按确定并刷新页面" msgstr "更新完成,请按确定并刷新页面"
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "最近添加的书籍" msgstr "最近添加的书籍"
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "最新书籍" msgstr "最新书籍"
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "最旧书籍" msgstr "最旧书籍"
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "书籍 (A-Z)" msgstr "书籍 (A-Z)"
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "书籍 (Z-A)" msgstr "书籍 (Z-A)"
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "热门书籍(最多下载)" msgstr "热门书籍(最多下载)"
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "最高评分书籍" msgstr "最高评分书籍"
#: cps/templates/index.xml:32 cps/web.py:1140 #: cps/templates/index.xml:32 cps/web.py:1144
msgid "Random Books" msgid "Random Books"
msgstr "随机书籍" msgstr "随机书籍"
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "作者列表" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "无法打开电子书。 文件不存在或者文件不可访问:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "丛书列表" msgstr "丛书列表"
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "丛书: %(serie)s" msgstr "丛书: %(serie)s"
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "可用语言" msgstr "可用语言"
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "语言: %(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" msgid "Category list"
msgstr "分类列表" msgstr "分类列表"
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "分类: %(name)s" msgstr "分类: %(name)s"
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "可执行权限缺失" msgstr "可执行权限缺失"
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "统计" msgstr "统计"
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "服务器已重启,请刷新页面" msgstr "服务器已重启,请刷新页面"
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "正在关闭服务器,请关闭窗口" msgstr "正在关闭服务器,请关闭窗口"
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "更新完成" msgstr "更新完成"
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "搜索" msgstr "搜索"
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "已读书籍" msgstr "已读书籍"
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "未读书籍" msgstr "未读书籍"
@ -207,7 +217,7 @@ msgstr "未读书籍"
msgid "Read a Book" msgid "Read a Book"
msgstr "阅读一本书" msgstr "阅读一本书"
#: cps/web.py:1925 cps/web.py:2555 #: cps/web.py:1925 cps/web.py:2556
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "请填写所有字段" msgstr "请填写所有字段"
@ -262,7 +272,7 @@ msgstr "此书已被成功发给 %(kindlemail)s"
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "发送这本书的时候出现错误: %(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..." msgid "Please configure your kindle email address first..."
msgstr "请先配置您的kindle电子邮箱地址..." msgstr "请先配置您的kindle电子邮箱地址..."
@ -271,177 +281,177 @@ msgstr "请先配置您的kindle电子邮箱地址..."
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "此书已被添加到书架: %(sname)s" msgstr "此书已被添加到书架: %(sname)s"
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "此书已从书架 %(sname)s 中删除" msgstr "此书已从书架 %(sname)s 中删除"
#: cps/web.py:2183 cps/web.py:2207 #: cps/web.py:2185 cps/web.py:2209
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "已存在书架 '%(title)s'。" msgstr "已存在书架 '%(title)s'。"
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "书架 %(title)s 已被创建" msgstr "书架 %(title)s 已被创建"
#: cps/web.py:2190 cps/web.py:2218 #: cps/web.py:2192 cps/web.py:2220
msgid "There was an error" msgid "There was an error"
msgstr "发生错误" msgstr "发生错误"
#: cps/web.py:2191 cps/web.py:2193 #: cps/web.py:2193 cps/web.py:2195
msgid "create a shelf" msgid "create a shelf"
msgstr "创建书架" msgstr "创建书架"
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "书架 %(title)s 已被修改" msgstr "书架 %(title)s 已被修改"
#: cps/web.py:2219 cps/web.py:2221 #: cps/web.py:2221 cps/web.py:2223
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "编辑书架" msgstr "编辑书架"
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "成功删除书架 %(name)s" msgstr "成功删除书架 %(name)s"
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "书架: '%(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" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "打开书架出错。书架不存在或不可访问" msgstr "打开书架出错。书架不存在或不可访问"
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "修改书架 '%(name)s' 顺序" msgstr "修改书架 '%(name)s' 顺序"
#: cps/web.py:2368 #: cps/web.py:2369
msgid "Found an existing account for this email address." msgid "Found an existing account for this email address."
msgstr "找到已使用此邮箱的账号。" msgstr "找到已使用此邮箱的账号。"
#: cps/web.py:2370 cps/web.py:2374 #: cps/web.py:2371 cps/web.py:2375
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "%(name)s 的资料" msgstr "%(name)s 的资料"
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "资料已更新" msgstr "资料已更新"
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "管理页" msgstr "管理页"
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "Calibre-web配置已更新" 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" msgid "Basic Configuration"
msgstr "基本配置" msgstr "基本配置"
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "DB位置无效请输入正确路径" 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" msgid "Add new user"
msgstr "添加新用户" msgstr "添加新用户"
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "用户 '%(user)s' 已被创建" msgstr "用户 '%(user)s' 已被创建"
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "已存在使用此邮箱或昵称的账号。" msgstr "已存在使用此邮箱或昵称的账号。"
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "邮箱设置已更新" msgstr "邮箱设置已更新"
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "测试邮件已成功发送到 %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s"
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "发送测试邮件时发生错误: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s"
#: cps/web.py:2642 #: cps/web.py:2643
msgid "E-Mail settings updated" msgid "E-Mail settings updated"
msgstr "E-Mail 设置已更新" msgstr "E-Mail 设置已更新"
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "编辑邮箱设置" msgstr "编辑邮箱设置"
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "用户 '%(nick)s' 已被删除" msgstr "用户 '%(nick)s' 已被删除"
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "用户 '%(nick)s' 已被更新" msgstr "用户 '%(nick)s' 已被更新"
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "发生未知错误。" msgstr "发生未知错误。"
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "编辑用户 %(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" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "打开电子书出错。文件不存在或不可访问" 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" msgid "edit metadata"
msgstr "编辑元数据" msgstr "编辑元数据"
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" msgstr "不能上传后缀为 \"%s\" 的文件到此服务器"
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "未知" msgstr "未知"
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "要上传的文件必须有一个后缀" msgstr "要上传的文件必须有一个后缀"
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "创建路径 %s 失败(权限拒绝)。" msgstr "创建路径 %s 失败(权限拒绝)。"
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "存储文件 %s 失败(权限拒绝)。" msgstr "存储文件 %s 失败(权限拒绝)。"
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "删除文件 %s 失败(权限拒绝)。" msgstr "删除文件 %s 失败(权限拒绝)。"
@ -646,7 +656,7 @@ msgstr "简介"
msgid "Tags" msgid "Tags"
msgstr "标签" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "丛书" msgstr "丛书"
@ -733,7 +743,7 @@ msgstr "点击封面加载元数据到表单"
msgid "Loading..." msgid "Loading..."
msgstr "加载中..." 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" msgid "Close"
msgstr "关闭" msgstr "关闭"
@ -940,7 +950,7 @@ msgstr "保存设置"
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "保存设置并发送测试邮件" msgstr "保存设置并发送测试邮件"
#: cps/templates/feed.xml:20 cps/templates/layout.html:189 #: cps/templates/feed.xml:20 cps/templates/layout.html:191
msgid "Next" msgid "Next"
msgstr "下一个" msgstr "下一个"
@ -985,7 +995,7 @@ msgstr "最新书籍"
msgid "Show Random Books" msgid "Show Random Books"
msgstr "显示随机书籍" msgstr "显示随机书籍"
#: cps/templates/index.xml:52 cps/templates/layout.html:144 #: cps/templates/index.xml:52 cps/templates/layout.html:146
msgid "Authors" msgid "Authors"
msgstr "作者" msgstr "作者"
@ -1050,39 +1060,39 @@ msgstr "升序"
msgid "Descending" msgid "Descending"
msgstr "降序" msgstr "降序"
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "发现" msgstr "发现"
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "分类" 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" msgid "Languages"
msgstr "语言" msgstr "语言"
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "公开书架" msgstr "公开书架"
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "您的书架" msgstr "您的书架"
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "创建书架" msgstr "创建书架"
#: cps/templates/layout.html:160 cps/templates/stats.html:3 #: cps/templates/layout.html:162 cps/templates/stats.html:3
msgid "About" msgid "About"
msgstr "关于" msgstr "关于"
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "" msgstr ""

@ -47,12 +47,9 @@ DEFAULT_PASS = "admin123"
DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083)) DEFAULT_PORT = int(os.environ.get("CALIBRE_PORT", 8083))
DEVELOPMENT = False DEVELOPMENT = False
class UserBase: class UserBase:
@property @property
def is_authenticated(self): def is_authenticated(self):
@ -203,6 +200,7 @@ class Anonymous(AnonymousUserMixin, UserBase):
def is_authenticated(self): def is_authenticated(self):
return False return False
# Baseclass representing Shelfs in calibre-web inapp.db # Baseclass representing Shelfs in calibre-web inapp.db
class Shelf(Base): class Shelf(Base):
__tablename__ = 'shelf' __tablename__ = 'shelf'
@ -290,7 +288,7 @@ class Settings(Base):
config_google_drive_folder = Column(String) config_google_drive_folder = Column(String)
config_google_drive_calibre_url_base = Column(String) config_google_drive_calibre_url_base = Column(String)
config_google_drive_watch_changes_response = 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_remote_login = Column(Boolean)
config_use_goodreads = Column(Boolean) config_use_goodreads = Column(Boolean)
config_goodreads_api_key = Column(String) config_goodreads_api_key = Column(String)
@ -403,22 +401,22 @@ class Config:
(self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS)) (self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS))
def mature_content_tags(self): 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 lstrip = str.lstrip
else: else:
lstrip = unicode.lstrip lstrip = unicode.lstrip
return list(map(lstrip, self.config_mature_content_tags.split(","))) return list(map(lstrip, self.config_mature_content_tags.split(",")))
def get_Log_Level(self): def get_Log_Level(self):
ret_value="" ret_value = ""
if self.config_log_level == logging.INFO: if self.config_log_level == logging.INFO:
ret_value='INFO' ret_value = 'INFO'
elif self.config_log_level == logging.DEBUG: elif self.config_log_level == logging.DEBUG:
ret_value='DEBUG' ret_value = 'DEBUG'
elif self.config_log_level == logging.WARNING: elif self.config_log_level == logging.WARNING:
ret_value='WARNING' ret_value = 'WARNING'
elif self.config_log_level == logging.ERROR: elif self.config_log_level == logging.ERROR:
ret_value='ERROR' ret_value = 'ERROR'
return ret_value return ret_value
@ -495,7 +493,7 @@ def migrate_Database():
conn = engine.connect() conn = engine.connect()
conn.execute("ALTER TABLE user ADD column `sidebar_view` Integer DEFAULT 1") conn.execute("ALTER TABLE user ADD column `sidebar_view` Integer DEFAULT 1")
session.commit() session.commit()
create=True create = True
try: try:
if create: if create:
conn = engine.connect() conn = engine.connect()
@ -535,11 +533,13 @@ def migrate_Database():
conn = engine.connect() conn = engine.connect()
conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''") conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''")
def clean_database(): def clean_database():
# Remove expired remote login tokens # Remove expired remote login tokens
now = datetime.datetime.now() now = datetime.datetime.now()
session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete() session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete()
def create_default_config(): def create_default_config():
settings = Settings() settings = Settings()
settings.mail_server = "mail.example.com" settings.mail_server = "mail.example.com"

@ -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') tmp_dir = os.path.join(gettempdir(), 'calibre_web')
if not os.path.isdir(tmp_dir): if not os.path.isdir(tmp_dir):
os.mkdir(tmp_dir) os.mkdir(tmp_dir)
filename = file.filename filename = uploadfile.filename
filename_root, file_extension = os.path.splitext(filename) filename_root, file_extension = os.path.splitext(filename)
md5 = hashlib.md5() md5 = hashlib.md5()
md5.update(filename.encode('utf-8')) md5.update(filename.encode('utf-8'))
tmp_file_path = os.path.join(tmp_dir, md5.hexdigest()) 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) meta = book_formats.process(tmp_file_path, filename_root, file_extension)
return meta return meta

@ -103,6 +103,7 @@ global_task = None
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2']) ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', 'fb2'])
def md5(fname): def md5(fname):
hash_md5 = hashlib.md5() hash_md5 = hashlib.md5()
with open(fname, "rb") as f: with open(fname, "rb") as f:
@ -110,6 +111,7 @@ def md5(fname):
hash_md5.update(chunk) hash_md5.update(chunk)
return hash_md5.hexdigest() return hash_md5.hexdigest()
class Singleton: class Singleton:
""" """
A non-thread-safe helper class to ease implementing singletons. A non-thread-safe helper class to ease implementing singletons.
@ -437,7 +439,7 @@ def formatdate(val):
def format_date_input(val): def format_date_input(val):
conformed_timestamp = re.sub(r"[:]|([-](?!((\d{2}[:]\d{2})|(\d{4}))$))", '', 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") 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 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 no element is found add it
if new_element is None: if new_element is None:
if db_type == 'author': 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': elif db_type == 'series':
new_element = db_object(add_element, add_element) new_element = db_object(add_element, add_element)
elif db_type == 'custom': elif db_type == 'custom':
@ -831,7 +833,7 @@ def feed_series(book_id):
if not off: if not off:
off = 0 off = 0
entries, random, pagination = fill_indexpage((int(off) / (int(config.config_books_per_page)) + 1), 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) xml = render_title_template('feed.xml', entries=entries, pagination=pagination)
response = make_response(xml) response = make_response(xml)
response.headers["Content-Type"] = "application/atom+xml; charset=utf-8" 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')) total_size = int(df.metadata.get('fileSize'))
download_url = df.metadata.get('downloadUrl') 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 s = partial(total_size, 1024 * 1024) # I'm downloading BIG files, so 100M chunk size is fine for me
def stream(): def stream():
for byte in s: for byte in s:
headers = {"Range": 'bytes=%s-%s' % (byte[0], byte[1])} headers = {"Range": 'bytes=%s-%s' % (byte[0], byte[1])}
@ -969,13 +972,13 @@ def get_updater_status():
"6": _(u'Server is stopped'), "6": _(u'Server is stopped'),
"7": _(u'Update finished, please press okay and reload page') "7": _(u'Update finished, please press okay and reload page')
} }
status['text']=text status['text'] = text
helper.updater_thread = helper.Updater() helper.updater_thread = helper.Updater()
helper.updater_thread.start() helper.updater_thread.start()
status['status']=helper.updater_thread.get_update_status() status['status'] = helper.updater_thread.get_update_status()
elif request.method == "GET": elif request.method == "GET":
try: try:
status['status']=helper.updater_thread.get_update_status() status['status'] = helper.updater_thread.get_update_status()
except Exception: except Exception:
status['status'] = 7 status['status'] = 7
return json.dumps(status) return json.dumps(status)
@ -1055,6 +1058,7 @@ def newest_books(page):
else: else:
abort(404) abort(404)
@app.route('/books/oldest', defaults={'page': 1}) @app.route('/books/oldest', defaults={'page': 1})
@app.route('/books/oldest/page/<int:page>') @app.route('/books/oldest/page/<int:page>')
@login_required_if_no_ano @login_required_if_no_ano
@ -1136,7 +1140,7 @@ def best_rated_books(page):
def discover(page): def discover(page):
if current_user.show_random_books(): if current_user.show_random_books():
entries, __, pagination = fill_indexpage(page, db.Books, True, func.randomblob(2)) 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")) return render_title_template('discover.html', entries=entries, pagination=pagination, title=_(u"Random Books"))
else: else:
abort(404) abort(404)
@ -1150,7 +1154,7 @@ def author_list():
.join(db.books_authors_link).join(db.Books).filter(common_filters())\ .join(db.books_authors_link).join(db.Books).filter(common_filters())\
.group_by('books_authors_link.author').order_by(db.Authors.sort).all() .group_by('books_authors_link.author').order_by(db.Authors.sort).all()
for entry in entries: 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")) return render_title_template('list.html', entries=entries, folder='author', title=_(u"Author list"))
else: else:
abort(404) 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") flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error")
return redirect(url_for("index")) 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 author_info = None
other_books = [] other_books = []
@ -1198,7 +1202,6 @@ def get_unique_other_books(library_books, author_books):
return other_books return other_books
@app.route("/series") @app.route("/series")
@login_required_if_no_ano @login_required_if_no_ano
def series_list(): def series_list():
@ -1436,9 +1439,9 @@ def delete_book(book_id):
ub.session.commit() ub.session.commit()
if config.config_use_google_drive: 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: else:
helper.delete_book(book,config.config_calibre_dir) helper.delete_book(book, config.config_calibre_dir)
# check if only this book links to: # check if only this book links to:
# author, language, series, tags, custom columns # author, language, series, tags, custom columns
modify_database_object([u''], book.authors, db.Authors, db.session, 'author') 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) getattr(book, cc_string).remove(del_cc)
db.session.delete(del_cc) db.session.delete(del_cc)
else: 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.query(db.Books).filter(db.Books.id == book_id).delete()
db.session.commit() db.session.commit()
else: else:
@ -1474,6 +1477,7 @@ def delete_book(book_id):
app.logger.info('Book with id "'+str(book_id)+'" could not be deleted') app.logger.info('Book with id "'+str(book_id)+'" could not be deleted')
return redirect(url_for('index')) return redirect(url_for('index'))
@app.route("/gdrive/authenticate") @app.route("/gdrive/authenticate")
@login_required @login_required
@admin_required @admin_required
@ -1619,10 +1623,10 @@ def search():
db.Books.publishers.any(db.Publishers.name.ilike("%" + term + "%")), db.Books.publishers.any(db.Publishers.name.ilike("%" + term + "%")),
db.Books.title.ilike("%" + term + "%")))\ db.Books.title.ilike("%" + term + "%")))\
.filter(common_filters()).all() .filter(common_filters()).all()
# entries = db.session.query(db.Books).with_entities(db.Books.title).filter(db.Books.title.ilike("%" + term + "%")).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() + "%'") # result = db.session.execute("select name from authors where lower(name) like '%" + term.lower() + "%'")
#entries = result.fetchall() # entries = result.fetchall()
#result.close() # result.close()
return render_title_template('search.html', searchterm=term, entries=entries) return render_title_template('search.html', searchterm=term, entries=entries)
else: else:
return render_title_template('search.html', searchterm="") return render_title_template('search.html', searchterm="")
@ -1724,9 +1728,10 @@ def get_cover(cover_path):
else: else:
return send_from_directory(os.path.join(config.config_calibre_dir, cover_path), "cover.jpg") return send_from_directory(os.path.join(config.config_calibre_dir, cover_path), "cover.jpg")
@app.route("/show/<book_id>/<book_format>") @app.route("/show/<book_id>/<book_format>")
@login_required_if_no_ano @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_format = book_format.split(".")[0]
book = db.session.query(db.Books).filter(db.Books.id == book_id).first() 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() 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": elif book_format.lower() == "txt":
return render_title_template('readtxt.html', txtfile=book_id, title=_(u"Read a Book")) return render_title_template('readtxt.html', txtfile=book_id, title=_(u"Read a Book"))
else: else:
for fileext in ["cbr","cbt","cbz"]: for fileext in ["cbr", "cbt", "cbz"]:
if book_format.lower() == fileext: if book_format.lower() == fileext:
all_name = str(book_id) + "/" + book.data[0].name + "." + fileext all_name = str(book_id) + "/" + book.data[0].name + "." + fileext
tmp_file = os.path.join(book_dir, 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") flash(_(u"you are now logged in as: '%(nickname)s'", nickname=user.nickname), category="success")
return redirect_back(url_for("index")) return redirect_back(url_for("index"))
else: 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) app.logger.info('Login failed for user "' + form['username'] + '" IP-adress: ' + ipAdress)
flash(_(u"Wrong Username or Password"), category="error") flash(_(u"Wrong Username or Password"), category="error")
@ -2265,7 +2270,6 @@ def show_shelf(shelf_id):
return redirect(url_for("index")) return redirect(url_for("index"))
@app.route("/shelf/order/<int:shelf_id>", methods=["GET", "POST"]) @app.route("/shelf/order/<int:shelf_id>", methods=["GET", "POST"])
@login_required @login_required
def order_shelf(shelf_id): def order_shelf(shelf_id):
@ -2402,7 +2406,7 @@ def configuration_helper(origin):
success = False success = False
if request.method == "POST": if request.method == "POST":
to_save = request.form.to_dict() 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 "config_calibre_dir" in to_save:
if content.config_calibre_dir != to_save["config_calibre_dir"]: if content.config_calibre_dir != to_save["config_calibre_dir"]:
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: except Exception:
book.languages[index].language_name = _(isoLanguages.get(part3=book.languages[index].lang_code).name) book.languages[index].language_name = _(isoLanguages.get(part3=book.languages[index].lang_code).name)
for author in book.authors: for author in book.authors:
author_names.append(author.name.replace('|',',')) author_names.append(author.name.replace('|', ','))
# Show form # Show form
if request.method != 'POST': if request.method != 'POST':
@ -2845,172 +2849,184 @@ def edit_book(book_id):
db.session.add(db_format) db.session.add(db_format)
to_save = request.form.to_dict() to_save = request.form.to_dict()
if book.title != to_save["book_title"]: if book.title != to_save["book_title"]:
book.title = to_save["book_title"] book.title = to_save["book_title"]
edited_books_id.add(book.id) edited_books_id.add(book.id)
input_authors = to_save["author_name"].split('&') 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 # we have all author names now
if input_authors == ['']: if input_authors == ['']:
input_authors = [_(u'unknown')] # prevent empty Author input_authors = [_(u'unknown')] # prevent empty Author
if book.authors: if book.authors:
author0_before_edit = book.authors[0].name author0_before_edit = book.authors[0].name
else: 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') modify_database_object(input_authors, book.authors, db.Authors, db.session, 'author')
if book.authors: if book.authors:
if author0_before_edit != book.authors[0].name: if author0_before_edit != book.authors[0].name:
edited_books_id.add(book.id) edited_books_id.add(book.id)
book.author_sort = helper.get_sorted_author(input_authors[0]) book.author_sort = helper.get_sorted_author(input_authors[0])
if to_save["cover_url"] and save_cover(to_save["cover_url"], book.path): error = False
book.has_cover = 1 for b in edited_books_id:
if config.config_use_google_drive:
error = helper.update_dir_structure_gdrive(b)
else:
error = helper.update_dir_stucture(b, config.config_calibre_dir)
if error: # stop on error
break
if config.config_use_google_drive:
updateGdriveCalibreFromLocal()
if book.series_index != to_save["series_index"]: if not error:
book.series_index = to_save["series_index"] if to_save["cover_url"] and save_cover(to_save["cover_url"], book.path):
book.has_cover = 1
if len(book.comments): if book.series_index != to_save["series_index"]:
book.comments[0].text = to_save["description"] book.series_index = to_save["series_index"]
else:
book.comments.append(db.Comments(text=to_save["description"], book=book.id))
input_tags = to_save["tags"].split(',') if len(book.comments):
input_tags = map(lambda it: it.strip(), input_tags) book.comments[0].text = to_save["description"]
modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags') else:
book.comments.append(db.Comments(text=to_save["description"], book=book.id))
input_series = [to_save["series"].strip()] input_tags = to_save["tags"].split(',')
input_series = [x for x in input_series if x != ''] input_tags = map(lambda it: it.strip(), input_tags)
modify_database_object(input_series, book.series, db.Series, db.session, 'series') modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags')
input_languages = to_save["languages"].split(',') input_series = [to_save["series"].strip()]
input_languages = map(lambda it: it.strip().lower(), input_languages) input_series = [x for x in input_series if x != '']
modify_database_object(input_series, book.series, db.Series, db.session, 'series')
if to_save["pubdate"]: input_languages = to_save["languages"].split(',')
try: input_languages = map(lambda it: it.strip().lower(), input_languages)
book.pubdate = datetime.datetime.strptime(to_save["pubdate"], "%Y-%m-%d")
except ValueError: 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 book.pubdate = db.Books.DEFAULT_PUBDATE
else:
book.pubdate = db.Books.DEFAULT_PUBDATE
# retranslate displayed text to language codes # retranslate displayed text to language codes
languages = db.session.query(db.Languages).all() languages = db.session.query(db.Languages).all()
input_l = [] input_l = []
for lang in languages: for lang in languages:
try: try:
lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower() lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower()
except Exception: except Exception:
lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower() lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower()
for inp_lang in input_languages: for inp_lang in input_languages:
if inp_lang == lang.name: if inp_lang == lang.name:
input_l.append(lang.lang_code) input_l.append(lang.lang_code)
modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages') modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages')
if to_save["rating"].strip(): if to_save["rating"].strip():
old_rating = False old_rating = False
if len(book.ratings) > 0: if len(book.ratings) > 0:
old_rating = book.ratings[0].rating old_rating = book.ratings[0].rating
ratingx2 = int(float(to_save["rating"]) * 2) ratingx2 = int(float(to_save["rating"]) * 2)
if ratingx2 != old_rating: if ratingx2 != old_rating:
is_rating = db.session.query(db.Ratings).filter(db.Ratings.rating == ratingx2).first() is_rating = db.session.query(db.Ratings).filter(db.Ratings.rating == ratingx2).first()
if is_rating: if is_rating:
book.ratings.append(is_rating) book.ratings.append(is_rating)
else: else:
new_rating = db.Ratings(rating=ratingx2) new_rating = db.Ratings(rating=ratingx2)
book.ratings.append(new_rating) book.ratings.append(new_rating)
if old_rating: if old_rating:
book.ratings.remove(book.ratings[0])
else:
if len(book.ratings) > 0:
book.ratings.remove(book.ratings[0]) book.ratings.remove(book.ratings[0])
else:
if len(book.ratings) > 0: for c in cc:
book.ratings.remove(book.ratings[0]) cc_string = "custom_column_" + str(c.id)
if not c.is_multiple:
for c in cc: if len(getattr(book, cc_string)) > 0:
cc_string = "custom_column_" + str(c.id) cc_db_value = getattr(book, cc_string)[0].value
if not c.is_multiple: else:
if len(getattr(book, cc_string)) > 0: cc_db_value = None
cc_db_value = getattr(book, cc_string)[0].value if to_save[cc_string].strip():
else: if c.datatype == 'bool':
cc_db_value = None if to_save[cc_string] == 'None':
if to_save[cc_string].strip(): to_save[cc_string] = None
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: else:
cc_class = db.cc_classes[c.id] to_save[cc_string] = 1 if to_save[cc_string] == 'True' else 0
new_cc = cc_class(value=to_save[cc_string], book=book_id) if to_save[cc_string] != cc_db_value:
db.session.add(new_cc) if cc_db_value is not None:
elif c.datatype == 'int': if to_save[cc_string] is not None:
if to_save[cc_string] == 'None': setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string])
to_save[cc_string] = None else:
if to_save[cc_string] != cc_db_value: del_cc = getattr(book, cc_string)[0]
if cc_db_value is not None: getattr(book, cc_string).remove(del_cc)
if to_save[cc_string] is not None: db.session.delete(del_cc)
setattr(getattr(book, cc_string)[0], 'value', to_save[cc_string])
else: 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] del_cc = getattr(book, cc_string)[0]
getattr(book, cc_string).remove(del_cc) getattr(book, cc_string).remove(del_cc)
db.session.delete(del_cc) if len(del_cc.books) == 0:
else: db.session.delete(del_cc)
cc_class = db.cc_classes[c.id] 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( new_cc = db.session.query(cc_class).filter(
cc_class.value == to_save[cc_string].strip()).first() cc_class.value == to_save[cc_string].strip()).first()
# add cc value to book # if no cc val is found add it
getattr(book, cc_string).append(new_cc) 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: else:
if cc_db_value is not None: input_tags = to_save[cc_string].split(',')
# remove old cc_val input_tags = map(lambda it: it.strip(), input_tags)
del_cc = getattr(book, cc_string)[0] modify_database_object(input_tags, getattr(book, cc_string), db.cc_classes[c.id], db.session, 'custom')
getattr(book, cc_string).remove(del_cc) db.session.commit()
if len(del_cc.books) == 0: author_names = []
db.session.delete(del_cc) for author in book.authors:
else: author_names.append(author.name)
input_tags = to_save[cc_string].split(',') if "detail_view" in to_save:
input_tags = map(lambda it: it.strip(), input_tags) return redirect(url_for('show_book', book_id=book.id))
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)
for b in edited_books_id:
if config.config_use_google_drive:
helper.update_dir_structure_gdrive(b)
else: else:
helper.update_dir_stucture(b, config.config_calibre_dir) return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,
if config.config_use_google_drive: title=_(u"edit metadata"))
updateGdriveCalibreFromLocal()
if "detail_view" in to_save:
return redirect(url_for('show_book', book_id=book.id))
else: else:
db.session.rollback()
flash( error, category="error")
return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,
title=_(u"edit metadata")) title=_(u"edit metadata"))
@ -3173,4 +3189,3 @@ def start_gevent():
app.logger.info('Unable to listen on \'\', trying on IPv4 only...') 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 = WSGIServer(('0.0.0.0', ub.config.config_port), app)
gevent_server.serve_forever() gevent_server.serve_forever()

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,180 +17,190 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.1\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" msgid "not installed"
msgstr "" msgstr ""
#: cps/helper.py:77 #: cps/helper.py:78
#, python-format #, python-format
msgid "kindlegen binary %(kindlepath)s not found" msgid "kindlegen binary %(kindlepath)s not found"
msgstr "" msgstr ""
#: cps/helper.py:83 #: cps/helper.py:84
#, python-format #, python-format
msgid "epub format not found for book id: %(book)d" msgid "epub format not found for book id: %(book)d"
msgstr "" msgstr ""
#: cps/helper.py:93 #: cps/helper.py:94
msgid "kindlegen failed, no execution permissions" msgid "kindlegen failed, no execution permissions"
msgstr "" msgstr ""
#: cps/helper.py:108 #: cps/helper.py:109
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/helper.py:187 #: cps/helper.py:188
#, python-format #, python-format
msgid "Failed to send mail: %s" msgid "Failed to send mail: %s"
msgstr "" msgstr ""
#: cps/helper.py:194 #: cps/helper.py:195
msgid "Calibre-web test email" msgid "Calibre-web test email"
msgstr "" 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." msgid "This email has been sent via calibre web."
msgstr "" msgstr ""
#: cps/helper.py:204 cps/templates/detail.html:43 #: cps/helper.py:205 cps/templates/detail.html:43
msgid "Send to Kindle" msgid "Send to Kindle"
msgstr "" 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" msgid "Could not find any formats suitable for sending by email"
msgstr "" 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 #: cps/ub.py:577
msgid "Guest" msgid "Guest"
msgstr "" msgstr ""
#: cps/web.py:964 #: cps/web.py:967
msgid "Requesting update package" msgid "Requesting update package"
msgstr "" msgstr ""
#: cps/web.py:965 #: cps/web.py:968
msgid "Downloading update package" msgid "Downloading update package"
msgstr "" msgstr ""
#: cps/web.py:966 #: cps/web.py:969
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "" msgstr ""
#: cps/web.py:967 #: cps/web.py:970
msgid "Files are replaced" msgid "Files are replaced"
msgstr "" msgstr ""
#: cps/web.py:968 #: cps/web.py:971
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "" msgstr ""
#: cps/web.py:969 #: cps/web.py:972
msgid "Server is stopped" msgid "Server is stopped"
msgstr "" msgstr ""
#: cps/web.py:970 #: cps/web.py:973
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "" msgstr ""
#: cps/web.py:1044 #: cps/web.py:1047
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "" msgstr ""
#: cps/web.py:1054 #: cps/web.py:1057
msgid "Newest Books" msgid "Newest Books"
msgstr "" msgstr ""
#: cps/web.py:1065 #: cps/web.py:1069
msgid "Oldest Books" msgid "Oldest Books"
msgstr "" msgstr ""
#: cps/web.py:1077 #: cps/web.py:1081
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "" msgstr ""
#: cps/web.py:1088 #: cps/web.py:1092
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "" msgstr ""
#: cps/web.py:1116 #: cps/web.py:1120
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "" msgstr ""
#: cps/web.py:1129 #: cps/web.py:1133
msgid "Best rated books" msgid "Best rated books"
msgstr "" msgstr ""
#: cps/templates/index.xml:32 cps/web.py:1140 #: cps/templates/index.xml:32 cps/web.py:1144
msgid "Random Books" msgid "Random Books"
msgstr "" msgstr ""
#: cps/web.py:1154 #: cps/web.py:1158
msgid "Author list" msgid "Author list"
msgstr "" 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:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
#: cps/templates/index.xml:64 cps/web.py:1209 #: cps/templates/index.xml:64 cps/web.py:1212
msgid "Series list" msgid "Series list"
msgstr "" msgstr ""
#: cps/web.py:1223 #: cps/web.py:1226
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "" msgstr ""
#: cps/web.py:1256 #: cps/web.py:1259
msgid "Available languages" msgid "Available languages"
msgstr "" msgstr ""
#: cps/web.py:1273 #: cps/web.py:1276
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "" msgstr ""
#: cps/templates/index.xml:58 cps/web.py:1283 #: cps/templates/index.xml:58 cps/web.py:1286
msgid "Category list" msgid "Category list"
msgstr "" msgstr ""
#: cps/web.py:1297 #: cps/web.py:1300
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:1409 #: cps/web.py:1412
msgid "Excecution permissions missing" msgid "Excecution permissions missing"
msgstr "" msgstr ""
#: cps/web.py:1423 #: cps/web.py:1426
msgid "Statistics" msgid "Statistics"
msgstr "" msgstr ""
#: cps/web.py:1587 #: cps/web.py:1591
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "" msgstr ""
#: cps/web.py:1589 #: cps/web.py:1593
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "" msgstr ""
#: cps/web.py:1605 #: cps/web.py:1609
msgid "Update done" msgid "Update done"
msgstr "" msgstr ""
#: cps/web.py:1687 cps/web.py:1700 #: cps/web.py:1691 cps/web.py:1704
msgid "search" msgid "search"
msgstr "" msgstr ""
#: cps/templates/index.xml:39 cps/templates/index.xml:42 #: 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" msgid "Read Books"
msgstr "" msgstr ""
#: cps/templates/index.xml:45 cps/templates/index.xml:48 #: cps/templates/index.xml:46 cps/templates/index.xml:49
#: cps/templates/layout.html:132 cps/web.py:1785 #: cps/templates/layout.html:134 cps/web.py:1785
msgid "Unread Books" msgid "Unread Books"
msgstr "" msgstr ""
@ -198,7 +208,7 @@ msgstr ""
msgid "Read a Book" msgid "Read a Book"
msgstr "" msgstr ""
#: cps/web.py:1925 cps/web.py:2555 #: cps/web.py:1925 cps/web.py:2556
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "" msgstr ""
@ -253,7 +263,7 @@ msgstr ""
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "" 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..." msgid "Please configure your kindle email address first..."
msgstr "" msgstr ""
@ -262,177 +272,177 @@ msgstr ""
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2164 #: cps/web.py:2166
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2183 cps/web.py:2207 #: cps/web.py:2185 cps/web.py:2209
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "" msgstr ""
#: cps/web.py:2188 #: cps/web.py:2190
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "" msgstr ""
#: cps/web.py:2190 cps/web.py:2218 #: cps/web.py:2192 cps/web.py:2220
msgid "There was an error" msgid "There was an error"
msgstr "" msgstr ""
#: cps/web.py:2191 cps/web.py:2193 #: cps/web.py:2193 cps/web.py:2195
msgid "create a shelf" msgid "create a shelf"
msgstr "" msgstr ""
#: cps/web.py:2216 #: cps/web.py:2218
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "" msgstr ""
#: cps/web.py:2219 cps/web.py:2221 #: cps/web.py:2221 cps/web.py:2223
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "" msgstr ""
#: cps/web.py:2242 #: cps/web.py:2244
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2264 #: cps/web.py:2266
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "" msgstr ""
#: cps/web.py:2267 #: cps/web.py:2269
msgid "Error opening shelf. Shelf does not exist or is not accessible" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2299 #: cps/web.py:2300
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "" msgstr ""
#: cps/web.py:2368 #: cps/web.py:2369
msgid "Found an existing account for this email address." msgid "Found an existing account for this email address."
msgstr "" msgstr ""
#: cps/web.py:2370 cps/web.py:2374 #: cps/web.py:2371 cps/web.py:2375
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "" msgstr ""
#: cps/web.py:2371 #: cps/web.py:2372
msgid "Profile updated" msgid "Profile updated"
msgstr "" msgstr ""
#: cps/web.py:2385 #: cps/web.py:2386
msgid "Admin page" msgid "Admin page"
msgstr "" msgstr ""
#: cps/web.py:2509 #: cps/web.py:2510
msgid "Calibre-web configuration updated" msgid "Calibre-web configuration updated"
msgstr "" 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" msgid "Basic Configuration"
msgstr "" msgstr ""
#: cps/web.py:2520 #: cps/web.py:2521
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "" 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" msgid "Add new user"
msgstr "" msgstr ""
#: cps/web.py:2602 #: cps/web.py:2603
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "" msgstr ""
#: cps/web.py:2606 #: cps/web.py:2607
msgid "Found an existing account for this email address or nickname." msgid "Found an existing account for this email address or nickname."
msgstr "" msgstr ""
#: cps/web.py:2628 #: cps/web.py:2629
msgid "Mail settings updated" msgid "Mail settings updated"
msgstr "" msgstr ""
#: cps/web.py:2635 #: cps/web.py:2636
#, python-format #, python-format
msgid "Test E-Mail successfully send to %(kindlemail)s" msgid "Test E-Mail successfully send to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:2638 #: cps/web.py:2639
#, python-format #, python-format
msgid "There was an error sending the Test E-Mail: %(res)s" msgid "There was an error sending the Test E-Mail: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:2642 #: cps/web.py:2643
msgid "E-Mail settings updated" msgid "E-Mail settings updated"
msgstr "" msgstr ""
#: cps/web.py:2643 #: cps/web.py:2644
msgid "Edit mail settings" msgid "Edit mail settings"
msgstr "" msgstr ""
#: cps/web.py:2672 #: cps/web.py:2673
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "" msgstr ""
#: cps/web.py:2780 #: cps/web.py:2781
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "" msgstr ""
#: cps/web.py:2783 #: cps/web.py:2784
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "" msgstr ""
#: cps/web.py:2786 #: cps/web.py:2787
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "" msgstr ""
#: cps/web.py:2802 #: cps/web.py:2803
msgid "Error opening eBook. File does not exist or file is not accessible" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" 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" msgid "edit metadata"
msgstr "" msgstr ""
#: cps/web.py:2827 cps/web.py:3055 #: cps/web.py:2828 cps/web.py:3068
#, python-format #, python-format
msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgid "File extension \"%s\" is not allowed to be uploaded to this server"
msgstr "" msgstr ""
#: cps/web.py:2838 #: cps/web.py:2839
#, python-format #, python-format
msgid "Failed to store file %s." msgid "Failed to store file %s."
msgstr "" msgstr ""
#: cps/web.py:2858 cps/web.py:2862 #: cps/web.py:2861 cps/web.py:2865
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: cps/web.py:3061 #: cps/web.py:3074
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "" msgstr ""
#: cps/web.py:3080 #: cps/web.py:3093
#, python-format #, python-format
msgid "Failed to create path %s (Permission denied)." msgid "Failed to create path %s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3085 #: cps/web.py:3098
#, python-format #, python-format
msgid "Failed to store file %s (Permission denied)." msgid "Failed to store file %s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3090 #: cps/web.py:3103
#, python-format #, python-format
msgid "Failed to delete file %s (Permission denied)." msgid "Failed to delete file %s (Permission denied)."
msgstr "" msgstr ""
@ -637,7 +647,7 @@ msgstr ""
msgid "Tags" msgid "Tags"
msgstr "" 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 #: cps/templates/search_form.html:37
msgid "Series" msgid "Series"
msgstr "" msgstr ""
@ -724,7 +734,7 @@ msgstr ""
msgid "Loading..." msgid "Loading..."
msgstr "" 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" msgid "Close"
msgstr "" msgstr ""
@ -931,7 +941,7 @@ msgstr ""
msgid "Save settings and send Test E-Mail" msgid "Save settings and send Test E-Mail"
msgstr "" msgstr ""
#: cps/templates/feed.xml:20 cps/templates/layout.html:189 #: cps/templates/feed.xml:20 cps/templates/layout.html:191
msgid "Next" msgid "Next"
msgstr "" msgstr ""
@ -976,7 +986,7 @@ msgstr ""
msgid "Show Random Books" msgid "Show Random Books"
msgstr "" msgstr ""
#: cps/templates/index.xml:52 cps/templates/layout.html:144 #: cps/templates/index.xml:52 cps/templates/layout.html:146
msgid "Authors" msgid "Authors"
msgstr "" msgstr ""
@ -1041,39 +1051,39 @@ msgstr ""
msgid "Descending" msgid "Descending"
msgstr "" msgstr ""
#: cps/templates/layout.html:135 #: cps/templates/layout.html:137
msgid "Discover" msgid "Discover"
msgstr "" msgstr ""
#: cps/templates/layout.html:138 #: cps/templates/layout.html:140
msgid "Categories" msgid "Categories"
msgstr "" 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" msgid "Languages"
msgstr "" msgstr ""
#: cps/templates/layout.html:150 #: cps/templates/layout.html:152
msgid "Public Shelves" msgid "Public Shelves"
msgstr "" msgstr ""
#: cps/templates/layout.html:154 #: cps/templates/layout.html:156
msgid "Your Shelves" msgid "Your Shelves"
msgstr "" msgstr ""
#: cps/templates/layout.html:159 #: cps/templates/layout.html:161
msgid "Create a Shelf" msgid "Create a Shelf"
msgstr "" msgstr ""
#: cps/templates/layout.html:160 cps/templates/stats.html:3 #: cps/templates/layout.html:162 cps/templates/stats.html:3
msgid "About" msgid "About"
msgstr "" msgstr ""
#: cps/templates/layout.html:174 #: cps/templates/layout.html:176
msgid "Previous" msgid "Previous"
msgstr "" msgstr ""
#: cps/templates/layout.html:201 #: cps/templates/layout.html:203
msgid "Book Details" msgid "Book Details"
msgstr "" msgstr ""

Loading…
Cancel
Save