From 83d07147e677fe0bd231d669edd5111e408f190c Mon Sep 17 00:00:00 2001 From: kyos Date: Sun, 30 Jul 2017 00:18:29 +0200 Subject: [PATCH 01/31] Added new metadata getter for epub files that include series and series_index information --- cps/epub.py | 16 ++++++++++++++-- cps/web.py | 19 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index 50714b6f..d76a28c6 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -68,6 +68,18 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): else: epub_metadata['language'] = "" + series = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series']/@content", namespaces=ns) + if len(series) > 0: + epub_metadata['series'] = series[0] + else: + epub_metadata['series'] = '' + + series_id = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series_index']/@content", namespaces=ns) + if len(series_id) > 0: + epub_metadata['series_id'] = series_id[0] + else: + epub_metadata['series_id'] = '1' + coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) coverfile = None if len(coversection) > 0: @@ -102,6 +114,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): cover=coverfile, description=epub_metadata['description'], tags="", - series="", - series_id="", + series=epub_metadata['series'].encode('utf-8').decode('utf-8'), + series_id=epub_metadata['series_id'].encode('utf-8').decode('utf-8'), languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index 4ab23f40..a13fa643 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2907,7 +2907,8 @@ def upload(): title = meta.title author = meta.author - + series = meta.series + series_index = meta.series_id title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir @@ -2946,6 +2947,14 @@ def upload(): db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) + db_series = None + is_series = db.session.query(db.Series).filter(db.Series.name == series).first() + if is_series: + db_series = is_series + elif series != '': + db_series = db.Series(series, "") + db.session.add(db_series) + # add language actually one value in list input_language = meta.languages db_language = None @@ -2959,9 +2968,11 @@ def upload(): db.session.add(db_language) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\', '/') - db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), 1, - datetime.datetime.now(), path, has_cover, db_author, [], db_language) + db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), + series_index, datetime.datetime.now(), path, has_cover, db_author, [], db_language) db_book.authors.append(db_author) + if db_series: + db_book.series.append(db_series) if db_language is not None: db_book.languages.append(db_language) db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) @@ -2996,4 +3007,4 @@ def start_gevent(): from gevent.wsgi import WSGIServer global gevent_server gevent_server = WSGIServer(('', ub.config.config_port), app) - gevent_server.serve_forever() + gevent_server.serve_forever() \ No newline at end of file From aab32ceee9dd3f4927211adbba4a194cab6536e4 Mon Sep 17 00:00:00 2001 From: kyos Date: Sun, 30 Jul 2017 00:30:21 +0200 Subject: [PATCH 02/31] Set series_index to 1 when no series_index is provided --- cps/web.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cps/web.py b/cps/web.py index a13fa643..de547700 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2915,6 +2915,9 @@ def upload(): filepath = config.config_calibre_dir + os.sep + author_dir + os.sep + title_dir saved_filename = filepath + os.sep + data_name + meta.extension + if series_index == '': + series_index = 1 + if not os.path.exists(filepath): try: os.makedirs(filepath) From 742862869dd1911cb65a7d42dc71729cbba920e0 Mon Sep 17 00:00:00 2001 From: Carlos Clavero Date: Sun, 30 Jul 2017 07:57:10 +0200 Subject: [PATCH 03/31] Revert "Epub series metadata" --- cps/epub.py | 16 ++-------------- cps/web.py | 22 ++++------------------ 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index d76a28c6..50714b6f 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -68,18 +68,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): else: epub_metadata['language'] = "" - series = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series']/@content", namespaces=ns) - if len(series) > 0: - epub_metadata['series'] = series[0] - else: - epub_metadata['series'] = '' - - series_id = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series_index']/@content", namespaces=ns) - if len(series_id) > 0: - epub_metadata['series_id'] = series_id[0] - else: - epub_metadata['series_id'] = '1' - coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) coverfile = None if len(coversection) > 0: @@ -114,6 +102,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): cover=coverfile, description=epub_metadata['description'], tags="", - series=epub_metadata['series'].encode('utf-8').decode('utf-8'), - series_id=epub_metadata['series_id'].encode('utf-8').decode('utf-8'), + series="", + series_id="", languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index de547700..4ab23f40 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2907,17 +2907,13 @@ def upload(): title = meta.title author = meta.author - series = meta.series - series_index = meta.series_id + title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir filepath = config.config_calibre_dir + os.sep + author_dir + os.sep + title_dir saved_filename = filepath + os.sep + data_name + meta.extension - if series_index == '': - series_index = 1 - if not os.path.exists(filepath): try: os.makedirs(filepath) @@ -2950,14 +2946,6 @@ def upload(): db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) - db_series = None - is_series = db.session.query(db.Series).filter(db.Series.name == series).first() - if is_series: - db_series = is_series - elif series != '': - db_series = db.Series(series, "") - db.session.add(db_series) - # add language actually one value in list input_language = meta.languages db_language = None @@ -2971,11 +2959,9 @@ def upload(): db.session.add(db_language) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\', '/') - db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), - series_index, datetime.datetime.now(), path, has_cover, db_author, [], db_language) + db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), 1, + datetime.datetime.now(), path, has_cover, db_author, [], db_language) db_book.authors.append(db_author) - if db_series: - db_book.series.append(db_series) if db_language is not None: db_book.languages.append(db_language) db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) @@ -3010,4 +2996,4 @@ def start_gevent(): from gevent.wsgi import WSGIServer global gevent_server gevent_server = WSGIServer(('', ub.config.config_port), app) - gevent_server.serve_forever() \ No newline at end of file + gevent_server.serve_forever() From 27291ae96fc7cdb576ebd7d3816de79707273690 Mon Sep 17 00:00:00 2001 From: kyos Date: Sun, 30 Jul 2017 00:18:29 +0200 Subject: [PATCH 04/31] Added new metadata getter for epub files that include series and series_index information --- cps/epub.py | 16 ++++++++++++++-- cps/web.py | 19 +++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index 50714b6f..d76a28c6 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -68,6 +68,18 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): else: epub_metadata['language'] = "" + series = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series']/@content", namespaces=ns) + if len(series) > 0: + epub_metadata['series'] = series[0] + else: + epub_metadata['series'] = '' + + series_id = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series_index']/@content", namespaces=ns) + if len(series_id) > 0: + epub_metadata['series_id'] = series_id[0] + else: + epub_metadata['series_id'] = '1' + coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) coverfile = None if len(coversection) > 0: @@ -102,6 +114,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): cover=coverfile, description=epub_metadata['description'], tags="", - series="", - series_id="", + series=epub_metadata['series'].encode('utf-8').decode('utf-8'), + series_id=epub_metadata['series_id'].encode('utf-8').decode('utf-8'), languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index ad548226..ab3280d5 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2928,7 +2928,8 @@ def upload(): title = meta.title author = meta.author - + series = meta.series + series_index = meta.series_id title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir @@ -2967,6 +2968,14 @@ def upload(): db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) + db_series = None + is_series = db.session.query(db.Series).filter(db.Series.name == series).first() + if is_series: + db_series = is_series + elif series != '': + db_series = db.Series(series, "") + db.session.add(db_series) + # add language actually one value in list input_language = meta.languages db_language = None @@ -2980,9 +2989,11 @@ def upload(): db.session.add(db_language) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\', '/') - db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), 1, - datetime.datetime.now(), path, has_cover, db_author, [], db_language) + db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), + series_index, datetime.datetime.now(), path, has_cover, db_author, [], db_language) db_book.authors.append(db_author) + if db_series: + db_book.series.append(db_series) if db_language is not None: db_book.languages.append(db_language) db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) @@ -3017,4 +3028,4 @@ def start_gevent(): from gevent.wsgi import WSGIServer global gevent_server gevent_server = WSGIServer(('', ub.config.config_port), app) - gevent_server.serve_forever() + gevent_server.serve_forever() \ No newline at end of file From 4dc6150d77a5198a84cfcf3691ac7c1b3d7539ea Mon Sep 17 00:00:00 2001 From: kyos Date: Sun, 30 Jul 2017 00:30:21 +0200 Subject: [PATCH 05/31] Set series_index to 1 when no series_index is provided --- cps/web.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cps/web.py b/cps/web.py index ab3280d5..fc72bb41 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2936,6 +2936,9 @@ def upload(): filepath = config.config_calibre_dir + os.sep + author_dir + os.sep + title_dir saved_filename = filepath + os.sep + data_name + meta.extension + if series_index == '': + series_index = 1 + if not os.path.exists(filepath): try: os.makedirs(filepath) From 77b3cc2fd06f1aa19f245b647d5a35ed7a9c6fca Mon Sep 17 00:00:00 2001 From: Carlos Clavero Date: Sun, 30 Jul 2017 07:57:10 +0200 Subject: [PATCH 06/31] Revert "Epub series metadata" --- cps/epub.py | 16 ++-------------- cps/web.py | 22 ++++------------------ 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index d76a28c6..50714b6f 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -68,18 +68,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): else: epub_metadata['language'] = "" - series = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series']/@content", namespaces=ns) - if len(series) > 0: - epub_metadata['series'] = series[0] - else: - epub_metadata['series'] = '' - - series_id = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series_index']/@content", namespaces=ns) - if len(series_id) > 0: - epub_metadata['series_id'] = series_id[0] - else: - epub_metadata['series_id'] = '1' - coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) coverfile = None if len(coversection) > 0: @@ -114,6 +102,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): cover=coverfile, description=epub_metadata['description'], tags="", - series=epub_metadata['series'].encode('utf-8').decode('utf-8'), - series_id=epub_metadata['series_id'].encode('utf-8').decode('utf-8'), + series="", + series_id="", languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index fc72bb41..ad548226 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2928,17 +2928,13 @@ def upload(): title = meta.title author = meta.author - series = meta.series - series_index = meta.series_id + title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir filepath = config.config_calibre_dir + os.sep + author_dir + os.sep + title_dir saved_filename = filepath + os.sep + data_name + meta.extension - if series_index == '': - series_index = 1 - if not os.path.exists(filepath): try: os.makedirs(filepath) @@ -2971,14 +2967,6 @@ def upload(): db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) - db_series = None - is_series = db.session.query(db.Series).filter(db.Series.name == series).first() - if is_series: - db_series = is_series - elif series != '': - db_series = db.Series(series, "") - db.session.add(db_series) - # add language actually one value in list input_language = meta.languages db_language = None @@ -2992,11 +2980,9 @@ def upload(): db.session.add(db_language) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\', '/') - db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), - series_index, datetime.datetime.now(), path, has_cover, db_author, [], db_language) + db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), 1, + datetime.datetime.now(), path, has_cover, db_author, [], db_language) db_book.authors.append(db_author) - if db_series: - db_book.series.append(db_series) if db_language is not None: db_book.languages.append(db_language) db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) @@ -3031,4 +3017,4 @@ def start_gevent(): from gevent.wsgi import WSGIServer global gevent_server gevent_server = WSGIServer(('', ub.config.config_port), app) - gevent_server.serve_forever() \ No newline at end of file + gevent_server.serve_forever() From 4bba3558b735ae7bd785283630d226e480443fcd Mon Sep 17 00:00:00 2001 From: kyos Date: Mon, 31 Jul 2017 08:46:29 +0200 Subject: [PATCH 07/31] Added tags metadata handler for epubs --- cps/epub.py | 7 +++++-- cps/web.py | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index 50714b6f..4276badd 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -43,13 +43,16 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): epub_metadata = {} - for s in ['title', 'description', 'creator', 'language']: + for s in ['title', 'description', 'creator', 'language', 'subject']: tmp = p.xpath('dc:%s/text()' % s, namespaces=ns) if len(tmp) > 0: epub_metadata[s] = p.xpath('dc:%s/text()' % s, namespaces=ns)[0] else: epub_metadata[s] = "Unknown" + if epub_metadata['subject'] == "Unknown": + epub_metadata['subject'] = '' + if epub_metadata['description'] == "Unknown": description = tree.xpath("//*[local-name() = 'description']/text()") if len(description) > 0: @@ -101,7 +104,7 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): author=epub_metadata['creator'].encode('utf-8').decode('utf-8'), cover=coverfile, description=epub_metadata['description'], - tags="", + tags=epub_metadata['subject'].encode('utf-8').decode('utf-8'), series="", series_id="", languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index ad548226..0779d244 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2928,7 +2928,7 @@ def upload(): title = meta.title author = meta.author - + tags = meta.tags title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir @@ -2995,6 +2995,11 @@ def upload(): if upload_comment != "": db.session.add(db.Comments(upload_comment, db_book.id)) db.session.commit() + + input_tags = tags.split(',') + input_tags = map(lambda it: it.strip(), input_tags) + modify_database_object(input_tags, db_book.tags, db.Tags, db.session, 'tags') + if db_language is not None: # display Full name instead of iso639.part3 db_book.languages[0].language_name = _(meta.languages) author_names = [] From 51bc0e82a4814e9c2aa5443890165c37adf46e87 Mon Sep 17 00:00:00 2001 From: kyos Date: Mon, 31 Jul 2017 09:00:09 +0200 Subject: [PATCH 08/31] Added series and series_index metadata handler --- cps/epub.py | 16 ++++++++++++++-- cps/web.py | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/cps/epub.py b/cps/epub.py index 4276badd..dd9ad28b 100644 --- a/cps/epub.py +++ b/cps/epub.py @@ -71,6 +71,18 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): else: epub_metadata['language'] = "" + series = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series']/@content", namespaces=ns) + if len(series) > 0: + epub_metadata['series'] = series[0] + else: + epub_metadata['series'] = '' + + series_id = tree.xpath("/pkg:package/pkg:metadata/pkg:meta[@name='calibre:series_index']/@content", namespaces=ns) + if len(series_id) > 0: + epub_metadata['series_id'] = series_id[0] + else: + epub_metadata['series_id'] = '1' + coversection = tree.xpath("/pkg:package/pkg:manifest/pkg:item[@id='cover-image']/@href", namespaces=ns) coverfile = None if len(coversection) > 0: @@ -105,6 +117,6 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension): cover=coverfile, description=epub_metadata['description'], tags=epub_metadata['subject'].encode('utf-8').decode('utf-8'), - series="", - series_id="", + series=epub_metadata['series'].encode('utf-8').decode('utf-8'), + series_id=epub_metadata['series_id'].encode('utf-8').decode('utf-8'), languages=epub_metadata['language']) diff --git a/cps/web.py b/cps/web.py index 0779d244..9bafc73d 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2929,6 +2929,8 @@ def upload(): title = meta.title author = meta.author tags = meta.tags + series = meta.series + series_index = meta.series_id title_dir = helper.get_valid_filename(title, False) author_dir = helper.get_valid_filename(author, False) data_name = title_dir @@ -2967,6 +2969,14 @@ def upload(): db_author = db.Authors(author, helper.get_sorted_author(author), "") db.session.add(db_author) + db_series = None + is_series = db.session.query(db.Series).filter(db.Series.name == series).first() + if is_series: + db_series = is_series + elif series != '': + db_series = db.Series(series, "") + db.session.add(db_series) + # add language actually one value in list input_language = meta.languages db_language = None @@ -2980,9 +2990,11 @@ def upload(): db.session.add(db_language) # combine path and normalize path from windows systems path = os.path.join(author_dir, title_dir).replace('\\', '/') - db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), 1, - datetime.datetime.now(), path, has_cover, db_author, [], db_language) + db_book = db.Books(title, "", db_author.sort, datetime.datetime.now(), datetime.datetime(101, 1, 1), + series_index, datetime.datetime.now(), path, has_cover, db_author, [], db_language) db_book.authors.append(db_author) + if db_series: + db_book.series.append(db_series) if db_language is not None: db_book.languages.append(db_language) db_data = db.Data(db_book, meta.extension.upper()[1:], file_size, data_name) From 6048bf3c7996a03955d03b840351a9ee455c3677 Mon Sep 17 00:00:00 2001 From: kyos Date: Mon, 31 Jul 2017 20:01:55 +0200 Subject: [PATCH 09/31] Added a 5px separation for all input labels in advanced search to improve readability --- cps/static/css/style.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 87f7b4c5..08ec98c3 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -62,3 +62,5 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te #shelf-action-errors { margin-left: 5px; } + +tags_click, .serie_click, .language_click {margin-right: 5px;} \ No newline at end of file From b6f097f67306f603fbe36af42d1810c4e95c6bcc Mon Sep 17 00:00:00 2001 From: kyos Date: Tue, 1 Aug 2017 17:49:14 +0200 Subject: [PATCH 10/31] Added a 5px separation for all input labels in advanced search to improve readability --- cps/static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 08ec98c3..4bdb1d93 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -63,4 +63,4 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te margin-left: 5px; } -tags_click, .serie_click, .language_click {margin-right: 5px;} \ No newline at end of file +.tags_click, .serie_click, .language_click {margin-right: 0px;} \ No newline at end of file From e948844ea4d696cdbebe312bbef40e8bdc4ea30d Mon Sep 17 00:00:00 2001 From: kyos Date: Tue, 1 Aug 2017 17:51:38 +0200 Subject: [PATCH 11/31] Added a 5px separation for all input labels in advanced search to improve readability --- cps/static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 4bdb1d93..39ce8008 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -63,4 +63,4 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te margin-left: 5px; } -.tags_click, .serie_click, .language_click {margin-right: 0px;} \ No newline at end of file +.tags_click, .serie_click, .language_click {margin-right: 5px;} \ No newline at end of file From aee8aad976d90c7ea4516201d72121e641276ae6 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Tue, 8 Aug 2017 09:52:00 -0700 Subject: [PATCH 12/31] Add option to hide mature content from some users Uses a configurable list of tags to denote what is mature and hides those books from the user --- cps/templates/config_edit.html | 7 +++ cps/templates/user_edit.html | 79 ++++++++++++------------ cps/ub.py | 17 +++++- cps/web.py | 108 ++++++++++++++++++++++++--------- 4 files changed, 144 insertions(+), 67 deletions(-) diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index c1c319df..cd8c321c 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -72,6 +72,13 @@ +
+ + +
-
- -
- - +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
{% if g.user and g.user.role_admin() and not profile %} {% if not content.role_anonymous() %} diff --git a/cps/ub.py b/cps/ub.py index 73ce8669..8769572a 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -157,6 +157,7 @@ class User(UserBase, Base): locale = Column(String(2), default="en") sidebar_view = Column(Integer, default=1) default_language = Column(String(3), default="all") + mature_content = Column(Boolean, default=True) # Class for anonymous user is derived from User base and complets overrides methods and properties for the @@ -266,6 +267,7 @@ class Settings(Base): config_use_goodreads = Column(Boolean) config_goodreads_api_key = Column(String) config_goodreads_api_secret = Column(String) + config_mature_content_tags = Column(String) # type: str def __repr__(self): pass @@ -297,7 +299,7 @@ class Config: self.loadSettings() def loadSettings(self): - data = session.query(Settings).first() + data = session.query(Settings).first() # type: Settings self.config_calibre_dir = data.config_calibre_dir self.config_port = data.config_port self.config_calibre_web_title = data.config_calibre_web_title @@ -326,6 +328,7 @@ class Config: self.config_use_goodreads = data.config_use_goodreads self.config_goodreads_api_key = data.config_goodreads_api_key self.config_goodreads_api_secret = data.config_goodreads_api_secret + self.config_mature_content_tags = data.config_mature_content_tags @property def get_main_dir(self): @@ -371,6 +374,8 @@ class Config: return bool((self.config_default_role is not None) and (self.config_default_role & ROLE_DELETE_BOOKS == ROLE_DELETE_BOOKS)) + def mature_content_tags(self): + return self.config_mature_content_tags.split(",") def get_Log_Level(self): ret_value="" @@ -470,6 +475,11 @@ def migrate_Database(): 'side_lang': SIDEBAR_LANGUAGE, 'side_series': SIDEBAR_SERIES, 'side_category': SIDEBAR_CATEGORY, 'side_hot': SIDEBAR_HOT, 'side_autor': SIDEBAR_AUTHOR, 'detail_random': DETAIL_RANDOM}) session.commit() + try: + session.query(exists().where(User.mature_content)).scalar() + except exc.OperationalError: + conn = engine.connect() + conn.execute("ALTER TABLE user ADD column `mature_content` INTEGER DEFAULT 1") if session.query(User).filter(User.role.op('&')(ROLE_ANONYMOUS) == ROLE_ANONYMOUS).first() is None: create_anonymous_user() try: @@ -484,6 +494,11 @@ def migrate_Database(): conn.execute("ALTER TABLE Settings ADD column `config_use_goodreads` INTEGER DEFAULT 0") conn.execute("ALTER TABLE Settings ADD column `config_goodreads_api_key` String DEFAULT ''") conn.execute("ALTER TABLE Settings ADD column `config_goodreads_api_secret` String DEFAULT ''") + try: + session.query(exists().where(Settings.config_mature_content_tags)).scalar() + except exc.OperationalError: + conn = engine.connect() + conn.execute("ALTER TABLE Settings ADD column `config_mature_content_tags` String DEFAULT ''") def clean_database(): # Remove expired remote login tokens diff --git a/cps/web.py b/cps/web.py index ad548226..19f2198c 100755 --- a/cps/web.py +++ b/cps/web.py @@ -505,15 +505,19 @@ def fill_indexpage(page, database, db_filter, order): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) if current_user.show_detail_random(): - random = db.session.query(db.Books).filter(lang_filter).order_by(func.random()).limit(config.config_random_books) + random = db.session.query(db.Books).filter(lang_filter).filter(~content_rating_filter)\ + .order_by(func.random()).limit(config.config_random_books) else: random = false off = int(int(config.config_books_per_page) * (page - 1)) pagination = Pagination(page, config.config_books_per_page, - len(db.session.query(database).filter(db_filter).filter(lang_filter).all())) - entries = db.session.query(database).filter(db_filter).filter(lang_filter).order_by(order).offset(off).limit( - config.config_books_per_page) + len(db.session.query(database) + .filter(db_filter).filter(lang_filter).filter(~content_rating_filter).all())) + entries = db.session.query(database).filter(db_filter).filter(lang_filter).filter(~content_rating_filter)\ + .order_by(order).offset(off).limit(config.config_books_per_page) return entries, random, pagination @@ -638,12 +642,15 @@ def feed_search(term): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) if term: 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.publishers.any(db.Publishers.name.like("%" + term + "%")), - db.Books.title.like("%" + term + "%"))).filter(lang_filter).all() + db.Books.title.like("%" + term + "%")))\ + .filter(lang_filter).filter(~content_rating_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) @@ -675,7 +682,10 @@ def feed_discover(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Books).filter(lang_filter).order_by(func.random()).limit(config.config_books_per_page) + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Books).filter(lang_filter).filter(~content_rating_filter).order_by(func.random())\ + .limit(config.config_books_per_page) pagination = Pagination(1, config.config_books_per_page, int(config.config_books_per_page)) xml = render_title_template('feed.xml', entries=entries, pagination=pagination) response = make_response(xml) @@ -707,6 +717,8 @@ def feed_hot(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) all_books = ub.session.query(ub.Downloads, ub.func.count(ub.Downloads.book_id)).order_by( ub.func.count(ub.Downloads.book_id).desc()).group_by(ub.Downloads.book_id) hot_books = all_books.offset(off).limit(config.config_books_per_page) @@ -715,7 +727,9 @@ def feed_hot(): downloadBook = db.session.query(db.Books).filter(db.Books.id == book.Downloads.book_id).first() if downloadBook: entries.append( - db.session.query(db.Books).filter(lang_filter).filter(db.Books.id == book.Downloads.book_id).first()) + db.session.query(db.Books).filter(lang_filter).filter(~content_rating_filter) + .filter(db.Books.id == book.Downloads.book_id).first() + ) else: ub.session.query(ub.Downloads).filter(book.Downloads.book_id == ub.Downloads.book_id).delete() ub.session.commit() @@ -737,7 +751,10 @@ def feed_authorindex(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Authors).join(db.books_authors_link).join(db.Books).filter(lang_filter)\ + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Authors).join(db.books_authors_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ .group_by('books_authors_link.author').order_by(db.Authors.sort).limit(config.config_books_per_page).offset(off) pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page, len(db.session.query(db.Authors).all())) @@ -771,8 +788,11 @@ def feed_categoryindex(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Tags).join(db.books_tags_link).join(db.Books).filter(lang_filter).\ - group_by('books_tags_link.tag').order_by(db.Tags.name).offset(off).limit(config.config_books_per_page) + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Tags).join(db.books_tags_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ + .group_by('books_tags_link.tag').order_by(db.Tags.name).offset(off).limit(config.config_books_per_page) pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page, len(db.session.query(db.Tags).all())) xml = render_title_template('feed.xml', listelements=entries, folder='feed_category', pagination=pagination) @@ -805,8 +825,11 @@ def feed_seriesindex(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Series).join(db.books_series_link).join(db.Books).filter(lang_filter).\ - group_by('books_series_link.series').order_by(db.Series.sort).offset(off).all() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Series).join(db.books_series_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ + .group_by('books_series_link.series').order_by(db.Series.sort).offset(off).all() pagination = Pagination((int(off) / (int(config.config_books_per_page)) + 1), config.config_books_per_page, len(db.session.query(db.Series).all())) xml = render_title_template('feed.xml', listelements=entries, folder='feed_series', pagination=pagination) @@ -1075,8 +1098,11 @@ def hot_books(page): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) if current_user.show_detail_random(): - random = db.session.query(db.Books).filter(lang_filter).order_by(func.random()).limit(config.config_random_books) + random = db.session.query(db.Books).filter(lang_filter).filter(~content_rating_filter)\ + .order_by(func.random()).limit(config.config_random_books) else: random = false off = int(int(config.config_books_per_page) * (page - 1)) @@ -1088,7 +1114,9 @@ def hot_books(page): downloadBook = db.session.query(db.Books).filter(db.Books.id == book.Downloads.book_id).first() if downloadBook: entries.append( - db.session.query(db.Books).filter(lang_filter).filter(db.Books.id == book.Downloads.book_id).first()) + db.session.query(db.Books).filter(lang_filter).filter(~content_rating_filter) + .filter(db.Books.id == book.Downloads.book_id).first() + ) else: ub.session.query(ub.Downloads).filter(book.Downloads.book_id == ub.Downloads.book_id).delete() ub.session.commit() @@ -1124,9 +1152,12 @@ def author_list(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Authors, func.count('books_authors_link.book').label('count')).join( - db.books_authors_link).join(db.Books).filter( - lang_filter).group_by('books_authors_link.author').order_by(db.Authors.sort).all() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Authors, func.count('books_authors_link.book').label('count'))\ + .join(db.books_authors_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ + .group_by('books_authors_link.author').order_by(db.Authors.sort).all() return render_title_template('list.html', entries=entries, folder='author', title=_(u"Author list")) @@ -1158,9 +1189,12 @@ def series_list(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Series, func.count('books_series_link.book').label('count')).join( - db.books_series_link).join(db.Books).filter( - lang_filter).group_by('books_series_link.series').order_by(db.Series.sort).all() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Series, func.count('books_series_link.book').label('count'))\ + .join(db.books_series_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ + .group_by('books_series_link.series').order_by(db.Series.sort).all() return render_title_template('list.html', entries=entries, folder='series', title=_(u"Series list")) @@ -1231,9 +1265,12 @@ def category_list(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Tags, func.count('books_tags_link.book').label('count')).join( - db.books_tags_link).join(db.Books).filter( - lang_filter).group_by('books_tags_link.tag').all() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Tags, func.count('books_tags_link.book').label('count'))\ + .join(db.books_tags_link).join(db.Books)\ + .filter(lang_filter).filter(~content_rating_filter)\ + .group_by('books_tags_link.tag').all() return render_title_template('list.html', entries=entries, folder='category', title=_(u"Category list")) @@ -1274,7 +1311,10 @@ def show_book(book_id): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - entries = db.session.query(db.Books).filter(db.Books.id == book_id).filter(lang_filter).first() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + entries = db.session.query(db.Books)\ + .filter(db.Books.id == book_id).filter(lang_filter).filter(~content_rating_filter).first() if entries: for index in range(0, len(entries.languages)): try: @@ -1551,11 +1591,14 @@ def search(): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) 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.publishers.any(db.Publishers.name.like("%" + term + "%")), - db.Books.title.like("%" + term + "%"))).filter(lang_filter).all() + db.Books.title.like("%" + term + "%")))\ + .filter(lang_filter).filter(~content_rating_filter).all() return render_title_template('search.html', searchterm=term, entries=entries) else: return render_title_template('search.html', searchterm="") @@ -2319,7 +2362,7 @@ def configuration_helper(origin): success = False if request.method == "POST": to_save = request.form.to_dict() - content = ub.session.query(ub.Settings).first() + content = ub.session.query(ub.Settings).first() # type: ub.Settings if "config_calibre_dir" in to_save: if content.config_calibre_dir != to_save["config_calibre_dir"]: content.config_calibre_dir = to_save["config_calibre_dir"] @@ -2393,6 +2436,9 @@ def configuration_helper(origin): if "config_goodreads_api_secret" in to_save: content.config_goodreads_api_secret = to_save["config_goodreads_api_secret"] + # Mature Content configuration + if "config_mature_content_tags" in to_save: + content.config_mature_content_tags = to_save["config_mature_content_tags"].strip() content.config_default_role = 0 if "admin_role" in to_save: @@ -2470,6 +2516,7 @@ def new_user(): content.nickname = to_save["nickname"] content.email = to_save["email"] content.default_language = to_save["default_language"] + content.mature_content = "show_mature_content" in to_save if "locale" in to_save: content.locale = to_save["locale"] content.sidebar_view = 0 @@ -2557,7 +2604,7 @@ def edit_mailsettings(): @login_required @admin_required def edit_user(user_id): - content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).first() + content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).first() # type: ub.User downloads = list() languages = db.session.query(db.Languages).all() for lang in languages: @@ -2665,6 +2712,8 @@ def edit_user(user_id): elif "show_detail_random" not in to_save and content.show_detail_random(): content.sidebar_view -= ub.DETAIL_RANDOM + content.mature_content = "show_mature_content" in to_save + if "default_language" in to_save: content.default_language = to_save["default_language"] if "locale" in to_save and to_save["locale"]: @@ -2695,7 +2744,10 @@ def edit_book(book_id): lang_filter = db.Books.languages.any(db.Languages.lang_code == current_user.filter_language()) else: lang_filter = True - book = db.session.query(db.Books).filter(db.Books.id == book_id).filter(lang_filter).first() + content_rating_filter = false() if current_user.mature_content else \ + db.Books.tags.any(db.Tags.name.in_(config.mature_content_tags())) + book = db.session.query(db.Books)\ + .filter(db.Books.id == book_id).filter(lang_filter).filter(~content_rating_filter).first() author_names = [] # Book not found From 6f797ba4788436ab94aecf5bc24a6589fc34ccfa Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Wed, 9 Aug 2017 10:01:35 -0700 Subject: [PATCH 13/31] Check if JPEG via response content-type header instead of URL extension That way we can use dynamic URLs, such as those returned by the "Get Metadata" request. --- cps/web.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/cps/web.py b/cps/web.py index ad548226..57a8eb09 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2738,18 +2738,7 @@ def edit_book(book_id): edited_books_id.add(book.id) 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"]) - if config.config_use_google_drive: - tmpDir = tempfile.gettempdir() - f = open(os.path.join(tmpDir, "uploaded_cover.jpg"), "wb") - f.write(img.content) - f.close() - gdriveutils.uploadFileToEbooksFolder(Gdrive.Instance().drive, os.path.join(book.path, 'cover.jpg'), os.path.join(tmpDir, f.name)) - else: - f = open(os.path.join(config.config_calibre_dir, book.path, "cover.jpg"), "wb") - f.write(img.content) - f.close() + if to_save["cover_url"] and save_cover(to_save["cover_url"], book.path): book.has_cover = 1 if book.series_index != to_save["series_index"]: @@ -2901,6 +2890,25 @@ def edit_book(book_id): title=_(u"edit metadata")) +def save_cover(url, book_path): + img = requests.get(url) + if img.headers.get('content-type') != 'image/jpeg': + return false + + if config.config_use_google_drive: + tmpDir = tempfile.gettempdir() + f = open(os.path.join(tmpDir, "uploaded_cover.jpg"), "wb") + f.write(img.content) + f.close() + gdriveutils.uploadFileToEbooksFolder(Gdrive.Instance().drive, os.path.join(book_path, 'cover.jpg'), os.path.join(tmpDir, f.name)) + return true + + f = open(os.path.join(config.config_calibre_dir, book_path, "cover.jpg"), "wb") + f.write(img.content) + f.close() + return true + + @app.route("/upload", methods=["GET", "POST"]) @login_required_if_no_ano @upload_required From 68e3867af34be66cdd15c83fc83f42401c6d3eba Mon Sep 17 00:00:00 2001 From: Ruben Herold Date: Thu, 10 Aug 2017 12:29:08 +0200 Subject: [PATCH 14/31] fix books with uppercase extension --- cps/web.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/web.py b/cps/web.py index ad548226..9aaa0795 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2933,7 +2933,7 @@ def upload(): author_dir = helper.get_valid_filename(author, False) data_name = title_dir filepath = config.config_calibre_dir + os.sep + author_dir + os.sep + title_dir - saved_filename = filepath + os.sep + data_name + meta.extension + saved_filename = filepath + os.sep + data_name + meta.extension.lower() if not os.path.exists(filepath): try: From fb8ce693f3a4e8ce9044580049a880ac63a16fc7 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 12 Aug 2017 18:52:56 +0200 Subject: [PATCH 15/31] Bugfix mature content Update german translation --- cps/translations/de/LC_MESSAGES/messages.mo | Bin 301981 -> 302314 bytes cps/translations/de/LC_MESSAGES/messages.po | 410 +++++++++++--------- cps/ub.py | 2 +- cps/web.py | 5 +- messages.pot | 410 +++++++++++--------- 5 files changed, 442 insertions(+), 385 deletions(-) diff --git a/cps/translations/de/LC_MESSAGES/messages.mo b/cps/translations/de/LC_MESSAGES/messages.mo index 75ef8b42229fd331c614fc76232530f5db7d2ec4..0737ddb7ca134c0d01f8ad8884a81ff5fe725608 100644 GIT binary patch delta 129424 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 xl~*0G@Z!0ZPaeN;ZObYxYA\n" "Language-Team: LANGUAGE \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "" @@ -61,378 +61,373 @@ msgstr "" msgid "Could not find any formats suitable for sending by email" msgstr "" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/templates/index.xml:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2512 msgid "Please fill out all fields!" msgstr "" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "" -#: cps/web.py:1841 +#: cps/web.py:1909 msgid "This username or email address is already in use." msgstr "" -#: cps/web.py:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "" -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:1978 +#: cps/web.py:2046 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2597 msgid "Please configure your kindle email address first..." msgstr "" -#: cps/web.py:2024 +#: cps/web.py:2092 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:2059 +#: cps/web.py:2127 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2257 +#: cps/web.py:2325 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2327 cps/web.py:2331 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2260 +#: cps/web.py:2328 msgid "Profile updated" msgstr "" -#: cps/web.py:2274 +#: cps/web.py:2342 msgid "Admin page" msgstr "" -#: cps/web.py:2386 +#: cps/web.py:2466 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2473 cps/web.py:2479 cps/web.py:2493 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2397 +#: cps/web.py:2477 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2514 cps/web.py:2567 msgid "Add new user" msgstr "" -#: cps/web.py:2478 +#: cps/web.py:2559 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:2482 +#: cps/web.py:2563 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:2504 +#: cps/web.py:2585 msgid "Mail settings updated" msgstr "" -#: cps/web.py:2511 +#: cps/web.py:2592 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2514 +#: cps/web.py:2595 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2518 +#: cps/web.py:2599 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2519 +#: cps/web.py:2600 msgid "Edit mail settings" msgstr "" -#: cps/web.py:2548 +#: cps/web.py:2629 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:2644 +#: cps/web.py:2727 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:2647 +#: cps/web.py:2730 msgid "An unknown error occured." msgstr "" -#: cps/web.py:2650 +#: cps/web.py:2733 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "" - -#: cps/web.py:2853 +#: cps/web.py:2755 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2770 cps/web.py:2953 cps/web.py:3077 +msgid "edit metadata" +msgstr "" + +#: cps/web.py:2782 cps/web.py:2786 +msgid "unknown" +msgstr "" + +#: cps/web.py:2971 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2878 +#: cps/web.py:2977 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:2895 +#: cps/web.py:2996 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:2900 +#: cps/web.py:3001 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:2905 +#: cps/web.py:3006 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" @@ -457,7 +452,7 @@ msgstr "" msgid "DLS" msgstr "" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "" @@ -466,7 +461,7 @@ msgstr "" msgid "Download" msgstr "" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "" @@ -518,7 +513,7 @@ msgstr "" msgid "Calibre DB dir" msgstr "" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "" @@ -588,10 +583,10 @@ msgid "Ok" msgstr "" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "" @@ -611,12 +606,12 @@ msgstr "" msgid "Book Title" msgstr "" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "" @@ -624,7 +619,7 @@ msgstr "" msgid "Tags" msgstr "" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "" @@ -641,86 +636,90 @@ msgstr "" msgid "Cover URL (jpg)" msgstr "" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr "" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "" -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "" @@ -756,8 +755,8 @@ msgstr "" msgid "Server Port" msgstr "" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "" @@ -773,55 +772,75 @@ msgstr "" msgid "Regular expression for title sorting" msgstr "" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "" @@ -830,35 +849,31 @@ msgstr "" msgid "Read in browser" msgstr "" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "" @@ -894,7 +909,7 @@ msgstr "" msgid "Save settings and send Test E-Mail" msgstr "" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "" @@ -906,11 +921,12 @@ msgstr "" msgid "Start" msgstr "" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "" @@ -918,7 +934,7 @@ msgstr "" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "" @@ -938,7 +954,7 @@ msgstr "" msgid "Show Random Books" msgstr "" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "" @@ -954,83 +970,91 @@ msgstr "" msgid "Books ordered by series" msgstr "" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1193,47 +1217,51 @@ msgstr "" msgid "Show all" msgstr "" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "" From 2f7177742d3f476edeba8c3ee27d1affda22500b Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 12 Aug 2017 18:59:57 +0200 Subject: [PATCH 16/31] Update chinese translation --- cps/translations/es/LC_MESSAGES/messages.po | 410 ++++++++++-------- cps/translations/fr/LC_MESSAGES/messages.po | 410 ++++++++++-------- cps/translations/nl/LC_MESSAGES/messages.po | 410 ++++++++++-------- cps/translations/pl/LC_MESSAGES/messages.po | 410 ++++++++++-------- cps/translations/ru/LC_MESSAGES/messages.po | 410 ++++++++++-------- .../zh_Hans_CN/LC_MESSAGES/messages.mo | Bin 303554 -> 303884 bytes .../zh_Hans_CN/LC_MESSAGES/messages.po | 410 ++++++++++-------- messages.pot | 60 +-- 8 files changed, 1344 insertions(+), 1176 deletions(-) diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index 39676523..3a42a135 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Juan F. Villa \n" "Language: es\n" @@ -25,7 +25,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "No instalado" @@ -69,380 +69,375 @@ msgstr "Enviar a Kindle" msgid "Could not find any formats suitable for sending by email" msgstr "Formato no compatible para enviar por correo electronico" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "Invitado" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "Solicitando paquete de actualización" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "Descargando paquete de actualización" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "Descomprimiendo paquete de actualización" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "Ficheros sustituidos" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "Los conexiones de base datos están cerradas" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "El servidor está detenido" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "Actualización finalizada. Por favor, pulse OK y recargue la página" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "Libros populares (los mas descargados)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "Libros mejor valorados" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "Libros al azar" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "Lista de autores" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "Autor:%(name)s" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Error en la apertura del eBook. El archivo no existe o no es accesible:" -#: cps/templates/index.xml:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "Lista de series" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "Lenguajes disponibles" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "Lenguaje: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "Lista de categorias" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "Categoría : %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "Estadisticas" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "Servidor reiniciado. Por favor, recargue la página" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "Actualización realizada" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "búsqueda" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "Libros leídos" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "Libros no leídos" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "Leer un libro" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "¡Por favor completar todos los campos!" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "registrarse" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "Error desconocido. Por favor, inténtelo de nuevo mas tarde." -#: cps/web.py:1841 +#: cps/web.py:1909 msgid "This username or email address is already in use." msgstr "Usuario o dirección de correo en uso." -#: cps/web.py:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Sesion iniciada como : '%(nickname)s'" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "Usuario o contraseña invalido" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "Iniciar sesión" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "Configurar primero los parametros SMTP por favor..." -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Envio de Libro a %(kindlemail)s correctamente" -#: cps/web.py:1978 +#: cps/web.py:2046 #, 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:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "Configurar primero la dirección de correo Kindle por favor..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:2059 +#: cps/web.py:2127 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue removido del estante: %(sname)s" -#: cps/web.py:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, 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:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "Ha sucedido un error" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "crear un estante" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "Estante %(title)s cambiado" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "Editar un estante" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Cambiar orden del estante: '%(name)s'" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "Existe una cuenta vinculada a esta dirección de correo." -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "Página de administración" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "Configuración de Calibre-web actualizada" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "Configuración básica" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "Localicación de la BD inválida. Por favor, introduzca la ruta correcta." -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:2482 +#: cps/web.py:2564 msgid "Found an existing account for this email address or nickname." msgstr "" "Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre" " de usuario." -#: cps/web.py:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "Parámetros de correo actualizados" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s" -#: cps/web.py:2514 +#: cps/web.py:2596 #, 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:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "Ajustes de correo electrónico actualizados" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "Editar parametros de correo" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' actualizado" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "Error inesperado." -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "editar metainformación" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "editar metainformación" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión \"%s\" a este servidor" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fallo al crear la ruta %s (permiso negado)" -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fallo al almacenar el archivo %s (permiso negado)" -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fallo al borrar el archivo %s (permiso negado)" @@ -467,7 +462,7 @@ msgstr "Kindle" msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "Administración" @@ -476,7 +471,7 @@ msgstr "Administración" msgid "Download" msgstr "Descarga" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "Subir archivo" @@ -528,7 +523,7 @@ msgstr "Configuración" msgid "Calibre DB dir" msgstr "Dir DB Calibre" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "Nivel de registro" @@ -598,10 +593,10 @@ msgid "Ok" msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "Regresar" @@ -621,12 +616,12 @@ msgstr "" msgid "Book Title" msgstr "Titulo del Libro" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Autor" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "Descripcion" @@ -634,7 +629,7 @@ msgstr "Descripcion" msgid "Tags" msgstr "Etiqueta" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Series" @@ -651,86 +646,90 @@ msgstr "Puntaje" msgid "Cover URL (jpg)" msgstr "URL de la Cubierta (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "Fecha de publicación" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "Lenguaje" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "Si" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "No" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "Ver libro tras la edicion" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "Obtener metainformación" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "Enviar" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "Palabra clave" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr "Buscar palabras clave" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "¡Vamos!" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "Haga clic en la portada para cargar la metainformación en el formulario" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "Cargando..." -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "Cerrar" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "¡Error en la búsqueda!" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "¡Sin resultados! Por favor, pruebe otra palabra clave." -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Editor" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "Origen" @@ -766,8 +765,8 @@ msgstr "Metadata Watch Channel ID" msgid "Server Port" msgstr "Puerto del servidor" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "Titulo" @@ -783,55 +782,75 @@ msgstr "Expresión regular para ignorar columnas" msgid "Regular expression for title sorting" msgstr "Expresión regular para ordenar títulos" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "Permitir subida" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "Permitir navegación anónima" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "Permitir registro público" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "Ajustes por defecto para nuevos usuarios" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "Usuario Administrador" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "Permitir descargas" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "Permitir subidas de archivos" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "Permitir editar" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "Permitir cambiar la clave" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Inicio de Sesion" @@ -840,35 +859,31 @@ msgstr "Inicio de Sesion" msgid "Read in browser" msgstr "Ver en el navegador" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "Libro" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "de" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "Lenguaje" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "Fecha de publicación" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "Leer" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "Descripcion :" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "Agregar al estante" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "Editar la metadata" @@ -906,7 +921,7 @@ msgstr "Guardar cambios" msgid "Save settings and send Test E-Mail" msgstr "Guardar cambios y enviar un correo de prueba" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "Siguiente" @@ -918,11 +933,12 @@ msgstr "Descubrir (Libros al azar)" msgid "Start" msgstr "Iniciar" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "Buscar" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "Libros Populares" @@ -930,7 +946,7 @@ msgstr "Libros Populares" msgid "Popular publications from this catalog based on Downloads." msgstr "Publicaciones mas populares para este catálogo basadas en las descargas." -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "Libros mejor valorados" @@ -950,7 +966,7 @@ msgstr "Libros recientes" msgid "Show Random Books" msgstr "Mostrar libros al azar" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "Autores" @@ -966,83 +982,91 @@ msgstr "Libros ordenados por Categorias" msgid "Books ordered by series" msgstr "Libros ordenados por Series" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Alternar navegación" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "Busqueda avanzada" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "Cerrar sesión" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "Registro" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "Explorar" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "Descubrir" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "Categoria" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "Lenguaje" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "Estantes públicos" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "Sus estantes" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "Crear un estante" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "Acerca de" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1205,47 +1229,51 @@ msgstr "Mostrar lenguaje de los libros" msgid "Show all" msgstr "Mostrar Todo" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "Mostrar libros al azar" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "Mostrar libros populares" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "Mostrar libros mejor valorados" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "Mostrar lenguaje seleccionado" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "Mostrar series seleccionadas" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "Mostrar categorias elegidas" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "Mostrar selección de autores" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "Mostrar leídos y no leídos" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "Mostrar libro aleatorios con vista detallada" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "Borrar este usuario" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "Descargas Recientes" diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index c6ad8e07..88712a9f 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2016-11-13 18:35+0100\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -31,7 +31,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "" @@ -75,380 +75,375 @@ msgstr "Envoyer ver Kindle" msgid "Could not find any formats suitable for sending by email" msgstr "Impossible de trouver un format adapté à envoyer par courriel" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "Liste des auteurs" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 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:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "S'enregistrer" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "Une erreur a eu lieu. Merci de réessayez plus tard." -#: cps/web.py:1841 +#: cps/web.py:1909 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:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "Mauvais nom d'utilisateur ou mot de passe" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "Connexion" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "Veillez configurer les paramètres smtp d'abord..." -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Livres envoyés à %(kindlemail)s avec succès" -#: cps/web.py:1978 +#: cps/web.py:2046 #, 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:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "Veuillez configurer votre adresse kindle d'abord..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, 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:2059 +#: cps/web.py:2127 #, 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:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, 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:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "Créer une étagère" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "L'étagère %(name)s a été supprimé avec succès" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "Un compte avec cette adresse de courriel existe déjà." -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:2482 +#: cps/web.py:2564 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:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "Paramètres de courriel mis à jour" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2514 +#: cps/web.py:2596 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "Éditer les paramètres de courriel" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossible de créer le chemin %s (permission refusée)" -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossible de supprimer le fichier %s (permission refusée)" @@ -473,7 +468,7 @@ msgstr "Kindle" msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "Administration" @@ -482,7 +477,7 @@ msgstr "Administration" msgid "Download" msgstr "Télécharger" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "Téléverser" @@ -534,7 +529,7 @@ msgstr "" msgid "Calibre DB dir" msgstr "" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "" @@ -604,10 +599,10 @@ msgid "Ok" msgstr "" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "Retour" @@ -627,12 +622,12 @@ msgstr "" msgid "Book Title" msgstr "Titre du livre" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Auteur" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "Description" @@ -640,7 +635,7 @@ msgstr "Description" msgid "Tags" msgstr "Étiquette" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Séries" @@ -657,86 +652,90 @@ msgstr "Évaluation" msgid "Cover URL (jpg)" msgstr "Adresse de la couverture (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "Langue" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "Oui" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "Non" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "Voir le livre après l'édition" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "Soumettre" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr "" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "Allez !" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "" -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "" @@ -772,8 +771,8 @@ msgstr "" msgid "Server Port" msgstr "" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "Titre" @@ -789,55 +788,75 @@ msgstr "" msgid "Regular expression for title sorting" msgstr "" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "Utilisateur admin" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "Permettre les téléchargements" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "Permettre les téléversements" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "Permettre l'édition" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "Permettre le changement de mot de passe" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Connexion" @@ -846,35 +865,31 @@ msgstr "Connexion" msgid "Read in browser" msgstr "Lire dans le navigateur" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "Livre" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "Langue" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "Description :" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "Ajouter à l'étagère" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "Éditer les métadonnées" @@ -910,7 +925,7 @@ msgstr "" msgid "Save settings and send Test E-Mail" msgstr "" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "Suivant" @@ -922,11 +937,12 @@ msgstr "Découverte (livres au hasard)" msgid "Start" msgstr "Démarrer" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "Chercher" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "Livres populaires" @@ -934,7 +950,7 @@ msgstr "Livres populaires" msgid "Popular publications from this catalog based on Downloads." msgstr "" -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "" @@ -954,7 +970,7 @@ msgstr "Les derniers livres" msgid "Show Random Books" msgstr "Montrer des livres au hasard" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "Auteurs" @@ -970,83 +986,91 @@ msgstr "Livres classés par catégorie" msgid "Books ordered by series" msgstr "Livres classés par série" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Basculer la navigation" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "Recherche avancée" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "Déconnexion" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "S'enregistrer" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "Explorer" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "Découvrir" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "Catégories" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "Langues" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "Étagères publiques" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "Vos étagères" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "Créer une étagère" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "À popos" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1209,47 +1233,51 @@ msgstr "Montrer les livres dans la langue" msgid "Show all" msgstr "Montrer tout" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "Montrer des livres au hasard" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "Montrer les livres populaires" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "Montrer la sélection de la langue" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "Montrer la sélection des séries" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "Montrer la sélection des catégories" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "Supprimer cet utilisateur" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "Téléchargements récents" diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 97e03193..61035397 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web dutch translation by Ed Driesen (GPL V3)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2017-06-21 20:15+0200\n" "Last-Translator: \n" "Language: nl\n" @@ -33,7 +33,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "niet geïnstalleerd" @@ -77,380 +77,375 @@ msgstr "Stuur naar Kindle:" msgid "Could not find any formats suitable for sending by email" msgstr "Kon geen geschikte formaten vinden om te verzenden per email" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "Gast" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "Update pakket wordt aangevraagd" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "Update pakket wordt gedownload" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "Update pakket wordt uitgepakt" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "Bestanden zijn vervangen" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "Database verbindingen zijn gesloten" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "Server is gestopt" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "Update voltooid, klik op ok en herlaad de pagina" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "Populaire boeken (meeste downloads)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "Best beoordeelde boeken" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "Willekeurige boeken" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "Auteur lijst" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "Auteur:%(name)s" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Fout bij openen van het boek. Bestand bestaat niet of is niet " "toegankelijk:" -#: cps/templates/index.xml:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "Series lijst" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "Series: %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "Beschikbare talen" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "Taal: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "Categorie lijst" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "Categorie: %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "Statistieken" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "Server herstart, gelieve de pagina herladen" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "Bezig met het stoppen vande server, gelieve venster afsluiten" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "Update voltooid" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "zoek" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "Lees Boeken" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "Ongelezen Boeken" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "Lees een boek" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "Gelieve alle velden in te vullen!" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "registreer" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "Een onbekende fout deed zich voor. Gelieve later nog eens te proberen." -#: cps/web.py:1841 +#: cps/web.py:1909 msgid "This username or email address is already in use." msgstr "Deze gebruikersnaam of email adres is reeds in gebruik." -#: cps/web.py:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "je bent nu ingelogd als: '%(nickname)s'" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "Verkeerde gebruikersnaam of Wachtwoord" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "login" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "Gelieve de SMTP mail instellingen eerstte configureren..." -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Boek met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:1978 +#: cps/web.py:2046 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Er trad een fout op bij het versturen van dit boek: %(res)s" -#: cps/web.py:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "Gelieve eerst je kindle email adres te configureren..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:2059 +#: cps/web.py:2127 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boek werd verwijderd van boekenplank: %(sname)s" -#: cps/web.py:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds." -#: cps/web.py:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "Boekenplank %(title)s aangemaakt" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "Er deed zich een fout voor" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "maak een boekenplank" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "Boekenplank %(title)s gewijzigd" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "Bewerk een boekenplank" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Succesvol boekenplank %(name)s gewist" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "Boekenplank: '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Verander volgorde van Boekenplank: '%(name)s'" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "Een bestaand gebruiker gevonden voor dit email adres." -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's profiel" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "Profiel aangepast" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "Administratie pagina" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "Calibre-web configuratie aangepast" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "Basis configuratie" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "DB locatie is niet geldig, gelieve het correcte pad in te geven" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "Voeg nieuwe gebruiker toe" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "Gebruiker '%(user)s' aangemaakt" -#: cps/web.py:2482 +#: cps/web.py:2564 msgid "Found an existing account for this email address or nickname." msgstr "Een bestaand gebruiker gevonden voor dit email adres of gebruikersnaam." -#: cps/web.py:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "Mail instellingen aangepast" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test email met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:2514 +#: cps/web.py:2596 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Er trad een fout op met het versturen van de test email: %(res)s" -#: cps/web.py:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "Email instellingen aangepast" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "Bewerk mail instellingen" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "Gebruiker '%(nick)s' verwijderd" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "Gebruiker '%(nick)s' aangepast" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "Een onbekende fout deed zich voor." -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "Bewerk gebruiker '%(nick)s'" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "onbekend" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "Bewerk metadata" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "Bewerk metadata" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "onbekend" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Het uploaden van bestandsextensie \"%s\" is niet toegestaan op deze server" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "Up te loaden bestanden dienen een extentie te hebben" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Het pad %s aanmaken gefaald (Geen toestemming)." -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Bestand %s opslaan gefaald (Geen toestemming)." -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Bestand %s wissen gefaald (Geen toestemming)." @@ -475,7 +470,7 @@ msgstr "Kindlle" msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "Administratie" @@ -484,7 +479,7 @@ msgstr "Administratie" msgid "Download" msgstr "Download" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "Upload" @@ -536,7 +531,7 @@ msgstr "Configuratie" msgid "Calibre DB dir" msgstr "Calibre DB map" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "Log niveau" @@ -606,10 +601,10 @@ msgid "Ok" msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "Terug" @@ -629,12 +624,12 @@ msgstr "Wis boek" msgid "Book Title" msgstr "Boek titel" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Auteur" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "Omschrijving" @@ -642,7 +637,7 @@ msgstr "Omschrijving" msgid "Tags" msgstr "Tags" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Series" @@ -659,86 +654,90 @@ msgstr "Beoordeling" msgid "Cover URL (jpg)" msgstr "Omslag URL (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "Publicatie datum" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "Taal" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "Ja" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "Nee" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "bekijk boek na bewerking" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "Verkrijg metadata" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "Indienen" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "Ben je zeker?" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "Boek wordt nu gewist uit de Calibre database" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "en van de harde schijf" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "Wis" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "Zoekwoord" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr "Zoek voor zoekwoord" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "Start!" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "Klik op de omslag om de metatadata in het formulier te laden" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "Aan het laden..." -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "Sluit" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "Zoek fout!" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "Geen resultaat! Gelieve een ander zoekwoord proberen" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Uitgever" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "Bron" @@ -774,8 +773,8 @@ msgstr "Metadata Watch Channel ID" msgid "Server Port" msgstr "Server poort" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "Titel" @@ -791,55 +790,75 @@ msgstr "Reguliere expressie om kolommen te negeren" msgid "Regular expression for title sorting" msgstr "Rguliere expressie op titels te sorteren" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "Uploaden aanzetten" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "Anoniem verkennen aanzetten" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "Publieke registratie aanzetten" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "Standaard instellingen voor nieuwe gebruikers" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "Administratie gebruiker" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "Downloads toestaan" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "Uploads toestaan" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "Bewerken toestaan" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "Het wissen van boeken toestaan" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "Wachtwoord wijzigen toestaan" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "Publieke boekenplanken bewerken toestaan" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" @@ -848,35 +867,31 @@ msgstr "Login" msgid "Read in browser" msgstr "Lees in browser" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "Bozk" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "van" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "taal" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "Publicatie datum" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "Lees" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "Omschrijving:" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "Voeg toe aan boekenplank" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "Bewerk metadata" @@ -914,7 +929,7 @@ msgstr "Bewaar instelling" msgid "Save settings and send Test E-Mail" msgstr "Bewaar instellingen en stuur test email" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "Volgende" @@ -926,11 +941,12 @@ msgstr "Ontdek (Willekeurige Boeken)" msgid "Start" msgstr "Start" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "Zoek" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "Populaire Boeken" @@ -938,7 +954,7 @@ msgstr "Populaire Boeken" msgid "Popular publications from this catalog based on Downloads." msgstr "Populaire publicaties van deze cataloog gebaseerd op Downloads." -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "Best beoordeeld" @@ -958,7 +974,7 @@ msgstr "Recentste boeken" msgid "Show Random Books" msgstr "Toon Willekeurige Boeken" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "Auteurs" @@ -974,83 +990,91 @@ msgstr "Boeken gesorteerd op Categorie" msgid "Books ordered by series" msgstr "Boeken gesorteerd op Serie" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Kies navigatie" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "Geavanceerd zoeken" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "Log uit" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "Registreer" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "Verkennen" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "Ontdek" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "Categorieën" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "Talen" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "Publieke Boekenplanken" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "Jou Boekenplanken" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "Maak een boekenplank" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "Over" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1213,47 +1237,51 @@ msgstr "Toon boeken met taal" msgid "Show all" msgstr "Toon alles" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "Toon willekeurige boeken" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "Toon populaire boeken" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "Toon best beoordeelde boeken" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "Toon taal selectie" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "Toon serie selectie" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "Toon categorie selectie" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "Toon auteur selectie" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "Toon gelezen en ongelezen" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "Toon willekeurige boeken in gedetailleerd zicht" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "Wis deze gebruiker" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "Recente Downloads" diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index 154678f5..307ae16f 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2017-04-11 22:51)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2017-04-11 22:51+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -24,7 +24,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "nie zainstalowane" @@ -70,378 +70,373 @@ msgstr "" "Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą " "e-mail" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "Gość" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "Żądanie o pakiet aktualizacji" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "Pobieranie pakietu aktualizacji" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "Rozpakowywanie pakietu aktualizacji" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "Pliki zostały zastąpione" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "Połączenia z bazą danych zostały zakończone" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "Serwer jest zatrzymany" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "Lista autorów" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "Autor: %(name)s" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 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:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "Seria: %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "Aktualizacja zakończona" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "szukaj" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "Przeczytane książki" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "Nieprzeczytane książki" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "rejestracja" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "Wystąpił nieznany błąd. Spróbuj ponownie później." -#: cps/web.py:1841 +#: cps/web.py:1909 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:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Zalogowałeś się jako: '%(nickname)s'" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "Błędna nazwa użytkownika lub hasło" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "logowanie" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..." -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Książka została pomyślnie wysłana do %(kindlemail)s" -#: cps/web.py:1978 +#: cps/web.py:2046 #, 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:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, 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:2059 +#: cps/web.py:2127 #, 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:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "Znaleziono istniejące konto dla tego adresu e-mail." -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "Konfiguracja Calibre-web została zaktualizowana" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:2482 +#: cps/web.py:2564 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:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "Zaktualizowano ustawienia poczty e-mail" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s" -#: cps/web.py:2514 +#: cps/web.py:2596 #, 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:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "Zaktualizowano ustawienia e-mail" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "Edytuj ustawienia poczty e-mail" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "edytuj metadane" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "edytuj metadane" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "Plik do przesłania musi mieć rozszerzenie" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." @@ -466,7 +461,7 @@ msgstr "Kindle" msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "Portal administracyjny" @@ -475,7 +470,7 @@ msgstr "Portal administracyjny" msgid "Download" msgstr "Pobierz" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "Wyślij" @@ -527,7 +522,7 @@ msgstr "Konfiguracja" msgid "Calibre DB dir" msgstr "Folder bazy danych Calibre" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "Poziom logów" @@ -597,10 +592,10 @@ msgid "Ok" msgstr "OK" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "Wróć" @@ -620,12 +615,12 @@ msgstr "" msgid "Book Title" msgstr "Tytuł książki" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Autor" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "Opis" @@ -633,7 +628,7 @@ msgstr "Opis" msgid "Tags" msgstr "Tagi" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Seria" @@ -650,86 +645,90 @@ msgstr "Ocena" msgid "Cover URL (jpg)" msgstr "Adres URL okładki (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "Data publikacji" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "Język" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "Tak" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "Nie" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "wyświetl książkę po edycji" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "Uzyskaj metadane" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "Wyślij" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "Słowo kluczowe" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr " Szukaj słowa kluczowego " -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "Idź!" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "Kliknij okładkę, aby załadować metadane do formularza" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "Ładowanie..." -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "Zamknij" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "Błąd wyszukiwania!" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "Brak wyników! Spróbuj innego słowa kluczowego." -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Wydawca" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "Źródło" @@ -766,8 +765,8 @@ msgstr "Metadane Watch Channel ID" msgid "Server Port" msgstr "Port serwera" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "Tytuł" @@ -783,55 +782,75 @@ msgstr "Wyrażenie regularne dla ignorowanych kolumn" msgid "Regular expression for title sorting" msgstr "Wyrażenie regularne dla tytułu sortującego" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "Włącz wysyłanie" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "Włącz anonimowe przeglądanie" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "Włącz publiczną rejestrację" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "Domyślne ustawienia dla nowych użytkowników" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "Użytkownik z uprawnieniami administratora" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "Zezwalaj na pobieranie" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "Zezwalaj na wysyłanie" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "Zezwalaj na edycję" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "Zezwalaj na zmianę hasła" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Zaloguj się" @@ -840,35 +859,31 @@ msgstr "Zaloguj się" msgid "Read in browser" msgstr "Czytaj w przeglądarce" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "Książka" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "z" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "język" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "Data publikacji" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "Czytaj" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "Opis:" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "Dodaj do półki" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "Edytuj metadane" @@ -906,7 +921,7 @@ msgstr "Zapisz ustawienia" msgid "Save settings and send Test E-Mail" msgstr "Zapisz ustawienia i wyślij testową wiadomość e-mail" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "Następne" @@ -918,11 +933,12 @@ msgstr "Odkrywaj (losowe książki)" msgid "Start" msgstr "Rozpocznij" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "Szukaj" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "Najpopularniejsze książki" @@ -930,7 +946,7 @@ msgstr "Najpopularniejsze książki" msgid "Popular publications from this catalog based on Downloads." msgstr "Popularne publikacje z tego katalogu bazujące na pobranych." -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "Najlepiej ocenione książki" @@ -950,7 +966,7 @@ msgstr "Ostatnie książki" msgid "Show Random Books" msgstr "Pokazuj losowe książki" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "Autorzy" @@ -966,83 +982,91 @@ msgstr "Książki sortowane według kategorii" msgid "Books ordered by series" msgstr "Książki sortowane według serii" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Przełącz nawigację" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "Zaawansowane wyszukiwanie" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "Wyloguj się" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "Zarejestruj się" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "Przeglądaj" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "Odkrywaj" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "Kategorie" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "Języki" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "Publiczne półki" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "Twoje półki" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "Utwórz półkę" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "O programie" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1206,47 +1230,51 @@ msgstr "Pokaż książki w języku" msgid "Show all" msgstr "Pokaż wszystko" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "Pokaż losowe książki" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "Pokaż najpopularniejsze książki" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "Pokaż najlepiej ocenione książki" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "Pokaż wybór języka" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "Pokaż wybór serii" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "Pokaż wybór kategorii" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "Pokaż wybór autora" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "Pokaż przeczytane i nieprzeczytane" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "Pokaz losowe książki w widoku szczegółowym" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "Usuń tego użytkownika" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "Ostatnio pobierane" diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index 7861b5b3..6e08b74e 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: Pavel Korovin \n" "Language: ru\n" @@ -26,7 +26,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "Отсутствует" @@ -70,378 +70,373 @@ msgstr "Отправить на Kindle" msgid "Could not find any formats suitable for sending by email" msgstr "Невозоможно найти формат, подходящий для отправки по email" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "Гость" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "Проверка обновлений" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "Загрузка обновлений" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "Распаковка обновлений" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "Файлы заменены" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "Соеднинения с базой данных закрыты" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "Сервер остановлен" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "Популярные книги (часто загружаемые)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "Книги с наивысшим рейтингом" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "Случайный выбор" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "Авторы" -#: cps/web.py:1123 -#, python-format -msgid "Author: %(name)s" -msgstr "Автор:%(name)s" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Невозможно открыть книгу. Файл не существует или недоступен." -#: cps/templates/index.xml:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "Серии" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "Серии: %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "Языки" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "Язык: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "Категории" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "Категория: %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "Статистика" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "Производится остановка сервера, пожалуйста, закройте окно" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "Обновление закончено" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "поиск" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "Прочитанные" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "Непрочитанные" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "Читать книгу" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "Пожалуйста, заполните все поля!" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "зарегистрироваться" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "Неизвестная ошибка. Пожалуйста, попробуйте позже." -#: cps/web.py:1841 +#: cps/web.py:1909 msgid "This username or email address is already in use." msgstr "Имя пользователя или адрес эл. почты уже используется" -#: cps/web.py:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Вы вошли как пользователь '%(nickname)s'" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "Ошибка в имени пользователя или пароле" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "войти" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP" -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Книга успешно отправлена на %(kindlemail)s" -#: cps/web.py:1978 +#: cps/web.py:2046 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ошибка при отправке книги: %(res)s" -#: cps/web.py:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "Пожалуйста, сначала укажите ваш kindle email..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s" -#: cps/web.py:2059 +#: cps/web.py:2127 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Книга удалена с книжной полки: %(sname)s" -#: cps/web.py:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Книжкная полка с названием '%(title)s' уже существует." -#: cps/web.py:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "Создана книжная полка %(title)s" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "Произошла ошибка" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "создать книжную полку" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "Книжная полка %(title)s изменена" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "Изменить книжную полку" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Книжная полка %(name)s удалена" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "Книжная полка: '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Изменить расположение книжной полки '%(name)s'" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "Найдена учётная запись для для данного адреса email." -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "Профиль %(name)s" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "Профиль обновлён" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "Администрирование" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "Конфигурация Calibre-web обновлена" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "Настройки сервера" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "Добавить пользователя" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "Пользователь '%(user)s' добавлен" -#: cps/web.py:2482 +#: cps/web.py:2564 msgid "Found an existing account for this email address or nickname." msgstr "Для указанного адреса или имени найдена существующая учётная запись." -#: cps/web.py:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "Настройки почты изменены" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s" -#: cps/web.py:2514 +#: cps/web.py:2596 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Ошибка отправки тестового сообщения: %(res)s" -#: cps/web.py:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "Обновлены настройки e-mail" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "Изменить почтовые настройки" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "Пользователь '%(nick)s' удалён" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "Пользователь '%(nick)s' обновлён" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "Произошла неизвестная ошибка." -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "Изменить пользователя %(nick)s" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "неизвестно" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "изменить метаданные" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "изменить метаданные" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "неизвестно" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Запрещена загрузка файлов с расширением \"%s\"" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "Загружаемый файл должен иметь расширение" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Ошибка при создании пути %s (доступ запрещён)" -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Ошибка записи файоа %s (доступ запрещён)" -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Ошибка удаления файла %s (доступ запрещён)" @@ -466,7 +461,7 @@ msgstr "Kindle" msgid "DLS" msgstr "DLS" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "Управление" @@ -475,7 +470,7 @@ msgstr "Управление" msgid "Download" msgstr "Скачать" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "Загрузить" @@ -527,7 +522,7 @@ msgstr "Настройки сервера" msgid "Calibre DB dir" msgstr "Папка Calibre DB" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "Уровень логирования" @@ -597,10 +592,10 @@ msgid "Ok" msgstr "Ok" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "Назад" @@ -620,12 +615,12 @@ msgstr "Удалить книгу" msgid "Book Title" msgstr "Название" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Автор" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "Описание" @@ -633,7 +628,7 @@ msgstr "Описание" msgid "Tags" msgstr "Теги" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "Серии" @@ -650,86 +645,90 @@ msgstr "Рейтинг" msgid "Cover URL (jpg)" msgstr "URL обложки (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "Опубликовано" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "Язык" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "Да" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "Нет" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "смотреть книгу после редактирования" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "Получить метаданные" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "Отправить" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "Вы действительно уверены?" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "Книга будет удалена из БД Calibre" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "и с диска" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "Удалить" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "Ключевое слово" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr " Поиск по ключевому слову" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "Искать" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "Нажмите на обложку, чтобы получить метаданные" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "Загрузка..." -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "Закрыть" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "Ошибка поиска!" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "Нет результатов. Пожалуйста, попробуйте другое ключевое слово" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Издатель" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "Источник" @@ -765,8 +764,8 @@ msgstr "Metadata Watch Channel ID" msgid "Server Port" msgstr "Порт сервера" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "Заголовок" @@ -782,55 +781,75 @@ msgstr "Regexp для игнорирования столбцов" msgid "Regular expression for title sorting" msgstr "Regexp для сортировки по названию" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "Разрешить анонимный просмотр" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "Разрешить публичную регистрацию" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "Настройки по умолчанию для новых пользователей" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "Управление сервером" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "Разрешить скачивание с сервера" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "Разрешить редактирование книг" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "Разрешить удаление книг" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "Разрешить смену пароля" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "Разрешить редактирование публичных книжных полок" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "Имя пользователя" @@ -839,35 +858,31 @@ msgstr "Имя пользователя" msgid "Read in browser" msgstr "Открыть в браузере" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "Книга" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "из" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "Язык" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "Опубликовано" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "Прочитано" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "Описание:" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "Добавить на книжную полку" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "Редактировать метаданные" @@ -903,7 +918,7 @@ msgstr "Сохранить настройки" msgid "Save settings and send Test E-Mail" msgstr "Сохранить настройки и отправить тестовое письмо" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "Дальше" @@ -915,11 +930,12 @@ msgstr "Обзор (случайные книги)" msgid "Start" msgstr "Старт" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "Поиск" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "Популярные книги" @@ -927,7 +943,7 @@ msgstr "Популярные книги" msgid "Popular publications from this catalog based on Downloads." msgstr "Популярные книги в этом каталоге, на основе количества скачиваний" -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "Книги с наилучшим рейтингом" @@ -947,7 +963,7 @@ msgstr "Последние поступления" msgid "Show Random Books" msgstr "Показывать случайные книги" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "Авторы" @@ -963,83 +979,91 @@ msgstr "Книги, отсортированные по категории" msgid "Books ordered by series" msgstr "Книги, отсортированные по серии" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "Включить навигацию" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "Расширенный поиск" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "Выход" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "Зарегистрироваться" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "Просмотр" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "Обзор" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "Категории" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "Языки" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "Общие книжные полки" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "Ваши книжные полки" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "Создать книжную полку" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "О программе" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1202,47 +1226,51 @@ msgstr "Показать книги на языках" msgid "Show all" msgstr "Всех" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "Показывать случайные книги" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "Показывать популярные книги" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "Показывать книги с наивысшим рейтингом" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "Показывать выбор языка" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "Показывать выбор серии" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "Показывать выбор категории" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "Показывать выбор автора" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "Показывать прочитанные и непрочитанные" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "Показывать случайные книги при просмотре деталей" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "Удалить этого пользователя" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "Недавние скачивания" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index dab80f95eb1d27d190c5a4334683d833798a8b2d..20e149cd9e025258d4fe9ed0f67292ac76635afe 100644 GIT binary patch delta 129395 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 z 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 diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 48997039..8bf383e5 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-07-23 13:24+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -26,7 +26,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1309 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1374 msgid "not installed" msgstr "未安装" @@ -70,378 +70,373 @@ msgstr "发送到Kindle" msgid "Could not find any formats suitable for sending by email" msgstr "无法找到适合邮件发送的格式" -#: cps/ub.py:514 +#: cps/ub.py:542 msgid "Guest" msgstr "游客" -#: cps/web.py:932 +#: cps/web.py:974 msgid "Requesting update package" msgstr "正在请求更新包" -#: cps/web.py:933 +#: cps/web.py:975 msgid "Downloading update package" msgstr "正在下载更新包" -#: cps/web.py:934 +#: cps/web.py:976 msgid "Unzipping update package" msgstr "正在解压更新包" -#: cps/web.py:935 +#: cps/web.py:977 msgid "Files are replaced" msgstr "文件已替换" -#: cps/web.py:936 +#: cps/web.py:978 msgid "Database connections are closed" msgstr "数据库连接已关闭" -#: cps/web.py:937 +#: cps/web.py:979 msgid "Server is stopped" msgstr "服务器已停止" -#: cps/web.py:938 +#: cps/web.py:980 msgid "Update finished, please press okay and reload page" msgstr "更新完成,请按确定并刷新页面" -#: cps/web.py:1012 +#: cps/web.py:1054 msgid "Recently Added Books" msgstr "最近添加的书籍" -#: cps/web.py:1021 +#: cps/web.py:1063 msgid "Newest Books" msgstr "最新书籍" -#: cps/web.py:1030 +#: cps/web.py:1072 msgid "Oldest Books" msgstr "最旧书籍" -#: cps/web.py:1039 +#: cps/web.py:1081 msgid "Books (A-Z)" msgstr "书籍 (A-Z)" -#: cps/web.py:1048 +#: cps/web.py:1090 msgid "Books (Z-A)" msgstr "书籍 (Z-A)" -#: cps/web.py:1079 +#: cps/web.py:1126 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:1089 +#: cps/web.py:1136 msgid "Best rated books" msgstr "最高评分书籍" -#: cps/templates/index.xml:36 cps/web.py:1098 +#: cps/templates/index.xml:36 cps/web.py:1145 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:1111 +#: cps/web.py:1161 msgid "Author list" msgstr "作者列表" -#: cps/web.py:1123 -#, python-forma, python-format -msgid "Author: %(name)s" -msgstr "作者: %(name)s" - -#: cps/web.py:1125 cps/web.py:1153 cps/web.py:1286 cps/web.py:1767 +#: cps/web.py:1181 cps/web.py:1212 cps/web.py:1351 cps/web.py:1835 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/templates/index.xml:71 cps/web.py:1139 +#: cps/templates/index.xml:71 cps/web.py:1198 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:1151 +#: cps/web.py:1210 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:1184 +#: cps/web.py:1243 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:1199 +#: cps/web.py:1258 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1212 +#: cps/templates/index.xml:64 cps/web.py:1274 msgid "Category list" msgstr "分类列表" -#: cps/web.py:1224 +#: cps/web.py:1286 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/web.py:1320 +#: cps/web.py:1385 msgid "Excecution permissions missing" msgstr "可执行权限缺失" -#: cps/web.py:1334 +#: cps/web.py:1399 msgid "Statistics" msgstr "统计" -#: cps/web.py:1498 +#: cps/web.py:1563 msgid "Server restarted, please reload page" msgstr "服务器已重启,请刷新页面" -#: cps/web.py:1500 +#: cps/web.py:1565 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1516 +#: cps/web.py:1581 msgid "Update done" msgstr "更新完成" -#: cps/web.py:1594 cps/web.py:1607 +#: cps/web.py:1662 cps/web.py:1675 msgid "search" msgstr "搜索" #: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:144 cps/web.py:1683 +#: cps/templates/layout.html:127 cps/web.py:1751 msgid "Read Books" msgstr "已读书籍" #: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:145 cps/web.py:1686 +#: cps/templates/layout.html:128 cps/web.py:1754 msgid "Unread Books" msgstr "未读书籍" -#: cps/web.py:1753 cps/web.py:1755 cps/web.py:1757 cps/web.py:1764 +#: cps/web.py:1821 cps/web.py:1823 cps/web.py:1825 cps/web.py:1832 msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:1820 cps/web.py:2432 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "请填写所有字段" -#: cps/web.py:1821 cps/web.py:1837 cps/web.py:1842 cps/web.py:1844 +#: cps/web.py:1889 cps/web.py:1905 cps/web.py:1910 cps/web.py:1912 msgid "register" msgstr "注册" -#: cps/web.py:1836 +#: cps/web.py:1904 msgid "An unknown error occured. Please try again later." msgstr "发生一个未知错误。请稍后再试。" -#: cps/web.py:1841 +#: cps/web.py:1909 msgid "This username or email address is already in use." msgstr "此用户名或邮箱已被使用。" -#: cps/web.py:1860 cps/web.py:1956 +#: cps/web.py:1928 cps/web.py:2024 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "您现在已以'%(nickname)s'身份登录" -#: cps/web.py:1865 +#: cps/web.py:1933 msgid "Wrong Username or Password" msgstr "用户名或密码错误" -#: cps/web.py:1871 cps/web.py:1892 +#: cps/web.py:1939 cps/web.py:1960 msgid "login" msgstr "登录" -#: cps/web.py:1904 cps/web.py:1935 +#: cps/web.py:1972 cps/web.py:2003 msgid "Token not found" msgstr "找不到Token" -#: cps/web.py:1912 cps/web.py:1943 +#: cps/web.py:1980 cps/web.py:2011 msgid "Token has expired" msgstr "Token已过期" -#: cps/web.py:1920 +#: cps/web.py:1988 msgid "Success! Please return to your device" msgstr "成功!请返回您的设备" -#: cps/web.py:1970 +#: cps/web.py:2038 msgid "Please configure the SMTP mail settings first..." msgstr "请先配置SMTP邮箱..." -#: cps/web.py:1974 +#: cps/web.py:2042 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "此书已被成功发给 %(kindlemail)s" -#: cps/web.py:1978 +#: cps/web.py:2046 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:1980 cps/web.py:2516 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "请先配置您的kindle电子邮箱地址..." -#: cps/web.py:2024 +#: cps/web.py:2092 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:2059 +#: cps/web.py:2127 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:2078 cps/web.py:2102 +#: cps/web.py:2146 cps/web.py:2170 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:2083 +#: cps/web.py:2151 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:2085 cps/web.py:2113 +#: cps/web.py:2153 cps/web.py:2181 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:2086 cps/web.py:2088 +#: cps/web.py:2154 cps/web.py:2156 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:2111 +#: cps/web.py:2179 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:2114 cps/web.py:2116 +#: cps/web.py:2182 cps/web.py:2184 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:2136 +#: cps/web.py:2204 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:2158 +#: cps/web.py:2226 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:2161 +#: cps/web.py:2229 msgid "Error opening shelf. Shelf does not exist or is not accessible" msgstr "打开书架出错。书架不存在或不可访问" -#: cps/web.py:2193 +#: cps/web.py:2261 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:2257 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "找到已使用此邮箱的账号。" -#: cps/web.py:2259 cps/web.py:2263 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:2260 +#: cps/web.py:2329 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:2274 +#: cps/web.py:2343 msgid "Admin page" msgstr "管理页" -#: cps/web.py:2386 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "Calibre-web配置已更新" -#: cps/web.py:2393 cps/web.py:2399 cps/web.py:2413 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:2397 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:34 cps/web.py:2434 cps/web.py:2486 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:2478 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:2482 +#: cps/web.py:2564 msgid "Found an existing account for this email address or nickname." msgstr "已存在使用此邮箱或昵称的账号。" -#: cps/web.py:2504 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "邮箱设置已更新" -#: cps/web.py:2511 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s" -#: cps/web.py:2514 +#: cps/web.py:2596 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s" -#: cps/web.py:2518 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "E-Mail 设置已更新" -#: cps/web.py:2519 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "编辑邮箱设置" -#: cps/web.py:2548 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:2644 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:2647 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:2650 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:2685 cps/web.py:2689 -msgid "unknown" -msgstr "未知" - -#: cps/web.py:2848 cps/web.py:2851 cps/web.py:2961 -msgid "edit metadata" -msgstr "编辑元数据" - -#: cps/web.py:2853 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "打开电子书出错。文件不存在或不可访问" -#: cps/web.py:2872 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 +msgid "edit metadata" +msgstr "编辑元数据" + +#: cps/web.py:2783 cps/web.py:2787 +msgid "unknown" +msgstr "未知" + +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" -#: cps/web.py:2878 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须有一个后缀" -#: cps/web.py:2895 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "创建路径 %s 失败(权限拒绝)。" -#: cps/web.py:2900 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "存储文件 %s 失败(权限拒绝)。" -#: cps/web.py:2905 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "删除文件 %s 失败(权限拒绝)。" @@ -466,7 +461,7 @@ msgstr "" msgid "DLS" msgstr "" -#: cps/templates/admin.html:12 cps/templates/layout.html:85 +#: cps/templates/admin.html:12 cps/templates/layout.html:68 msgid "Admin" msgstr "管理" @@ -475,7 +470,7 @@ msgstr "管理" msgid "Download" msgstr "下载" -#: cps/templates/admin.html:14 cps/templates/layout.html:78 +#: cps/templates/admin.html:14 cps/templates/layout.html:61 msgid "Upload" msgstr "上传" @@ -527,7 +522,7 @@ msgstr "配置" msgid "Calibre DB dir" msgstr "Calibre DB目录" -#: cps/templates/admin.html:61 cps/templates/config_edit.html:76 +#: cps/templates/admin.html:61 cps/templates/config_edit.html:83 msgid "Log Level" msgstr "日志级别" @@ -597,10 +592,10 @@ msgid "Ok" msgstr "确定" #: cps/templates/admin.html:105 cps/templates/admin.html:119 -#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/book_edit.html:127 cps/templates/book_edit.html:149 +#: cps/templates/config_edit.html:156 cps/templates/email_edit.html:36 #: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 -#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 +#: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:131 msgid "Back" msgstr "后退" @@ -620,12 +615,12 @@ msgstr "删除书籍" msgid "Book Title" msgstr "书名" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:188 #: cps/templates/search_form.html:10 msgid "Author" msgstr "作者" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:190 msgid "Description" msgstr "简介" @@ -633,7 +628,7 @@ msgstr "简介" msgid "Tags" msgstr "标签" -#: cps/templates/book_edit.html:39 cps/templates/layout.html:154 +#: cps/templates/book_edit.html:39 cps/templates/layout.html:137 #: cps/templates/search_form.html:37 msgid "Series" msgstr "丛书" @@ -650,86 +645,90 @@ msgstr "评分" msgid "Cover URL (jpg)" msgstr "封面URL (jpg)" -#: cps/templates/book_edit.html:56 cps/templates/user_edit.html:27 +#: cps/templates/book_edit.html:56 cps/templates/detail.html:130 +msgid "Publishing date" +msgstr "出版日期" + +#: cps/templates/book_edit.html:63 cps/templates/user_edit.html:27 msgid "Language" msgstr "语言" -#: cps/templates/book_edit.html:67 +#: cps/templates/book_edit.html:74 msgid "Yes" msgstr "确认" -#: cps/templates/book_edit.html:68 +#: cps/templates/book_edit.html:75 msgid "No" msgstr "" -#: cps/templates/book_edit.html:115 +#: cps/templates/book_edit.html:122 msgid "view book after edit" msgstr "编辑后查看书籍" -#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 +#: cps/templates/book_edit.html:125 cps/templates/book_edit.html:161 msgid "Get metadata" msgstr "获取元数据" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/book_edit.html:126 cps/templates/config_edit.html:154 #: cps/templates/login.html:20 cps/templates/search_form.html:79 -#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 +#: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:129 msgid "Submit" msgstr "提交" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:140 msgid "Are really you sure?" msgstr "您真的确认?" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:143 msgid "Book will be deleted from Calibre database" msgstr "书籍会被从Calibre数据库和硬盘中删除" -#: cps/templates/book_edit.html:137 +#: cps/templates/book_edit.html:144 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:141 +#: cps/templates/book_edit.html:148 msgid "Delete" msgstr "删除" -#: cps/templates/book_edit.html:157 +#: cps/templates/book_edit.html:164 msgid "Keyword" msgstr "关键字" -#: cps/templates/book_edit.html:158 +#: cps/templates/book_edit.html:165 msgid " Search keyword " msgstr "搜索关键字" -#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:167 cps/templates/layout.html:43 msgid "Go!" msgstr "走起!" -#: cps/templates/book_edit.html:161 +#: cps/templates/book_edit.html:168 msgid "Click the cover to load metadata to the form" msgstr "点击封面加载元数据到表单" -#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:172 cps/templates/book_edit.html:185 msgid "Loading..." msgstr "加载中..." -#: cps/templates/book_edit.html:168 +#: cps/templates/book_edit.html:175 cps/templates/layout.html:199 msgid "Close" msgstr "关闭" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:186 msgid "Search error!" msgstr "搜索错误" -#: cps/templates/book_edit.html:180 +#: cps/templates/book_edit.html:187 msgid "No Result! Please try anonther keyword." msgstr "没有结果!请尝试别的关键字." -#: cps/templates/book_edit.html:182 cps/templates/detail.html:126 +#: cps/templates/book_edit.html:189 cps/templates/detail.html:125 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "出版社" -#: cps/templates/book_edit.html:184 +#: cps/templates/book_edit.html:191 msgid "Source" msgstr "来源" @@ -765,8 +764,8 @@ msgstr "" msgid "Server Port" msgstr "服务器端口" -#: cps/templates/config_edit.html:56 cps/templates/layout.html:133 -#: cps/templates/layout.html:134 cps/templates/shelf_edit.html:7 +#: cps/templates/config_edit.html:56 cps/templates/layout.html:116 +#: cps/templates/layout.html:117 cps/templates/shelf_edit.html:7 msgid "Title" msgstr "标题" @@ -782,55 +781,75 @@ msgstr "忽略列的正则表达式" msgid "Regular expression for title sorting" msgstr "标题排序的正则表达式" -#: cps/templates/config_edit.html:86 +#: cps/templates/config_edit.html:76 +msgid "Tags for Mature Content" +msgstr "" + +#: cps/templates/config_edit.html:93 msgid "Enable uploading" msgstr "启用上传" -#: cps/templates/config_edit.html:90 +#: cps/templates/config_edit.html:97 msgid "Enable anonymous browsing" msgstr "启用匿名浏览" -#: cps/templates/config_edit.html:94 +#: cps/templates/config_edit.html:101 msgid "Enable public registration" msgstr "启用注册" -#: cps/templates/config_edit.html:98 +#: cps/templates/config_edit.html:105 msgid "Enable remote login (\"magic link\")" msgstr "启用远程登录 (\"魔法链接\")" -#: cps/templates/config_edit.html:100 +#: cps/templates/config_edit.html:110 +msgid "Use" +msgstr "" + +#: cps/templates/config_edit.html:111 +msgid "Obtain an API Key" +msgstr "" + +#: cps/templates/config_edit.html:115 +msgid "Goodreads API Key" +msgstr "" + +#: cps/templates/config_edit.html:119 +msgid "Goodreads API Secret" +msgstr "" + +#: cps/templates/config_edit.html:125 msgid "Default Settings for new users" msgstr "新用户默认设置" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:128 cps/templates/user_edit.html:90 msgid "Admin user" msgstr "管理用户" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:132 cps/templates/user_edit.html:95 msgid "Allow Downloads" msgstr "允许下载" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:136 cps/templates/user_edit.html:99 msgid "Allow Uploads" msgstr "允许上传" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:140 cps/templates/user_edit.html:103 msgid "Allow Edit" msgstr "允许编辑" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:144 cps/templates/user_edit.html:107 msgid "Allow Delete books" msgstr "允许删除书籍" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:148 cps/templates/user_edit.html:112 msgid "Allow Changing Password" msgstr "允许修改密码" -#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:152 cps/templates/user_edit.html:116 msgid "Allow Editing Public Shelfs" msgstr "允许编辑公共书架" -#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:159 cps/templates/layout.html:76 #: cps/templates/login.html:4 msgid "Login" msgstr "登录" @@ -839,35 +858,31 @@ msgstr "登录" msgid "Read in browser" msgstr "在浏览器中阅读" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "Book" msgstr "" -#: cps/templates/detail.html:88 +#: cps/templates/detail.html:87 msgid "of" msgstr "" -#: cps/templates/detail.html:94 +#: cps/templates/detail.html:93 msgid "language" msgstr "语言" -#: cps/templates/detail.html:131 -msgid "Publishing date" -msgstr "出版日期" - -#: cps/templates/detail.html:168 +#: cps/templates/detail.html:167 msgid "Read" msgstr "" -#: cps/templates/detail.html:177 +#: cps/templates/detail.html:176 msgid "Description:" msgstr "简介:" -#: cps/templates/detail.html:189 +#: cps/templates/detail.html:188 msgid "Add to shelf" msgstr "添加到书架" -#: cps/templates/detail.html:251 +#: cps/templates/detail.html:250 msgid "Edit metadata" msgstr "编辑元数据" @@ -903,7 +918,7 @@ msgstr "保存设置" msgid "Save settings and send Test E-Mail" msgstr "保存设置并发送测试邮件" -#: cps/templates/feed.xml:20 +#: cps/templates/feed.xml:20 cps/templates/layout.html:183 msgid "Next" msgstr "下一个" @@ -915,11 +930,12 @@ msgstr "发现(随机书籍)" msgid "Start" msgstr "开始" -#: cps/templates/index.xml:7 cps/templates/layout.html:58 +#: cps/templates/index.xml:7 cps/templates/layout.html:40 +#: cps/templates/layout.html:41 msgid "Search" msgstr "搜索" -#: cps/templates/index.xml:15 cps/templates/layout.html:138 +#: cps/templates/index.xml:15 cps/templates/layout.html:121 msgid "Hot Books" msgstr "热门书籍" @@ -927,7 +943,7 @@ msgstr "热门书籍" msgid "Popular publications from this catalog based on Downloads." msgstr "基于下载数的热门书籍" -#: cps/templates/index.xml:22 cps/templates/layout.html:141 +#: cps/templates/index.xml:22 cps/templates/layout.html:124 msgid "Best rated Books" msgstr "最高评分书籍" @@ -947,7 +963,7 @@ msgstr "最新书籍" msgid "Show Random Books" msgstr "显示随机书籍" -#: cps/templates/index.xml:57 cps/templates/layout.html:156 +#: cps/templates/index.xml:57 cps/templates/layout.html:139 msgid "Authors" msgstr "作者" @@ -963,83 +979,91 @@ msgstr "书籍按分类排序" msgid "Books ordered by series" msgstr "书籍按丛书排序" -#: cps/templates/layout.html:48 +#: cps/templates/layout.html:30 msgid "Toggle navigation" msgstr "切换导航" -#: cps/templates/layout.html:68 +#: cps/templates/layout.html:51 msgid "Advanced Search" msgstr "高级搜索" -#: cps/templates/layout.html:89 +#: cps/templates/layout.html:72 msgid "Logout" msgstr "注销" -#: cps/templates/layout.html:94 cps/templates/register.html:18 +#: cps/templates/layout.html:77 cps/templates/register.html:18 msgid "Register" msgstr "注册" -#: cps/templates/layout.html:123 +#: cps/templates/layout.html:106 msgid "Browse" msgstr "浏览" -#: cps/templates/layout.html:124 +#: cps/templates/layout.html:107 msgid "Recently Added" msgstr "最近添加" -#: cps/templates/layout.html:127 +#: cps/templates/layout.html:110 msgid "Sorted Books" msgstr "已排序书籍" -#: cps/templates/layout.html:131 cps/templates/layout.html:132 -#: cps/templates/layout.html:133 cps/templates/layout.html:134 +#: cps/templates/layout.html:114 cps/templates/layout.html:115 +#: cps/templates/layout.html:116 cps/templates/layout.html:117 msgid "Sort By" msgstr "排序" -#: cps/templates/layout.html:131 +#: cps/templates/layout.html:114 msgid "Newest" msgstr "最新" -#: cps/templates/layout.html:132 +#: cps/templates/layout.html:115 msgid "Oldest" msgstr "最旧" -#: cps/templates/layout.html:133 +#: cps/templates/layout.html:116 msgid "Ascending" msgstr "升序" -#: cps/templates/layout.html:134 +#: cps/templates/layout.html:117 msgid "Descending" msgstr "降序" -#: cps/templates/layout.html:148 +#: cps/templates/layout.html:131 msgid "Discover" msgstr "发现" -#: cps/templates/layout.html:151 +#: cps/templates/layout.html:134 msgid "Categories" msgstr "分类" -#: cps/templates/layout.html:158 cps/templates/search_form.html:58 +#: cps/templates/layout.html:141 cps/templates/search_form.html:58 msgid "Languages" msgstr "语言" -#: cps/templates/layout.html:161 +#: cps/templates/layout.html:144 msgid "Public Shelves" msgstr "公开书架" -#: cps/templates/layout.html:165 +#: cps/templates/layout.html:148 msgid "Your Shelves" msgstr "您的书架" -#: cps/templates/layout.html:170 +#: cps/templates/layout.html:153 msgid "Create a Shelf" msgstr "创建书架" -#: cps/templates/layout.html:171 +#: cps/templates/layout.html:154 msgid "About" msgstr "关于" +#: cps/templates/layout.html:168 +msgid "Previous" +msgstr "" + +#: cps/templates/layout.html:195 +msgid "Book Details" +msgstr "" + #: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" @@ -1202,47 +1226,51 @@ msgstr "按语言显示书籍" msgid "Show all" msgstr "显示全部" -#: cps/templates/user_edit.html:47 +#: cps/templates/user_edit.html:46 +msgid "Show mature content" +msgstr "" + +#: cps/templates/user_edit.html:50 msgid "Show random books" msgstr "显示随机书籍" -#: cps/templates/user_edit.html:51 +#: cps/templates/user_edit.html:54 msgid "Show hot books" msgstr "显示热门书籍" -#: cps/templates/user_edit.html:55 +#: cps/templates/user_edit.html:58 msgid "Show best rated books" msgstr "显示最高评分书籍" -#: cps/templates/user_edit.html:59 +#: cps/templates/user_edit.html:62 msgid "Show language selection" msgstr "显示语言选择" -#: cps/templates/user_edit.html:63 +#: cps/templates/user_edit.html:66 msgid "Show series selection" msgstr "显示丛书选择" -#: cps/templates/user_edit.html:67 +#: cps/templates/user_edit.html:70 msgid "Show category selection" msgstr "显示分类选择" -#: cps/templates/user_edit.html:71 +#: cps/templates/user_edit.html:74 msgid "Show author selection" msgstr "显示作者选择" -#: cps/templates/user_edit.html:75 +#: cps/templates/user_edit.html:78 msgid "Show read and unread" msgstr "显示已读和未读" -#: cps/templates/user_edit.html:79 +#: cps/templates/user_edit.html:82 msgid "Show random books in detail view" msgstr "在详情页显示随机书籍" -#: cps/templates/user_edit.html:120 +#: cps/templates/user_edit.html:123 msgid "Delete this user" msgstr "删除此用户" -#: cps/templates/user_edit.html:135 +#: cps/templates/user_edit.html:138 msgid "Recent Downloads" msgstr "最近下载" diff --git a/messages.pot b/messages.pot index f49b3465..5c9be15f 100644 --- a/messages.pot +++ b/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-08-12 18:19+0200\n" +"POT-Creation-Date: 2017-08-12 18:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -198,7 +198,7 @@ msgstr "" msgid "Read a Book" msgstr "" -#: cps/web.py:1888 cps/web.py:2512 +#: cps/web.py:1888 cps/web.py:2513 msgid "Please fill out all fields!" msgstr "" @@ -253,7 +253,7 @@ msgstr "" msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:2048 cps/web.py:2597 +#: cps/web.py:2048 cps/web.py:2598 msgid "Please configure your kindle email address first..." msgstr "" @@ -313,121 +313,121 @@ msgstr "" msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2325 +#: cps/web.py:2326 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:2327 cps/web.py:2331 +#: cps/web.py:2328 cps/web.py:2332 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2328 +#: cps/web.py:2329 msgid "Profile updated" msgstr "" -#: cps/web.py:2342 +#: cps/web.py:2343 msgid "Admin page" msgstr "" -#: cps/web.py:2466 +#: cps/web.py:2467 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2473 cps/web.py:2479 cps/web.py:2493 +#: cps/web.py:2474 cps/web.py:2480 cps/web.py:2494 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2477 +#: cps/web.py:2478 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2514 cps/web.py:2567 +#: cps/templates/admin.html:34 cps/web.py:2515 cps/web.py:2568 msgid "Add new user" msgstr "" -#: cps/web.py:2559 +#: cps/web.py:2560 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:2563 +#: cps/web.py:2564 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:2585 +#: cps/web.py:2586 msgid "Mail settings updated" msgstr "" -#: cps/web.py:2592 +#: cps/web.py:2593 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2595 +#: cps/web.py:2596 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2599 +#: cps/web.py:2600 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2600 +#: cps/web.py:2601 msgid "Edit mail settings" msgstr "" -#: cps/web.py:2629 +#: cps/web.py:2630 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:2727 +#: cps/web.py:2728 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:2730 +#: cps/web.py:2731 msgid "An unknown error occured." msgstr "" -#: cps/web.py:2733 +#: cps/web.py:2734 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2755 +#: cps/web.py:2756 msgid "Error opening eBook. File does not exist or file is not accessible" msgstr "" -#: cps/web.py:2770 cps/web.py:2953 cps/web.py:3077 +#: cps/web.py:2771 cps/web.py:2954 cps/web.py:3078 msgid "edit metadata" msgstr "" -#: cps/web.py:2782 cps/web.py:2786 +#: cps/web.py:2783 cps/web.py:2787 msgid "unknown" msgstr "" -#: cps/web.py:2971 +#: cps/web.py:2972 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2977 +#: cps/web.py:2978 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:2996 +#: cps/web.py:2997 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:3001 +#: cps/web.py:3002 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:3006 +#: cps/web.py:3007 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" From 29e2658e5369f5a135669b721a8a9ef05a74bb16 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Fri, 28 Jul 2017 21:26:52 -0700 Subject: [PATCH 17/31] Add eslint file Attempts to pattern what has been in use by Codacy. Currently, it eliminates support for IE10 and below, and some aspects of our code eliminate IE11, leaving Edge as the only supported MS browser. I don't think this is intentional. --- .editorconfig | 9 +++++ .eslintrc | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintrc diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..ed5f1fba --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +indent_style = space + +[*.{js,py}] +indent_size = 4 diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..17ae1f3f --- /dev/null +++ b/.eslintrc @@ -0,0 +1,95 @@ +{ + "env": { + "browser": true, + "es6": true, + "jquery": true + }, + "globals": { + "alert": true + }, + "rules": { + "arrow-parens": 2, + "block-scoped-var": 1, + "brace-style": 2, + "camelcase": 1, + "comma-spacing": 2, + "curly": [2, "multi-line", "consistent"], + "eqeqeq": 2, + "indent": [ + 2, + 4, + { + "SwitchCase": 1 + } + ], + "keyword-spacing": 2, + "linebreak-style": 2, + "new-cap": 2, + "no-dupe-args": 2, + "no-dupe-class-members": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-caller": 2, + "no-class-assign": 2, + "no-cond-assign": 2, + "no-const-assign": 2, + "no-console": 2, + "no-debugger": 2, + "no-delete-var": 2, + "no-empty": 2, + "no-eval": 2, + "no-extend-native": 2, + "no-extra-boolean-cast": 2, + "no-extra-semi": 2, + "no-fallthrough": [ + 2, + { + "commentPattern": "break[\\s\\w]*omitted" + } + ], + "no-implied-eval": 2, + "no-invalid-regexp": 2, + "no-irregular-whitespace": 2, + "no-iterator": 2, + "no-loop-func": 2, + "no-mixed-operators": 2, + "no-mixed-spaces-and-tabs": 2, + "no-multi-str": 2, + "no-new": 2, + "no-obj-calls": 2, + "no-octal": 2, + "no-redeclare": 2, + "no-regex-spaces": 2, + "no-script-url": 2, + "no-sparse-arrays": 2, + "no-undef": 2, + "no-undefined": 2, + "no-unreachable": 2, + "no-unsafe-negation": 2, + "no-unused-vars": 2, + "no-use-before-define": [ + 2, + { + "classes": false, + "functions": false + } + ], + "quotes": [ + 2, + "double" + ], + "require-yield": 2, + "semi": [ + 2, + "always" + ], + "space-unary-ops": 2, + "use-isnan": 2, + "valid-typeof": 2, + "wrap-iife": [ + 2, + "any" + ], + "yield-star-spacing": 2 + } +} From 8171943b8ebdc7546aba50c4c1325c729d02ada9 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Sat, 12 Aug 2017 22:24:56 -0700 Subject: [PATCH 18/31] Update to ES5 standards Also fix ESLint issues --- .eslintrc | 3 +- cps/static/js/details.js | 79 ++++++++++++-------- cps/static/js/edit_books.js | 136 ++++++++++++++++++----------------- cps/static/js/get_meta.js | 36 ++++------ cps/static/js/main.js | 112 +++++++++++++++-------------- cps/static/js/shelforder.js | 30 ++++---- cps/templates/book_edit.html | 2 +- cps/templates/detail.html | 12 ++++ 8 files changed, 220 insertions(+), 190 deletions(-) diff --git a/.eslintrc b/.eslintrc index 17ae1f3f..eb405572 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,7 +1,6 @@ { "env": { "browser": true, - "es6": true, "jquery": true }, "globals": { @@ -83,6 +82,8 @@ 2, "always" ], + "space-before-blocks": 2, + "space-infix-ops": 2, "space-unary-ops": 2, "use-isnan": 2, "valid-typeof": 2, diff --git a/cps/static/js/details.js b/cps/static/js/details.js index 74dbb08e..33335339 100644 --- a/cps/static/js/details.js +++ b/cps/static/js/details.js @@ -1,4 +1,6 @@ -$( document ).ready(function() { +/* global _ */ + +$(function() { $("#have_read_form").ajaxForm(); }); @@ -6,34 +8,51 @@ $("#have_read_cb").on("change", function() { $(this).closest("form").submit(); }); -$("#shelf-actions").on("click", "[data-shelf-action]", function (e) { - e.preventDefault(); +(function() { + var templates = { + add: _.template( + $("#template-shelf-add").html() + ), + remove: _.template( + $("#template-shelf-remove").html() + ) + }; - $.get(this.href) - .done(() => { - const $this = $(this); - switch ($this.data("shelf-action")) { - case "add": - $("#remove-from-shelves").append(` ${this.textContent}`); - break; - case "remove": - $("#add-to-shelves").append(`
  • ${this.textContent}
  • `); - break; - } - this.parentNode.removeChild(this); - }) - .fail((xhr) => { - const $msg = $("", { "class": "text-danger"}).text(xhr.responseText); - $("#shelf-action-status").html($msg); + $("#shelf-actions").on("click", "[data-shelf-action]", function (e) { + e.preventDefault(); - setTimeout(() => { - $msg.remove(); - }, 10000); - }); -}); \ No newline at end of file + $.get(this.href) + .done(function() { + var $this = $(this); + switch ($this.data("shelf-action")) { + case "add": + $("#remove-from-shelves").append( + templates.remove({ + add: this.href, + remove: $this.data("remove-href"), + content: this.textContent + }) + ); + break; + case "remove": + $("#add-to-shelves").append( + templates.add({ + add: $this.data("add-href"), + remove: this.href, + content: this.textContent + }) + ); + break; + } + this.parentNode.removeChild(this); + }.bind(this)) + .fail(function(xhr) { + var $msg = $("", { "class": "text-danger"}).text(xhr.responseText); + $("#shelf-action-status").html($msg); + + setTimeout(function() { + $msg.remove(); + }, 10000); + }); + }); +})(); diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index 5438e7b0..bb9e1040 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -32,7 +32,7 @@ Takes a prefix, query typeahead callback, Bloodhound typeahead adapter and returns the completions it gets from the bloodhound engine prefixed. */ function prefixedSource(prefix, query, cb, bhAdapter) { - bhAdapter(query, function(retArray){ + bhAdapter(query, function(retArray) { var matches = []; for (var i = 0; i < retArray.length; i++) { var obj = {name : prefix + retArray[i].name}; @@ -41,7 +41,7 @@ function prefixedSource(prefix, query, cb, bhAdapter) { cb(matches); }); } -function getPath(){ +function getPath() { var jsFileLocation = $("script[src*=edit_books]").attr("src"); // the js file path jsFileLocation = jsFileLocation.replace("/static/js/edit_books.js", ""); // the js folder path return jsFileLocation; @@ -49,7 +49,7 @@ function getPath(){ var authors = new Bloodhound({ name: "authors", - datumTokenizer(datum) { + datumTokenizer: function datumTokenizer(datum) { return [datum.name]; }, queryTokenizer: Bloodhound.tokenizers.whitespace, @@ -60,15 +60,15 @@ var authors = new Bloodhound({ var series = new Bloodhound({ name: "series", - datumTokenizer(datum) { + datumTokenizer: function datumTokenizer(datum) { return [datum.name]; }, - queryTokenizer(query) { + queryTokenizer: function queryTokenizer(query) { return [query]; }, remote: { url: getPath()+"/get_series_json?q=", - replace(url, query) { + replace: function replace(url, query) { return url+encodeURIComponent(query); } } @@ -77,10 +77,10 @@ var series = new Bloodhound({ var tags = new Bloodhound({ name: "tags", - datumTokenizer(datum) { + datumTokenizer: function datumTokenizer(datum) { return [datum.name]; }, - queryTokenizer(query) { + queryTokenizer: function queryTokenizer(query) { var tokens = query.split(","); tokens = [tokens[tokens.length-1].trim()]; return tokens; @@ -92,15 +92,15 @@ var tags = new Bloodhound({ var languages = new Bloodhound({ name: "languages", - datumTokenizer(datum) { + datumTokenizer: function datumTokenizer(datum) { return [datum.name]; }, - queryTokenizer(query) { + queryTokenizer: function queryTokenizer(query) { return [query]; }, remote: { url: getPath()+"/get_languages_json?q=", - replace(url, query) { + replace: function replace(url, query) { return url+encodeURIComponent(query); } } @@ -115,9 +115,9 @@ function sourceSplit(query, cb, split, source) { tokens.splice(tokens.length-1, 1); // remove last element var prefix = ""; var newSplit; - if (split === "&"){ + if (split === "&") { newSplit = " " + split + " "; - }else{ + } else { newSplit = split + " "; } for (var i = 0; i < tokens.length; i++) { @@ -127,76 +127,78 @@ function sourceSplit(query, cb, split, source) { } var promiseAuthors = authors.initialize(); - promiseAuthors.done(function(){ +promiseAuthors.done(function() { $("#bookAuthor").typeahead( - { - highlight: true, minLength: 1, - hint: true - }, { - name: "authors", - displayKey: "name", - source(query, cb){ - return sourceSplit(query, cb, "&", authors); //sourceSplit //("&") + { + highlight: true, minLength: 1, + hint: true + }, { + name: "authors", + displayKey: "name", + source: function source(query, cb) { + return sourceSplit(query, cb, "&", authors); //sourceSplit //("&") } - }); + } + ); }); var promiseSeries = series.initialize(); - promiseSeries.done(function(){ +promiseSeries.done(function() { $("#series").typeahead( - { - highlight: true, minLength: 0, - hint: true - }, { - name: "series", - displayKey: "name", - source: series.ttAdapter() - } + { + highlight: true, minLength: 0, + hint: true + }, { + name: "series", + displayKey: "name", + source: series.ttAdapter() + } ); }); var promiseTags = tags.initialize(); - promiseTags.done(function(){ +promiseTags.done(function() { $("#tags").typeahead( - { - highlight: true, minLength: 0, - hint: true - }, { - name: "tags", - displayKey: "name", - source(query, cb){ - return sourceSplit(query, cb, ",", tags); - } - }); - }); + { + highlight: true, minLength: 0, + hint: true + }, { + name: "tags", + displayKey: "name", + source: function source(query, cb) { + return sourceSplit(query, cb, ",", tags); + } + } + ); +}); var promiseLanguages = languages.initialize(); - promiseLanguages.done(function(){ +promiseLanguages.done(function() { $("#languages").typeahead( - { - highlight: true, minLength: 0, - hint: true - }, { - name: "languages", - displayKey: "name", - source(query, cb){ - return sourceSplit(query, cb, ",", languages); //(",") - } - }); - }); + { + highlight: true, minLength: 0, + hint: true + }, { + name: "languages", + displayKey: "name", + source: function source(query, cb) { + return sourceSplit(query, cb, ",", languages); //(",") + } + } + ); +}); -$("#search").on("change input.typeahead:selected", function(){ +$("#search").on("change input.typeahead:selected", function() { var form = $("form").serialize(); $.getJSON( getPath()+"/get_matching_tags", form, function( data ) { - $(".tags_click").each(function() { - if ($.inArray(parseInt($(this).children("input").first().val(), 10), data.tags) === -1 ) { - if (!($(this).hasClass("active"))) { - $(this).addClass("disabled"); - } - } - else { - $(this).removeClass("disabled"); - } - }); + $(".tags_click").each(function() { + if ($.inArray(parseInt($(this).children("input").first().val(), 10), data.tags) === -1 ) { + if (!($(this).hasClass("active"))) { + $(this).addClass("disabled"); + } + } else { + $(this).removeClass("disabled"); + } + }); }); }); diff --git a/cps/static/js/get_meta.js b/cps/static/js/get_meta.js index 829c36b1..c4b552b3 100644 --- a/cps/static/js/get_meta.js +++ b/cps/static/js/get_meta.js @@ -8,7 +8,7 @@ var dbResults = []; var ggResults = []; -$(document).ready(function () { +$(function () { var msg = i18nMsg; var douban = "https://api.douban.com"; var dbSearch = "/v2/book/search"; @@ -22,9 +22,6 @@ $(document).ready(function () { var ggDone = false; var showFlag = 0; - String.prototype.replaceAll = function (s1, s2) { - return this.replace(new RegExp(s1, "gm"), s2); - }; function showResult () { var book; @@ -32,11 +29,11 @@ $(document).ready(function () { var bookHtml; showFlag++; if (showFlag === 1) { - $("#metaModal #meta-info").html("
      "); + $("#meta-info").html("
        "); } if (ggDone && dbDone) { if (!ggResults && !dbResults) { - $("#metaModal #meta-info").html("

        "+ msg.no_result +"

        "); + $("#meta-info").html("

        "+ msg.no_result +"

        "); return; } } @@ -62,7 +59,7 @@ $(document).ready(function () { "

        "+ msg.source + ":Google Books

        " + "
        " + ""; - $("#metaModal #book-list").append(bookHtml); + $("#book-list").append(bookHtml); } ggDone = false; } @@ -82,24 +79,22 @@ $(document).ready(function () { "

        " + msg.source + ":Douban Books

        " + "
        " + ""; - $("#metaModal #book-list").append(bookHtml); + $("#book-list").append(bookHtml); } dbDone = false; } } function ggSearchBook (title) { - title = title.replaceAll(/\s+/, "+"); - var url = google + ggSearch + "?q=" + title; $.ajax({ - url, + url: google + ggSearch + "?q=" + title.replace(/\s+/gm, "+"), type: "GET", dataType: "jsonp", jsonp: "callback", - success (data) { + success: function success(data) { ggResults = data.items; }, - complete () { + complete: function complete() { ggDone = true; showResult(); } @@ -107,19 +102,18 @@ $(document).ready(function () { } function dbSearchBook (title) { - var url = douban + dbSearch + "?q=" + title + "&fields=all&count=10"; $.ajax({ - url, + url: douban + dbSearch + "?q=" + title + "&fields=all&count=10", type: "GET", dataType: "jsonp", jsonp: "callback", - success (data) { + success: function success(data) { dbResults = data.books; }, - error () { - $("#metaModal #meta-info").html("

        "+ msg.search_error+"!

        "); + error: function error() { + $("#meta-info").html("

        "+ msg.search_error+"!

        "); }, - complete () { + complete: function complete() { dbDone = true; showResult(); } @@ -128,7 +122,7 @@ $(document).ready(function () { function doSearch (keyword) { showFlag = 0; - $("#metaModal #meta-info").text(msg.loading); + $("#meta-info").text(msg.loading); // var keyword = $("#keyword").val(); if (keyword) { dbSearchBook(keyword); @@ -153,6 +147,7 @@ $(document).ready(function () { }); +// eslint-disable-next-line no-unused-vars function getMeta (source, id) { var meta; var tags; @@ -181,6 +176,5 @@ function getMeta (source, id) { } $("#tags").val(tags); $("#rating").val(Math.round(meta.rating.average / 2)); - return; } } diff --git a/cps/static/js/main.js b/cps/static/js/main.js index 7b7402b2..267c6d97 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -1,7 +1,3 @@ -var displaytext; -var updateTimerID; -var updateText; - // Generic control/related handler to show/hide fields based on a checkbox' value // e.g. // @@ -11,16 +7,18 @@ $(document).on("change", "input[type=\"checkbox\"][data-control]", function () { var name = $this.data("control"); var showOrHide = $this.prop("checked"); - $("[data-related=\""+name+"\"]").each(function () { + $("[data-related=\"" + name + "\"]").each(function () { $(this).toggle(showOrHide); }); }); $(function() { + var updateTimerID; + var updateText; // Allow ajax prefilters to be added/removed dynamically // eslint-disable-next-line new-cap - const preFilters = $.Callbacks(); + var preFilters = $.Callbacks(); $.ajaxPrefilter(preFilters.fire); function restartTimer() { @@ -30,29 +28,29 @@ $(function() { function updateTimer() { $.ajax({ - dataType: "json", - url: window.location.pathname+"/../../get_updater_status", - success(data) { - // console.log(data.status); - $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); - if (data.status >6){ + dataType: "json", + url: window.location.pathname + "/../../get_updater_status", + success: function success(data) { + // console.log(data.status); + $("#Updatecontent").html(updateText[data.status]); + if (data.status > 6) { + clearInterval(updateTimerID); + $("#spinner2").hide(); + $("#updateFinished").removeClass("hidden"); + $("#check_for_update").removeClass("hidden"); + $("#perform_update").addClass("hidden"); + } + }, + error: function error() { + // console.log('Done'); clearInterval(updateTimerID); $("#spinner2").hide(); - $("#UpdateprogressDialog #updateFinished").removeClass("hidden"); + $("#Updatecontent").html(updateText[7]); + $("#updateFinished").removeClass("hidden"); $("#check_for_update").removeClass("hidden"); $("#perform_update").addClass("hidden"); - } - }, - error() { - // 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"); }, - timeout:2000 + timeout: 2000 }); } @@ -70,13 +68,13 @@ $(function() { // selector for the NEXT link (to page 2) itemSelector : ".load-more .book", animate : true, - extraScrollPx: 300, + extraScrollPx: 300 // selector for all items you'll retrieve - }, function(data){ + }, function(data) { $(".load-more .row").isotope( "appended", $(data), null ); }); - $("#sendbtn").click(function(){ + $("#sendbtn").click(function() { var $this = $(this); $this.text("Please wait..."); $this.addClass("disabled"); @@ -84,36 +82,39 @@ $(function() { $("#restart").click(function() { $.ajax({ dataType: "json", - url: window.location.pathname+"/../../shutdown", + url: window.location.pathname + "/../../shutdown", data: {"parameter":0}, - success(data) { + success: function success() { $("#spinner").show(); - displaytext=data.text; - setTimeout(restartTimer, 3000);} + setTimeout(restartTimer, 3000); + } }); }); $("#shutdown").click(function() { $.ajax({ dataType: "json", - url: window.location.pathname+"/../../shutdown", + url: window.location.pathname + "/../../shutdown", data: {"parameter":1}, - success(data) { - return alert(data.text);} + success: function success(data) { + return alert(data.text); + } }); }); $("#check_for_update").click(function() { - var buttonText = $("#check_for_update").html(); - $("#check_for_update").html("..."); + var $this = $(this); + var buttonText = $this.html(); + $this.html("..."); $.ajax({ dataType: "json", - url: window.location.pathname+"/../../get_update_status", - success(data) { - $("#check_for_update").html(buttonText); + url: window.location.pathname + "/../../get_update_status", + success: function success(data) { + $this.html(buttonText); if (data.status === true) { $("#check_for_update").addClass("hidden"); $("#perform_update").removeClass("hidden"); - $("#update_info").removeClass("hidden"); - $("#update_info").find("span").html(data.commit); + $("#update_info") + .removeClass("hidden") + .find("span").html(data.commit); } } }); @@ -121,22 +122,23 @@ $(function() { $("#restart_database").click(function() { $.ajax({ dataType: "json", - url: window.location.pathname+"/../../shutdown", + url: window.location.pathname + "/../../shutdown", data: {"parameter":2} }); }); $("#perform_update").click(function() { $("#spinner2").show(); $.ajax({ - type: "POST", - dataType: "json", - data: { start: "True"}, - url: window.location.pathname+"/../../get_updater_status", - success(data) { - updateText=data.text; - $("#UpdateprogressDialog #Updatecontent").html(updateText[data.status]); - // console.log(data.status); - updateTimerID=setInterval(updateTimer, 2000);} + type: "POST", + dataType: "json", + data: { start: "True"}, + url: window.location.pathname + "/../../get_updater_status", + success: function success(data) { + updateText = data.text; + $("#Updatecontent").html(updateText[data.status]); + // console.log(data.status); + updateTimerID = setInterval(updateTimer, 2000); + } }); }); @@ -144,10 +146,10 @@ $(function() { $("#bookDetailsModal") .on("show.bs.modal", function(e) { - const $modalBody = $(this).find(".modal-body"); + var $modalBody = $(this).find(".modal-body"); // Prevent static assets from loading multiple times - const useCache = (options) => { + var useCache = function(options) { options.async = true; options.cache = true; }; @@ -162,7 +164,7 @@ $(function() { $(this).find(".modal-body").html("..."); }); - $(window).resize(function(event) { + $(window).resize(function() { $(".discover .row").isotope("reLayout"); }); -}); \ No newline at end of file +}); diff --git a/cps/static/js/shelforder.js b/cps/static/js/shelforder.js index 5ae3acbf..36390fb3 100644 --- a/cps/static/js/shelforder.js +++ b/cps/static/js/shelforder.js @@ -1,31 +1,31 @@ /* global Sortable,sortTrue */ -var sortable = Sortable.create(sortTrue, { - group: "sorting", - sort: true +Sortable.create(sortTrue, { + group: "sorting", + sort: true }); -function sendData(path){ +// eslint-disable-next-line no-unused-vars +function sendData(path) { var elements; var counter; var maxElements; - var tmp=[]; + var tmp = []; - elements=Sortable.utils.find(sortTrue,"div"); - maxElements=elements.length; + elements = Sortable.utils.find(sortTrue, "div"); + maxElements = elements.length; var form = document.createElement("form"); form.setAttribute("method", "post"); form.setAttribute("action", path); - - for(counter=0;counter {{_('Are really you sure?')}} -