1
0
mirror of https://github.com/janeczku/calibre-web synced 2024-11-27 20:10:06 +00:00

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

This commit is contained in:
OzzieIsaacs 2017-11-30 16:49:46 +01:00
parent b4aede78bc
commit f1fac28203
18 changed files with 1249 additions and 1124 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -14,17 +14,17 @@ BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, d
"""
def upload(file):
def upload(uploadfile):
tmp_dir = os.path.join(gettempdir(), 'calibre_web')
if not os.path.isdir(tmp_dir):
os.mkdir(tmp_dir)
filename = file.filename
filename = uploadfile.filename
filename_root, file_extension = os.path.splitext(filename)
md5 = hashlib.md5()
md5.update(filename.encode('utf-8'))
tmp_file_path = os.path.join(tmp_dir, md5.hexdigest())
file.save(tmp_file_path)
uploadfile.save(tmp_file_path)
meta = book_formats.process(tmp_file_path, filename_root, file_extension)
return meta

View File

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

View File

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