diff --git a/cps.py b/cps.py index 4c8bfbe2..fdc5bce7 100755 --- a/cps.py +++ b/cps.py @@ -3,7 +3,6 @@ import os import sys -import time base_path = os.path.dirname(os.path.abspath(__file__)) # Insert local directories into path @@ -22,9 +21,9 @@ if __name__ == '__main__': http_server.listen(web.ub.config.config_port) IOLoop.instance().start() - if web.global_task == 0: - print("Performing restart of Calibre-web") + if web.helper.global_task == 0: + web.app.logger.info("Performing restart of Calibre-web") os.execl(sys.executable, sys.executable, *sys.argv) else: - print("Performing shutdown of Calibre-web") + web.app.logger.info("Performing shutdown of Calibre-web") sys.exit(0) diff --git a/cps/db.py b/cps/db.py index c64f286b..e0f38a63 100755 --- a/cps/db.py +++ b/cps/db.py @@ -56,6 +56,10 @@ books_languages_link = Table('books_languages_link', Base.metadata, Column('lang_code', Integer, ForeignKey('languages.id'), primary_key=True) ) +books_publishers_link = Table('books_publishers_link', Base.metadata, + Column('book', Integer, ForeignKey('books.id'), primary_key=True), + Column('publisher', Integer, ForeignKey('publishers.id'), primary_key=True) + ) class Identifiers(Base): __tablename__ = 'identifiers' @@ -182,6 +186,21 @@ class Languages(Base): def __repr__(self): return u"".format(self.lang_code) +class Publishers(Base): + __tablename__ = 'publishers' + + id = Column(Integer, primary_key=True) + name = Column(String) + sort = Column(String) + + def __init__(self, name,sort): + self.name = name + self.sort = sort + + def __repr__(self): + return u"".format(self.name, self.sort) + + class Data(Base): __tablename__ = 'data' @@ -224,6 +243,7 @@ class Books(Base): series = relationship('Series', secondary=books_series_link, backref='books') ratings = relationship('Ratings', secondary=books_ratings_link, backref='books') languages = relationship('Languages', secondary=books_languages_link, backref='books') + publishers = relationship('Publishers', secondary=books_publishers_link, backref='books') identifiers = relationship('Identifiers', backref='books') def __init__(self, title, sort, author_sort, timestamp, pubdate, series_index, last_modified, path, has_cover, diff --git a/cps/helper.py b/cps/helper.py index beee00c7..5e9c9210 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -6,7 +6,7 @@ import ub from flask import current_app as app import logging import smtplib -import tempfile +from tempfile import gettempdir import socket import sys import os @@ -21,13 +21,22 @@ from email.MIMEText import MIMEText from email.generator import Generator from flask_babel import gettext as _ import subprocess +import threading import shutil +import requests +import zipfile +from tornado.ioloop import IOLoop + try: import unidecode use_unidecode=True except: use_unidecode=False +# Global variables +global_task = None +updater_thread = None + 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() @@ -267,117 +276,148 @@ def update_dir_stucture(book_id, calibrepath): book.path = new_authordir + '/' + book.path.split('/')[1] db.session.commit() +class Updater(threading.Thread): -def file_to_list(file): - return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')] - -def one_minus_two(one, two): - return [x for x in one if x not in set(two)] - -def reduce_dirs(delete_files, new_list): - new_delete = [] - for file in delete_files: - parts = file.split(os.sep) - sub = '' - for i in range(len(parts)): - sub = os.path.join(sub, parts[i]) - if sub == '': - sub = os.sep - count = 0 - for song in new_list: - if song.startswith(sub): - count += 1 + def __init__(self): + threading.Thread.__init__(self) + self.status=0 + + def run(self): + global global_task + self.status=1 + r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True) + fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0] + self.status=2 + z = zipfile.ZipFile(StringIO(r.content)) + self.status=3 + tmp_dir = gettempdir() + z.extractall(tmp_dir) + self.status=4 + self.update_source(os.path.join(tmp_dir,os.path.splitext(fname)[0]),ub.config.get_main_dir) + self.status=5 + global_task = 0 + db.session.close() + db.engine.dispose() + ub.session.close() + ub.engine.dispose() + self.status=6 + # stop tornado server + server = IOLoop.instance() + server.add_callback(server.stop) + self.status=7 + + def get_update_status(self): + return self.status + + def file_to_list(self, file): + return [x.strip() for x in open(file, 'r') if not x.startswith('#EXT')] + + def one_minus_two(self, one, two): + return [x for x in one if x not in set(two)] + + def reduce_dirs(self, delete_files, new_list): + new_delete = [] + for file in delete_files: + parts = file.split(os.sep) + sub = '' + for i in range(len(parts)): + sub = os.path.join(sub, parts[i]) + if sub == '': + sub = os.sep + count = 0 + for song in new_list: + if song.startswith(sub): + count += 1 + break + if count == 0: + if sub != '\\': + new_delete.append(sub) break - if count == 0: - if sub != '\\': - new_delete.append(sub) - break - return list(set(new_delete)) - -def reduce_files(remove_items, exclude_items): - rf = [] - for item in remove_items: - if not item in exclude_items: - rf.append(item) - return rf - -def moveallfiles(root_src_dir, root_dst_dir): - change_permissions = True - if sys.platform == "win32" or sys.platform == "darwin": - change_permissions=False - else: - app.logger.debug('Update on OS-System : '+sys.platform ) - #print('OS-System: '+sys.platform ) - new_permissions=os.stat(root_dst_dir) - #print new_permissions - for src_dir, dirs, files in os.walk(root_src_dir): - dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1) - if not os.path.exists(dst_dir): - os.makedirs(dst_dir) - #print('Create-Dir: '+dst_dir) - if change_permissions: - #print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) - os.chown(dst_dir,new_permissions.st_uid,new_permissions.st_gid) - for file_ in files: - src_file = os.path.join(src_dir, file_) - dst_file = os.path.join(dst_dir, file_) - if os.path.exists(dst_file): + return list(set(new_delete)) + + def reduce_files(self, remove_items, exclude_items): + rf = [] + for item in remove_items: + if not item.startswith(exclude_items): + rf.append(item) + return rf + + def moveallfiles(self, root_src_dir, root_dst_dir): + change_permissions = True + if sys.platform == "win32" or sys.platform == "darwin": + change_permissions = False + else: + logging.getLogger('cps.web').debug('Update on OS-System : ' + sys.platform) + new_permissions = os.stat(root_dst_dir) + # print new_permissions + for src_dir, dirs, files in os.walk(root_src_dir): + dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir) + logging.getLogger('cps.web').debug('Create-Dir: '+dst_dir) + if change_permissions: + # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) + os.chown(dst_dir, new_permissions.st_uid, new_permissions.st_gid) + for file_ in files: + src_file = os.path.join(src_dir, file_) + dst_file = os.path.join(dst_dir, file_) + if os.path.exists(dst_file): + if change_permissions: + permission = os.stat(dst_file) + logging.getLogger('cps.web').debug('Remove file before copy: '+dst_file) + os.remove(dst_file) + else: + if change_permissions: + permission = new_permissions + shutil.move(src_file, dst_dir) + logging.getLogger('cps.web').debug('Move File '+src_file+' to '+dst_dir) if change_permissions: - permission=os.stat(dst_file) - #print('Remove file before copy: '+dst_file) - os.remove(dst_file) + try: + os.chown(dst_file, permission.st_uid, permission.st_uid) + # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) + except: + e = sys.exc_info() + logging.getLogger('cps.web').debug('Fail '+str(dst_file)+' error: '+str(e)) + return + + def update_source(self, source, destination): + # destination files + old_list = list() + exclude = ( + 'vendor' + os.sep + 'kindlegen.exe', 'vendor' + os.sep + 'kindlegen', os.sep + 'app.db', + os.sep + 'vendor',os.sep + 'calibre-web.log') + for root, dirs, files in os.walk(destination, topdown=True): + for name in files: + old_list.append(os.path.join(root, name).replace(destination, '')) + for name in dirs: + old_list.append(os.path.join(root, name).replace(destination, '')) + # source files + new_list = list() + for root, dirs, files in os.walk(source, topdown=True): + for name in files: + new_list.append(os.path.join(root, name).replace(source, '')) + for name in dirs: + new_list.append(os.path.join(root, name).replace(source, '')) + + delete_files = self.one_minus_two(old_list, new_list) + + rf = self.reduce_files(delete_files, exclude) + + remove_items = self.reduce_dirs(rf, new_list) + + self.moveallfiles(source, destination) + + for item in remove_items: + item_path = os.path.join(destination, item[1:]) + if os.path.isdir(item_path): + logging.getLogger('cps.web').debug("Delete dir " + item_path) + shutil.rmtree(item_path) else: - if change_permissions: - permission=new_permissions - shutil.move(src_file, dst_dir) - #print('Move File '+src_file+' to '+dst_dir) - if change_permissions: try: - os.chown(dst_file, permission.st_uid, permission.st_uid) - #print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) + logging.getLogger('cps.web').debug("Delete file " + item_path) + log_from_thread("Delete file " + item_path) + os.remove(item_path) except: - e = sys.exc_info() - #print('Fail '+str(dst_file)+' error: '+str(e)) - return - - -def update_source(source,destination): - # destination files - old_list=list() - exclude = (['vendor' + os.sep + 'kindlegen.exe','vendor' + os.sep + 'kindlegen','/app.db','vendor','/update.py']) - for root, dirs, files in os.walk(destination, topdown=True): - for name in files: - old_list.append(os.path.join(root, name).replace(destination, '')) - for name in dirs: - old_list.append(os.path.join(root, name).replace(destination, '')) - # source files - new_list = list() - for root, dirs, files in os.walk(source, topdown=True): - for name in files: - new_list.append(os.path.join(root, name).replace(source, '')) - for name in dirs: - new_list.append(os.path.join(root, name).replace(source, '')) - - delete_files = one_minus_two(old_list, new_list) - #print('raw delete list', delete_files) - - rf= reduce_files(delete_files, exclude) - #print('reduced delete list', rf) - - remove_items = reduce_dirs(rf, new_list) - #print('delete files', remove_items) - - moveallfiles(source, destination) - - for item in remove_items: - item_path = os.path.join(destination, item[1:]) - if os.path.isdir(item_path): - print("Delete dir "+ item_path) - shutil.rmtree(item_path) - else: - try: - print("Delete file "+ item_path) - os.remove(item_path) - except: - print("Could not remove:"+item_path) - shutil.rmtree(source, ignore_errors=True) + logging.getLogger('cps.web').debug("Could not remove:" + item_path) + shutil.rmtree(source, ignore_errors=True) + diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 5e6ea314..921a35ff 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -47,3 +47,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left:0px; } + +.spinner {margin:0 41%;} +.spinner2 {margin:0 41%;} + diff --git a/cps/static/js/main.js b/cps/static/js/main.js index a2d56c9e..74e1a1d8 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -1,3 +1,6 @@ +var displaytext; +var updateTimerID; +var updateText; $(function() { $('.discover .row').isotope({ @@ -31,7 +34,9 @@ $(function() { url: window.location.pathname+"/../../shutdown", data: {"parameter":0}, success: function(data) { - return alert(data.text);} + $('#spinner').show(); + displaytext=data.text; + window.setTimeout(restartTimer, 3000);} }); }); $("#shutdown").click(function() { @@ -50,17 +55,66 @@ $(function() { dataType: 'json', url: window.location.pathname+"/../../get_update_status", success: function(data) { - if (data.status == true) { - $("#check_for_update").addClass('hidden'); - $("#perform_update").removeClass('hidden'); - }else{ $("#check_for_update").html(button_text); - };} + if (data.status == true) { + $("#check_for_update").addClass('hidden'); + $("#perform_update").removeClass('hidden'); + $("#update_info").removeClass('hidden'); + $("#update_info").find('span').html(data.commit); + } + } + }); + }); + $("#perform_update").click(function() { + $('#spinner2').show(); + $.ajax({ + type: "POST", + dataType: 'json', + data: { start: "True"}, + url: window.location.pathname+"/../../get_updater_status", + success: function(data) { + updateText=data.text + $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); + console.log(data.status); + updateTimerID=setInterval(updateTimer, 2000);} }); }); - }); + +function restartTimer() { + $('#spinner').hide(); + $('#RestartDialog').modal('hide'); +} + +function updateTimer() { + $.ajax({ + dataType: 'json', + url: window.location.pathname+"/../../get_updater_status", + success: function(data) { + console.log(data.status); + $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); + if (data.status >6){ + clearInterval(updateTimerID); + $('#spinner2').hide(); + $('#UpdateprogressDialog #updateFinished').removeClass('hidden'); + $("#check_for_update").removeClass('hidden'); + $("#perform_update").addClass('hidden'); + } + }, + error: function() { + console.log('Done'); + clearInterval(updateTimerID); + $('#spinner2').hide(); + $("#UpdateprogressDialog #Updatecontent").html(updateText[7]); + $('#UpdateprogressDialog #updateFinished').removeClass('hidden'); + $("#check_for_update").removeClass('hidden'); + $("#perform_update").addClass('hidden'); + } + }); +} + + $(window).resize(function(event) { $('.discover .row').isotope('reLayout'); }); diff --git a/cps/templates/admin.html b/cps/templates/admin.html index 31c167ee..b386e4ff 100644 --- a/cps/templates/admin.html +++ b/cps/templates/admin.html @@ -2,6 +2,7 @@ {% block body %}

{{_('User list')}}

+
@@ -76,11 +77,13 @@

{{_('Administration')}}

{% if not development %} -

{{_('Current commit timestamp')}}: {{commit}}

-
{{_('Restart Calibre-web')}}
-
{{_('Stop Calibre-web')}}
-
{{_('Check for update')}}
- +
{{_('Current commit timestamp')}}: {{commit}}
+ +

+
{{_('Restart Calibre-web')}}
+
{{_('Stop Calibre-web')}}
+
{{_('Check for update')}}
+ {% endif %} @@ -88,15 +91,17 @@ - + {% endblock %} diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 140bad8d..03c7258b 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -50,6 +50,7 @@ {% if entry.identifiers|length > 0 %}
+

{% for identifier in entry.identifiers %} {{identifier.formatType()}} @@ -66,10 +67,16 @@ {% for tag in entry.tags %} {{tag.name}} {%endfor%} -

{% endif %} + {% if entry.publishers|length > 0 %} +
+

+ {{_('Publisher')}}:{% for publisher in entry.publishers %} {{publisher.name}}{% if not loop.last %},{% endif %}{% endfor %} +

+
+ {% endif %} {% if entry.pubdate[:10] != '0101-01-01' %}

{{_('Publishing date')}}: {{entry.pubdate|formatdate}}

{% endif %} diff --git a/cps/templates/layout.html b/cps/templates/layout.html index dce2002c..b24050d2 100644 --- a/cps/templates/layout.html +++ b/cps/templates/layout.html @@ -65,7 +65,7 @@ -
+ + +
+ +
{% for tag in tags %} {% endfor %}
- +
{% for tag in tags %} {% endfor %}
- +
{% for serie in series %} {% endfor %}
- +
{% for serie in series %} {% endfor %}
{% if languages %} - +
{% for language in languages %} {% endfor %}
- +
{% for language in languages %} {% endfor %}
diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 8bab995b..28e55bc1 100644 Binary files a/cps/translations/de/LC_MESSAGES/messages.mo and b/cps/translations/de/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index 3fb5cc32..b36b72f0 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-02-10 20:17+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: 2016-07-12 19:54+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" @@ -32,322 +32,347 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "Nicht installiert" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "E-Mail: %s konnte nicht gesendet werden" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "Calibre-web Test E-Mail" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "Die E-Mail wurde via calibre-web versendet" -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "An Kindle senden" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 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:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "Konnte .epub nicht nach .mobi konvertieren" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" -msgstr "Die angeforderte Datei konnte nicht gelesen werden. Falsche Dateirechte?" - -#: cps/ub.py:443 +#: cps/ub.py:434 msgid "Guest" msgstr "Gast" -#: cps/web.py:778 +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "Frage Update Paket an" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "Lade Update Paket herunter" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "Entpacke Update Paket" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "Ersetze Dateien" + +#: cps/web.py:738 +msgid "Database connections are closed" +msgstr "Schließe Datenbankverbindungen" + +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "Stoppe Server" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden" + +#: cps/web.py:810 msgid "Latest Books" msgstr "Letzte Bücher" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "Beliebte Bücher (die meisten Downloads)" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "Best bewertete Bücher" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "Zufällige Bücher" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "Autorenliste" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "Autor: %(name)s" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 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:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "Liste Serien" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "Verfügbare Sprachen" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "Sprache: %(name)s" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "Kategorieliste" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "Kategorie: %(name)s" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "Statistiken" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" -msgstr "Führe Neustart durch, bitte Seite neu laden" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" +msgstr "Server neu gestartet,bitte Seite neu laden" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "Server wird runtergefahren, bitte Fenster schließen" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "Update durchgeführt" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "Suche" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "Lese ein Buch" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "Bitte alle Felder ausfüllen!" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "Registieren" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "Es ist ein unbekannter Fehler aufgetreten. Bitte später erneut versuchen." -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "Der Benutzername oder die E-Mailadresse ist in bereits in Benutzung." -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Du bist nun eingeloggt als '%(nickname)s'" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "Falscher Benutzername oder Passwort" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "Login" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "Bitte zuerst die SMTP Mail Einstellung konfigurieren ..." -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Buch erfolgreich versandt an %(kindlemail)s" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s" -#: cps/web.py:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..." -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt" -#: cps/web.py:1378 +#: cps/web.py:1390 #, 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:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, 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:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "Bücherregal %(title)s erzeugt" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "Es trat ein Fehler auf" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "Bücherregal erzeugen" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "Bücherregal %(title)s verändert" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "Bücherregal editieren" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Bücherregal %(name)s erfolgreich gelöscht" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "Bücherregal: '%(name)s'" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Reihenfolge in Bücherregal '%(name)s' verändern" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "Es existiert ein Benutzerkonto für diese E-Mailadresse" -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's Profil" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "Profil aktualisiert" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "Admin Seite" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "Calibre-web Konfiguration wurde aktualisiert" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "Basis Konfiguration" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "Neuen Benutzer hinzufügen" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "Benutzer '%(user)s' angelegt" -#: cps/web.py:1745 +#: cps/web.py:1757 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:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "E-Mail Einstellungen aktualisiert" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet" -#: cps/web.py:1776 +#: cps/web.py:1788 #, 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:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "E-Mail Einstellungen editieren" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "Benutzer '%(nick)s' gelöscht" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "Benutzer '%(nick)s' aktualisiert" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "Es ist ein unbekanter Fehler aufgetreten" -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "Benutzer %(nick)s bearbeiten" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "Metadaten editieren" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)" -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)" -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)" @@ -356,145 +381,158 @@ msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)" msgid "User list" msgstr "Benutzerliste" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "Benutzername" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "E-Mail" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "Kindle" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "Admin" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "Download" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "Hochladen" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "Editieren" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "Passwort" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "SMTP Mail Einstellungen" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "SMTP Hostname" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "SMTP Port" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "SSL" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "SMTP Login" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "SMTP Passwort" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "Absenderadresse" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "SMTP Einstellungen ändern" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "Konfiguration" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "Calibre DB Pfad" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "Log Level" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "Port" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "Bücher pro Seite" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "Hochladen" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "Öffentliche Registrierung" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "Anonymer Zugriff" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "Administration" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "Aktuelles Commit Datum" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "Neuestes Commit Datum" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "Calibre-web Neustarten" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "Stoppe Calibre-web" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "Suche nach Update" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "Update durchführen" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "Calibre-web wirklich neustarten?" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "Zurück" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "Calibre-web wirklich stoppen" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "Updatevorgang, bitte Seite nicht neu laden" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "Buchtitel" @@ -511,7 +549,7 @@ msgstr "Beschreibung" msgid "Tags" msgstr "Tags" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "Serien" @@ -606,7 +644,7 @@ msgstr "Bearbeiten erlauben" msgid "Allow Changing Password" msgstr "Passwort ändern erlauben" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" @@ -689,11 +727,11 @@ msgstr "Entdecke (Zufälliges Buch)" msgid "Start" msgstr "Start" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "Suche" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "Beliebte Bücher" @@ -701,7 +739,7 @@ msgstr "Beliebte Bücher" msgid "Popular publications from this catalog based on Downloads." msgstr "Beliebte Publikationen aus dieser Bibliothek basierend auf Downloadzahlen" -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "Best bewertete Bücher" @@ -709,7 +747,7 @@ msgstr "Best bewertete Bücher" msgid "Popular publications from this catalog based on Rating." msgstr "Beliebte Veröffentlichungen dieses Katalogs basierend auf Bewertungen" -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "Neue Bücher" @@ -721,7 +759,7 @@ msgstr "Die neuesten Bücher" msgid "Show Random Books" msgstr "Zeige zufällige Bücher" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "Autoren" @@ -741,51 +779,51 @@ msgstr "Bücher nach Reihen geordnet" msgid "Toggle navigation" msgstr "Nagivation umschalten" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "Los!" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "Erweiterte Suche" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "Logout" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "Registrieren" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "Browsen" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "Entdecke" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "Kategorien" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "Sprachen" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "Öffentiche Bücherregale" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "Deine Bücherregale" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "Bücherregal erzeugen" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "Über" diff --git a/cps/translations/es/LC_MESSAGES/messages.mo b/cps/translations/es/LC_MESSAGES/messages.mo index 17a93367..2c7f6ec7 100644 Binary files a/cps/translations/es/LC_MESSAGES/messages.mo and b/cps/translations/es/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index 3cbb30b7..c695a965 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-02-10 20:17+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: 2016-11-13 18:35+0100\n" "Last-Translator: Juan F. Villa \n" "Language: es\n" @@ -25,316 +25,341 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "No instalado" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "Fallo al enviar el correo : %s" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "Prueba de Correo Calibre-web" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "Este mensaje ha sido enviado via Calibre Web." -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "Enviar a Kindle" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 msgid "Could not find any formats suitable for sending by email" msgstr "Formato no compatible para enviar por correo electronico" -#: cps/helper.py:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "No fue posible convertir de epub a mobi" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" -msgstr "El fichero solicitado no puede ser leido. Problema de permisos?" - -#: cps/ub.py:443 +#: cps/ub.py:434 msgid "Guest" msgstr "" -#: cps/web.py:778 +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "" + +#: cps/web.py:738 +msgid "Database connections are closed" +msgstr "" + +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "" + +#: cps/web.py:810 msgid "Latest Books" msgstr "Libros recientes" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "Libros Populares (los mas descargados)" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "Libros al Azar" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "Lista de Autores" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Error en apertura del Objeto. El archivo no existe o no es accesible" -#: cps/templates/index.xml:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "lista de Series" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "Lenguajes disponibles" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "Lenguaje: %(name)s" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "Lista de Categorias" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "Categoria : %(name)s" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "Estadisticas" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "Leer un Libro" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "Por favor llenar todos los campos!" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "Registrarse" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "Ocurrio un error. Intentar de nuevo mas tarde." -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "Usuario o direccion de correo en uso." -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Sesion iniciada como : '%(nickname)s'" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "Usuario o contraseña invalido" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "Iniciar Sesion" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "Configurar primero los parametros SMTP por favor..." -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Envio de Libro a %(kindlemail)s correctamente" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format 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:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "Configurar primero la dirección de correo Kindle por favor..." -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:1378 +#: cps/web.py:1390 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue removido del estante: %(sname)s" -#: cps/web.py:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, 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:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "Hemos tenido un error" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "Crear un Estante" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "Existe una cuenta vinculada a esta cuenta de correo." -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:1745 +#: cps/web.py:1757 msgid "Found an existing account for this email address or nickname." msgstr "Se ha encontrado una cuenta vinculada a esta cuenta de correo o usuario." -#: cps/web.py:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "Parametros de correo actualizados" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s" -#: cps/web.py:1776 +#: cps/web.py:1788 #, 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:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "Editar parametros de correo" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' Actualizado" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "Oups ! Error inesperado." -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fallo al crear la ruta %s (permiso negado)" -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fallo al almacenar el archivo %s (permiso negado)" -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fallo al borrar el archivo %s (permiso negado)" @@ -343,145 +368,158 @@ msgstr "Fallo al borrar el archivo %s (permiso negado)" msgid "User list" msgstr "lista de usuarios" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "Nickname" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "Correo" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "Kindle" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "Administracion" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "Descarga" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "Subir archivo" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "Editar" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "Clave" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "Parametros smtp del correo" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "Servidor smtp" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "Puerto smtp" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "SSL" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "Login SMTP" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "Clave SMTP" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "Desde el correo" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "Cambiar parametros smtp" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "Regresar" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "Titulo del Libro" @@ -498,7 +536,7 @@ msgstr "Descripcion" msgid "Tags" msgstr "Etiqueta" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "Series" @@ -593,7 +631,7 @@ msgstr "Permitir editar" msgid "Allow Changing Password" msgstr "Permitir cambiar la clave" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Inicio de Sesion" @@ -674,11 +712,11 @@ msgstr "Descubrir (Libros al azar)" msgid "Start" msgstr "Iniciar" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "Buscar" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "Libros Populares" @@ -686,7 +724,7 @@ msgstr "Libros Populares" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "" @@ -694,7 +732,7 @@ msgstr "" msgid "Popular publications from this catalog based on Rating." msgstr "Publicaciones populares del catalogo basados en el puntaje." -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "Nuevos Libros" @@ -706,7 +744,7 @@ msgstr "Libros Recientes" msgid "Show Random Books" msgstr "Mostrar libros al azar" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "Autores" @@ -726,51 +764,51 @@ msgstr "Libros ordenados por Series" msgid "Toggle navigation" msgstr "" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "Vamos!" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "Busqueda avanzada" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "Cerrar Sesion" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "Registro" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "Explorar" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "Descubrir" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "Categoria" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "Lenguaje" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "Estantes Publicos" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "Sus Estantes" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "Crear un estante" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "Acerca de" @@ -789,7 +827,7 @@ msgid "Remember me" msgstr "Recordarme" #: cps/templates/osd.xml:5 -msgid "instanceCalibre Web ebook catalog" +msgid "Calibre Web ebook catalog" msgstr "" #: cps/templates/read.html:136 diff --git a/cps/translations/fr/LC_MESSAGES/messages.mo b/cps/translations/fr/LC_MESSAGES/messages.mo index fd8ba5a0..9fe03e48 100644 Binary files a/cps/translations/fr/LC_MESSAGES/messages.mo and b/cps/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index f6f35475..76a2948a 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-02-10 20:17+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: 2016-11-13 18:35+0100\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -31,320 +31,343 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "Impossible d'envoyer le courriel : %s" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "Ce message a été envoyé depuis calibre web." -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "Envoyer ver Kindle" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 msgid "Could not find any formats suitable for sending by email" msgstr "Impossible de trouver un format adapté à envoyer par courriel" -#: cps/helper.py:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "Impossible de convertir epub vers mobi" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" +#: cps/ub.py:434 +msgid "Guest" msgstr "" -"Le fichier demandé ne peux pas être lu. Peut-être de mauvaises " -"permissions ?" -#: cps/ub.py:443 -msgid "Guest" +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "" + +#: cps/web.py:738 +msgid "Database connections are closed" msgstr "" -#: cps/web.py:778 +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "" + +#: cps/web.py:810 msgid "Latest Books" msgstr "Derniers livres" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "Liste des auteurs" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 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:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "S'enregistrer" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "Une erreur a eu lieu. Merci de réessayez plus tard." -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "Ce nom d'utilisateur ou cette adresse de courriel est déjà utilisée." -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "Mauvais nom d'utilisateur ou mot de passe" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "Connexion" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "Veillez configurer les paramètres smtp d'abord..." -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Livres envoyés à %(kindlemail)s avec succès" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Il y a eu une erreur en envoyant ce livre : %(res)s" -#: cps/web.py:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "Veuillez configurer votre adresse kindle d'abord..." -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" -#: cps/web.py:1378 +#: cps/web.py:1390 #, 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:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, 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:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "Créer une étagère" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "L'étagère %(name)s a été supprimé avec succès" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "Un compte avec cette adresse de courriel existe déjà." -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:1745 +#: cps/web.py:1757 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:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "Paramètres de courriel mis à jour" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:1776 +#: cps/web.py:1788 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "Éditer les paramètres de courriel" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossible de créer le chemin %s (permission refusée)" -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossible de supprimer le fichier %s (permission refusée)" @@ -353,145 +376,158 @@ msgstr "Impossible de supprimer le fichier %s (permission refusée)" msgid "User list" msgstr "Liste des ustilisateurs" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "Surnom" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "Courriel" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "Kindle" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "Administration" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "Télécharger" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "Téléverser" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "Éditer" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "Mot de passe" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "Paramètres smtp" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "Serveur smtp" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "Port smtp" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "SSL" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "Login smtp" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "Mot de passe smtp" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "Expéditeur des courriels" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "Changer les paramètre smtp" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "Retour" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "Titre du livre" @@ -508,7 +544,7 @@ msgstr "Description" msgid "Tags" msgstr "Étiquette" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "Séries" @@ -603,7 +639,7 @@ msgstr "Permettre l'édition" msgid "Allow Changing Password" msgstr "Permettre le changement de mot de passe" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Connexion" @@ -684,11 +720,11 @@ msgstr "Découverte (livres au hasard)" msgid "Start" msgstr "Démarrer" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "Chercher" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "Livres populaires" @@ -696,7 +732,7 @@ msgstr "Livres populaires" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "" @@ -704,7 +740,7 @@ msgstr "" msgid "Popular publications from this catalog based on Rating." msgstr "Publications populaires de ce catalogue sur la base de notes." -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "Nouveaux livres" @@ -716,7 +752,7 @@ msgstr "Les derniers livres" msgid "Show Random Books" msgstr "Montrer des livres au hasard" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "Auteurs" @@ -736,51 +772,51 @@ msgstr "Livres classés par série" msgid "Toggle navigation" msgstr "Basculer la navigation" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "Allez !" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "Recherche avancée" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "Déconnexion" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "S'enregistrer" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "Explorer" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "Découvrir" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "Catégories" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "Langues" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "Étagères publiques" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "Vos étagères" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "Créer une étagère" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "À popos" @@ -799,7 +835,7 @@ msgid "Remember me" msgstr "Se rappeler de moi" #: cps/templates/osd.xml:5 -msgid "instanceCalibre Web ebook catalog" +msgid "Calibre Web ebook catalog" msgstr "" #: cps/templates/read.html:136 diff --git a/cps/translations/pl/LC_MESSAGES/messages.mo b/cps/translations/pl/LC_MESSAGES/messages.mo index 3c5e3ab7..747a9970 100644 Binary files a/cps/translations/pl/LC_MESSAGES/messages.mo and b/cps/translations/pl/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index ff0e2170..6257519c 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (170210.2017)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-02-12 08:13+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: 2017-02-11 15:56+0100\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -20,318 +20,343 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "nie zainstalowane" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "Nie można wysłać poczty: %s" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "Calibre-web testowy email" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "Ten e-mail został wysłany za pośrednictwem calibre web." -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "Wyślij do Kindle" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 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:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "Nie można konwertować epub do mobi" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" -msgstr "Żądany plik nie może być odczytany. Może złe uprawnienia?" - -#: cps/ub.py:443 +#: cps/ub.py:434 msgid "Guest" msgstr "Gość" -#: cps/web.py:778 +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "" + +#: cps/web.py:738 +msgid "Database connections are closed" +msgstr "" + +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "" + +#: cps/web.py:810 msgid "Latest Books" msgstr "Najnowsze książki" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "Lista autorów" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "Autor: %(name)s" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 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:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" -msgstr "Wykonano ponowne uruchomienie, proszę odświeżyć stronę" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" +msgstr "" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "Aktualizacja zakończona" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "szukaj" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "rejestracja" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "Wystąpił nieznany błąd. Spróbuj ponownie później." -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "Nazwa użytkownika lub adres e-mail jest już w użyciu." -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Zalogowałeś się jako: '%(nickname)s'" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "Błędna nazwa użytkownika lub hasło" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "logowanie" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..." -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Książka została pomyślnie wysłana do %(kindlemail)s" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s" -#: cps/web.py:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s" -#: cps/web.py:1378 +#: cps/web.py:1390 #, 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:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "Znaleziono istniejące konto dla tego adresu e-mail." -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "Konfiguracja Calibre-web została zaktualizowana" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "Lokalizacja bazy danych nie jest prawidłowa, wpisz poprawną ścieżkę" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:1745 +#: cps/web.py:1757 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:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "Zaktualizowano ustawienia poczty e-mail" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Testowy e-mail pomyślnie wysłany do %(kindlemail)s" -#: cps/web.py:1776 +#: cps/web.py:1788 #, 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:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "Edytuj ustawienia poczty e-mail" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." @@ -340,145 +365,158 @@ msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." msgid "User list" msgstr "Lista użytkowników" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "Nazwa użytkownika" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "Email" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "Kindle" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "Portal administracyjny" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "Pobierz" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "Wyślij" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "Edycja" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "Zmiana hasła" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "Ustawienia poczty SMTP" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "Adres serwera SMTP" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "Port serwera SMTP" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "SSL" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "Nazwa użytkownika SMTP" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "Hasło SMTP" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "Wyślij z adresu e-mail" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "Zmień ustawienia SMTP" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "Konfiguracja" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "Folder bazy danych Calibre" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "Poziom logów" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "Port" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "Ilość książek na stronie" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "Wysyłanie" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "Publiczna rejestracja" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "Anonimowe przeglądanie" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "Zarządzanie" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "Uruchom ponownie Calibre-web" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "Zatrzymaj Calibre-web" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "Sprawdź aktualizacje" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "Wykonaj aktualizację" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "Na pewno chcesz uruchomić ponownie Calibre-web?" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "Wróć" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "Na pewno chcesz zatrzymać Calibre-web?" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "Tytuł książki" @@ -495,7 +533,7 @@ msgstr "Opis" msgid "Tags" msgstr "Tagi" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "Serie" @@ -590,7 +628,7 @@ msgstr "Zezwalaj na edycję" msgid "Allow Changing Password" msgstr "Zezwalaj na zmianę hasła" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Zaloguj się" @@ -673,11 +711,11 @@ msgstr "Odkrywaj (losowe książki)" msgid "Start" msgstr "Rozpocznij" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "Szukaj" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "Najpopularniejsze książki" @@ -685,7 +723,7 @@ msgstr "Najpopularniejsze książki" msgid "Popular publications from this catalog based on Downloads." msgstr "Popularne publikacje z tego katalogu bazujące na pobieraniach." -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "Najlepiej ocenione książki" @@ -693,7 +731,7 @@ msgstr "Najlepiej ocenione książki" msgid "Popular publications from this catalog based on Rating." msgstr "Popularne publikacje z tego katalogu bazujące na ocenach." -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "Nowe książki" @@ -705,7 +743,7 @@ msgstr "Ostatnie książki" msgid "Show Random Books" msgstr "Pokazuj losowe książki" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "Autorzy" @@ -725,51 +763,51 @@ msgstr "Książki sortowane według serii" msgid "Toggle navigation" msgstr "Przełącz nawigację" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "Idź!" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "Zaawansowane wyszukiwanie" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "Wyloguj się" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "Zarejestruj się" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "Przeglądaj" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "Odkrywaj" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "Kategorie" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "Języki" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "Publiczne półki" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "Twoje półki" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "Utwórz półkę" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "O programie" @@ -788,7 +826,7 @@ msgid "Remember me" msgstr "Zapamiętaj mnie" #: cps/templates/osd.xml:5 -msgid "instanceCalibre Web ebook catalog" +msgid "Calibre Web ebook catalog" msgstr "" #: cps/templates/read.html:136 diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index 411a6509..d3a83c0d 100644 Binary files a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 8e4e2109..5356f3b2 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-02-10 20:17+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -26,316 +26,341 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "未安装" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "发送邮件失败: %s" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "Calibre-web 测试邮件" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "此邮件由calibre web发送" -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "发送到Kindle" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 msgid "Could not find any formats suitable for sending by email" msgstr "无法找到适合邮件发送的格式" -#: cps/helper.py:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "无法转换epub到mobi" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" -msgstr "无法读取所请求的文件。可能是错误权限不对?" - -#: cps/ub.py:443 +#: cps/ub.py:434 msgid "Guest" msgstr "游客" -#: cps/web.py:778 +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "" + +#: cps/web.py:738 +msgid "Database connections are closed" +msgstr "" + +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "" + +#: cps/web.py:810 msgid "Latest Books" msgstr "最新书籍" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "作者列表" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/templates/index.xml:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "分类列表" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "统计" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" -msgstr "正在重启,请刷新页面" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" +msgstr "" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "搜索" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "请填写所有字段" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "注册" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "发生一个未知错误。请稍后再试。" -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "此用户名或邮箱已被使用。" -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "您现在已以'%(nickname)s'身份登录" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "用户名或密码错误" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "登录" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "请先配置SMTP邮箱..." -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "此书已被成功发给 %(kindlemail)s" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "请先配置您的kindle电子邮箱地址..." -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:1378 +#: cps/web.py:1390 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "找到已使用此邮箱的账号。" -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "管理页" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "Calibre-web配置已更新" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:1745 +#: cps/web.py:1757 msgid "Found an existing account for this email address or nickname." msgstr "已找到使用此邮箱或昵称的账号。" -#: cps/web.py:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "邮箱设置已更新" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s" -#: cps/web.py:1776 +#: cps/web.py:1788 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s" -#: cps/web.py:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "编辑邮箱设置" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "编辑元数据" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "创建路径 %s 失败(权限拒绝)。" -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "存储文件 %s 失败(权限拒绝)。" -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "删除文件 %s 失败(权限拒绝)。" @@ -344,145 +369,158 @@ msgstr "删除文件 %s 失败(权限拒绝)。" msgid "User list" msgstr "用户列表" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "昵称" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "管理" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "下载" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "上传" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "编辑" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "修改密码" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "SMTP设置" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "SMTP地址" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "SMTP端口" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "SMTP用户名" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "SMTP密码" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "来自邮箱" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "修改SMTP设置" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "配置" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "Calibre DB目录" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "日志级别" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "端口" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "每页书籍数" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "上传" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "开放注册" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "匿名浏览" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "管理" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "重启 Calibre-web" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "停止 Calibre-web" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "您确定要重启 Calibre-web 吗?" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "确定" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "后退" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "您确定要关闭 Calibre-web 吗?" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "书名" @@ -499,7 +537,7 @@ msgstr "简介" msgid "Tags" msgstr "标签" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "丛书" @@ -594,7 +632,7 @@ msgstr "允许编辑" msgid "Allow Changing Password" msgstr "允许修改密码" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "登录" @@ -675,11 +713,11 @@ msgstr "发现(随机书籍)" msgid "Start" msgstr "开始" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "搜索" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "热门书籍" @@ -687,7 +725,7 @@ msgstr "热门书籍" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "" @@ -695,7 +733,7 @@ msgstr "" msgid "Popular publications from this catalog based on Rating." msgstr "基于评分的热门书籍" -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "新书" @@ -707,7 +745,7 @@ msgstr "最新书籍" msgid "Show Random Books" msgstr "显示随机书籍" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "作者" @@ -727,51 +765,51 @@ msgstr "书籍按丛书排序" msgid "Toggle navigation" msgstr "切换导航" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "走起!" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "高级搜索" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "注销" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "注册" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "浏览" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "发现" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "分类" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "语言" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "公开书架" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "您的书架" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "创建书架" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "关于" @@ -790,7 +828,7 @@ msgid "Remember me" msgstr "记住我" #: cps/templates/osd.xml:5 -msgid "instanceCalibre Web ebook catalog" +msgid "Calibre Web ebook catalog" msgstr "" #: cps/templates/read.html:136 diff --git a/cps/web.py b/cps/web.py index 53a5b1a5..412b317a 100755 --- a/cps/web.py +++ b/cps/web.py @@ -5,7 +5,6 @@ from pydrive.auth import GoogleAuth import mimetypes import logging from logging.handlers import RotatingFileHandler -from tempfile import gettempdir import textwrap from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \ make_response, g, flash, abort, send_file @@ -41,11 +40,11 @@ import sys import subprocess import re import db +import thread from shutil import move, copyfile from tornado.ioloop import IOLoop import shutil import StringIO -from shutil import move import gdriveutils import io import hashlib @@ -124,7 +123,7 @@ class Gdrive: class ReverseProxied(object): """Wrap the application in this middleware and configure the - front-end server to add these headers, to let you quietly bind + front-end server to add these headers, to let you quietly bind this to a URL other than / and to an HTTP scheme that is different than what is used locally. @@ -562,8 +561,10 @@ def feed_search(term): filter = True if term: entries = db.session.query(db.Books).filter(db.or_(db.Books.tags.any(db.Tags.name.like("%" + term + "%")), - db.Books.authors.any(db.Authors.name.like("%" + term + "%")), - db.Books.title.like("%" + term + "%"))).filter(filter).all() + db.Books.series.any(db.Series.name.like("%" + term + "%")), + db.Books.authors.any(db.Authors.name.like("%" + term + "%")), + db.Books.publishers.any(db.Publishers.name.like("%" + term + "%")), + db.Books.title.like("%" + term + "%"))).filter(filter).all() entriescount = len(entries) if len(entries) > 0 else 1 pagination = Pagination(1, entriescount, entriescount) xml = render_title_template('feed.xml', searchterm=term, entries=entries, pagination=pagination) @@ -761,8 +762,9 @@ def get_opds_download_link(book_id, format): resp, content = df.auth.Get_Http_Object().request(download_url) response=send_file(io.BytesIO(content)) else: - file_name = helper.get_valid_filename(file_name) + # file_name = helper.get_valid_filename(file_name) response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) + response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format)) response.headers["Content-Disposition"] = "attachment; filename=\"%s.%s\"" % (data.name, format) return response @@ -809,10 +811,42 @@ def get_update_status(): commit = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/refs/heads/master').json() if "object" in commit and commit['object']['sha'] != commit_id: status['status'] = True + commitdate = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/commits/'+commit['object']['sha']).json() + if "committer" in commitdate: + status['commit'] = commitdate['committer']['date'] + else: + status['commit'] = u'Unknown' else: status['status'] = False return json.dumps(status) +@app.route("/get_updater_status", methods=['GET','POST']) +@login_required +@admin_required +def get_updater_status(): + status = {} + if request.method == "POST": + commit = request.form.to_dict() + if "start" in commit and commit['start'] == 'True': + text={ + "1": _(u'Requesting update package'), + "2": _(u'Downloading update package'), + "3": _(u'Unzipping update package'), + "4": _(u'Files are replaced'), + "5": _(u'Database connections are closed'), + "6": _(u'Server is stopped'), + "7": _(u'Update finished, please press okay and reload page') + } + status['text']=text + helper.updater_thread = helper.Updater() + helper.updater_thread.start() + status['status']=helper.updater_thread.get_update_status() + elif request.method == "GET": + try: + status['status']=helper.updater_thread.get_update_status() + except: + status['status'] = 7 + return json.dumps(status) @app.route("/get_languages_json", methods=['GET', 'POST']) @@ -1139,7 +1173,7 @@ def stats(): # books=db.session.query(db.Books).all() # for book in books: # gdriveutils.getFolderId(book.path, Gdrive.Instance().drive) -# return +# return @app.route("/gdrive/authenticate") @login_required @@ -1202,10 +1236,10 @@ def on_received_watch_confirmation(): def updateMetaData(): app.logger.info ('Change received from gdrive') - app.logger.info (data) + app.logger.info (data) try: j=json.loads(data) - app.logger.info ('Getting change details') + app.logger.info ('Getting change details') response=gdriveutils.getChangeById(Gdrive.Instance().drive, j['id']) app.logger.info (response) if response: @@ -1229,9 +1263,9 @@ def on_received_watch_confirmation(): @login_required @admin_required def shutdown(): - global global_task + # global global_task task = int(request.args.get("parameter").strip()) - global_task = task + helper.global_task = task if task == 1 or task == 0: # valid commandos received # close all database connections db.session.close() @@ -1243,7 +1277,7 @@ def shutdown(): server.add_callback(server.stop) showtext = {} if task == 0: - showtext['text'] = _(u'Performing Restart, please reload page') + showtext['text'] = _(u'Server restarted, please reload page') else: showtext['text'] = _(u'Performing shutdown of server, please close window') return json.dumps(showtext) @@ -1254,23 +1288,10 @@ def shutdown(): @login_required @admin_required def update(): - global global_task - r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True) - fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0] - z = zipfile.ZipFile(StringIO.StringIO(r.content)) - tmp_dir = gettempdir() - z.extractall(tmp_dir) - helper.update_source(os.path.join(tmp_dir,os.path.splitext(fname)[0]),config.get_main_dir) - global_task = 0 - db.session.close() - db.engine.dispose() - ub.session.close() - ub.engine.dispose() - # stop tornado server - server = IOLoop.instance() - server.add_callback(server.stop) + helper.updater_thread = helper.Updater() flash(_(u"Update done"), category="info") - return logout() + return "" + @app.route("/search", methods=["GET"]) @login_required_if_no_ano @@ -1282,9 +1303,10 @@ def search(): else: filter = True entries = db.session.query(db.Books).filter(db.or_(db.Books.tags.any(db.Tags.name.like("%" + term + "%")), - db.Books.series.any(db.Series.name.like("%" + term + "%")), - db.Books.authors.any(db.Authors.name.like("%" + term + "%")), - db.Books.title.like("%" + term + "%"))).filter(filter).all() + db.Books.series.any(db.Series.name.like("%" + term + "%")), + db.Books.authors.any(db.Authors.name.like("%" + term + "%")), + db.Books.publishers.any(db.Publishers.name.like("%" + term + "%")), + db.Books.title.like("%" + term + "%"))).filter(filter).all() return render_title_template('search.html', searchterm=term, entries=entries) else: return render_title_template('search.html', searchterm="") @@ -1304,12 +1326,14 @@ def advanced_search(): author_name = request.args.get("author_name") book_title = request.args.get("book_title") + publisher = request.args.get("publisher") if author_name: author_name = author_name.strip() if book_title: book_title = book_title.strip() + if publisher: publisher = publisher.strip() if include_tag_inputs or exclude_tag_inputs or include_series_inputs or exclude_series_inputs or \ - include_languages_inputs or exclude_languages_inputs or author_name or book_title: + include_languages_inputs or exclude_languages_inputs or author_name or book_title or publisher: searchterm = [] - searchterm.extend((author_name, book_title)) + searchterm.extend((author_name, book_title, publisher)) tag_names = db.session.query(db.Tags).filter(db.Tags.id.in_(include_tag_inputs)).all() searchterm.extend(tag.name for tag in tag_names) # searchterm = " + ".join(filter(None, searchterm)) @@ -1325,7 +1349,8 @@ def advanced_search(): searchterm.extend(language.name for language in language_names) searchterm = " + ".join(filter(None, searchterm)) q = q.filter(db.Books.authors.any(db.Authors.name.like("%" + author_name + "%")), - db.Books.title.like("%" + book_title + "%")) + db.Books.title.like("%" + book_title + "%"), + db.Books.publishers.any(db.Publishers.name.like("%" + publisher + "%"))) for tag in include_tag_inputs: q = q.filter(db.Books.tags.any(db.Tags.id == tag)) for tag in exclude_tag_inputs: @@ -1367,9 +1392,7 @@ def get_cover(cover_path): return redirect(download_url) else: return send_from_directory(os.path.join(config.config_calibre_dir, cover_path), "cover.jpg") - resp.headers['Content-Type']='image/jpeg' - return resp @app.route("/opds/thumb_240_240/") @app.route("/opds/cover_240_240/") @@ -1393,9 +1416,9 @@ def render_read_books(page, are_read, as_xml=False): else: db_filter = ~db.Books.id.in_(readBookIds) - entries, random, pagination = fill_indexpage(page, db.Books, + entries, random, pagination = fill_indexpage(page, db.Books, db_filter, db.Books.timestamp.desc()) - if as_xml: + if as_xml: xml = render_title_template('feed.xml', entries=entries, pagination=pagination) response = make_response(xml) response.headers["Content-Type"] = "application/xml" @@ -1875,14 +1898,13 @@ def basic_configuration(): def configuration_helper(origin): - global global_task + # global global_task reboot_required = False db_change = False success = False if request.method == "POST": to_save = request.form.to_dict() content = ub.session.query(ub.Settings).first() - # ToDo: check lib vaild, and change without restart 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"] @@ -1954,8 +1976,8 @@ def configuration_helper(origin): if "passwd_role" in to_save: content.config_default_role = content.config_default_role + ub.ROLE_PASSWD try: - if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"): - gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db") + if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"): + gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db") if db_change: if config.db_configured: db.session.close() @@ -1982,7 +2004,7 @@ def configuration_helper(origin): # stop tornado server server = IOLoop.instance() server.add_callback(server.stop) - global_task = 0 + helper.global_task = 0 app.logger.info('Reboot required, restarting') if origin: success = True @@ -2236,7 +2258,7 @@ def edit_book(book_id): modify_database_object(input_authors, book.authors, db.Authors, db.session, 'author') if author0_before_edit != book.authors[0].name: edited_books_id.add(book.id) - book.author_sort=helper.get_sorted_author(input_authors[0]) + book.author_sort=helper.get_sorted_author(input_authors[0]) if to_save["cover_url"] and os.path.splitext(to_save["cover_url"])[1].lower() == ".jpg": img = requests.get(to_save["cover_url"]) @@ -2466,7 +2488,7 @@ def upload(): if is_author: db_author = is_author else: - db_author = db.Authors(author, helper.get_sorted_author(author), "") + db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\','/') diff --git a/messages.pot b/messages.pot index 90b9de7e..759f051b 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-02-10 20:17+0100\n" +"POT-Creation-Date: 2017-02-20 19:47+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,316 +17,341 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.3.4\n" -#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:998 +#: cps/book_formats.py:111 cps/book_formats.py:115 cps/web.py:1030 msgid "not installed" msgstr "" -#: cps/helper.py:136 +#: cps/helper.py:150 #, python-format msgid "Failed to send mail: %s" msgstr "" -#: cps/helper.py:143 +#: cps/helper.py:157 msgid "Calibre-web test email" msgstr "" -#: cps/helper.py:144 cps/helper.py:154 +#: cps/helper.py:158 cps/helper.py:168 msgid "This email has been sent via calibre web." msgstr "" -#: cps/helper.py:153 cps/templates/detail.html:130 +#: cps/helper.py:167 cps/templates/detail.html:130 msgid "Send to Kindle" msgstr "" -#: cps/helper.py:171 cps/helper.py:186 +#: cps/helper.py:185 cps/helper.py:200 msgid "Could not find any formats suitable for sending by email" msgstr "" -#: cps/helper.py:180 +#: cps/helper.py:194 msgid "Could not convert epub to mobi" msgstr "" -#: cps/helper.py:206 -msgid "The requested file could not be read. Maybe wrong permissions?" +#: cps/ub.py:434 +msgid "Guest" msgstr "" -#: cps/ub.py:443 -msgid "Guest" +#: cps/web.py:734 +msgid "Requesting update package" +msgstr "" + +#: cps/web.py:735 +msgid "Downloading update package" +msgstr "" + +#: cps/web.py:736 +msgid "Unzipping update package" +msgstr "" + +#: cps/web.py:737 +msgid "Files are replaced" +msgstr "" + +#: cps/web.py:738 +msgid "Database connections are closed" msgstr "" -#: cps/web.py:778 +#: cps/web.py:739 +msgid "Server is stopped" +msgstr "" + +#: cps/web.py:740 +msgid "Update finished, please press okay and reload page" +msgstr "" + +#: cps/web.py:810 msgid "Latest Books" msgstr "" -#: cps/web.py:803 +#: cps/web.py:835 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:813 +#: cps/web.py:845 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:822 +#: cps/templates/index.xml:36 cps/web.py:854 msgid "Random Books" msgstr "" -#: cps/web.py:835 +#: cps/web.py:867 msgid "Author list" msgstr "" -#: cps/web.py:846 +#: cps/web.py:878 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:848 cps/web.py:876 cps/web.py:975 cps/web.py:1216 cps/web.py:2103 +#: cps/web.py:880 cps/web.py:908 cps/web.py:1007 cps/web.py:1235 +#: cps/web.py:2115 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/templates/index.xml:57 cps/web.py:862 +#: cps/templates/index.xml:57 cps/web.py:894 msgid "Series list" msgstr "" -#: cps/web.py:874 +#: cps/web.py:906 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:907 +#: cps/web.py:939 msgid "Available languages" msgstr "" -#: cps/web.py:922 +#: cps/web.py:954 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:50 cps/web.py:935 +#: cps/templates/index.xml:50 cps/web.py:967 msgid "Category list" msgstr "" -#: cps/web.py:947 +#: cps/web.py:979 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/web.py:1008 +#: cps/web.py:1040 msgid "Statistics" msgstr "" -#: cps/web.py:1029 -msgid "Performing Restart, please reload page" +#: cps/web.py:1061 +msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1031 +#: cps/web.py:1063 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1055 +#: cps/web.py:1073 msgid "Update done" msgstr "" -#: cps/web.py:1128 cps/web.py:1141 +#: cps/web.py:1147 cps/web.py:1160 msgid "search" msgstr "" -#: cps/web.py:1192 cps/web.py:1199 cps/web.py:1206 cps/web.py:1213 +#: cps/web.py:1211 cps/web.py:1218 cps/web.py:1225 cps/web.py:1232 msgid "Read a Book" msgstr "" -#: cps/web.py:1264 cps/web.py:1701 +#: cps/web.py:1276 cps/web.py:1713 msgid "Please fill out all fields!" msgstr "" -#: cps/web.py:1265 cps/web.py:1281 cps/web.py:1286 cps/web.py:1288 +#: cps/web.py:1277 cps/web.py:1293 cps/web.py:1298 cps/web.py:1300 msgid "register" msgstr "" -#: cps/web.py:1280 +#: cps/web.py:1292 msgid "An unknown error occured. Please try again later." msgstr "" -#: cps/web.py:1285 +#: cps/web.py:1297 msgid "This username or email address is already in use." msgstr "" -#: cps/web.py:1303 +#: cps/web.py:1315 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "" -#: cps/web.py:1308 +#: cps/web.py:1320 msgid "Wrong Username or Password" msgstr "" -#: cps/web.py:1310 +#: cps/web.py:1322 msgid "login" msgstr "" -#: cps/web.py:1327 +#: cps/web.py:1339 msgid "Please configure the SMTP mail settings first..." msgstr "" -#: cps/web.py:1331 +#: cps/web.py:1343 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:1335 +#: cps/web.py:1347 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:1337 +#: cps/web.py:1349 msgid "Please configure your kindle email address first..." msgstr "" -#: cps/web.py:1357 +#: cps/web.py:1369 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:1378 +#: cps/web.py:1390 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:1397 cps/web.py:1421 +#: cps/web.py:1409 cps/web.py:1433 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:1402 +#: cps/web.py:1414 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:1404 cps/web.py:1432 +#: cps/web.py:1416 cps/web.py:1444 msgid "There was an error" msgstr "" -#: cps/web.py:1405 cps/web.py:1407 +#: cps/web.py:1417 cps/web.py:1419 msgid "create a shelf" msgstr "" -#: cps/web.py:1430 +#: cps/web.py:1442 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:1433 cps/web.py:1435 +#: cps/web.py:1445 cps/web.py:1447 msgid "Edit a shelf" msgstr "" -#: cps/web.py:1453 +#: cps/web.py:1465 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:1475 +#: cps/web.py:1487 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:1506 +#: cps/web.py:1518 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:1568 +#: cps/web.py:1580 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:1570 cps/web.py:1574 +#: cps/web.py:1582 cps/web.py:1586 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:1571 +#: cps/web.py:1583 msgid "Profile updated" msgstr "" -#: cps/web.py:1584 +#: cps/web.py:1597 msgid "Admin page" msgstr "" -#: cps/web.py:1656 +#: cps/web.py:1668 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:1663 cps/web.py:1669 cps/web.py:1682 +#: cps/web.py:1675 cps/web.py:1681 cps/web.py:1694 msgid "Basic Configuration" msgstr "" -#: cps/web.py:1667 +#: cps/web.py:1679 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:33 cps/web.py:1703 cps/web.py:1749 +#: cps/templates/admin.html:34 cps/web.py:1715 cps/web.py:1761 msgid "Add new user" msgstr "" -#: cps/web.py:1741 +#: cps/web.py:1753 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:1745 +#: cps/web.py:1757 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:1767 +#: cps/web.py:1779 msgid "Mail settings updated" msgstr "" -#: cps/web.py:1773 +#: cps/web.py:1785 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:1776 +#: cps/web.py:1788 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:1777 +#: cps/web.py:1789 msgid "Edit mail settings" msgstr "" -#: cps/web.py:1805 +#: cps/web.py:1817 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:1886 +#: cps/web.py:1898 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:1889 +#: cps/web.py:1901 msgid "An unknown error occured." msgstr "" -#: cps/web.py:1892 +#: cps/web.py:1904 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2098 cps/web.py:2101 cps/web.py:2175 +#: cps/web.py:2110 cps/web.py:2113 cps/web.py:2188 msgid "edit metadata" msgstr "" -#: cps/web.py:2133 +#: cps/web.py:2145 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:2138 +#: cps/web.py:2150 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:2143 +#: cps/web.py:2155 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" @@ -335,145 +360,158 @@ msgstr "" msgid "User list" msgstr "" -#: cps/templates/admin.html:7 +#: cps/templates/admin.html:8 msgid "Nickname" msgstr "" -#: cps/templates/admin.html:8 +#: cps/templates/admin.html:9 msgid "Email" msgstr "" -#: cps/templates/admin.html:9 +#: cps/templates/admin.html:10 msgid "Kindle" msgstr "" -#: cps/templates/admin.html:10 +#: cps/templates/admin.html:11 msgid "DLS" msgstr "" -#: cps/templates/admin.html:11 cps/templates/layout.html:83 +#: cps/templates/admin.html:12 cps/templates/layout.html:85 msgid "Admin" msgstr "" -#: cps/templates/admin.html:12 cps/templates/detail.html:117 +#: cps/templates/admin.html:13 cps/templates/detail.html:117 msgid "Download" msgstr "" -#: cps/templates/admin.html:13 cps/templates/layout.html:76 +#: cps/templates/admin.html:14 cps/templates/layout.html:78 msgid "Upload" msgstr "" -#: cps/templates/admin.html:14 +#: cps/templates/admin.html:15 msgid "Edit" msgstr "" -#: cps/templates/admin.html:15 +#: cps/templates/admin.html:16 msgid "Passwd" msgstr "" -#: cps/templates/admin.html:34 +#: cps/templates/admin.html:35 msgid "SMTP mail settings" msgstr "" -#: cps/templates/admin.html:37 cps/templates/email_edit.html:7 +#: cps/templates/admin.html:38 cps/templates/email_edit.html:7 msgid "SMTP hostname" msgstr "" -#: cps/templates/admin.html:38 +#: cps/templates/admin.html:39 msgid "SMTP port" msgstr "" -#: cps/templates/admin.html:39 +#: cps/templates/admin.html:40 msgid "SSL" msgstr "" -#: cps/templates/admin.html:40 cps/templates/email_edit.html:23 +#: cps/templates/admin.html:41 cps/templates/email_edit.html:23 msgid "SMTP login" msgstr "" -#: cps/templates/admin.html:41 cps/templates/email_edit.html:27 +#: cps/templates/admin.html:42 cps/templates/email_edit.html:27 msgid "SMTP password" msgstr "" -#: cps/templates/admin.html:42 +#: cps/templates/admin.html:43 msgid "From mail" msgstr "" -#: cps/templates/admin.html:54 +#: cps/templates/admin.html:55 msgid "Change SMTP settings" msgstr "" -#: cps/templates/admin.html:56 cps/templates/admin.html:76 +#: cps/templates/admin.html:57 cps/templates/admin.html:77 msgid "Configuration" msgstr "" -#: cps/templates/admin.html:59 +#: cps/templates/admin.html:60 msgid "Calibre DB dir" msgstr "" -#: cps/templates/admin.html:60 cps/templates/config_edit.html:32 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:32 msgid "Log Level" msgstr "" -#: cps/templates/admin.html:61 +#: cps/templates/admin.html:62 msgid "Port" msgstr "" -#: cps/templates/admin.html:62 cps/templates/config_edit.html:19 +#: cps/templates/admin.html:63 cps/templates/config_edit.html:19 msgid "Books per page" msgstr "" -#: cps/templates/admin.html:63 +#: cps/templates/admin.html:64 msgid "Uploading" msgstr "" -#: cps/templates/admin.html:64 +#: cps/templates/admin.html:65 msgid "Public registration" msgstr "" -#: cps/templates/admin.html:65 +#: cps/templates/admin.html:66 msgid "Anonymous browsing" msgstr "" -#: cps/templates/admin.html:77 +#: cps/templates/admin.html:78 msgid "Administration" msgstr "" -#: cps/templates/admin.html:79 +#: cps/templates/admin.html:80 +msgid "Current commit timestamp" +msgstr "" + +#: cps/templates/admin.html:81 +msgid "Newest commit timestamp" +msgstr "" + +#: cps/templates/admin.html:83 msgid "Restart Calibre-web" msgstr "" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:84 msgid "Stop Calibre-web" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:85 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:82 +#: cps/templates/admin.html:86 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:93 +#: cps/templates/admin.html:96 msgid "Do you really want to restart Calibre-web?" msgstr "" -#: cps/templates/admin.html:94 cps/templates/admin.html:109 +#: cps/templates/admin.html:101 cps/templates/admin.html:115 +#: cps/templates/admin.html:136 msgid "Ok" msgstr "" -#: cps/templates/admin.html:95 cps/templates/admin.html:110 +#: cps/templates/admin.html:102 cps/templates/admin.html:116 #: cps/templates/book_edit.html:108 cps/templates/config_edit.html:75 #: cps/templates/email_edit.html:36 cps/templates/shelf_edit.html:17 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:111 msgid "Back" msgstr "" -#: cps/templates/admin.html:108 +#: cps/templates/admin.html:114 msgid "Do you really want to stop Calibre-web?" msgstr "" +#: cps/templates/admin.html:127 +msgid "Updating, please do not reload page" +msgstr "" + #: cps/templates/book_edit.html:16 cps/templates/search_form.html:6 msgid "Book Title" msgstr "" @@ -490,7 +528,7 @@ msgstr "" msgid "Tags" msgstr "" -#: cps/templates/book_edit.html:33 cps/templates/layout.html:136 +#: cps/templates/book_edit.html:33 cps/templates/layout.html:138 #: cps/templates/search_form.html:33 msgid "Series" msgstr "" @@ -585,7 +623,7 @@ msgstr "" msgid "Allow Changing Password" msgstr "" -#: cps/templates/config_edit.html:78 cps/templates/layout.html:91 +#: cps/templates/config_edit.html:78 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "" @@ -666,11 +704,11 @@ msgstr "" msgid "Start" msgstr "" -#: cps/templates/index.xml:7 cps/templates/layout.html:61 +#: cps/templates/index.xml:7 cps/templates/layout.html:58 msgid "Search" msgstr "" -#: cps/templates/index.xml:15 cps/templates/layout.html:124 +#: cps/templates/index.xml:15 cps/templates/layout.html:126 msgid "Hot Books" msgstr "" @@ -678,7 +716,7 @@ msgstr "" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:127 +#: cps/templates/index.xml:22 cps/templates/layout.html:129 msgid "Best rated Books" msgstr "" @@ -686,7 +724,7 @@ msgstr "" msgid "Popular publications from this catalog based on Rating." msgstr "" -#: cps/templates/index.xml:29 cps/templates/layout.html:122 +#: cps/templates/index.xml:29 cps/templates/layout.html:124 msgid "New Books" msgstr "" @@ -698,7 +736,7 @@ msgstr "" msgid "Show Random Books" msgstr "" -#: cps/templates/index.xml:43 cps/templates/layout.html:138 +#: cps/templates/index.xml:43 cps/templates/layout.html:140 msgid "Authors" msgstr "" @@ -718,51 +756,51 @@ msgstr "" msgid "Toggle navigation" msgstr "" -#: cps/templates/layout.html:63 +#: cps/templates/layout.html:60 msgid "Go!" msgstr "" -#: cps/templates/layout.html:66 +#: cps/templates/layout.html:68 msgid "Advanced Search" msgstr "" -#: cps/templates/layout.html:87 +#: cps/templates/layout.html:89 msgid "Logout" msgstr "" -#: cps/templates/layout.html:92 cps/templates/register.html:18 +#: cps/templates/layout.html:94 cps/templates/register.html:18 msgid "Register" msgstr "" -#: cps/templates/layout.html:121 +#: cps/templates/layout.html:123 msgid "Browse" msgstr "" -#: cps/templates/layout.html:130 +#: cps/templates/layout.html:132 msgid "Discover" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:135 msgid "Categories" msgstr "" -#: cps/templates/layout.html:140 cps/templates/search_form.html:54 +#: cps/templates/layout.html:142 cps/templates/search_form.html:54 msgid "Languages" msgstr "" -#: cps/templates/layout.html:143 +#: cps/templates/layout.html:145 msgid "Public Shelves" msgstr "" -#: cps/templates/layout.html:147 +#: cps/templates/layout.html:149 msgid "Your Shelves" msgstr "" -#: cps/templates/layout.html:152 +#: cps/templates/layout.html:154 msgid "Create a Shelf" msgstr "" -#: cps/templates/layout.html:153 +#: cps/templates/layout.html:155 msgid "About" msgstr "" @@ -781,7 +819,7 @@ msgid "Remember me" msgstr "" #: cps/templates/osd.xml:5 -msgid "instanceCalibre Web ebook catalog" +msgid "Calibre Web ebook catalog" msgstr "" #: cps/templates/read.html:136
{{_('Nickname')}}