mirror of
https://github.com/janeczku/calibre-web
synced 2024-11-28 12:30:00 +00:00
Merge remote-tracking branch 'original/Develop' into kobo_book_delete
This commit is contained in:
commit
9804a98af8
@ -30,7 +30,7 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d
|
||||
|
||||
## Quick start
|
||||
|
||||
1. Install dependencies by running `pip install --target vendor -r requirements.txt`.
|
||||
1. Install dependencies by running `pip3 install --target vendor -r requirements.txt`.
|
||||
2. Execute the command: `python cps.py` (or `nohup python cps.py` - recommended if you want to exit the terminal window)
|
||||
3. Point your browser to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog
|
||||
4. Set `Location of Calibre database` to the path of the folder where your Calibre library (metadata.db) lives, push "submit" button\
|
||||
@ -46,7 +46,7 @@ Please note that running the above install command can fail on some versions of
|
||||
|
||||
## Requirements
|
||||
|
||||
Python 2.7+, python 3.x+
|
||||
python 3.x+, (Python 2.7+)
|
||||
|
||||
Optionally, to enable on-the-fly conversion from one ebook format to another when using the send-to-kindle feature, or during editing of ebooks metadata:
|
||||
|
||||
|
@ -532,6 +532,9 @@ def _configuration_update_helper():
|
||||
_config_checkbox_int("config_uploading")
|
||||
_config_checkbox_int("config_anonbrowse")
|
||||
_config_checkbox_int("config_public_reg")
|
||||
_config_checkbox_int("config_kobo_sync")
|
||||
_config_checkbox_int("config_kobo_proxy")
|
||||
|
||||
|
||||
_config_int("config_ebookconverter")
|
||||
_config_string("config_calibre")
|
||||
|
@ -68,6 +68,7 @@ class _Settings(_Base):
|
||||
config_anonbrowse = Column(SmallInteger, default=0)
|
||||
config_public_reg = Column(SmallInteger, default=0)
|
||||
config_remote_login = Column(Boolean, default=False)
|
||||
config_kobo_sync = Column(Boolean, default=False)
|
||||
|
||||
config_default_role = Column(SmallInteger, default=0)
|
||||
config_default_show = Column(SmallInteger, default=38911)
|
||||
@ -89,7 +90,8 @@ class _Settings(_Base):
|
||||
|
||||
config_login_type = Column(Integer, default=0)
|
||||
|
||||
# config_oauth_provider = Column(Integer)
|
||||
config_kobo_proxy = Column(Boolean, default=False)
|
||||
|
||||
|
||||
config_ldap_provider_url = Column(String, default='localhost')
|
||||
config_ldap_port = Column(SmallInteger, default=389)
|
||||
|
@ -126,7 +126,7 @@ def selected_roles(dictionary):
|
||||
BookMeta = namedtuple('BookMeta', 'file_path, extension, title, author, cover, description, tags, series, '
|
||||
'series_id, languages')
|
||||
|
||||
STABLE_VERSION = {'version': '0.6.5 Beta'}
|
||||
STABLE_VERSION = {'version': '0.6.6 Beta'}
|
||||
|
||||
NIGHTLY_VERSION = {}
|
||||
NIGHTLY_VERSION[0] = '$Format:%H$'
|
||||
|
199
cps/kobo.py
199
cps/kobo.py
@ -19,7 +19,6 @@
|
||||
|
||||
import sys
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from time import gmtime, strftime
|
||||
|
||||
try:
|
||||
@ -32,9 +31,10 @@ from flask import (
|
||||
request,
|
||||
make_response,
|
||||
jsonify,
|
||||
json,
|
||||
current_app,
|
||||
url_for,
|
||||
redirect,
|
||||
abort
|
||||
)
|
||||
from flask_login import login_required, current_user
|
||||
from werkzeug.datastructures import Headers
|
||||
@ -46,7 +46,7 @@ from . import config, logger, kobo_auth, db, helper, ub
|
||||
from .services import SyncToken as SyncToken
|
||||
from .web import download_required
|
||||
|
||||
KOBO_FORMATS = {"KEPUB": ["KEPUB"], "EPUB": ["EPUB", "EPUB3"]}
|
||||
KOBO_FORMATS = {"KEPUB": ["KEPUB"], "EPUB": ["EPUB3", "EPUB"]}
|
||||
KOBO_STOREAPI_URL = "https://storeapi.kobo.com"
|
||||
|
||||
kobo = Blueprint("kobo", __name__, url_prefix="/kobo/<auth_token>")
|
||||
@ -74,9 +74,11 @@ CONNECTION_SPECIFIC_HEADERS = [
|
||||
|
||||
|
||||
def redirect_or_proxy_request():
|
||||
if config.config_kobo_proxy:
|
||||
if request.method == "GET":
|
||||
return redirect(get_store_url_for_current_request(), 307)
|
||||
if request.method == "DELETE":
|
||||
log.info('Delete Book')
|
||||
return make_response(jsonify({}))
|
||||
else:
|
||||
# The Kobo device turns other request types into GET requests on redirects, so we instead proxy to the Kobo store ourselves.
|
||||
@ -97,7 +99,8 @@ def redirect_or_proxy_request():
|
||||
return make_response(
|
||||
store_response.content, store_response.status_code, response_headers.items()
|
||||
)
|
||||
|
||||
else:
|
||||
return make_response(jsonify({}))
|
||||
|
||||
@kobo.route("/v1/library/sync")
|
||||
@login_required
|
||||
@ -105,6 +108,8 @@ def redirect_or_proxy_request():
|
||||
def HandleSyncRequest():
|
||||
sync_token = SyncToken.SyncToken.from_headers(request.headers)
|
||||
log.info("Kobo library sync request received.")
|
||||
if not current_app.wsgi_app.is_proxied:
|
||||
log.debug('Kobo: Received unproxied request, changed request port to server port')
|
||||
|
||||
# TODO: Limit the number of books return per sync call, and rely on the sync-continuatation header
|
||||
# instead so that the device triggers another sync.
|
||||
@ -149,6 +154,7 @@ def HandleSyncRequest():
|
||||
.filter(db.Data.format.in_(KOBO_FORMATS))
|
||||
.all()
|
||||
)
|
||||
|
||||
for book in changed_entries:
|
||||
entitlement = {
|
||||
"BookEntitlement": create_book_entitlement(book, archived=(book.id in archived_book_ids)),
|
||||
@ -169,8 +175,12 @@ def HandleSyncRequest():
|
||||
sync_token.books_last_modified = new_books_last_modified
|
||||
sync_token.archive_last_modified = new_archived_last_modified
|
||||
|
||||
if config.config_kobo_proxy:
|
||||
return generate_sync_response(request, sync_token, entitlements)
|
||||
|
||||
return make_response(jsonify(entitlements))
|
||||
# Missing feature: Detect server-side book deletions.
|
||||
|
||||
|
||||
def generate_sync_response(request, sync_token, entitlements):
|
||||
# We first merge in sync results from the official Kobo store.
|
||||
@ -210,6 +220,8 @@ def generate_sync_response(request, sync_token, entitlements):
|
||||
@login_required
|
||||
@download_required
|
||||
def HandleMetadataRequest(book_uuid):
|
||||
if not current_app.wsgi_app.is_proxied:
|
||||
log.debug('Kobo: Received unproxied request, changed request port to server port')
|
||||
log.info("Kobo library metadata request received for book %s" % book_uuid)
|
||||
book = db.session.query(db.Books).filter(db.Books.uuid == book_uuid).first()
|
||||
if not book or not book.data:
|
||||
@ -221,6 +233,15 @@ def HandleMetadataRequest(book_uuid):
|
||||
|
||||
|
||||
def get_download_url_for_book(book, book_format):
|
||||
if not current_app.wsgi_app.is_proxied:
|
||||
return "{url_scheme}://{url_base}:{url_port}/download/{book_id}/{book_format}".format(
|
||||
url_scheme=request.environ['wsgi.url_scheme'],
|
||||
url_base=request.environ['SERVER_NAME'],
|
||||
url_port=config.config_port,
|
||||
book_id=book.id,
|
||||
book_format=book_format.lower()
|
||||
)
|
||||
else:
|
||||
return url_for(
|
||||
"web.download_link",
|
||||
book_id=book.id,
|
||||
@ -278,11 +299,11 @@ def get_series(book):
|
||||
|
||||
def get_metadata(book):
|
||||
download_urls = []
|
||||
|
||||
for book_data in book.data:
|
||||
if book_data.format not in KOBO_FORMATS:
|
||||
continue
|
||||
for kobo_format in KOBO_FORMATS[book_data.format]:
|
||||
# log.debug('Id: %s, Format: %s' % (book.id, kobo_format))
|
||||
download_urls.append(
|
||||
{
|
||||
"Format": kobo_format,
|
||||
@ -356,7 +377,10 @@ def HandleCoverImageRequest(book_uuid):
|
||||
book_uuid, use_generic_cover_on_failure=False
|
||||
)
|
||||
if not book_cover:
|
||||
if config.config_kobo_proxy:
|
||||
return redirect(get_store_url_for_current_request(), 307)
|
||||
else:
|
||||
abort(404)
|
||||
return book_cover
|
||||
|
||||
|
||||
@ -397,19 +421,41 @@ def HandleBookDeletionRequest(book_uuid):
|
||||
@kobo.route("/v1/library/tags/<shelf_name>", methods=["POST"])
|
||||
@kobo.route("/v1/library/tags/<tag_id>", methods=["DELETE"])
|
||||
def HandleUnimplementedRequest(book_uuid=None, shelf_name=None, tag_id=None):
|
||||
log.debug("Alternative Request received:")
|
||||
return redirect_or_proxy_request()
|
||||
|
||||
|
||||
# TODO: Implement the following routes
|
||||
@kobo.route("/v1/user/loyalty/<dummy>", methods=["GET", "POST"])
|
||||
@kobo.route("/v1/user/profile", methods=["GET", "POST"])
|
||||
@kobo.route("/v1/user/wishlist", methods=["GET", "POST"])
|
||||
@kobo.route("/v1/user/recommendations", methods=["GET", "POST"])
|
||||
@kobo.route("/v1/analytics/<dummy>", methods=["GET", "POST"])
|
||||
def HandleUserRequest(dummy=None):
|
||||
log.debug("Unimplemented Request received: %s", request.base_url)
|
||||
return redirect_or_proxy_request()
|
||||
|
||||
@kobo.app_errorhandler(404)
|
||||
def handle_404(err):
|
||||
# This handler acts as a catch-all for endpoints that we don't have an interest in
|
||||
# implementing (e.g: v1/analytics/gettests, v1/user/recommendations, etc)
|
||||
log.debug("Unknown Request received: %s", request.base_url)
|
||||
return redirect_or_proxy_request()
|
||||
|
||||
|
||||
@kobo.route("/v1/initialization")
|
||||
@login_required
|
||||
def HandleInitRequest():
|
||||
if not current_app.wsgi_app.is_proxied:
|
||||
log.debug('Kobo: Received unproxied request, changed request port to server port')
|
||||
calibre_web_url = "{url_scheme}://{url_base}:{url_port}".format(
|
||||
url_scheme=request.environ['wsgi.url_scheme'],
|
||||
url_base=request.environ['SERVER_NAME'],
|
||||
url_port=config.config_port
|
||||
)
|
||||
else:
|
||||
calibre_web_url = url_for("web.index", _external=True).strip("/")
|
||||
if config.config_kobo_proxy:
|
||||
outgoing_headers = Headers(request.headers)
|
||||
outgoing_headers.remove("Host")
|
||||
store_response = requests.request(
|
||||
@ -422,14 +468,149 @@ def HandleInitRequest():
|
||||
store_response_json = store_response.json()
|
||||
if "Resources" in store_response_json:
|
||||
kobo_resources = store_response_json["Resources"]
|
||||
|
||||
calibre_web_url = url_for("web.index", _external=True).strip("/")
|
||||
# calibre_web_url = url_for("web.index", _external=True).strip("/")
|
||||
kobo_resources["image_host"] = calibre_web_url
|
||||
kobo_resources["image_url_quality_template"] = unquote(url_for("kobo.HandleCoverImageRequest", _external=True,
|
||||
kobo_resources["image_url_quality_template"] = unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest",
|
||||
auth_token = kobo_auth.get_auth_token(),
|
||||
book_uuid="{ImageId}"))
|
||||
kobo_resources["image_url_template"] = unquote(url_for("kobo.HandleCoverImageRequest", _external=True,
|
||||
kobo_resources["image_url_template"] = unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest",
|
||||
auth_token = kobo_auth.get_auth_token(),
|
||||
book_uuid="{ImageId}"))
|
||||
|
||||
return make_response(store_response_json, store_response.status_code)
|
||||
else:
|
||||
resources = NATIVE_KOBO_RESOURCES(calibre_web_url)
|
||||
response = make_response(jsonify({"Resources": resources}))
|
||||
response.headers["x-kobo-apitoken"] = "e30="
|
||||
return response
|
||||
|
||||
def NATIVE_KOBO_RESOURCES(calibre_web_url):
|
||||
return {
|
||||
"account_page": "https://secure.kobobooks.com/profile",
|
||||
"account_page_rakuten": "https://my.rakuten.co.jp/",
|
||||
"add_entitlement": "https://storeapi.kobo.com/v1/library/{RevisionIds}",
|
||||
"affiliaterequest": "https://storeapi.kobo.com/v1/affiliate",
|
||||
"audiobook_subscription_orange_deal_inclusion_url": "https://authorize.kobo.com/inclusion",
|
||||
"authorproduct_recommendations": "https://storeapi.kobo.com/v1/products/books/authors/recommendations",
|
||||
"autocomplete": "https://storeapi.kobo.com/v1/products/autocomplete",
|
||||
"blackstone_header": {"key": "x-amz-request-payer", "value": "requester"},
|
||||
"book": "https://storeapi.kobo.com/v1/products/books/{ProductId}",
|
||||
"book_detail_page": "https://store.kobobooks.com/{culture}/ebook/{slug}",
|
||||
"book_detail_page_rakuten": "http://books.rakuten.co.jp/rk/{crossrevisionid}",
|
||||
"book_landing_page": "https://store.kobobooks.com/ebooks",
|
||||
"book_subscription": "https://storeapi.kobo.com/v1/products/books/subscriptions",
|
||||
"categories": "https://storeapi.kobo.com/v1/categories",
|
||||
"categories_page": "https://store.kobobooks.com/ebooks/categories",
|
||||
"category": "https://storeapi.kobo.com/v1/categories/{CategoryId}",
|
||||
"category_featured_lists": "https://storeapi.kobo.com/v1/categories/{CategoryId}/featured",
|
||||
"category_products": "https://storeapi.kobo.com/v1/categories/{CategoryId}/products",
|
||||
"checkout_borrowed_book": "https://storeapi.kobo.com/v1/library/borrow",
|
||||
"configuration_data": "https://storeapi.kobo.com/v1/configuration",
|
||||
"content_access_book": "https://storeapi.kobo.com/v1/products/books/{ProductId}/access",
|
||||
"customer_care_live_chat": "https://v2.zopim.com/widget/livechat.html?key=Y6gwUmnu4OATxN3Tli4Av9bYN319BTdO",
|
||||
"daily_deal": "https://storeapi.kobo.com/v1/products/dailydeal",
|
||||
"deals": "https://storeapi.kobo.com/v1/deals",
|
||||
"delete_entitlement": "https://storeapi.kobo.com/v1/library/{Ids}",
|
||||
"delete_tag": "https://storeapi.kobo.com/v1/library/tags/{TagId}",
|
||||
"delete_tag_items": "https://storeapi.kobo.com/v1/library/tags/{TagId}/items/delete",
|
||||
"device_auth": "https://storeapi.kobo.com/v1/auth/device",
|
||||
"device_refresh": "https://storeapi.kobo.com/v1/auth/refresh",
|
||||
"dictionary_host": "https://kbdownload1-a.akamaihd.net",
|
||||
"discovery_host": "https://discovery.kobobooks.com",
|
||||
"eula_page": "https://www.kobo.com/termsofuse?style=onestore",
|
||||
"exchange_auth": "https://storeapi.kobo.com/v1/auth/exchange",
|
||||
"external_book": "https://storeapi.kobo.com/v1/products/books/external/{Ids}",
|
||||
"facebook_sso_page": "https://authorize.kobo.com/signin/provider/Facebook/login?returnUrl=http://store.kobobooks.com/",
|
||||
"featured_list": "https://storeapi.kobo.com/v1/products/featured/{FeaturedListId}",
|
||||
"featured_lists": "https://storeapi.kobo.com/v1/products/featured",
|
||||
"free_books_page": {
|
||||
"EN": "https://www.kobo.com/{region}/{language}/p/free-ebooks",
|
||||
"FR": "https://www.kobo.com/{region}/{language}/p/livres-gratuits",
|
||||
"IT": "https://www.kobo.com/{region}/{language}/p/libri-gratuiti",
|
||||
"NL": "https://www.kobo.com/{region}/{language}/List/bekijk-het-overzicht-van-gratis-ebooks/QpkkVWnUw8sxmgjSlCbJRg",
|
||||
"PT": "https://www.kobo.com/{region}/{language}/p/livros-gratis",
|
||||
},
|
||||
"fte_feedback": "https://storeapi.kobo.com/v1/products/ftefeedback",
|
||||
"get_tests_request": "https://storeapi.kobo.com/v1/analytics/gettests",
|
||||
"giftcard_epd_redeem_url": "https://www.kobo.com/{storefront}/{language}/redeem-ereader",
|
||||
"giftcard_redeem_url": "https://www.kobo.com/{storefront}/{language}/redeem",
|
||||
"help_page": "http://www.kobo.com/help",
|
||||
"image_host": calibre_web_url,
|
||||
"image_url_quality_template": unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest",
|
||||
auth_token = kobo_auth.get_auth_token(),
|
||||
book_uuid="{ImageId}")),
|
||||
"image_url_template": unquote(calibre_web_url + url_for("kobo.HandleCoverImageRequest",
|
||||
auth_token = kobo_auth.get_auth_token(),
|
||||
book_uuid="{ImageId}")),
|
||||
"kobo_audiobooks_enabled": "False",
|
||||
"kobo_audiobooks_orange_deal_enabled": "False",
|
||||
"kobo_audiobooks_subscriptions_enabled": "False",
|
||||
"kobo_nativeborrow_enabled": "True",
|
||||
"kobo_onestorelibrary_enabled": "False",
|
||||
"kobo_redeem_enabled": "True",
|
||||
"kobo_shelfie_enabled": "False",
|
||||
"kobo_subscriptions_enabled": "False",
|
||||
"kobo_superpoints_enabled": "False",
|
||||
"kobo_wishlist_enabled": "True",
|
||||
"library_book": "https://storeapi.kobo.com/v1/user/library/books/{LibraryItemId}",
|
||||
"library_items": "https://storeapi.kobo.com/v1/user/library",
|
||||
"library_metadata": "https://storeapi.kobo.com/v1/library/{Ids}/metadata",
|
||||
"library_prices": "https://storeapi.kobo.com/v1/user/library/previews/prices",
|
||||
"library_stack": "https://storeapi.kobo.com/v1/user/library/stacks/{LibraryItemId}",
|
||||
"library_sync": "https://storeapi.kobo.com/v1/library/sync",
|
||||
"love_dashboard_page": "https://store.kobobooks.com/{culture}/kobosuperpoints",
|
||||
"love_points_redemption_page": "https://store.kobobooks.com/{culture}/KoboSuperPointsRedemption?productId={ProductId}",
|
||||
"magazine_landing_page": "https://store.kobobooks.com/emagazines",
|
||||
"notifications_registration_issue": "https://storeapi.kobo.com/v1/notifications/registration",
|
||||
"oauth_host": "https://oauth.kobo.com",
|
||||
"overdrive_account": "https://auth.overdrive.com/account",
|
||||
"overdrive_library": "https://{libraryKey}.auth.overdrive.com/library",
|
||||
"overdrive_library_finder_host": "https://libraryfinder.api.overdrive.com",
|
||||
"overdrive_thunder_host": "https://thunder.api.overdrive.com",
|
||||
"password_retrieval_page": "https://www.kobobooks.com/passwordretrieval.html",
|
||||
"post_analytics_event": "https://storeapi.kobo.com/v1/analytics/event",
|
||||
"privacy_page": "https://www.kobo.com/privacypolicy?style=onestore",
|
||||
"product_nextread": "https://storeapi.kobo.com/v1/products/{ProductIds}/nextread",
|
||||
"product_prices": "https://storeapi.kobo.com/v1/products/{ProductIds}/prices",
|
||||
"product_recommendations": "https://storeapi.kobo.com/v1/products/{ProductId}/recommendations",
|
||||
"product_reviews": "https://storeapi.kobo.com/v1/products/{ProductIds}/reviews",
|
||||
"products": "https://storeapi.kobo.com/v1/products",
|
||||
"provider_external_sign_in_page": "https://authorize.kobo.com/ExternalSignIn/{providerName}?returnUrl=http://store.kobobooks.com/",
|
||||
"purchase_buy": "https://www.kobo.com/checkout/createpurchase/",
|
||||
"purchase_buy_templated": "https://www.kobo.com/{culture}/checkout/createpurchase/{ProductId}",
|
||||
"quickbuy_checkout": "https://storeapi.kobo.com/v1/store/quickbuy/{PurchaseId}/checkout",
|
||||
"quickbuy_create": "https://storeapi.kobo.com/v1/store/quickbuy/purchase",
|
||||
"rating": "https://storeapi.kobo.com/v1/products/{ProductId}/rating/{Rating}",
|
||||
"reading_state": "https://storeapi.kobo.com/v1/library/{Ids}/state",
|
||||
"redeem_interstitial_page": "https://store.kobobooks.com",
|
||||
"registration_page": "https://authorize.kobo.com/signup?returnUrl=http://store.kobobooks.com/",
|
||||
"related_items": "https://storeapi.kobo.com/v1/products/{Id}/related",
|
||||
"remaining_book_series": "https://storeapi.kobo.com/v1/products/books/series/{SeriesId}",
|
||||
"rename_tag": "https://storeapi.kobo.com/v1/library/tags/{TagId}",
|
||||
"review": "https://storeapi.kobo.com/v1/products/reviews/{ReviewId}",
|
||||
"review_sentiment": "https://storeapi.kobo.com/v1/products/reviews/{ReviewId}/sentiment/{Sentiment}",
|
||||
"shelfie_recommendations": "https://storeapi.kobo.com/v1/user/recommendations/shelfie",
|
||||
"sign_in_page": "https://authorize.kobo.com/signin?returnUrl=http://store.kobobooks.com/",
|
||||
"social_authorization_host": "https://social.kobobooks.com:8443",
|
||||
"social_host": "https://social.kobobooks.com",
|
||||
"stacks_host_productId": "https://store.kobobooks.com/collections/byproductid/",
|
||||
"store_home": "www.kobo.com/{region}/{language}",
|
||||
"store_host": "store.kobobooks.com",
|
||||
"store_newreleases": "https://store.kobobooks.com/{culture}/List/new-releases/961XUjtsU0qxkFItWOutGA",
|
||||
"store_search": "https://store.kobobooks.com/{culture}/Search?Query={query}",
|
||||
"store_top50": "https://store.kobobooks.com/{culture}/ebooks/Top",
|
||||
"tag_items": "https://storeapi.kobo.com/v1/library/tags/{TagId}/Items",
|
||||
"tags": "https://storeapi.kobo.com/v1/library/tags",
|
||||
"taste_profile": "https://storeapi.kobo.com/v1/products/tasteprofile",
|
||||
"update_accessibility_to_preview": "https://storeapi.kobo.com/v1/library/{EntitlementIds}/preview",
|
||||
"use_one_store": "False",
|
||||
"user_loyalty_benefits": "https://storeapi.kobo.com/v1/user/loyalty/benefits",
|
||||
"user_platform": "https://storeapi.kobo.com/v1/user/platform",
|
||||
"user_profile": "https://storeapi.kobo.com/v1/user/profile",
|
||||
"user_ratings": "https://storeapi.kobo.com/v1/user/ratings",
|
||||
"user_recommendations": "https://storeapi.kobo.com/v1/user/recommendations",
|
||||
"user_reviews": "https://storeapi.kobo.com/v1/user/reviews",
|
||||
"user_wishlist": "https://storeapi.kobo.com/v1/user/wishlist",
|
||||
"userguide_host": "https://kbdownload1-a.akamaihd.net",
|
||||
"wishlist_page": "https://store.kobobooks.com/{region}/{language}/account/wishlist",
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ from datetime import datetime
|
||||
from os import urandom
|
||||
|
||||
from flask import g, Blueprint, url_for
|
||||
from flask_login import login_user, current_user, login_required
|
||||
from flask_login import login_user, login_required
|
||||
from flask_babel import gettext as _
|
||||
|
||||
from . import logger, ub, lm
|
||||
@ -102,8 +102,7 @@ def load_user_from_kobo_request(request):
|
||||
login_user(user)
|
||||
return user
|
||||
log.info("Received Kobo request without a recognizable auth token.")
|
||||
return None
|
||||
|
||||
return
|
||||
|
||||
kobo_auth = Blueprint("kobo_auth", __name__, url_prefix="/kobo_auth")
|
||||
|
||||
|
@ -60,10 +60,13 @@ class ReverseProxied(object):
|
||||
|
||||
def __init__(self, application):
|
||||
self.app = application
|
||||
self.proxied = False
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
self.proxied = False
|
||||
script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
|
||||
if script_name:
|
||||
self.proxied = True
|
||||
environ['SCRIPT_NAME'] = script_name
|
||||
path_info = environ.get('PATH_INFO', '')
|
||||
if path_info and path_info.startswith(script_name):
|
||||
@ -76,3 +79,7 @@ class ReverseProxied(object):
|
||||
if servr:
|
||||
environ['HTTP_HOST'] = servr
|
||||
return self.app(environ, start_response)
|
||||
|
||||
@property
|
||||
def is_proxied(self):
|
||||
return self.proxied
|
||||
|
@ -1,6 +1,6 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block body %}
|
||||
<div class="discover">
|
||||
<div class="discover" xmlns:text-indent="http://www.w3.org/1999/xhtml">
|
||||
<h2>{{title}}</h2>
|
||||
<form role="form" method="POST" autocomplete="off">
|
||||
<div class="panel-group">
|
||||
@ -169,6 +169,18 @@
|
||||
<input type="checkbox" id="config_remote_login" name="config_remote_login" {% if config.config_remote_login %}checked{% endif %}>
|
||||
<label for="config_remote_login">{{_('Enable remote login ("magic link")')}}</label>
|
||||
</div>
|
||||
{% if feature_support['kobo'] %}
|
||||
<div class="form-group">
|
||||
<input type="checkbox" id="config_kobo_sync" name="config_kobo_sync" data-control="kobo-settings" {% if config.config_kobo_sync %}checked{% endif %}>
|
||||
<label for="config_kobo_sync">{{_('Enable Kobo sync')}}</label>
|
||||
</div>
|
||||
<div data-related="kobo-settings">
|
||||
<div class="form-group" style="text-indent:10px;">
|
||||
<input type="checkbox" id="config_kobo_proxy" name="config_kobo_proxy" {% if config.config_kobo_proxy %}checked{% endif %}>
|
||||
<label for="config_kobo_proxy">{{_('Proxy unknown requests to Kobo Store')}}</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if feature_support['goodreads'] %}
|
||||
<div class="form-group">
|
||||
<input type="checkbox" id="config_use_goodreads" name="config_use_goodreads" data-control="goodreads-settings" {% if config.config_use_goodreads %}checked{% endif %}>
|
||||
|
@ -26,6 +26,7 @@
|
||||
<label for="kindle_mail">{{_('Kindle E-Mail')}}</label>
|
||||
<input type="email" class="form-control" name="kindle_mail" id="kindle_mail" value="{{ content.kindle_mail if content.kindle_mail != None }}">
|
||||
</div>
|
||||
{% if not content.role_anonymous() %}
|
||||
<div class="form-group">
|
||||
<label for="locale">{{_('Language')}}</label>
|
||||
<select name="locale" id="locale" class="form-control">
|
||||
@ -34,6 +35,8 @@
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="default_language">{{_('Show books with language')}}</label>
|
||||
<select name="default_language" id="default_language" class="form-control">
|
||||
@ -55,7 +58,7 @@
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if feature_support['kobo'] %}
|
||||
{% if feature_support['kobo'] and not new_user %}
|
||||
<label>{{ _('Kobo Sync Token')}}</label>
|
||||
<div class="form-group col">
|
||||
<a class="btn btn-default" id="config_create_kobo_token" data-toggle="modal" data-target="#modal_kobo_token" data-remote="false" href="{{ url_for('kobo_auth.generate_auth_token', user_id=content.id) }}">{{_('Create/View')}}</a>
|
||||
|
65
cps/tess.py
65
cps/tess.py
@ -1,65 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web)
|
||||
# Copyright (C) 2018-2019 OzzieIsaacs
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from subproc_wrapper import process_open, cmdlineCall
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import time
|
||||
|
||||
def main():
|
||||
quotes = [1, 2]
|
||||
format_new_ext = '.mobi'
|
||||
format_old_ext = '.epub'
|
||||
file_path = '/home/matthias/Dokumente/bücher/Bettina Szramah/Die Giftmischerin TCP_IP (10)/Die Giftmischerin TCP_IP - Bettina, Szrama'
|
||||
command = ['/opt/calibre/ebook-convert', (file_path + format_old_ext),
|
||||
(file_path + format_new_ext)]
|
||||
|
||||
#print(command)
|
||||
#p1 = cmdlineCall(command[0],command[1:])
|
||||
#time.sleep(10)
|
||||
#print(p1)
|
||||
|
||||
p = process_open(command, quotes)
|
||||
while p.poll() is None:
|
||||
nextline = p.stdout.readline()
|
||||
if os.name == 'nt' and sys.version_info < (3, 0):
|
||||
nextline = nextline.decode('windows-1252')
|
||||
elif os.name == 'posix' and sys.version_info < (3, 0):
|
||||
nextline = nextline.decode('utf-8')
|
||||
# log.debug(nextline.strip('\r\n'))
|
||||
# parse progress string from calibre-converter
|
||||
progress = re.search(r"(\d+)%\s.*", nextline)
|
||||
if progress:
|
||||
print('Progress:' + str(progress))
|
||||
# self.UIqueue[index]['progress'] = progress.group(1) + ' %
|
||||
|
||||
# process returncode
|
||||
check = p.returncode
|
||||
calibre_traceback = p.stderr.readlines()
|
||||
for ele in calibre_traceback:
|
||||
if sys.version_info < (3, 0):
|
||||
ele = ele.decode('utf-8')
|
||||
print(ele.strip('\n'))
|
||||
if not ele.startswith('Traceback') and not ele.startswith(' File'):
|
||||
print( "Calibre failed with error: %s" % ele.strip('\n'))
|
||||
print(str(check))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Binary file not shown.
@ -6,7 +6,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Calibre-Web\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
|
||||
"POT-Creation-Date: 2020-01-12 13:57+0100\n"
|
||||
"POT-Creation-Date: 2020-01-20 20:31+0100\n"
|
||||
"PO-Revision-Date: 2020-01-08 11:37+0000\n"
|
||||
"Last-Translator: Lukas Heroudek <lukas.heroudek@gmail.com>\n"
|
||||
"Language: cs_CZ\n"
|
||||
@ -59,7 +59,7 @@ msgstr "Konfigurace Calibre-Web aktualizována"
|
||||
msgid "Basic Configuration"
|
||||
msgstr "Základní konfigurace"
|
||||
|
||||
#: cps/admin.py:465 cps/web.py:1093
|
||||
#: cps/admin.py:465 cps/web.py:1090
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "Vyplňte všechna pole!"
|
||||
|
||||
@ -68,7 +68,7 @@ msgstr "Vyplňte všechna pole!"
|
||||
msgid "Add new user"
|
||||
msgstr "Přidat nového uživatele"
|
||||
|
||||
#: cps/admin.py:476 cps/web.py:1318
|
||||
#: cps/admin.py:476 cps/web.py:1315
|
||||
msgid "E-mail is not from valid domain"
|
||||
msgstr "E-mail není z platné domény"
|
||||
|
||||
@ -112,23 +112,23 @@ msgstr "Uživatel '%(nick)s' smazán"
|
||||
msgid "No admin user remaining, can't delete user"
|
||||
msgstr "Nezbývá žádný správce, nemůžete jej odstranit"
|
||||
|
||||
#: cps/admin.py:612 cps/web.py:1359
|
||||
#: cps/admin.py:612 cps/web.py:1356
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr "Byl nalezen existující účet pro tuto e-mailovou adresu."
|
||||
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1334
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1331
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "Upravit uživatele %(nick)s"
|
||||
|
||||
#: cps/admin.py:622 cps/web.py:1327
|
||||
#: cps/admin.py:622 cps/web.py:1324
|
||||
msgid "This username is already taken"
|
||||
msgstr "Toto uživatelské jméno je již použito"
|
||||
|
||||
#: cps/admin.py:637
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr "Uživatel %(nick)s’ aktualizován"
|
||||
msgstr "Uživatel '%(nick)s' aktualizován"
|
||||
|
||||
#: cps/admin.py:640
|
||||
msgid "An unknown error occured."
|
||||
@ -139,11 +139,11 @@ msgstr "Došlo k neznámé chybě."
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr "Heslo pro uživatele %(user)s resetováno"
|
||||
|
||||
#: cps/admin.py:660 cps/web.py:1118 cps/web.py:1174
|
||||
#: cps/admin.py:660 cps/web.py:1115 cps/web.py:1171
|
||||
msgid "An unknown error occurred. Please try again later."
|
||||
msgstr "Neznámá chyba. Opakujte prosím později."
|
||||
|
||||
#: cps/admin.py:663 cps/web.py:1062
|
||||
#: cps/admin.py:663 cps/web.py:1059
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "Nejprve nakonfigurujte nastavení pošty SMTP..."
|
||||
|
||||
@ -241,7 +241,7 @@ msgstr "Obal není v podporovaném formátu (jpg/png/webp), nelze uložit"
|
||||
|
||||
#: cps/editbooks.py:451
|
||||
msgid "Cover is not a jpg file, can't save"
|
||||
msgstr "Obal neni soubor jpg, nelze uložit"
|
||||
msgstr "Obal není soubor jpg, nelze uložit"
|
||||
|
||||
#: cps/editbooks.py:494
|
||||
#, python-format
|
||||
@ -489,7 +489,7 @@ msgstr "Kniha je již součástí police: %(shelfname)s"
|
||||
#: cps/shelf.py:85
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr "Kniha byla přidána do plice: %(sname)s"
|
||||
msgstr "Kniha byla přidána do police: %(sname)s"
|
||||
|
||||
#: cps/shelf.py:104
|
||||
#, python-format
|
||||
@ -591,7 +591,7 @@ msgid "Show best rated books"
|
||||
msgstr "Zobrazit nejlépe hodnocené knihy"
|
||||
|
||||
#: cps/templates/index.xml:46 cps/templates/index.xml:50 cps/ub.py:67
|
||||
#: cps/web.py:1011
|
||||
#: cps/web.py:1009
|
||||
msgid "Read Books"
|
||||
msgstr "Přečtené knihy"
|
||||
|
||||
@ -600,7 +600,7 @@ msgid "Show read and unread"
|
||||
msgstr "Zobrazit prečtené a nepřečtené"
|
||||
|
||||
#: cps/templates/index.xml:53 cps/templates/index.xml:57 cps/ub.py:71
|
||||
#: cps/web.py:1015
|
||||
#: cps/web.py:1013
|
||||
msgid "Unread Books"
|
||||
msgstr "Nepřečtené knihy"
|
||||
|
||||
@ -722,7 +722,7 @@ msgstr "Knihy"
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "Žhavé knihy (nejstahovanější)"
|
||||
|
||||
#: cps/web.py:586 cps/web.py:1382 cps/web.py:1478
|
||||
#: cps/web.py:586 cps/web.py:1379 cps/web.py:1475
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible:"
|
||||
msgstr "Chyba při otevíraní eKnihy. Soubor neexistuje nebo neni přístupný:"
|
||||
|
||||
@ -790,128 +790,128 @@ msgid "Tasks"
|
||||
msgstr "Úlohy"
|
||||
|
||||
#: cps/templates/feed.xml:33 cps/templates/layout.html:44
|
||||
#: cps/templates/layout.html:45 cps/web.py:829 cps/web.py:831
|
||||
#: cps/templates/layout.html:45 cps/web.py:827 cps/web.py:829
|
||||
msgid "Search"
|
||||
msgstr "Hledat"
|
||||
|
||||
#: cps/web.py:881
|
||||
#: cps/web.py:879
|
||||
msgid "Published after "
|
||||
msgstr "Vydáno po "
|
||||
|
||||
#: cps/web.py:888
|
||||
#: cps/web.py:886
|
||||
msgid "Published before "
|
||||
msgstr "Vydáno před "
|
||||
|
||||
#: cps/web.py:902
|
||||
#: cps/web.py:900
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr "Hodnocení <= %(rating)s"
|
||||
|
||||
#: cps/web.py:904
|
||||
#: cps/web.py:902
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr "Hodnocení >= %(rating)s"
|
||||
|
||||
#: cps/web.py:970 cps/web.py:982
|
||||
#: cps/web.py:968 cps/web.py:980
|
||||
msgid "search"
|
||||
msgstr "hledat"
|
||||
|
||||
#: cps/web.py:1067
|
||||
#: cps/web.py:1064
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr "Kniha byla úspěšně zařazena do fronty pro odeslání na %(kindlemail)s"
|
||||
|
||||
#: cps/web.py:1071
|
||||
#: cps/web.py:1068
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
msgstr "Při odesílání této knihy došlo k chybě: %(res)s"
|
||||
|
||||
#: cps/web.py:1073
|
||||
#: cps/web.py:1070
|
||||
msgid "Please configure your kindle e-mail address first..."
|
||||
msgstr "Nejprve nakonfigurujte vaši kindle e-mailovou adresu.."
|
||||
|
||||
#: cps/web.py:1087
|
||||
#: cps/web.py:1084
|
||||
msgid "E-Mail server is not configured, please contact your administrator!"
|
||||
msgstr "E-mailový server není nakonfigurován, kontaktujte svého správce!"
|
||||
|
||||
#: cps/web.py:1088 cps/web.py:1094 cps/web.py:1119 cps/web.py:1123
|
||||
#: cps/web.py:1128 cps/web.py:1132
|
||||
#: cps/web.py:1085 cps/web.py:1091 cps/web.py:1116 cps/web.py:1120
|
||||
#: cps/web.py:1125 cps/web.py:1129
|
||||
msgid "register"
|
||||
msgstr "registrovat"
|
||||
|
||||
#: cps/web.py:1121
|
||||
#: cps/web.py:1118
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr "Váš e-mail nemá povolení k registraci"
|
||||
|
||||
#: cps/web.py:1124
|
||||
#: cps/web.py:1121
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr "Potvrzovací e-mail byl odeslán na váš účet."
|
||||
|
||||
#: cps/web.py:1127
|
||||
#: cps/web.py:1124
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr "Toto uživatelské jméno nebo e-mailová adresa jsou již používány."
|
||||
|
||||
#: cps/web.py:1144
|
||||
#: cps/web.py:1141
|
||||
msgid "Cannot activate LDAP authentication"
|
||||
msgstr "Nelze aktivovat ověření LDAP"
|
||||
|
||||
#: cps/web.py:1154 cps/web.py:1281
|
||||
#: cps/web.py:1151 cps/web.py:1278
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "nyní jste přihlášeni jako: ‘%(nickname)s’"
|
||||
|
||||
#: cps/web.py:1159
|
||||
#: cps/web.py:1156
|
||||
msgid "Could not login. LDAP server down, please contact your administrator"
|
||||
msgstr "Nelze se přihlásit. LDAP server neodpovídá, kontaktujte svého správce"
|
||||
|
||||
#: cps/web.py:1163 cps/web.py:1186
|
||||
#: cps/web.py:1160 cps/web.py:1183
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "Špatné uživatelské jméno nebo heslo"
|
||||
|
||||
#: cps/web.py:1170
|
||||
#: cps/web.py:1167
|
||||
msgid "New Password was send to your email address"
|
||||
msgstr "Nové heslo bylo zasláno na váši emailovou adresu"
|
||||
|
||||
#: cps/web.py:1176
|
||||
#: cps/web.py:1173
|
||||
msgid "Please enter valid username to reset password"
|
||||
msgstr "Zadejte platné uživatelské jméno pro obnovení hesla"
|
||||
|
||||
#: cps/web.py:1182
|
||||
#: cps/web.py:1179
|
||||
#, python-format
|
||||
msgid "You are now logged in as: '%(nickname)s'"
|
||||
msgstr "Nyní jste přihlášeni jako: '%(nickname)s'"
|
||||
|
||||
#: cps/web.py:1189 cps/web.py:1213
|
||||
#: cps/web.py:1186 cps/web.py:1210
|
||||
msgid "login"
|
||||
msgstr "přihlásit se"
|
||||
|
||||
#: cps/web.py:1225 cps/web.py:1259
|
||||
#: cps/web.py:1222 cps/web.py:1256
|
||||
msgid "Token not found"
|
||||
msgstr "Token nenalezen"
|
||||
|
||||
#: cps/web.py:1234 cps/web.py:1267
|
||||
#: cps/web.py:1231 cps/web.py:1264
|
||||
msgid "Token has expired"
|
||||
msgstr "Token vypršel"
|
||||
|
||||
#: cps/web.py:1243
|
||||
#: cps/web.py:1240
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "Úspěch! Vraťte se prosím do zařízení"
|
||||
|
||||
#: cps/web.py:1320 cps/web.py:1363 cps/web.py:1369
|
||||
#: cps/web.py:1317 cps/web.py:1360 cps/web.py:1366
|
||||
#, python-format
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)s profil"
|
||||
|
||||
#: cps/web.py:1365
|
||||
#: cps/web.py:1362
|
||||
msgid "Profile updated"
|
||||
msgstr "Profil aktualizován"
|
||||
|
||||
#: cps/web.py:1394 cps/web.py:1397 cps/web.py:1400 cps/web.py:1407
|
||||
#: cps/web.py:1412
|
||||
#: cps/web.py:1391 cps/web.py:1394 cps/web.py:1397 cps/web.py:1404
|
||||
#: cps/web.py:1409
|
||||
msgid "Read a Book"
|
||||
msgstr "Číst knihu"
|
||||
|
||||
#: cps/web.py:1423
|
||||
#: cps/web.py:1420
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible."
|
||||
msgstr "Chyba při otevírání eKnihy. Soubor neexistuje nebo není přístupný"
|
||||
|
||||
@ -953,11 +953,11 @@ msgstr "Správce"
|
||||
#: cps/templates/detail.html:27 cps/templates/shelf.html:6
|
||||
#: cps/templates/shelfdown.html:62
|
||||
msgid "Download"
|
||||
msgstr "Stáhovat"
|
||||
msgstr "Stahovat"
|
||||
|
||||
#: cps/templates/admin.html:18
|
||||
msgid "View Ebooks"
|
||||
msgstr "Prohlížet eknihy"
|
||||
msgstr "Prohlížet"
|
||||
|
||||
#: cps/templates/admin.html:19 cps/templates/layout.html:65
|
||||
msgid "Upload"
|
||||
@ -1098,7 +1098,7 @@ msgstr "Ok"
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:92
|
||||
#: cps/templates/layout.html:28 cps/templates/shelf.html:73
|
||||
#: cps/templates/shelf_edit.html:19 cps/templates/shelf_order.html:32
|
||||
#: cps/templates/user_edit.html:131
|
||||
#: cps/templates/user_edit.html:133
|
||||
msgid "Back"
|
||||
msgstr "Zpět"
|
||||
|
||||
@ -1211,7 +1211,7 @@ msgstr "Datum vydání"
|
||||
msgid "Publisher"
|
||||
msgstr "Vydavatel"
|
||||
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:30
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:31
|
||||
msgid "Language"
|
||||
msgstr "Jazyk"
|
||||
|
||||
@ -1238,7 +1238,7 @@ msgstr "Získat metadata"
|
||||
#: cps/templates/book_edit.html:173 cps/templates/config_edit.html:329
|
||||
#: cps/templates/config_view_edit.html:146 cps/templates/login.html:20
|
||||
#: cps/templates/search_form.html:170 cps/templates/shelf_edit.html:17
|
||||
#: cps/templates/user_edit.html:129
|
||||
#: cps/templates/user_edit.html:131
|
||||
msgid "Submit"
|
||||
msgstr "Odeslat"
|
||||
|
||||
@ -1405,7 +1405,7 @@ msgstr "Povolit veřejnou registraci"
|
||||
|
||||
#: cps/templates/config_edit.html:170
|
||||
msgid "Enable remote login (\"magic link\")"
|
||||
msgstr "Povolit vzdálené přihlášení (\“magic link\”)"
|
||||
msgstr "Povolit vzdálené přihlášení (\\“magic link\\”)"
|
||||
|
||||
#: cps/templates/config_edit.html:175
|
||||
msgid "Use Goodreads"
|
||||
@ -1591,35 +1591,35 @@ msgstr "Štítky pro obsah pro dospělé"
|
||||
msgid "Default settings for new users"
|
||||
msgstr "Výchozí nastavení pro nového uživatele"
|
||||
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:82
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:84
|
||||
msgid "Admin user"
|
||||
msgstr "Uživatel admin"
|
||||
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:91
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:93
|
||||
msgid "Allow Downloads"
|
||||
msgstr "Povolit stahování"
|
||||
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:95
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:97
|
||||
msgid "Allow book viewer"
|
||||
msgstr "Povolit prohlížeč knih"
|
||||
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:99
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:101
|
||||
msgid "Allow Uploads"
|
||||
msgstr "Povolit nahrávání"
|
||||
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:103
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:105
|
||||
msgid "Allow Edit"
|
||||
msgstr "Povolit úpravy"
|
||||
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:107
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:109
|
||||
msgid "Allow Delete books"
|
||||
msgstr "Povolit mazání knih"
|
||||
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:112
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:114
|
||||
msgid "Allow Changing Password"
|
||||
msgstr "Povolit změnu hesla"
|
||||
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:116
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:118
|
||||
msgid "Allow Editing Public Shelfs"
|
||||
msgstr "Povolit úpravy veřejných polic"
|
||||
|
||||
@ -1627,11 +1627,11 @@ msgstr "Povolit úpravy veřejných polic"
|
||||
msgid "Default visibilities for new users"
|
||||
msgstr "Výchozí viditelnosti pro nové uživatele"
|
||||
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:74
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:76
|
||||
msgid "Show random books in detail view"
|
||||
msgstr "Zobrazit náhodné knihy v podrobném zobrazení"
|
||||
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:87
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:89
|
||||
msgid "Show mature content"
|
||||
msgstr "Zobrazit obsah pro dospělé"
|
||||
|
||||
@ -1665,7 +1665,7 @@ msgstr "Označit jako přečtené"
|
||||
|
||||
#: cps/templates/detail.html:201
|
||||
msgid "Read"
|
||||
msgstr "Číst"
|
||||
msgstr "Přečteno"
|
||||
|
||||
#: cps/templates/detail.html:211
|
||||
msgid "Description:"
|
||||
@ -1910,13 +1910,21 @@ msgstr "Zapomenuté heslo"
|
||||
msgid "Log in with magic link"
|
||||
msgstr "Přihlásit se pomocí magického odkazu"
|
||||
|
||||
#: cps/templates/logviewer.html:5
|
||||
msgid "Show Calibre-Web log"
|
||||
msgstr "Zobrazit Calibre-Web log"
|
||||
#: cps/templates/logviewer.html:6
|
||||
msgid "Show Calibre-Web log: "
|
||||
msgstr "Zobrazit Calibre-Web log: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Show access log"
|
||||
msgstr "Zobrazit log přístupu"
|
||||
msgid "Calibre-Web log: "
|
||||
msgstr "Calibre-Web log: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Stream output, can't be displayed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/logviewer.html:12
|
||||
msgid "Show access log: "
|
||||
msgstr "Zobrazit log přístupu: "
|
||||
|
||||
#: cps/templates/osd.xml:5
|
||||
msgid "Calibre-Web ebook catalog"
|
||||
@ -1972,7 +1980,7 @@ msgstr "Světlý"
|
||||
|
||||
#: cps/templates/readcbr.html:116
|
||||
msgid "Dark"
|
||||
msgstr "Tnavý"
|
||||
msgstr "Tmavý"
|
||||
|
||||
#: cps/templates/readcbr.html:121
|
||||
msgid "Scale"
|
||||
@ -2140,19 +2148,19 @@ msgstr "Statistika knihovny Calibre"
|
||||
|
||||
#: cps/templates/stats.html:12
|
||||
msgid "Books in this Library"
|
||||
msgstr "Knihy v této knihovně"
|
||||
msgstr "Knih v této knihovně"
|
||||
|
||||
#: cps/templates/stats.html:16
|
||||
msgid "Authors in this Library"
|
||||
msgstr "Autoři v této knihovně"
|
||||
msgstr "Autorů v této knihovně"
|
||||
|
||||
#: cps/templates/stats.html:20
|
||||
msgid "Categories in this Library"
|
||||
msgstr "Kategorie v této knihovně"
|
||||
msgstr "Kategorií v této knihovně"
|
||||
|
||||
#: cps/templates/stats.html:24
|
||||
msgid "Series in this Library"
|
||||
msgstr "Série v této knihovně"
|
||||
msgstr "Sérií v této knihovně"
|
||||
|
||||
#: cps/templates/stats.html:28
|
||||
msgid "Linked libraries"
|
||||
@ -2208,33 +2216,33 @@ msgstr "Resetovat uživatelské heslo"
|
||||
|
||||
#: cps/templates/user_edit.html:26
|
||||
msgid "Kindle E-Mail"
|
||||
msgstr "Kindle E-Mail"
|
||||
msgstr "Kindle e-mail"
|
||||
|
||||
#: cps/templates/user_edit.html:39
|
||||
#: cps/templates/user_edit.html:41
|
||||
msgid "Show books with language"
|
||||
msgstr "Zobrazit knihy s jazykem"
|
||||
|
||||
#: cps/templates/user_edit.html:41
|
||||
#: cps/templates/user_edit.html:43
|
||||
msgid "Show all"
|
||||
msgstr "Zobrazit vše"
|
||||
|
||||
#: cps/templates/user_edit.html:51
|
||||
#: cps/templates/user_edit.html:53
|
||||
msgid "OAuth Settings"
|
||||
msgstr "Nastavení OAuth"
|
||||
|
||||
#: cps/templates/user_edit.html:53
|
||||
#: cps/templates/user_edit.html:55
|
||||
msgid "Link"
|
||||
msgstr "Připojit"
|
||||
|
||||
#: cps/templates/user_edit.html:55
|
||||
#: cps/templates/user_edit.html:57
|
||||
msgid "Unlink"
|
||||
msgstr "Odpojit"
|
||||
|
||||
#: cps/templates/user_edit.html:123
|
||||
#: cps/templates/user_edit.html:125
|
||||
msgid "Delete this user"
|
||||
msgstr "Odstranit tohoto uživatele"
|
||||
|
||||
#: cps/templates/user_edit.html:138
|
||||
#: cps/templates/user_edit.html:140
|
||||
msgid "Recent Downloads"
|
||||
msgstr "Nedávná stahování"
|
||||
|
||||
@ -3591,3 +3599,9 @@ msgstr "Nedávná stahování"
|
||||
#~ msgid "Zaza"
|
||||
#~ msgstr "Zaza"
|
||||
|
||||
#~ msgid "Show Calibre-Web log"
|
||||
#~ msgstr "Zobrazit Calibre-Web log"
|
||||
|
||||
#~ msgid "Show access log"
|
||||
#~ msgstr "Zobrazit log přístupu"
|
||||
|
||||
|
Binary file not shown.
@ -7,17 +7,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Calibre-Web\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
|
||||
"POT-Creation-Date: 2020-01-12 13:57+0100\n"
|
||||
"PO-Revision-Date: 2020-01-13 18:24+0100\n"
|
||||
"POT-Creation-Date: 2020-01-18 12:54+0100\n"
|
||||
"PO-Revision-Date: 2020-01-18 12:52+0100\n"
|
||||
"Last-Translator: Ozzie Isaacs\n"
|
||||
"Language: de\n"
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.7.0\n"
|
||||
"X-Generator: Poedit 2.2.4\n"
|
||||
|
||||
#: cps/about.py:42
|
||||
msgid "installed"
|
||||
@ -61,7 +60,7 @@ msgstr "Konfiguration von Calibre-Web wurde aktualisiert"
|
||||
msgid "Basic Configuration"
|
||||
msgstr "Basiskonfiguration"
|
||||
|
||||
#: cps/admin.py:465 cps/web.py:1093
|
||||
#: cps/admin.py:465 cps/web.py:1090
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "Bitte alle Felder ausfüllen!"
|
||||
|
||||
@ -70,7 +69,7 @@ msgstr "Bitte alle Felder ausfüllen!"
|
||||
msgid "Add new user"
|
||||
msgstr "Neuen Benutzer hinzufügen"
|
||||
|
||||
#: cps/admin.py:476 cps/web.py:1318
|
||||
#: cps/admin.py:476 cps/web.py:1315
|
||||
msgid "E-mail is not from valid domain"
|
||||
msgstr "E-Mail bezieht sich nicht auf eine gültige Domain"
|
||||
|
||||
@ -114,16 +113,16 @@ msgstr "Benutzer '%(nick)s' gelöscht"
|
||||
msgid "No admin user remaining, can't delete user"
|
||||
msgstr "Benutzer kann nicht gelöscht werden, es wäre kein Admin Benutzer übrig"
|
||||
|
||||
#: cps/admin.py:612 cps/web.py:1359
|
||||
#: cps/admin.py:612 cps/web.py:1356
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr "Es existiert bereits ein Benutzer für diese E-Mailadresse."
|
||||
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1334
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1331
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "Benutzer %(nick)s bearbeiten"
|
||||
|
||||
#: cps/admin.py:622 cps/web.py:1327
|
||||
#: cps/admin.py:622 cps/web.py:1324
|
||||
msgid "This username is already taken"
|
||||
msgstr "Benutzername ist schon vorhanden"
|
||||
|
||||
@ -141,11 +140,11 @@ msgstr "Es ist ein unbekannter Fehler aufgetreten."
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr "Passwort für Benutzer %(user)s wurde zurückgesetzt"
|
||||
|
||||
#: cps/admin.py:660 cps/web.py:1118 cps/web.py:1174
|
||||
#: cps/admin.py:660 cps/web.py:1115 cps/web.py:1171
|
||||
msgid "An unknown error occurred. Please try again later."
|
||||
msgstr "Es ist ein unbekannter Fehler aufgetreten. Bitte später erneut versuchen."
|
||||
|
||||
#: cps/admin.py:663 cps/web.py:1062
|
||||
#: cps/admin.py:663 cps/web.py:1059
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "Bitte zuerst die SMTP-Einstellung konfigurieren ..."
|
||||
|
||||
@ -593,7 +592,7 @@ msgid "Show best rated books"
|
||||
msgstr "Zeige am besten bewertete Bücher"
|
||||
|
||||
#: cps/templates/index.xml:46 cps/templates/index.xml:50 cps/ub.py:67
|
||||
#: cps/web.py:1011
|
||||
#: cps/web.py:1009
|
||||
msgid "Read Books"
|
||||
msgstr "Gelesene Bücher"
|
||||
|
||||
@ -602,7 +601,7 @@ msgid "Show read and unread"
|
||||
msgstr "Zeige gelesene/ungelesene Bücher"
|
||||
|
||||
#: cps/templates/index.xml:53 cps/templates/index.xml:57 cps/ub.py:71
|
||||
#: cps/web.py:1015
|
||||
#: cps/web.py:1013
|
||||
msgid "Unread Books"
|
||||
msgstr "Ungelesene Bücher"
|
||||
|
||||
@ -724,7 +723,7 @@ msgstr "Bücher"
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "Beliebte Bücher (am meisten Downloads)"
|
||||
|
||||
#: cps/web.py:586 cps/web.py:1382 cps/web.py:1478
|
||||
#: cps/web.py:586 cps/web.py:1379 cps/web.py:1475
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible:"
|
||||
msgstr "Öffnen des Buchs fehlgeschlagen. Datei existiert nicht oder ist nicht zugänglich:"
|
||||
|
||||
@ -792,128 +791,128 @@ msgid "Tasks"
|
||||
msgstr "Aufgaben"
|
||||
|
||||
#: cps/templates/feed.xml:33 cps/templates/layout.html:44
|
||||
#: cps/templates/layout.html:45 cps/web.py:829 cps/web.py:831
|
||||
#: cps/templates/layout.html:45 cps/web.py:827 cps/web.py:829
|
||||
msgid "Search"
|
||||
msgstr "Suche"
|
||||
|
||||
#: cps/web.py:881
|
||||
#: cps/web.py:879
|
||||
msgid "Published after "
|
||||
msgstr "Herausgegeben nach dem "
|
||||
|
||||
#: cps/web.py:888
|
||||
#: cps/web.py:886
|
||||
msgid "Published before "
|
||||
msgstr "Herausgegeben vor dem "
|
||||
|
||||
#: cps/web.py:902
|
||||
#: cps/web.py:900
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr "Bewertung <= %(rating)s"
|
||||
|
||||
#: cps/web.py:904
|
||||
#: cps/web.py:902
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr "Bewertung >= %(rating)s"
|
||||
|
||||
#: cps/web.py:970 cps/web.py:982
|
||||
#: cps/web.py:968 cps/web.py:980
|
||||
msgid "search"
|
||||
msgstr "Suche"
|
||||
|
||||
#: cps/web.py:1067
|
||||
#: cps/web.py:1064
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr "Buch erfolgreich zum Senden an %(kindlemail)s eingereiht"
|
||||
|
||||
#: cps/web.py:1071
|
||||
#: cps/web.py:1068
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s"
|
||||
|
||||
#: cps/web.py:1073
|
||||
#: cps/web.py:1070
|
||||
msgid "Please configure your kindle e-mail address first..."
|
||||
msgstr "Bitte zuerst die Kindle E-Mailadresse konfigurieren..."
|
||||
|
||||
#: cps/web.py:1087
|
||||
#: cps/web.py:1084
|
||||
msgid "E-Mail server is not configured, please contact your administrator!"
|
||||
msgstr "Der E-Mail Server ist nicht konfigurierte, bitte den Administrator kontaktieren!"
|
||||
|
||||
#: cps/web.py:1088 cps/web.py:1094 cps/web.py:1119 cps/web.py:1123
|
||||
#: cps/web.py:1128 cps/web.py:1132
|
||||
#: cps/web.py:1085 cps/web.py:1091 cps/web.py:1116 cps/web.py:1120
|
||||
#: cps/web.py:1125 cps/web.py:1129
|
||||
msgid "register"
|
||||
msgstr "Registieren"
|
||||
|
||||
#: cps/web.py:1121
|
||||
#: cps/web.py:1118
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr "Diese E-Mail ist nicht für die Registrierung zugelassen"
|
||||
|
||||
#: cps/web.py:1124
|
||||
#: cps/web.py:1121
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr "Eine Bestätigungs-E-Mail wurde an deinen E-Mail Account versendet."
|
||||
|
||||
#: cps/web.py:1127
|
||||
#: cps/web.py:1124
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr "Benutzername oder E-Mailadresse ist bereits in Verwendung."
|
||||
|
||||
#: cps/web.py:1144
|
||||
#: cps/web.py:1141
|
||||
msgid "Cannot activate LDAP authentication"
|
||||
msgstr "LDAP-Authentifizierung kann nicht aktiviert werden"
|
||||
|
||||
#: cps/web.py:1154 cps/web.py:1281
|
||||
#: cps/web.py:1151 cps/web.py:1278
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "Du bist nun eingeloggt als '%(nickname)s'"
|
||||
|
||||
#: cps/web.py:1159
|
||||
#: cps/web.py:1156
|
||||
msgid "Could not login. LDAP server down, please contact your administrator"
|
||||
msgstr "Login nicht erfolgreich, LDAP Server nicht erreichbar, bitte Administrator kontaktieren"
|
||||
|
||||
#: cps/web.py:1163 cps/web.py:1186
|
||||
#: cps/web.py:1160 cps/web.py:1183
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "Falscher Benutzername oder Passwort"
|
||||
|
||||
#: cps/web.py:1170
|
||||
#: cps/web.py:1167
|
||||
msgid "New Password was send to your email address"
|
||||
msgstr "Das neue Passwort wurde an die E-Mail Adresse verschickt"
|
||||
|
||||
#: cps/web.py:1176
|
||||
#: cps/web.py:1173
|
||||
msgid "Please enter valid username to reset password"
|
||||
msgstr "Bitte einen gültigen Benutzernamen zum Zurücksetzen des Passworts angeben"
|
||||
|
||||
#: cps/web.py:1182
|
||||
#: cps/web.py:1179
|
||||
#, python-format
|
||||
msgid "You are now logged in as: '%(nickname)s'"
|
||||
msgstr "Eingeloggt als: '%(nickname)s'"
|
||||
|
||||
#: cps/web.py:1189 cps/web.py:1213
|
||||
#: cps/web.py:1186 cps/web.py:1210
|
||||
msgid "login"
|
||||
msgstr "Login"
|
||||
|
||||
#: cps/web.py:1225 cps/web.py:1259
|
||||
#: cps/web.py:1222 cps/web.py:1256
|
||||
msgid "Token not found"
|
||||
msgstr "Token wurde nicht gefunden"
|
||||
|
||||
#: cps/web.py:1234 cps/web.py:1267
|
||||
#: cps/web.py:1231 cps/web.py:1264
|
||||
msgid "Token has expired"
|
||||
msgstr "Das Token ist abgelaufen"
|
||||
|
||||
#: cps/web.py:1243
|
||||
#: cps/web.py:1240
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "Erfolg! Bitte zum Gerät zurückkehren"
|
||||
|
||||
#: cps/web.py:1320 cps/web.py:1363 cps/web.py:1369
|
||||
#: cps/web.py:1317 cps/web.py:1360 cps/web.py:1366
|
||||
#, python-format
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)s's Profil"
|
||||
|
||||
#: cps/web.py:1365
|
||||
#: cps/web.py:1362
|
||||
msgid "Profile updated"
|
||||
msgstr "Profil aktualisiert"
|
||||
|
||||
#: cps/web.py:1394 cps/web.py:1397 cps/web.py:1400 cps/web.py:1407
|
||||
#: cps/web.py:1412
|
||||
#: cps/web.py:1391 cps/web.py:1394 cps/web.py:1397 cps/web.py:1404
|
||||
#: cps/web.py:1409
|
||||
msgid "Read a Book"
|
||||
msgstr "Lese ein Buch"
|
||||
|
||||
#: cps/web.py:1423
|
||||
#: cps/web.py:1420
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible."
|
||||
msgstr "Fehler beim Öffnen des eBooks. Datei existiert nicht oder ist nicht zugänglich."
|
||||
|
||||
@ -1100,7 +1099,7 @@ msgstr "OK"
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:92
|
||||
#: cps/templates/layout.html:28 cps/templates/shelf.html:73
|
||||
#: cps/templates/shelf_edit.html:19 cps/templates/shelf_order.html:32
|
||||
#: cps/templates/user_edit.html:131
|
||||
#: cps/templates/user_edit.html:133
|
||||
msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
@ -1213,7 +1212,7 @@ msgstr "Herausgabedatum"
|
||||
msgid "Publisher"
|
||||
msgstr "Herausgeber"
|
||||
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:30
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:31
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
@ -1240,7 +1239,7 @@ msgstr "Metadaten laden"
|
||||
#: cps/templates/book_edit.html:173 cps/templates/config_edit.html:329
|
||||
#: cps/templates/config_view_edit.html:146 cps/templates/login.html:20
|
||||
#: cps/templates/search_form.html:170 cps/templates/shelf_edit.html:17
|
||||
#: cps/templates/user_edit.html:129
|
||||
#: cps/templates/user_edit.html:131
|
||||
msgid "Submit"
|
||||
msgstr "Abschicken"
|
||||
|
||||
@ -1593,35 +1592,35 @@ msgstr "Kategorien für Erwachseneninhalte"
|
||||
msgid "Default settings for new users"
|
||||
msgstr "Standard-Einstellungen für neue Benutzer"
|
||||
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:82
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:84
|
||||
msgid "Admin user"
|
||||
msgstr "Administrator"
|
||||
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:91
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:93
|
||||
msgid "Allow Downloads"
|
||||
msgstr "Downloads erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:95
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:97
|
||||
msgid "Allow book viewer"
|
||||
msgstr "Anzeige von Büchern erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:99
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:101
|
||||
msgid "Allow Uploads"
|
||||
msgstr "Hochladen erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:103
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:105
|
||||
msgid "Allow Edit"
|
||||
msgstr "Bearbeiten erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:107
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:109
|
||||
msgid "Allow Delete books"
|
||||
msgstr "Löschen von Büchern erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:112
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:114
|
||||
msgid "Allow Changing Password"
|
||||
msgstr "Ändern des Passworts erlauben"
|
||||
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:116
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:118
|
||||
msgid "Allow Editing Public Shelfs"
|
||||
msgstr "Editieren öffentlicher Bücherregale erlauben"
|
||||
|
||||
@ -1629,11 +1628,11 @@ msgstr "Editieren öffentlicher Bücherregale erlauben"
|
||||
msgid "Default visibilities for new users"
|
||||
msgstr "Standard-Sichtbarkeiten für neue Benutzer"
|
||||
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:74
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:76
|
||||
msgid "Show random books in detail view"
|
||||
msgstr "Zeige zufällige Bücher in der Detailansicht"
|
||||
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:87
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:89
|
||||
msgid "Show mature content"
|
||||
msgstr "Erwachseneninhalte anzeigen"
|
||||
|
||||
@ -1912,13 +1911,21 @@ msgstr "Passwort vergessen"
|
||||
msgid "Log in with magic link"
|
||||
msgstr "Einloggen mit magischem Link"
|
||||
|
||||
#: cps/templates/logviewer.html:5
|
||||
msgid "Show Calibre-Web log"
|
||||
msgstr "Zeige Calibre-Web Logdatei"
|
||||
#: cps/templates/logviewer.html:6
|
||||
msgid "Show Calibre-Web log: "
|
||||
msgstr "Calibre-Web Logdatei anzeigen: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Show access log"
|
||||
msgstr "Zeige Zugriffslogdatei"
|
||||
msgid "Calibre-Web log: "
|
||||
msgstr "Calibre-Web Logdatei: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Stream output, can't be displayed"
|
||||
msgstr "Stream Ausgabe, kann nicht angezeigt werden"
|
||||
|
||||
#: cps/templates/logviewer.html:12
|
||||
msgid "Show access log: "
|
||||
msgstr "Zugriffslogbuch anzeigen: "
|
||||
|
||||
#: cps/templates/osd.xml:5
|
||||
msgid "Calibre-Web ebook catalog"
|
||||
@ -2212,31 +2219,31 @@ msgstr "Benutzerpasswort zurücksetzen"
|
||||
msgid "Kindle E-Mail"
|
||||
msgstr "Kindle E-Mail"
|
||||
|
||||
#: cps/templates/user_edit.html:39
|
||||
#: cps/templates/user_edit.html:41
|
||||
msgid "Show books with language"
|
||||
msgstr "Zeige nur Bücher mit dieser Sprache"
|
||||
|
||||
#: cps/templates/user_edit.html:41
|
||||
#: cps/templates/user_edit.html:43
|
||||
msgid "Show all"
|
||||
msgstr "Zeige alle"
|
||||
|
||||
#: cps/templates/user_edit.html:51
|
||||
#: cps/templates/user_edit.html:53
|
||||
msgid "OAuth Settings"
|
||||
msgstr "Oauth Einstellungen"
|
||||
|
||||
#: cps/templates/user_edit.html:53
|
||||
#: cps/templates/user_edit.html:55
|
||||
msgid "Link"
|
||||
msgstr "Verknüpfung herstellen"
|
||||
|
||||
#: cps/templates/user_edit.html:55
|
||||
#: cps/templates/user_edit.html:57
|
||||
msgid "Unlink"
|
||||
msgstr "Verknüpfung entfernen"
|
||||
|
||||
#: cps/templates/user_edit.html:123
|
||||
#: cps/templates/user_edit.html:125
|
||||
msgid "Delete this user"
|
||||
msgstr "Benutzer löschen"
|
||||
|
||||
#: cps/templates/user_edit.html:138
|
||||
#: cps/templates/user_edit.html:140
|
||||
msgid "Recent Downloads"
|
||||
msgstr "Letzte Downloads"
|
||||
|
||||
@ -2374,3 +2381,10 @@ msgstr "Letzte Downloads"
|
||||
|
||||
#~ msgid "New Books"
|
||||
#~ msgstr "Neue Bücher"
|
||||
|
||||
#~ msgid "Show Calibre-Web log"
|
||||
#~ msgstr "Zeige Calibre-Web Logdatei"
|
||||
|
||||
#~ msgid "Show access log"
|
||||
#~ msgstr "Zeige Zugriffslogdatei"
|
||||
|
||||
|
Binary file not shown.
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Calibre-Web\n"
|
||||
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
|
||||
"POT-Creation-Date: 2020-01-12 13:57+0100\n"
|
||||
"PO-Revision-Date: 2019-11-14 18:50+0100\n"
|
||||
"POT-Creation-Date: 2020-01-18 12:28+0100\n"
|
||||
"PO-Revision-Date: 2020-01-18 11:22+0100\n"
|
||||
"Last-Translator: Jonatan Nyberg <jonatan.nyberg.karl@gmail.com>\n"
|
||||
"Language: sv\n"
|
||||
"Language-Team: \n"
|
||||
@ -60,7 +60,7 @@ msgstr "Calibre-Web konfiguration uppdaterad"
|
||||
msgid "Basic Configuration"
|
||||
msgstr "Grundläggande konfiguration"
|
||||
|
||||
#: cps/admin.py:465 cps/web.py:1093
|
||||
#: cps/admin.py:465 cps/web.py:1090
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "Fyll i alla fält!"
|
||||
|
||||
@ -69,7 +69,7 @@ msgstr "Fyll i alla fält!"
|
||||
msgid "Add new user"
|
||||
msgstr "Lägg till ny användare"
|
||||
|
||||
#: cps/admin.py:476 cps/web.py:1318
|
||||
#: cps/admin.py:476 cps/web.py:1315
|
||||
msgid "E-mail is not from valid domain"
|
||||
msgstr "E-posten är inte från giltig domän"
|
||||
|
||||
@ -98,7 +98,7 @@ msgstr "Det gick inte att skicka Testmeddelandet: %(res)s"
|
||||
|
||||
#: cps/admin.py:540
|
||||
msgid "Please configure your e-mail address first..."
|
||||
msgstr ""
|
||||
msgstr "Vänligen konfigurera din e-postadress först..."
|
||||
|
||||
#: cps/admin.py:542
|
||||
msgid "E-mail server settings updated"
|
||||
@ -113,18 +113,18 @@ msgstr "Användaren '%(nick)s' borttagen"
|
||||
msgid "No admin user remaining, can't delete user"
|
||||
msgstr "Ingen adminstratörsanvändare kvar, kan inte ta bort användaren"
|
||||
|
||||
#: cps/admin.py:612 cps/web.py:1359
|
||||
#: cps/admin.py:612 cps/web.py:1356
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr "Hittade ett befintligt konto för den här e-postadressen."
|
||||
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1334
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1331
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "Redigera användaren %(nick)s"
|
||||
|
||||
#: cps/admin.py:622 cps/web.py:1327
|
||||
#: cps/admin.py:622 cps/web.py:1324
|
||||
msgid "This username is already taken"
|
||||
msgstr ""
|
||||
msgstr "Detta användarnamn är redan taget"
|
||||
|
||||
#: cps/admin.py:637
|
||||
#, python-format
|
||||
@ -140,11 +140,11 @@ msgstr "Ett okänt fel uppstod."
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr "Lösenord för användaren %(user)s återställd"
|
||||
|
||||
#: cps/admin.py:660 cps/web.py:1118 cps/web.py:1174
|
||||
#: cps/admin.py:660 cps/web.py:1115 cps/web.py:1171
|
||||
msgid "An unknown error occurred. Please try again later."
|
||||
msgstr "Ett okänt fel uppstod. Försök igen senare."
|
||||
|
||||
#: cps/admin.py:663 cps/web.py:1062
|
||||
#: cps/admin.py:663 cps/web.py:1059
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "Konfigurera SMTP-postinställningarna först..."
|
||||
|
||||
@ -260,11 +260,11 @@ msgstr "Det gick inte att redigera boken, kontrollera loggfilen för mer informa
|
||||
#: cps/editbooks.py:581
|
||||
#, python-format
|
||||
msgid "File %(filename)s could not saved to temp dir"
|
||||
msgstr ""
|
||||
msgstr "Filen %(filename)s kunde inte sparas i temp dir"
|
||||
|
||||
#: cps/editbooks.py:598
|
||||
msgid "Uploaded book probably exists in the library, consider to change before upload new: "
|
||||
msgstr ""
|
||||
msgstr "Uppladdad bok finns förmodligen i biblioteket, överväg att ändra innan du laddar upp nya: "
|
||||
|
||||
#: cps/editbooks.py:613
|
||||
#, python-format
|
||||
@ -592,7 +592,7 @@ msgid "Show best rated books"
|
||||
msgstr "Visa böcker med bästa betyg"
|
||||
|
||||
#: cps/templates/index.xml:46 cps/templates/index.xml:50 cps/ub.py:67
|
||||
#: cps/web.py:1011
|
||||
#: cps/web.py:1009
|
||||
msgid "Read Books"
|
||||
msgstr "Lästa böcker"
|
||||
|
||||
@ -601,7 +601,7 @@ msgid "Show read and unread"
|
||||
msgstr "Visa lästa och olästa"
|
||||
|
||||
#: cps/templates/index.xml:53 cps/templates/index.xml:57 cps/ub.py:71
|
||||
#: cps/web.py:1015
|
||||
#: cps/web.py:1013
|
||||
msgid "Unread Books"
|
||||
msgstr "Olästa böcker"
|
||||
|
||||
@ -723,7 +723,7 @@ msgstr "Böcker"
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "Heta böcker (mest hämtade)"
|
||||
|
||||
#: cps/web.py:586 cps/web.py:1382 cps/web.py:1478
|
||||
#: cps/web.py:586 cps/web.py:1379 cps/web.py:1475
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible:"
|
||||
msgstr "Fel vid öppnande av e-bok. Filen finns inte eller filen är inte tillgänglig:"
|
||||
|
||||
@ -791,128 +791,128 @@ msgid "Tasks"
|
||||
msgstr "Uppgifter"
|
||||
|
||||
#: cps/templates/feed.xml:33 cps/templates/layout.html:44
|
||||
#: cps/templates/layout.html:45 cps/web.py:829 cps/web.py:831
|
||||
#: cps/templates/layout.html:45 cps/web.py:827 cps/web.py:829
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#: cps/web.py:881
|
||||
#: cps/web.py:879
|
||||
msgid "Published after "
|
||||
msgstr "Publicerad efter "
|
||||
|
||||
#: cps/web.py:888
|
||||
#: cps/web.py:886
|
||||
msgid "Published before "
|
||||
msgstr "Publicerad före "
|
||||
|
||||
#: cps/web.py:902
|
||||
#: cps/web.py:900
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr "Betyg <= %(rating)s"
|
||||
|
||||
#: cps/web.py:904
|
||||
#: cps/web.py:902
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr "Betyg >= %(rating)s"
|
||||
|
||||
#: cps/web.py:970 cps/web.py:982
|
||||
#: cps/web.py:968 cps/web.py:980
|
||||
msgid "search"
|
||||
msgstr "sök"
|
||||
|
||||
#: cps/web.py:1067
|
||||
#: cps/web.py:1064
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr "Boken är i kö för att skicka till %(kindlemail)s"
|
||||
|
||||
#: cps/web.py:1071
|
||||
#: cps/web.py:1068
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
msgstr "Det gick inte att skicka den här boken: %(res)s"
|
||||
|
||||
#: cps/web.py:1073
|
||||
#: cps/web.py:1070
|
||||
msgid "Please configure your kindle e-mail address first..."
|
||||
msgstr "Konfigurera din kindle-e-postadress först..."
|
||||
|
||||
#: cps/web.py:1087
|
||||
#: cps/web.py:1084
|
||||
msgid "E-Mail server is not configured, please contact your administrator!"
|
||||
msgstr ""
|
||||
msgstr "E-postservern är inte konfigurerad, kontakta din administratör!"
|
||||
|
||||
#: cps/web.py:1088 cps/web.py:1094 cps/web.py:1119 cps/web.py:1123
|
||||
#: cps/web.py:1128 cps/web.py:1132
|
||||
#: cps/web.py:1085 cps/web.py:1091 cps/web.py:1116 cps/web.py:1120
|
||||
#: cps/web.py:1125 cps/web.py:1129
|
||||
msgid "register"
|
||||
msgstr "registrera"
|
||||
|
||||
#: cps/web.py:1121
|
||||
#: cps/web.py:1118
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr "Din e-post är inte tillåten att registrera"
|
||||
|
||||
#: cps/web.py:1124
|
||||
#: cps/web.py:1121
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr "Bekräftelsemail skickades till ditt e-postkonto."
|
||||
|
||||
#: cps/web.py:1127
|
||||
#: cps/web.py:1124
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr "Det här användarnamnet eller e-postadressen är redan i bruk."
|
||||
|
||||
#: cps/web.py:1144
|
||||
#: cps/web.py:1141
|
||||
msgid "Cannot activate LDAP authentication"
|
||||
msgstr "Det går inte att aktivera LDAP-autentisering"
|
||||
|
||||
#: cps/web.py:1154 cps/web.py:1281
|
||||
#: cps/web.py:1151 cps/web.py:1278
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "du är nu inloggad som: \"%(nickname)s\""
|
||||
|
||||
#: cps/web.py:1159
|
||||
#: cps/web.py:1156
|
||||
msgid "Could not login. LDAP server down, please contact your administrator"
|
||||
msgstr "Det gick inte att logga in. LDAP-servern är nere, kontakta din administratör"
|
||||
|
||||
#: cps/web.py:1163 cps/web.py:1186
|
||||
#: cps/web.py:1160 cps/web.py:1183
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "Fel användarnamn eller lösenord"
|
||||
|
||||
#: cps/web.py:1170
|
||||
#: cps/web.py:1167
|
||||
msgid "New Password was send to your email address"
|
||||
msgstr ""
|
||||
msgstr "Nytt lösenord skickades till din e-postadress"
|
||||
|
||||
#: cps/web.py:1176
|
||||
#: cps/web.py:1173
|
||||
msgid "Please enter valid username to reset password"
|
||||
msgstr ""
|
||||
msgstr "Ange giltigt användarnamn för att återställa lösenordet"
|
||||
|
||||
#: cps/web.py:1182
|
||||
#: cps/web.py:1179
|
||||
#, python-format
|
||||
msgid "You are now logged in as: '%(nickname)s'"
|
||||
msgstr "Du är nu inloggad som: \"%(nickname)s\""
|
||||
|
||||
#: cps/web.py:1189 cps/web.py:1213
|
||||
#: cps/web.py:1186 cps/web.py:1210
|
||||
msgid "login"
|
||||
msgstr "logga in"
|
||||
|
||||
#: cps/web.py:1225 cps/web.py:1259
|
||||
#: cps/web.py:1222 cps/web.py:1256
|
||||
msgid "Token not found"
|
||||
msgstr "Token hittades inte"
|
||||
|
||||
#: cps/web.py:1234 cps/web.py:1267
|
||||
#: cps/web.py:1231 cps/web.py:1264
|
||||
msgid "Token has expired"
|
||||
msgstr "Token har löpt ut"
|
||||
|
||||
#: cps/web.py:1243
|
||||
#: cps/web.py:1240
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "Lyckades! Vänligen återvänd till din enhet"
|
||||
|
||||
#: cps/web.py:1320 cps/web.py:1363 cps/web.py:1369
|
||||
#: cps/web.py:1317 cps/web.py:1360 cps/web.py:1366
|
||||
#, python-format
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)ss profil"
|
||||
|
||||
#: cps/web.py:1365
|
||||
#: cps/web.py:1362
|
||||
msgid "Profile updated"
|
||||
msgstr "Profilen uppdaterad"
|
||||
|
||||
#: cps/web.py:1394 cps/web.py:1397 cps/web.py:1400 cps/web.py:1407
|
||||
#: cps/web.py:1412
|
||||
#: cps/web.py:1391 cps/web.py:1394 cps/web.py:1397 cps/web.py:1404
|
||||
#: cps/web.py:1409
|
||||
msgid "Read a Book"
|
||||
msgstr "Läs en bok"
|
||||
|
||||
#: cps/web.py:1423
|
||||
#: cps/web.py:1420
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible."
|
||||
msgstr "Fel vid öppningen av e-boken. Filen finns inte eller filen är inte tillgänglig."
|
||||
|
||||
@ -1034,11 +1034,11 @@ msgstr "Fjärrinloggning"
|
||||
|
||||
#: cps/templates/admin.html:104
|
||||
msgid "Reverse proxy login"
|
||||
msgstr ""
|
||||
msgstr "Omvänd proxy inloggning"
|
||||
|
||||
#: cps/templates/admin.html:109
|
||||
msgid "Reverse proxy header name"
|
||||
msgstr ""
|
||||
msgstr "Omvänt proxy rubriknamn"
|
||||
|
||||
#: cps/templates/admin.html:121
|
||||
msgid "Administration"
|
||||
@ -1099,7 +1099,7 @@ msgstr "Ok"
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:92
|
||||
#: cps/templates/layout.html:28 cps/templates/shelf.html:73
|
||||
#: cps/templates/shelf_edit.html:19 cps/templates/shelf_order.html:32
|
||||
#: cps/templates/user_edit.html:131
|
||||
#: cps/templates/user_edit.html:133
|
||||
msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
@ -1212,7 +1212,7 @@ msgstr "Publiceringsdatum"
|
||||
msgid "Publisher"
|
||||
msgstr "Förlag"
|
||||
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:30
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:31
|
||||
msgid "Language"
|
||||
msgstr "Språk"
|
||||
|
||||
@ -1239,7 +1239,7 @@ msgstr "Hämta metadata"
|
||||
#: cps/templates/book_edit.html:173 cps/templates/config_edit.html:329
|
||||
#: cps/templates/config_view_edit.html:146 cps/templates/login.html:20
|
||||
#: cps/templates/search_form.html:170 cps/templates/shelf_edit.html:17
|
||||
#: cps/templates/user_edit.html:129
|
||||
#: cps/templates/user_edit.html:131
|
||||
msgid "Submit"
|
||||
msgstr "Skicka"
|
||||
|
||||
@ -1505,11 +1505,11 @@ msgstr "%(provider)s OAuth-klient-hemlighet"
|
||||
|
||||
#: cps/templates/config_edit.html:276
|
||||
msgid "Allow Reverse Proxy Authentication"
|
||||
msgstr ""
|
||||
msgstr "Tillåt omvänd proxyautentisering"
|
||||
|
||||
#: cps/templates/config_edit.html:280
|
||||
msgid "Reverse Proxy Header Name"
|
||||
msgstr ""
|
||||
msgstr "Omvänt proxy rubriknamn"
|
||||
|
||||
#: cps/templates/config_edit.html:292
|
||||
msgid "External binaries"
|
||||
@ -1592,35 +1592,35 @@ msgstr "Taggar för vuxeninnehåll"
|
||||
msgid "Default settings for new users"
|
||||
msgstr "Standardinställningar för nya användare"
|
||||
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:82
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:84
|
||||
msgid "Admin user"
|
||||
msgstr "Adminstratör användare"
|
||||
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:91
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:93
|
||||
msgid "Allow Downloads"
|
||||
msgstr "Tillåt Hämtningar"
|
||||
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:95
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:97
|
||||
msgid "Allow book viewer"
|
||||
msgstr "Tillåt bokvisare"
|
||||
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:99
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:101
|
||||
msgid "Allow Uploads"
|
||||
msgstr "Tillåt Uppladdningar"
|
||||
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:103
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:105
|
||||
msgid "Allow Edit"
|
||||
msgstr "Tillåt Redigera"
|
||||
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:107
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:109
|
||||
msgid "Allow Delete books"
|
||||
msgstr "Tillåt Ta bort böcker"
|
||||
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:112
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:114
|
||||
msgid "Allow Changing Password"
|
||||
msgstr "Tillåt Ändra lösenord"
|
||||
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:116
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:118
|
||||
msgid "Allow Editing Public Shelfs"
|
||||
msgstr "Tillåt Redigering av offentliga hyllor"
|
||||
|
||||
@ -1628,11 +1628,11 @@ msgstr "Tillåt Redigering av offentliga hyllor"
|
||||
msgid "Default visibilities for new users"
|
||||
msgstr "Standardvisibiliteter för nya användare"
|
||||
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:74
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:76
|
||||
msgid "Show random books in detail view"
|
||||
msgstr "Visa slumpmässiga böcker i detaljvyn"
|
||||
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:87
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:89
|
||||
msgid "Show mature content"
|
||||
msgstr "Visa vuxeninnehåll"
|
||||
|
||||
@ -1734,7 +1734,7 @@ msgstr "Ange domännamn"
|
||||
|
||||
#: cps/templates/email_edit.html:60
|
||||
msgid "Denied domains for registering"
|
||||
msgstr ""
|
||||
msgstr "Nekade domäner för registrering"
|
||||
|
||||
#: cps/templates/email_edit.html:90
|
||||
msgid "Do you really want to delete this domain rule?"
|
||||
@ -1774,7 +1774,7 @@ msgstr "Populära publikationer från den här katalogen baserad på betyg."
|
||||
|
||||
#: cps/templates/index.xml:31
|
||||
msgid "Recently added Books"
|
||||
msgstr ""
|
||||
msgstr "Senaste tillagda böcker"
|
||||
|
||||
#: cps/templates/index.xml:35
|
||||
msgid "The latest Books"
|
||||
@ -1802,11 +1802,11 @@ msgstr "Böcker ordnade efter serier"
|
||||
|
||||
#: cps/templates/index.xml:93
|
||||
msgid "Books ordered by Languages"
|
||||
msgstr ""
|
||||
msgstr "Böcker ordnade efter språk"
|
||||
|
||||
#: cps/templates/index.xml:100
|
||||
msgid "Books ordered by file formats"
|
||||
msgstr ""
|
||||
msgstr "Böcker ordnade av filformat"
|
||||
|
||||
#: cps/templates/index.xml:103 cps/templates/layout.html:137
|
||||
msgid "Public Shelves"
|
||||
@ -1905,19 +1905,27 @@ msgstr "Kom ihåg mig"
|
||||
|
||||
#: cps/templates/login.html:22
|
||||
msgid "Forgot password"
|
||||
msgstr ""
|
||||
msgstr "Glömt lösenord"
|
||||
|
||||
#: cps/templates/login.html:25
|
||||
msgid "Log in with magic link"
|
||||
msgstr "Logga in med magisk länk"
|
||||
|
||||
#: cps/templates/logviewer.html:5
|
||||
msgid "Show Calibre-Web log"
|
||||
msgstr "Visa Calibre-Web-logg"
|
||||
#: cps/templates/logviewer.html:6
|
||||
msgid "Show Calibre-Web log: "
|
||||
msgstr "Visa Calibre-Web-logg: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Show access log"
|
||||
msgstr "Visa åtkomstlogg"
|
||||
msgid "Calibre-Web log: "
|
||||
msgstr "Visa åtkomstlogg: "
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Stream output, can't be displayed"
|
||||
msgstr "Strömutmatning kan inte visas"
|
||||
|
||||
#: cps/templates/logviewer.html:12
|
||||
msgid "Show access log: "
|
||||
msgstr "Visa åtkomstlogg: "
|
||||
|
||||
#: cps/templates/osd.xml:5
|
||||
msgid "Calibre-Web ebook catalog"
|
||||
@ -2093,11 +2101,11 @@ msgstr "Uteslut språk"
|
||||
|
||||
#: cps/templates/search_form.html:95
|
||||
msgid "Extensions"
|
||||
msgstr ""
|
||||
msgstr "Tillägg"
|
||||
|
||||
#: cps/templates/search_form.html:105
|
||||
msgid "Exclude Extensions"
|
||||
msgstr ""
|
||||
msgstr "Uteslut tillägg"
|
||||
|
||||
#: cps/templates/search_form.html:117
|
||||
msgid "Rating bigger than"
|
||||
@ -2211,31 +2219,31 @@ msgstr "Återställ användarlösenordet"
|
||||
msgid "Kindle E-Mail"
|
||||
msgstr "Kindle e-post"
|
||||
|
||||
#: cps/templates/user_edit.html:39
|
||||
#: cps/templates/user_edit.html:41
|
||||
msgid "Show books with language"
|
||||
msgstr "Visa böcker med språk"
|
||||
|
||||
#: cps/templates/user_edit.html:41
|
||||
#: cps/templates/user_edit.html:43
|
||||
msgid "Show all"
|
||||
msgstr "Visa alla"
|
||||
|
||||
#: cps/templates/user_edit.html:51
|
||||
#: cps/templates/user_edit.html:53
|
||||
msgid "OAuth Settings"
|
||||
msgstr "OAuth-inställningar"
|
||||
|
||||
#: cps/templates/user_edit.html:53
|
||||
#: cps/templates/user_edit.html:55
|
||||
msgid "Link"
|
||||
msgstr "Koppla"
|
||||
|
||||
#: cps/templates/user_edit.html:55
|
||||
#: cps/templates/user_edit.html:57
|
||||
msgid "Unlink"
|
||||
msgstr "Koppla bort"
|
||||
|
||||
#: cps/templates/user_edit.html:123
|
||||
#: cps/templates/user_edit.html:125
|
||||
msgid "Delete this user"
|
||||
msgstr "Ta bort den här användaren"
|
||||
|
||||
#: cps/templates/user_edit.html:138
|
||||
#: cps/templates/user_edit.html:140
|
||||
msgid "Recent Downloads"
|
||||
msgstr "Senaste hämtningar"
|
||||
|
||||
@ -2458,3 +2466,9 @@ msgstr "Senaste hämtningar"
|
||||
#~ msgid "New Books"
|
||||
#~ msgstr "Nya böcker"
|
||||
|
||||
#~ msgid "Show Calibre-Web log"
|
||||
#~ msgstr "Visa Calibre-Web-logg"
|
||||
|
||||
#~ msgid "Show access log"
|
||||
#~ msgstr "Visa åtkomstlogg"
|
||||
|
||||
|
@ -479,7 +479,8 @@ def migrate_Database(session):
|
||||
def clean_database(session):
|
||||
# Remove expired remote login tokens
|
||||
now = datetime.datetime.now()
|
||||
session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete()
|
||||
session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).\
|
||||
filter(RemoteAuthToken.token_type !=1 ).delete()
|
||||
session.commit()
|
||||
|
||||
|
||||
|
138
messages.pot
138
messages.pot
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2020-01-12 13:57+0100\n"
|
||||
"POT-Creation-Date: 2020-01-18 12:04+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -59,7 +59,7 @@ msgstr ""
|
||||
msgid "Basic Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:465 cps/web.py:1093
|
||||
#: cps/admin.py:465 cps/web.py:1090
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr ""
|
||||
|
||||
@ -68,7 +68,7 @@ msgstr ""
|
||||
msgid "Add new user"
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:476 cps/web.py:1318
|
||||
#: cps/admin.py:476 cps/web.py:1315
|
||||
msgid "E-mail is not from valid domain"
|
||||
msgstr ""
|
||||
|
||||
@ -112,16 +112,16 @@ msgstr ""
|
||||
msgid "No admin user remaining, can't delete user"
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:612 cps/web.py:1359
|
||||
#: cps/admin.py:612 cps/web.py:1356
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1334
|
||||
#: cps/admin.py:616 cps/admin.py:630 cps/admin.py:644 cps/web.py:1331
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:622 cps/web.py:1327
|
||||
#: cps/admin.py:622 cps/web.py:1324
|
||||
msgid "This username is already taken"
|
||||
msgstr ""
|
||||
|
||||
@ -139,11 +139,11 @@ msgstr ""
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:660 cps/web.py:1118 cps/web.py:1174
|
||||
#: cps/admin.py:660 cps/web.py:1115 cps/web.py:1171
|
||||
msgid "An unknown error occurred. Please try again later."
|
||||
msgstr ""
|
||||
|
||||
#: cps/admin.py:663 cps/web.py:1062
|
||||
#: cps/admin.py:663 cps/web.py:1059
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr ""
|
||||
|
||||
@ -591,7 +591,7 @@ msgid "Show best rated books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/index.xml:46 cps/templates/index.xml:50 cps/ub.py:67
|
||||
#: cps/web.py:1011
|
||||
#: cps/web.py:1009
|
||||
msgid "Read Books"
|
||||
msgstr ""
|
||||
|
||||
@ -600,7 +600,7 @@ msgid "Show read and unread"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/index.xml:53 cps/templates/index.xml:57 cps/ub.py:71
|
||||
#: cps/web.py:1015
|
||||
#: cps/web.py:1013
|
||||
msgid "Unread Books"
|
||||
msgstr ""
|
||||
|
||||
@ -722,7 +722,7 @@ msgstr ""
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:586 cps/web.py:1382 cps/web.py:1478
|
||||
#: cps/web.py:586 cps/web.py:1379 cps/web.py:1475
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible:"
|
||||
msgstr ""
|
||||
|
||||
@ -790,128 +790,128 @@ msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/feed.xml:33 cps/templates/layout.html:44
|
||||
#: cps/templates/layout.html:45 cps/web.py:829 cps/web.py:831
|
||||
#: cps/templates/layout.html:45 cps/web.py:827 cps/web.py:829
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:881
|
||||
#: cps/web.py:879
|
||||
msgid "Published after "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:888
|
||||
#: cps/web.py:886
|
||||
msgid "Published before "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:902
|
||||
#: cps/web.py:900
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:904
|
||||
#: cps/web.py:902
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:970 cps/web.py:982
|
||||
#: cps/web.py:968 cps/web.py:980
|
||||
msgid "search"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1067
|
||||
#: cps/web.py:1064
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1071
|
||||
#: cps/web.py:1068
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1073
|
||||
#: cps/web.py:1070
|
||||
msgid "Please configure your kindle e-mail address first..."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1087
|
||||
#: cps/web.py:1084
|
||||
msgid "E-Mail server is not configured, please contact your administrator!"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1088 cps/web.py:1094 cps/web.py:1119 cps/web.py:1123
|
||||
#: cps/web.py:1128 cps/web.py:1132
|
||||
#: cps/web.py:1085 cps/web.py:1091 cps/web.py:1116 cps/web.py:1120
|
||||
#: cps/web.py:1125 cps/web.py:1129
|
||||
msgid "register"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1121
|
||||
#: cps/web.py:1118
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1124
|
||||
#: cps/web.py:1121
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1127
|
||||
#: cps/web.py:1124
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1144
|
||||
#: cps/web.py:1141
|
||||
msgid "Cannot activate LDAP authentication"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1154 cps/web.py:1281
|
||||
#: cps/web.py:1151 cps/web.py:1278
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1159
|
||||
#: cps/web.py:1156
|
||||
msgid "Could not login. LDAP server down, please contact your administrator"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1163 cps/web.py:1186
|
||||
#: cps/web.py:1160 cps/web.py:1183
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1170
|
||||
#: cps/web.py:1167
|
||||
msgid "New Password was send to your email address"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1176
|
||||
#: cps/web.py:1173
|
||||
msgid "Please enter valid username to reset password"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1182
|
||||
#: cps/web.py:1179
|
||||
#, python-format
|
||||
msgid "You are now logged in as: '%(nickname)s'"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1189 cps/web.py:1213
|
||||
#: cps/web.py:1186 cps/web.py:1210
|
||||
msgid "login"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1225 cps/web.py:1259
|
||||
#: cps/web.py:1222 cps/web.py:1256
|
||||
msgid "Token not found"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1234 cps/web.py:1267
|
||||
#: cps/web.py:1231 cps/web.py:1264
|
||||
msgid "Token has expired"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1243
|
||||
#: cps/web.py:1240
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1320 cps/web.py:1363 cps/web.py:1369
|
||||
#: cps/web.py:1317 cps/web.py:1360 cps/web.py:1366
|
||||
#, python-format
|
||||
msgid "%(name)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1365
|
||||
#: cps/web.py:1362
|
||||
msgid "Profile updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1394 cps/web.py:1397 cps/web.py:1400 cps/web.py:1407
|
||||
#: cps/web.py:1412
|
||||
#: cps/web.py:1391 cps/web.py:1394 cps/web.py:1397 cps/web.py:1404
|
||||
#: cps/web.py:1409
|
||||
msgid "Read a Book"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1423
|
||||
#: cps/web.py:1420
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible."
|
||||
msgstr ""
|
||||
|
||||
@ -1098,7 +1098,7 @@ msgstr ""
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:92
|
||||
#: cps/templates/layout.html:28 cps/templates/shelf.html:73
|
||||
#: cps/templates/shelf_edit.html:19 cps/templates/shelf_order.html:32
|
||||
#: cps/templates/user_edit.html:131
|
||||
#: cps/templates/user_edit.html:133
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
@ -1211,7 +1211,7 @@ msgstr ""
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:30
|
||||
#: cps/templates/book_edit.html:103 cps/templates/user_edit.html:31
|
||||
msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
@ -1238,7 +1238,7 @@ msgstr ""
|
||||
#: cps/templates/book_edit.html:173 cps/templates/config_edit.html:329
|
||||
#: cps/templates/config_view_edit.html:146 cps/templates/login.html:20
|
||||
#: cps/templates/search_form.html:170 cps/templates/shelf_edit.html:17
|
||||
#: cps/templates/user_edit.html:129
|
||||
#: cps/templates/user_edit.html:131
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
@ -1591,35 +1591,35 @@ msgstr ""
|
||||
msgid "Default settings for new users"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:82
|
||||
#: cps/templates/config_view_edit.html:81 cps/templates/user_edit.html:84
|
||||
msgid "Admin user"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:91
|
||||
#: cps/templates/config_view_edit.html:85 cps/templates/user_edit.html:93
|
||||
msgid "Allow Downloads"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:95
|
||||
#: cps/templates/config_view_edit.html:89 cps/templates/user_edit.html:97
|
||||
msgid "Allow book viewer"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:99
|
||||
#: cps/templates/config_view_edit.html:93 cps/templates/user_edit.html:101
|
||||
msgid "Allow Uploads"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:103
|
||||
#: cps/templates/config_view_edit.html:97 cps/templates/user_edit.html:105
|
||||
msgid "Allow Edit"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:107
|
||||
#: cps/templates/config_view_edit.html:101 cps/templates/user_edit.html:109
|
||||
msgid "Allow Delete books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:112
|
||||
#: cps/templates/config_view_edit.html:105 cps/templates/user_edit.html:114
|
||||
msgid "Allow Changing Password"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:116
|
||||
#: cps/templates/config_view_edit.html:109 cps/templates/user_edit.html:118
|
||||
msgid "Allow Editing Public Shelfs"
|
||||
msgstr ""
|
||||
|
||||
@ -1627,11 +1627,11 @@ msgstr ""
|
||||
msgid "Default visibilities for new users"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:74
|
||||
#: cps/templates/config_view_edit.html:135 cps/templates/user_edit.html:76
|
||||
msgid "Show random books in detail view"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:87
|
||||
#: cps/templates/config_view_edit.html:139 cps/templates/user_edit.html:89
|
||||
msgid "Show mature content"
|
||||
msgstr ""
|
||||
|
||||
@ -1910,12 +1910,20 @@ msgstr ""
|
||||
msgid "Log in with magic link"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/logviewer.html:5
|
||||
msgid "Show Calibre-Web log"
|
||||
#: cps/templates/logviewer.html:6
|
||||
msgid "Show Calibre-Web log: "
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Show access log"
|
||||
msgid "Calibre-Web log: "
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/logviewer.html:8
|
||||
msgid "Stream output, can't be displayed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/logviewer.html:12
|
||||
msgid "Show access log: "
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/osd.xml:5
|
||||
@ -2210,31 +2218,31 @@ msgstr ""
|
||||
msgid "Kindle E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:39
|
||||
#: cps/templates/user_edit.html:41
|
||||
msgid "Show books with language"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:41
|
||||
#: cps/templates/user_edit.html:43
|
||||
msgid "Show all"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:51
|
||||
#: cps/templates/user_edit.html:53
|
||||
msgid "OAuth Settings"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:53
|
||||
#: cps/templates/user_edit.html:55
|
||||
msgid "Link"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:55
|
||||
#: cps/templates/user_edit.html:57
|
||||
msgid "Unlink"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:123
|
||||
#: cps/templates/user_edit.html:125
|
||||
msgid "Delete this user"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:138
|
||||
#: cps/templates/user_edit.html:140
|
||||
msgid "Recent Downloads"
|
||||
msgstr ""
|
||||
|
||||
|
@ -31,7 +31,7 @@ rarfile>=2.7
|
||||
|
||||
# other
|
||||
natsort>=2.2.0
|
||||
git+https://github.com/OzzieIsaacs/comicapi.git@5346716578b2843f54d522f44d01bc8d25001d24#egg=comicapi
|
||||
|
||||
git+https://github.com/OzzieIsaacs/comicapi.git@ad8bfe5a1c31db882480433f86db2c5c57634a3f#egg=comicapi
|
||||
#kobo integration
|
||||
jsonschema>=3.2.0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user