Merge pull request #1 from janeczku/master

Bringing fork up to date
pull/121/head
JackED42 8 years ago committed by GitHub
commit a7cd993caa

@ -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)

@ -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"<Languages('{0}')>".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"<Publishers('{0},{1}')>".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,

@ -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:
permission=os.stat(dst_file)
#print('Remove file before copy: '+dst_file)
os.remove(dst_file)
else:
# 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=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))
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:
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)

@ -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%;}

@ -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');
});

@ -2,6 +2,7 @@
{% block body %}
<div class="discover">
<h2>{{_('User list')}}</h2>
<div id="divLoading"></div>
<table class="table table-striped" id="table_user">
<tr>
<th>{{_('Nickname')}}</th>
@ -76,11 +77,13 @@
<div class="btn btn-default"><a href="{{url_for('configuration')}}">{{_('Configuration')}}</a></div>
<h2>{{_('Administration')}}</h2>
{% if not development %}
<p>{{_('Current commit timestamp')}}: {{commit}} </p>
<div class="btn btn-default" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-web')}}</a></div>
<div class="btn btn-default" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop Calibre-web')}}</a></div>
<div class="btn btn-default" id="check_for_update">{{_('Check for update')}}</a></div>
<a href="{{url_for('update')}}" class="btn btn-default hidden" id="perform_update">{{_('Perform Update')}}</a>
<div>{{_('Current commit timestamp')}}: <span>{{commit}} </span></div>
<div class="hidden" id="update_info">{{_('Newest commit timestamp')}}: <span></span></div>
<p></p>
<div class="btn btn-default" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-web')}}</div>
<div class="btn btn-default" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop Calibre-web')}}</div>
<div class="btn btn-default" id="check_for_update">{{_('Check for update')}}</div>
<div class="btn btn-default hidden" id="perform_update" data-toggle="modal" data-target="#UpdateprogressDialog">{{_('Perform Update')}}</div>
{% endif %}
</div>
<!-- Modal -->
@ -88,15 +91,17 @@
<div class="modal-dialog modal-sm">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header bg-info">
</div>
<div class="modal-header bg-info"></div>
<div class="modal-body text-center">
<p>{{_('Do you really want to restart Calibre-web?')}}</p>
<button type="button" class="btn btn-default" id="restart" data-dismiss="modal">{{_('Ok')}}</button>
<div id="spinner" class="spinner" style="display:none;">
<img id="img-spinner" src="/static/css/images/loading-icon.gif"/>
</div>
<p></p>
<button type="button" class="btn btn-default" id="restart" >{{_('Ok')}}</button>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button>
</div>
</div>
</div>
</div>
<div id="ShutdownDialog" class="modal fade" role="dialog">
@ -114,5 +119,23 @@
</div>
</div>
<div id="UpdateprogressDialog" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header bg-info text-center">
<span>{{_('Updating, please do not reload page')}}</span>
</div>
<div class="modal-body text-center">
<div id="spinner2" class="spinner2" style="display:none;">
<img id="img-spinner" src="/static/css/images/loading-icon.gif"/>
</div>
<p></p>
<div id="Updatecontent"></div>
<p></p>
<button type="button" class="btn btn-default hidden" id="updateFinished" data-dismiss="modal">{{_('Ok')}}</button>
</div>
</div>
</div>
</div>
{% endblock %}

@ -50,6 +50,7 @@
{% if entry.identifiers|length > 0 %}
<div class="identifiers">
<p>
<span class="glyphicon glyphicon-link"></span>
{% for identifier in entry.identifiers %}
<a href="{{identifier}}" target="_blank" class="btn btn-xs btn-success" role="button">{{identifier.formatType()}}</a>
@ -66,10 +67,16 @@
{% for tag in entry.tags %}
<a href="{{ url_for('category', id=tag.id) }}" class="btn btn-xs btn-info" role="button">{{tag.name}}</a>
{%endfor%}
</div>
</p>
{% endif %}
{% if entry.publishers|length > 0 %}
<div class="publishers">
<p>
<span>{{_('Publisher')}}:{% for publisher in entry.publishers %} {{publisher.name}}{% if not loop.last %},{% endif %}{% endfor %}</span>
</p>
</div>
{% endif %}
{% if entry.pubdate[:10] != '0101-01-01' %}
<p>{{_('Publishing date')}}: {{entry.pubdate|formatdate}} </p>
{% endif %}

@ -65,7 +65,7 @@
<div class="navbar-collapse collapse">
{% if g.user.is_authenticated or g.user.is_anonymous() %}
<ul class="nav navbar-nav ">
<li><a href="{{url_for('advanced_search')}}"><span class="glyphicon glyphicon-search"></span> {{_('Advanced Search')}}</a></li>
<li><a href="{{url_for('advanced_search')}}"><span class="glyphicon glyphicon-search"></span><span class="hidden-sm"> {{_('Advanced Search')}}</span></a></li>
</ul>
{% endif %}
<ul class="nav navbar-nav navbar-right" id="main-nav">

@ -10,63 +10,67 @@
<label for="bookAuthor">{{_('Author')}}</label>
<input type="text" class="form-control typeahead" name="author_name" id="bookAuthor" value="" autocomplete="off">
</div>
<label for="Tags">{{_('Tags')}}</label>
<div class="form-group">
<label for="Publisher">{{_('Publisher')}}</label>
<input type="text" class="form-control" name="publisher" id="publisher" value="">
</div>
<label for="include_tag">{{_('Tags')}}</label>
<div class="form-group" id="test">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for tag in tags %}
<label id="tag_{{tag.id}}" class="btn btn-primary tags_click">
<input type="checkbox" autocomplete="off" name="include_tag" value="{{tag.id}}">{{tag.name}}</input>
<input type="checkbox" autocomplete="off" name="include_tag" id="include_tag" value="{{tag.id}}">{{tag.name}}</input>
</label>
{% endfor %}
</div>
</div>
<label for="Tags">{{_('Exclude Tags')}}</label>
<label for="exclude_tag">{{_('Exclude Tags')}}</label>
<div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for tag in tags %}
<label id="tag_{{tag.id}}" class="btn btn-danger tags_click">
<input type="checkbox" autocomplete="off" name="exclude_tag" value="{{tag.id}}">{{tag.name}}</input>
<input type="checkbox" autocomplete="off" name="exclude_tag" id="exclude_tag" value="{{tag.id}}">{{tag.name}}</input>
</label>
{% endfor %}
</div>
</div>
<label for="Series">{{_('Series')}}</label>
<label for="include_serie">{{_('Series')}}</label>
<div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for serie in series %}
<label id="serie_{{serie.id}}" class="btn btn-primary serie_click">
<input type="checkbox" autocomplete="off" name="include_serie" value="{{serie.id}}">{{serie.name}}</input>
<input type="checkbox" autocomplete="off" name="include_serie" id="include_serie" value="{{serie.id}}">{{serie.name}}</input>
</label>
{% endfor %}
</div>
</div>
<label for="Series">{{_('Exclude Series')}}</label>
<label for="exclude_serie">{{_('Exclude Series')}}</label>
<div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for serie in series %}
<label id="serie_{{serie.id}}" class="btn btn-danger serie_click">
<input type="checkbox" autocomplete="off" name="exclude_serie" value="{{serie.id}}">{{serie.name}}</input>
<input type="checkbox" autocomplete="off" name="exclude_serie" id="exclude_serie" value="{{serie.id}}">{{serie.name}}</input>
</label>
{% endfor %}
</div>
</div>
{% if languages %}
<label for="Languages">{{_('Languages')}}</label>
<label for="include_language">{{_('Languages')}}</label>
<div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for language in languages %}
<label id="language_{{language.id}}" class="btn btn-primary serie_click">
<input type="checkbox" autocomplete="off" name="include_language" value="{{language.id}}">{{language.name}}</input>
<input type="checkbox" autocomplete="off" name="include_language" id="include_language" value="{{language.id}}">{{language.name}}</input>
</label>
{% endfor %}
</div>
</div>
<label for="Languages">{{_('Exclude Languages')}}</label>
<label for="exclude_language">{{_('Exclude Languages')}}</label>
<div class="form-group">
<div class="btn-toolbar btn-toolbar-lg" data-toggle="buttons">
{% for language in languages %}
<label id="language_{{language.id}}" class="btn btn-danger language_click">
<input type="checkbox" autocomplete="off" name="exclude_language" value="{{language.id}}">{{language.name}}</input>
<input type="checkbox" autocomplete="off" name="exclude_language" id="exclude_language" value="{{language.id}}">{{language.name}}</input>
</label>
{% endfor %}
</div>

@ -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"

@ -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 <juan.villa@paisdelconocimiento.org>\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

@ -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 <nicoroud@gmail.com>\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

@ -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 <radek.kierznowski@outlook.com>\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

@ -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 <dalin.lin@gmail.com>\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

@ -3,7 +3,6 @@
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
@ -39,9 +38,10 @@ import sys
import subprocess
import re
import db
import thread
from shutil import move, copyfile
from tornado.ioloop import IOLoop
import StringIO
try:
from wand.image import Image
@ -51,9 +51,6 @@ except ImportError, e:
use_generic_pdf_cover = True
from cgi import escape
# Global variables
global_task = None
# Proxy Helper class
class ReverseProxied(object):
@ -476,8 +473,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)
@ -668,7 +667,7 @@ def get_opds_download_link(book_id, format):
file_name = book.title
if len(book.authors) > 0:
file_name = book.authors[0].name + '-' + file_name
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.headers["Content-Disposition"] = "attachment; filename=\"%s.%s\"" % (data.name, format)
return response
@ -716,10 +715,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'])
@ -1018,9 +1049,9 @@ def stats():
@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()
@ -1032,7 +1063,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)
@ -1043,23 +1074,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
@ -1071,9 +1089,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="")
@ -1093,12 +1112,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))
@ -1114,7 +1135,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:
@ -1598,14 +1620,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"]
@ -1674,7 +1695,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

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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

Loading…
Cancel
Save