Merge branch 'master' into develop

# Conflicts:
#	cps/web.py
pull/121/head
Jack Darlington 7 years ago
commit 82d01c9001

@ -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:
# print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
os.chown(dst_dir, new_permissions.st_uid, new_permissions.st_gid)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
if change_permissions:
permission = os.stat(dst_file)
logging.getLogger('cps.web').debug('Remove file before copy: '+dst_file)
os.remove(dst_file)
else:
if change_permissions:
permission = new_permissions
shutil.move(src_file, dst_dir)
logging.getLogger('cps.web').debug('Move File '+src_file+' to '+dst_dir)
if change_permissions:
permission=os.stat(dst_file)
#print('Remove file before copy: '+dst_file)
os.remove(dst_file)
try:
os.chown(dst_file, permission.st_uid, permission.st_uid)
# print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
except:
e = sys.exc_info()
logging.getLogger('cps.web').debug('Fail '+str(dst_file)+' error: '+str(e))
return
def update_source(self, source, destination):
# destination files
old_list = list()
exclude = (
'vendor' + os.sep + 'kindlegen.exe', 'vendor' + os.sep + 'kindlegen', os.sep + 'app.db',
os.sep + 'vendor',os.sep + 'calibre-web.log')
for root, dirs, files in os.walk(destination, topdown=True):
for name in files:
old_list.append(os.path.join(root, name).replace(destination, ''))
for name in dirs:
old_list.append(os.path.join(root, name).replace(destination, ''))
# source files
new_list = list()
for root, dirs, files in os.walk(source, topdown=True):
for name in files:
new_list.append(os.path.join(root, name).replace(source, ''))
for name in dirs:
new_list.append(os.path.join(root, name).replace(source, ''))
delete_files = self.one_minus_two(old_list, new_list)
rf = self.reduce_files(delete_files, exclude)
remove_items = self.reduce_dirs(rf, new_list)
self.moveallfiles(source, destination)
for item in remove_items:
item_path = os.path.join(destination, item[1:])
if os.path.isdir(item_path):
logging.getLogger('cps.web').debug("Delete dir " + item_path)
shutil.rmtree(item_path)
else:
if change_permissions:
permission=new_permissions
shutil.move(src_file, dst_dir)
#print('Move File '+src_file+' to '+dst_dir)
if change_permissions:
try:
os.chown(dst_file, permission.st_uid, permission.st_uid)
#print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid))
logging.getLogger('cps.web').debug("Delete file " + item_path)
log_from_thread("Delete file " + item_path)
os.remove(item_path)
except:
e = sys.exc_info()
#print('Fail '+str(dst_file)+' error: '+str(e))
return
def update_source(source,destination):
# destination files
old_list=list()
exclude = (['vendor' + os.sep + 'kindlegen.exe','vendor' + os.sep + 'kindlegen','/app.db','vendor','/update.py'])
for root, dirs, files in os.walk(destination, topdown=True):
for name in files:
old_list.append(os.path.join(root, name).replace(destination, ''))
for name in dirs:
old_list.append(os.path.join(root, name).replace(destination, ''))
# source files
new_list = list()
for root, dirs, files in os.walk(source, topdown=True):
for name in files:
new_list.append(os.path.join(root, name).replace(source, ''))
for name in dirs:
new_list.append(os.path.join(root, name).replace(source, ''))
delete_files = one_minus_two(old_list, new_list)
#print('raw delete list', delete_files)
rf= reduce_files(delete_files, exclude)
#print('reduced delete list', rf)
remove_items = reduce_dirs(rf, new_list)
#print('delete files', remove_items)
moveallfiles(source, destination)
for item in remove_items:
item_path = os.path.join(destination, item[1:])
if os.path.isdir(item_path):
print("Delete dir "+ item_path)
shutil.rmtree(item_path)
else:
try:
print("Delete file "+ item_path)
os.remove(item_path)
except:
print("Could not remove:"+item_path)
shutil.rmtree(source, ignore_errors=True)
logging.getLogger('cps.web').debug("Could not remove:" + item_path)
shutil.rmtree(source, ignore_errors=True)

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

@ -5,7 +5,6 @@ from pydrive.auth import GoogleAuth
import mimetypes
import logging
from logging.handlers import RotatingFileHandler
from tempfile import gettempdir
import textwrap
from flask import Flask, render_template, session, request, Response, redirect, url_for, send_from_directory, \
make_response, g, flash, abort, send_file
@ -41,11 +40,11 @@ import sys
import subprocess
import re
import db
import thread
from shutil import move, copyfile
from tornado.ioloop import IOLoop
import shutil
import StringIO
from shutil import move
import gdriveutils
import io
import hashlib
@ -124,7 +123,7 @@ class Gdrive:
class ReverseProxied(object):
"""Wrap the application in this middleware and configure the
front-end server to add these headers, to let you quietly bind
front-end server to add these headers, to let you quietly bind
this to a URL other than / and to an HTTP scheme that is
different than what is used locally.
@ -562,8 +561,10 @@ def feed_search(term):
filter = True
if term:
entries = db.session.query(db.Books).filter(db.or_(db.Books.tags.any(db.Tags.name.like("%" + term + "%")),
db.Books.authors.any(db.Authors.name.like("%" + term + "%")),
db.Books.title.like("%" + term + "%"))).filter(filter).all()
db.Books.series.any(db.Series.name.like("%" + term + "%")),
db.Books.authors.any(db.Authors.name.like("%" + term + "%")),
db.Books.publishers.any(db.Publishers.name.like("%" + term + "%")),
db.Books.title.like("%" + term + "%"))).filter(filter).all()
entriescount = len(entries) if len(entries) > 0 else 1
pagination = Pagination(1, entriescount, entriescount)
xml = render_title_template('feed.xml', searchterm=term, entries=entries, pagination=pagination)
@ -761,8 +762,9 @@ def get_opds_download_link(book_id, format):
resp, content = df.auth.Get_Http_Object().request(download_url)
response=send_file(io.BytesIO(content))
else:
file_name = helper.get_valid_filename(file_name)
# file_name = helper.get_valid_filename(file_name)
response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format))
response = make_response(send_from_directory(os.path.join(config.config_calibre_dir, book.path), data.name + "." + format))
response.headers["Content-Disposition"] = "attachment; filename=\"%s.%s\"" % (data.name, format)
return response
@ -809,10 +811,42 @@ def get_update_status():
commit = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/refs/heads/master').json()
if "object" in commit and commit['object']['sha'] != commit_id:
status['status'] = True
commitdate = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/commits/'+commit['object']['sha']).json()
if "committer" in commitdate:
status['commit'] = commitdate['committer']['date']
else:
status['commit'] = u'Unknown'
else:
status['status'] = False
return json.dumps(status)
@app.route("/get_updater_status", methods=['GET','POST'])
@login_required
@admin_required
def get_updater_status():
status = {}
if request.method == "POST":
commit = request.form.to_dict()
if "start" in commit and commit['start'] == 'True':
text={
"1": _(u'Requesting update package'),
"2": _(u'Downloading update package'),
"3": _(u'Unzipping update package'),
"4": _(u'Files are replaced'),
"5": _(u'Database connections are closed'),
"6": _(u'Server is stopped'),
"7": _(u'Update finished, please press okay and reload page')
}
status['text']=text
helper.updater_thread = helper.Updater()
helper.updater_thread.start()
status['status']=helper.updater_thread.get_update_status()
elif request.method == "GET":
try:
status['status']=helper.updater_thread.get_update_status()
except:
status['status'] = 7
return json.dumps(status)
@app.route("/get_languages_json", methods=['GET', 'POST'])
@ -1139,7 +1173,7 @@ def stats():
# books=db.session.query(db.Books).all()
# for book in books:
# gdriveutils.getFolderId(book.path, Gdrive.Instance().drive)
# return
# return
@app.route("/gdrive/authenticate")
@login_required
@ -1202,10 +1236,10 @@ def on_received_watch_confirmation():
def updateMetaData():
app.logger.info ('Change received from gdrive')
app.logger.info (data)
app.logger.info (data)
try:
j=json.loads(data)
app.logger.info ('Getting change details')
app.logger.info ('Getting change details')
response=gdriveutils.getChangeById(Gdrive.Instance().drive, j['id'])
app.logger.info (response)
if response:
@ -1229,9 +1263,9 @@ def on_received_watch_confirmation():
@login_required
@admin_required
def shutdown():
global global_task
# global global_task
task = int(request.args.get("parameter").strip())
global_task = task
helper.global_task = task
if task == 1 or task == 0: # valid commandos received
# close all database connections
db.session.close()
@ -1243,7 +1277,7 @@ def shutdown():
server.add_callback(server.stop)
showtext = {}
if task == 0:
showtext['text'] = _(u'Performing Restart, please reload page')
showtext['text'] = _(u'Server restarted, please reload page')
else:
showtext['text'] = _(u'Performing shutdown of server, please close window')
return json.dumps(showtext)
@ -1254,23 +1288,10 @@ def shutdown():
@login_required
@admin_required
def update():
global global_task
r = requests.get('https://api.github.com/repos/janeczku/calibre-web/zipball/master', stream=True)
fname = re.findall("filename=(.+)", r.headers['content-disposition'])[0]
z = zipfile.ZipFile(StringIO.StringIO(r.content))
tmp_dir = gettempdir()
z.extractall(tmp_dir)
helper.update_source(os.path.join(tmp_dir,os.path.splitext(fname)[0]),config.get_main_dir)
global_task = 0
db.session.close()
db.engine.dispose()
ub.session.close()
ub.engine.dispose()
# stop tornado server
server = IOLoop.instance()
server.add_callback(server.stop)
helper.updater_thread = helper.Updater()
flash(_(u"Update done"), category="info")
return logout()
return ""
@app.route("/search", methods=["GET"])
@login_required_if_no_ano
@ -1282,9 +1303,10 @@ def search():
else:
filter = True
entries = db.session.query(db.Books).filter(db.or_(db.Books.tags.any(db.Tags.name.like("%" + term + "%")),
db.Books.series.any(db.Series.name.like("%" + term + "%")),
db.Books.authors.any(db.Authors.name.like("%" + term + "%")),
db.Books.title.like("%" + term + "%"))).filter(filter).all()
db.Books.series.any(db.Series.name.like("%" + term + "%")),
db.Books.authors.any(db.Authors.name.like("%" + term + "%")),
db.Books.publishers.any(db.Publishers.name.like("%" + term + "%")),
db.Books.title.like("%" + term + "%"))).filter(filter).all()
return render_title_template('search.html', searchterm=term, entries=entries)
else:
return render_title_template('search.html', searchterm="")
@ -1304,12 +1326,14 @@ def advanced_search():
author_name = request.args.get("author_name")
book_title = request.args.get("book_title")
publisher = request.args.get("publisher")
if author_name: author_name = author_name.strip()
if book_title: book_title = book_title.strip()
if publisher: publisher = publisher.strip()
if include_tag_inputs or exclude_tag_inputs or include_series_inputs or exclude_series_inputs or \
include_languages_inputs or exclude_languages_inputs or author_name or book_title:
include_languages_inputs or exclude_languages_inputs or author_name or book_title or publisher:
searchterm = []
searchterm.extend((author_name, book_title))
searchterm.extend((author_name, book_title, publisher))
tag_names = db.session.query(db.Tags).filter(db.Tags.id.in_(include_tag_inputs)).all()
searchterm.extend(tag.name for tag in tag_names)
# searchterm = " + ".join(filter(None, searchterm))
@ -1325,7 +1349,8 @@ def advanced_search():
searchterm.extend(language.name for language in language_names)
searchterm = " + ".join(filter(None, searchterm))
q = q.filter(db.Books.authors.any(db.Authors.name.like("%" + author_name + "%")),
db.Books.title.like("%" + book_title + "%"))
db.Books.title.like("%" + book_title + "%"),
db.Books.publishers.any(db.Publishers.name.like("%" + publisher + "%")))
for tag in include_tag_inputs:
q = q.filter(db.Books.tags.any(db.Tags.id == tag))
for tag in exclude_tag_inputs:
@ -1367,9 +1392,7 @@ def get_cover(cover_path):
return redirect(download_url)
else:
return send_from_directory(os.path.join(config.config_calibre_dir, cover_path), "cover.jpg")
resp.headers['Content-Type']='image/jpeg'
return resp
@app.route("/opds/thumb_240_240/<path:book_id>")
@app.route("/opds/cover_240_240/<path:book_id>")
@ -1393,9 +1416,9 @@ def render_read_books(page, are_read, as_xml=False):
else:
db_filter = ~db.Books.id.in_(readBookIds)
entries, random, pagination = fill_indexpage(page, db.Books,
entries, random, pagination = fill_indexpage(page, db.Books,
db_filter, db.Books.timestamp.desc())
if as_xml:
if as_xml:
xml = render_title_template('feed.xml', entries=entries, pagination=pagination)
response = make_response(xml)
response.headers["Content-Type"] = "application/xml"
@ -1875,14 +1898,13 @@ def basic_configuration():
def configuration_helper(origin):
global global_task
# global global_task
reboot_required = False
db_change = False
success = False
if request.method == "POST":
to_save = request.form.to_dict()
content = ub.session.query(ub.Settings).first()
# ToDo: check lib vaild, and change without restart
if "config_calibre_dir" in to_save:
if content.config_calibre_dir != to_save["config_calibre_dir"]:
content.config_calibre_dir = to_save["config_calibre_dir"]
@ -1954,8 +1976,8 @@ def configuration_helper(origin):
if "passwd_role" in to_save:
content.config_default_role = content.config_default_role + ub.ROLE_PASSWD
try:
if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"):
gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db")
if content.config_use_google_drive and is_gdrive_ready() and not os.path.exists(config.config_calibre_dir + "/metadata.db"):
gdriveutils.downloadFile(Gdrive.Instance().drive, None, "metadata.db", config.config_calibre_dir + "/metadata.db")
if db_change:
if config.db_configured:
db.session.close()
@ -1982,7 +2004,7 @@ def configuration_helper(origin):
# stop tornado server
server = IOLoop.instance()
server.add_callback(server.stop)
global_task = 0
helper.global_task = 0
app.logger.info('Reboot required, restarting')
if origin:
success = True
@ -2236,7 +2258,7 @@ def edit_book(book_id):
modify_database_object(input_authors, book.authors, db.Authors, db.session, 'author')
if author0_before_edit != book.authors[0].name:
edited_books_id.add(book.id)
book.author_sort=helper.get_sorted_author(input_authors[0])
book.author_sort=helper.get_sorted_author(input_authors[0])
if to_save["cover_url"] and os.path.splitext(to_save["cover_url"])[1].lower() == ".jpg":
img = requests.get(to_save["cover_url"])
@ -2466,7 +2488,7 @@ def upload():
if is_author:
db_author = is_author
else:
db_author = db.Authors(author, helper.get_sorted_author(author), "")
db_author = db.Authors(author, helper.get_sorted_author(author), "")
db.session.add(db_author)
# combine path and normalize path from windows systems
path = os.path.join(author_dir, title_dir).replace('\\','/')

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