Merge pull request #1 from janeczku/master

update from base fork
pull/649/head
Virgil Grigoras 6 years ago committed by GitHub
commit 2b9ab96f28
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

2
.gitattributes vendored

@ -1,3 +1,3 @@
web.py ident export-subst helper.py ident export-subst
cps/static/css/libs/* linguist-vendored cps/static/css/libs/* linguist-vendored
cps/static/js/libs/* linguist-vendored cps/static/js/libs/* linguist-vendored

@ -44,5 +44,9 @@ if args.k:
print("Keyfilepath is invalid. Exiting...") print("Keyfilepath is invalid. Exiting...")
sys.exit(1) sys.exit(1)
if (args.k and not args.c) or (not args.k and args.c):
print("Certfile and Keyfile have to be used together. Exiting...")
sys.exit(1)
if args.k is "": if args.k is "":
keyfilepath = "" keyfilepath = ""

@ -559,16 +559,11 @@ def is_sha1(sha1):
def get_current_version_info(): def get_current_version_info():
try: content = {}
with open('version', 'r') as f: content[0] = '$Format:%H$'
content = f.readlines() content[1] = '$Format:%cI$'
content = [x.strip() for x in content] # content[0] = 'bb7d2c6273ae4560e83950d36d64533343623a57'
# content[1] = '2018-09-09T10:13:08+02:00'
if len(content) != 2: if is_sha1(content[0]) and len(content[1]) > 0:
return False return {'hash': content[0], 'datetime': content[1]}
if is_sha1(content[0]) and len(content[1]) > 0:
return {'hash': content[0], 'datetime': content[1]}
except FileNotFoundError:
return False
return False return False

@ -5,6 +5,8 @@
from socket import error as SocketError from socket import error as SocketError
import sys import sys
import os import os
import signal
try: try:
from gevent.pywsgi import WSGIServer from gevent.pywsgi import WSGIServer
from gevent.pool import Pool from gevent.pool import Pool
@ -26,7 +28,8 @@ class server:
restart= False restart= False
def __init__(self): def __init__(self):
pass signal.signal(signal.SIGINT, self.killServer)
signal.signal(signal.SIGTERM, self.killServer)
def start_gevent(self): def start_gevent(self):
try: try:
@ -86,6 +89,9 @@ class server:
def setRestartTyp(self,starttyp): def setRestartTyp(self,starttyp):
self.restart=starttyp self.restart=starttyp
def killServer(self, signum, frame):
self.stopServer()
def stopServer(self): def stopServer(self):
if gevent_present: if gevent_present:
self.wsgiserver.close() self.wsgiserver.close()

@ -96,8 +96,8 @@
<div class="col-xs-6 col-sm-5">{% if config.config_remote_login %}<span class="glyphicon glyphicon-ok"></span>{% else %}<span class="glyphicon glyphicon-remove"></span>{% endif %}</div> <div class="col-xs-6 col-sm-5">{% if config.config_remote_login %}<span class="glyphicon glyphicon-ok"></span>{% else %}<span class="glyphicon glyphicon-remove"></span>{% endif %}</div>
</div> </div>
</div> </div>
<div class="btn btn-default"><a href="{{url_for('configuration')}}">{{_('Basic Configuration')}}</a></div> <div class="btn btn-default"><a id="basic_config" href="{{url_for('configuration')}}">{{_('Basic Configuration')}}</a></div>
<div class="btn btn-default"><a href="{{url_for('view_configuration')}}">{{_('UI Configuration')}}</a></div> <div class="btn btn-default"><a id="view_config" href="{{url_for('view_configuration')}}">{{_('UI Configuration')}}</a></div>
</div> </div>
</div> </div>
@ -105,8 +105,8 @@
<div class="col"> <div class="col">
<h2>{{_('Administration')}}</h2> <h2>{{_('Administration')}}</h2>
<div class="btn btn-default" id="restart_database">{{_('Reconnect to Calibre DB')}}</div> <div class="btn btn-default" id="restart_database">{{_('Reconnect to Calibre DB')}}</div>
<div class="btn btn-default" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-Web')}}</div> <div class="btn btn-default" id="admin_restart"data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-Web')}}</div>
<div class="btn btn-default" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop Calibre-Web')}}</div> <div class="btn btn-default" id="admin_stop" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop Calibre-Web')}}</div>
</div> </div>
</div> </div>
@ -122,8 +122,8 @@
</thead> </thead>
<tbody> <tbody>
<tr id="current_version"> <tr id="current_version">
<td>{{commit}} <i>({{_('current version')}})</i></td> <td>{{commit}} </td>
<td>/</td> <td><i>{{_('Current version')}}</i></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

@ -26,7 +26,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if display_convertbtn and conversion_formats|length > 0 %} {% if source_formats|length > 0 and conversion_formats|length > 0 %}
<div class="text-center more-stuff"><h4>{{_('Convert book format:')}}</h4> <div class="text-center more-stuff"><h4>{{_('Convert book format:')}}</h4>
<form class="padded-bottom" action="{{ url_for('convert_bookformat', book_id=book.id) }}" method="post" id="book_convert_frm"> <form class="padded-bottom" action="{{ url_for('convert_bookformat', book_id=book.id) }}" method="post" id="book_convert_frm">
<div class="form-group"> <div class="form-group">
@ -34,8 +34,8 @@
<label class="control-label" for="book_format_from">{{_('Convert from:')}}</label> <label class="control-label" for="book_format_from">{{_('Convert from:')}}</label>
<select class="form-control" name="book_format_from" id="book_format_from"> <select class="form-control" name="book_format_from" id="book_format_from">
<option disabled selected value> -- {{_('select an option')}} -- </option> <option disabled selected value> -- {{_('select an option')}} -- </option>
{% for file in book.data %} {% for format in source_formats %}
<option>{{file.format}} </option> <option>{{format|upper}} </option>
{% endfor %} {% endfor %}
</select> </select>
<label class="control-label" for="book_format_to">{{_('Convert to:')}}</label> <label class="control-label" for="book_format_to">{{_('Convert to:')}}</label>

@ -207,12 +207,12 @@
<div class="col-sm-12"> <div class="col-sm-12">
<button type="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button>
{% if not origin %} {% if not origin %}
<a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a>
{% endif %} {% endif %}
{% if success %} {% if success %}
<a href="{{ url_for('login') }}" class="btn btn-default">{{_('Login')}}</a> <a href="{{ url_for('login') }}" name="login" class="btn btn-default">{{_('Login')}}</a>
{% endif %} {% endif %}
</div> </div>
</form> </form>

@ -160,7 +160,7 @@
</div> </div>
</div> </div>
<div class="col-sm-12"> <div class="col-sm-12">
<button type="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" name="submit" class="btn btn-default">{{_('Submit')}}</button>
<a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a>
</div> </div>
</form> </form>

@ -174,8 +174,10 @@
{% if entry.comments|length > 0 and entry.comments[0].text|length > 0%} {% if entry.comments|length > 0 and entry.comments[0].text|length > 0%}
<h3>{{_('Description:')}}</h3> <div class="comments">
{{entry.comments[0].text|safe}} <h3>{{_('Description:')}}</h3>
{{entry.comments[0].text|safe}}
</div>
{% endif %} {% endif %}

@ -122,16 +122,16 @@
<li id="nav_new" {% if page == 'root' %}class="active"{% endif %}><a href="{{url_for('index')}}"><span class="glyphicon glyphicon-book"></span> {{_('Recently Added')}}</a></li> <li id="nav_new" {% if page == 'root' %}class="active"{% endif %}><a href="{{url_for('index')}}"><span class="glyphicon glyphicon-book"></span> {{_('Recently Added')}}</a></li>
{%endif%} {%endif%}
{% if g.user.show_sorted() %} {% if g.user.show_sorted() %}
<li class="dropdown"> <li id="nav_sort" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
<span class="glyphicon glyphicon-sort-by-attributes"></span>{{_('Sorted Books')}} <span class="glyphicon glyphicon-sort-by-attributes"></span>{{_('Sorted Books')}}
<span class="caret"></span> <span class="caret"></span>
</a> </a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li {% if page == 'newest' %}class="active"{% endif %}><a href="{{url_for('newest_books')}}">{{_('Sort By')}} {{_('Newest')}}</a></li> <li id="nav_sort_old" {% if page == 'newest' %}class="active"{% endif %}><a href="{{url_for('newest_books')}}">{{_('Sort By')}} {{_('Newest')}}</a></li>
<li {% if page == 'oldest' %}class="active"{% endif %}><a href="{{url_for('oldest_books')}}">{{_('Sort By')}} {{_('Oldest')}}</a></li> <li id="nav_sort_new" {% if page == 'oldest' %}class="active"{% endif %}><a href="{{url_for('oldest_books')}}">{{_('Sort By')}} {{_('Oldest')}}</a></li>
<li {% if page == 'a-z' %}class="active"{% endif %}><a href="{{url_for('titles_ascending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Ascending')}})</a></li> <li id="nav_sort_asc" {% if page == 'a-z' %}class="active"{% endif %}><a href="{{url_for('titles_ascending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Ascending')}})</a></li>
<li {% if page == 'z-a' %}class="active"{% endif %}><a href="{{url_for('titles_descending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Descending')}})</a></li> <li id="nav_sort_desc" {% if page == 'z-a' %}class="active"{% endif %}><a href="{{url_for('titles_descending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Descending')}})</a></li>
</ul> </ul>
</li> </li>
{%endif%} {%endif%}
@ -139,13 +139,13 @@
<li id="nav_hot" {% if page == 'hot' %}class="active"{% endif %}><a href="{{url_for('hot_books')}}"><span class="glyphicon glyphicon-fire"></span>{{_('Hot Books')}}</a></li> <li id="nav_hot" {% if page == 'hot' %}class="active"{% endif %}><a href="{{url_for('hot_books')}}"><span class="glyphicon glyphicon-fire"></span>{{_('Hot Books')}}</a></li>
{%endif%} {%endif%}
{% if g.user.show_best_rated_books() %} {% if g.user.show_best_rated_books() %}
<li {% if page == 'rated' %}class="active"{% endif %}><a href="{{url_for('best_rated_books')}}"><span class="glyphicon glyphicon-star"></span>{{_('Best rated Books')}}</a></li> <li id="nav_rated" {% if page == 'rated' %}class="active"{% endif %}><a href="{{url_for('best_rated_books')}}"><span class="glyphicon glyphicon-star"></span>{{_('Best rated Books')}}</a></li>
{%endif%} {%endif%}
{% if g.user.show_read_and_unread() %} {% if g.user.show_read_and_unread() %}
{% if not g.user.is_anonymous %} {% if not g.user.is_anonymous %}
<li {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('read_books')}}"><span class="glyphicon glyphicon-eye-open"></span>{{_('Read Books')}}</a></li> <li id="nav_read" {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('read_books')}}"><span class="glyphicon glyphicon-eye-open"></span>{{_('Read Books')}}</a></li>
{%endif%} {%endif%}
<li {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('unread_books')}}"><span class="glyphicon glyphicon-eye-close"></span>{{_('Unread Books')}}</a></li> <li id="nav_unread" {% if page == 'read' %}class="active"{% endif %}><a href="{{url_for('unread_books')}}"><span class="glyphicon glyphicon-eye-close"></span>{{_('Unread Books')}}</a></li>
{%endif%} {%endif%}
{% if g.user.show_random_books() %} {% if g.user.show_random_books() %}
<li id="nav_rand" {% if page == 'discover' %}class="active"{% endif %}><a href="{{url_for('discover')}}"><span class="glyphicon glyphicon-random"></span>{{_('Discover')}}</a></li> <li id="nav_rand" {% if page == 'discover' %}class="active"{% endif %}><a href="{{url_for('discover')}}"><span class="glyphicon glyphicon-random"></span>{{_('Discover')}}</a></li>
@ -165,11 +165,11 @@
{% if g.user.is_authenticated or g.user.is_anonymous %} {% if g.user.is_authenticated or g.user.is_anonymous %}
<li class="nav-head hidden-xs">{{_('Public Shelves')}}</li> <li class="nav-head hidden-xs">{{_('Public Shelves')}}</li>
{% for shelf in g.public_shelfes %} {% for shelf in g.public_shelfes %}
<li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list"></span>{{shelf.name}}</a></li> <li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list public_shelf"></span>{{shelf.name|shortentitle(40)}}</a></li>
{% endfor %} {% endfor %}
<li class="nav-head hidden-xs">{{_('Your Shelves')}}</li> <li class="nav-head hidden-xs">{{_('Your Shelves')}}</li>
{% for shelf in g.user.shelf %} {% for shelf in g.user.shelf %}
<li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list"></span>{{shelf.name}}</a></li> <li><a href="{{url_for('show_shelf', shelf_id=shelf.id)}}"><span class="glyphicon glyphicon-list private_shelf"></span>{{shelf.name|shortentitle(40)}}</a></li>
{% endfor %} {% endfor %}
{% if not g.user.is_anonymous %} {% if not g.user.is_anonymous %}
<li id="nav_createshelf" class="create-shelf"><a href="{{url_for('create_shelf')}}">{{_('Create a Shelf')}}</a></li> <li id="nav_createshelf" class="create-shelf"><a href="{{url_for('create_shelf')}}">{{_('Create a Shelf')}}</a></li>

@ -7,15 +7,11 @@
<label for="nickname">{{_('Username')}}</label> <label for="nickname">{{_('Username')}}</label>
<input type="text" class="form-control" id="nickname" name="nickname" placeholder="{{_('Choose a username')}}" required> <input type="text" class="form-control" id="nickname" name="nickname" placeholder="{{_('Choose a username')}}" required>
</div> </div>
<!--div class="form-group required">
<label for="password">{{_('Password')}}</label>
<input type="password" class="form-control" id="password" name="password" placeholder="{{_('Choose a password')}}" required>
</div-->
<div class="form-group required"> <div class="form-group required">
<label for="email">{{_('E-mail address')}}</label> <label for="email">{{_('E-mail address')}}</label>
<input type="email" class="form-control" id="email" name="email" placeholder="{{_('Your email address')}}" required> <input type="email" class="form-control" id="email" name="email" placeholder="{{_('Your email address')}}" required>
</div> </div>
<button type="submit" class="btn btn-primary">{{_('Register')}}</button> <button type="submit" id="submit" class="btn btn-primary">{{_('Register')}}</button>
</form> </form>
</div> </div>
{% if error %} {% if error %}

@ -4,9 +4,9 @@
<h2>{{title}}</h2> <h2>{{title}}</h2>
{% if g.user.is_authenticated %} {% if g.user.is_authenticated %}
{% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public %} {% if (g.user.role_edit_shelfs() and shelf.is_public ) or not shelf.is_public %}
<div data-toggle="modal" data-target="#DeleteShelfDialog" class="btn btn-danger">{{ _('Delete this Shelf') }} </div> <div id="delete_shelf" data-toggle="modal" data-target="#DeleteShelfDialog" class="btn btn-danger">{{ _('Delete this Shelf') }} </div>
<a href="{{ url_for('edit_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Edit Shelf') }} </a> <a id="edit_shelf" href="{{ url_for('edit_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Edit Shelf') }} </a>
<a href="{{ url_for('order_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Change order') }} </a> <a id="order_shelf" href="{{ url_for('order_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Change order') }} </a>
{% endif %} {% endif %}
{% endif %} {% endif %}
<div class="row"> <div class="row">
@ -14,11 +14,13 @@
{% for entry in entries %} {% for entry in entries %}
<div class="col-sm-3 col-lg-2 col-xs-6 book"> <div class="col-sm-3 col-lg-2 col-xs-6 book">
<div class="cover"> <div class="cover">
{% if entry.has_cover is defined %} <a href="{{ url_for('show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false">
<a href="{{ url_for('show_book', book_id=entry.id) }}" data-toggle="modal" data-target="#bookDetailsModal" data-remote="false"> {% if entry.has_cover %}
<img src="{{ url_for('get_cover', cover_path=entry.path.replace('\\','/')) }}" /> <img src="{{ url_for('get_cover', cover_path=entry.path.replace('\\','/')) }}" alt="{{ entry.title }}" />
</a> {% else %}
{% endif %} <img src="{{ url_for('static', filename='generic_cover.jpg') }}" alt="{{ entry.title }}" />
{% endif %}
</a>
</div> </div>
<div class="meta"> <div class="meta">
<p class="title">{{entry.title|shortentitle}}</p> <p class="title">{{entry.title|shortentitle}}</p>
@ -56,7 +58,7 @@
<div class="modal-body text-center"> <div class="modal-body text-center">
<span>{{_('Shelf will be lost for everybody and forever!')}}</span> <span>{{_('Shelf will be lost for everybody and forever!')}}</span>
<p></p> <p></p>
<a href="{{ url_for('delete_shelf', shelf_id=shelf.id) }}" class="btn btn-danger">{{_('Ok')}}</a> <a id="confirm" href="{{ url_for('delete_shelf', shelf_id=shelf.id) }}" class="btn btn-danger">{{_('Ok')}}</a>
<button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button> <button type="button" class="btn btn-default" data-dismiss="modal">{{_('Back')}}</button>
</div> </div>
</div> </div>

@ -14,7 +14,7 @@
</label> </label>
</div> </div>
{% endif %} {% endif %}
<button type="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" class="btn btn-default" id="submit">{{_('Submit')}}</button>
{% if shelf.id != None %} {% if shelf.id != None %}
<a href="{{ url_for('show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a>
{% endif %} {% endif %}

@ -22,8 +22,6 @@
<input type="password" class="form-control" name="password" id="password" value="" autocomplete="off"> <input type="password" class="form-control" name="password" id="password" value="" autocomplete="off">
</div> </div>
{% endif %} {% endif %}
{% endif %} {% endif %}
<div class="form-group"> <div class="form-group">
<label for="kindle_mail">{{_('Kindle E-Mail')}}</label> <label for="kindle_mail">{{_('Kindle E-Mail')}}</label>
@ -142,7 +140,7 @@
{% if g.user and g.user.role_admin() and not profile and not new_user and not content.role_anonymous() %} {% if g.user and g.user.role_admin() and not profile and not new_user and not content.role_anonymous() %}
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" name="delete"> {{_('Delete this user')}} <input type="checkbox" id="delete" name="delete"> {{_('Delete this user')}}
</label> </label>
</div> </div>
{% endif %} {% endif %}
@ -151,8 +149,8 @@
<button type="submit" id="submit" class="btn btn-default">{{_('Submit')}}</button> <button type="submit" id="submit" class="btn btn-default">{{_('Submit')}}</button>
{% if not profile %} {% if not profile %}
<a href="{{ url_for('admin') }}" id="back" class="btn btn-default">{{_('Back')}}</a> <a href="{{ url_for('admin') }}" id="back" class="btn btn-default">{{_('Back')}}</a>
</div>
{% endif %} {% endif %}
</div>
</form> </form>
{% if downloads %} {% if downloads %}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -3,13 +3,11 @@
# This file is distributed under the same license as the Calibre-Web # This file is distributed under the same license as the Calibre-Web
# project. # project.
# FIRST AUTHOR white<space_white@yahoo.com>, 2017. # FIRST AUTHOR white<space_white@yahoo.com>, 2017.
# # Translation template file..
# Copyright (C) 2011 Kovid Goyal
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-Web\n" "Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2018-09-08 14:49+0200\n" "POT-Creation-Date: 2018-09-14 21:11+0200\n"
"PO-Revision-Date: 2018-02-07 02:20-0500\n" "PO-Revision-Date: 2018-02-07 02:20-0500\n"
"Last-Translator: white <space_white@yahoo.com>\n" "Last-Translator: white <space_white@yahoo.com>\n"
"Language: ja\n" "Language: ja\n"
@ -116,707 +114,750 @@ msgstr ""
msgid "Unrar binary file not found" msgid "Unrar binary file not found"
msgstr "" msgstr ""
#: cps/web.py:1114 #: cps/web.py:1112 cps/web.py:2778
msgid "Unknown"
msgstr ""
#: cps/web.py:1121 cps/web.py:1152
msgid "HTTP Error"
msgstr ""
#: cps/web.py:1123 cps/web.py:1154
msgid "Connection error"
msgstr ""
#: cps/web.py:1125 cps/web.py:1156
msgid "Timeout while establishing connection"
msgstr ""
#: cps/web.py:1127 cps/web.py:1158
msgid "General error"
msgstr ""
#: cps/web.py:1133
msgid "Unexpected data while reading update information"
msgstr ""
#: cps/web.py:1140
msgid "No update available. You already have the latest version installed"
msgstr ""
#: cps/web.py:1165
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
#: cps/web.py:1215
msgid "Could not fetch update information"
msgstr ""
#: cps/web.py:1230
msgid "Requesting update package" msgid "Requesting update package"
msgstr "更新パッケージを要求します" msgstr "更新パッケージを要求します"
#: cps/web.py:1115 #: cps/web.py:1231
msgid "Downloading update package" msgid "Downloading update package"
msgstr "更新パッケージをダウンロードします" msgstr "更新パッケージをダウンロードします"
#: cps/web.py:1116 #: cps/web.py:1232
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "更新パッケージをZIP解凍します" msgstr "更新パッケージをZIP解凍します"
#: cps/web.py:1117 #: cps/web.py:1233
msgid "Files are replaced" msgid "Files are replaced"
msgstr "ファイルを書き換えました" msgstr "ファイルを書き換えました"
#: cps/web.py:1118 #: cps/web.py:1234
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "データベースの接続が閉じられました" msgstr "データベースの接続が閉じられました"
#: cps/web.py:1119 #: cps/web.py:1235
msgid "Server is stopped" msgid "Server is stopped"
msgstr "サーバがシャットダウンされました" msgstr "サーバがシャットダウンされました"
#: cps/web.py:1120 #: cps/web.py:1236
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "更新完了、Okayまたは再読み込みボタンを押してください" msgstr "更新完了、Okayまたは再読み込みボタンを押してください"
#: cps/web.py:1140 #: cps/web.py:1256
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "最近追加された本" msgstr "最近追加された本"
#: cps/web.py:1150 #: cps/web.py:1266
msgid "Newest Books" msgid "Newest Books"
msgstr "最新の本" msgstr "最新の本"
#: cps/web.py:1162 #: cps/web.py:1278
msgid "Oldest Books" msgid "Oldest Books"
msgstr "最古の本" msgstr "最古の本"
#: cps/web.py:1174 #: cps/web.py:1290
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "本(A-Z)" msgstr "本(A-Z)"
#: cps/web.py:1185 #: cps/web.py:1301
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "本 (Z-A)" msgstr "本 (Z-A)"
#: cps/web.py:1214 #: cps/web.py:1330
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "有名な本(ダウンロード数)" msgstr "有名な本(ダウンロード数)"
#: cps/web.py:1227 #: cps/web.py:1343
msgid "Best rated books" msgid "Best rated books"
msgstr "最高評判の本" msgstr "最高評判の本"
#: cps/templates/index.xml:36 cps/web.py:1239 #: cps/templates/index.xml:36 cps/web.py:1355
msgid "Random Books" msgid "Random Books"
msgstr "任意の本" msgstr "任意の本"
#: cps/web.py:1254 #: cps/web.py:1370
msgid "Author list" msgid "Author list"
msgstr "著者リスト" msgstr "著者リスト"
#: cps/web.py:1266 cps/web.py:1329 cps/web.py:1484 cps/web.py:2036 #: cps/web.py:1382 cps/web.py:1445 cps/web.py:1600 cps/web.py:2152
msgid "Error opening eBook. File does not exist or file is not accessible:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません" msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません"
#: cps/templates/index.xml:73 cps/web.py:1313 #: cps/templates/index.xml:73 cps/web.py:1429
msgid "Series list" msgid "Series list"
msgstr "叢書リスト" msgstr "叢書リスト"
#: cps/web.py:1327 #: cps/web.py:1443
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "叢書: %(serie)s" msgstr "叢書: %(serie)s"
#: cps/web.py:1354 #: cps/web.py:1470
msgid "Available languages" msgid "Available languages"
msgstr "利用可能な言語" msgstr "利用可能な言語"
#: cps/web.py:1371 #: cps/web.py:1487
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "言語: %(name)s" msgstr "言語: %(name)s"
#: cps/templates/index.xml:66 cps/web.py:1382 #: cps/templates/index.xml:66 cps/web.py:1498
msgid "Category list" msgid "Category list"
msgstr "カテゴリーリスト" msgstr "カテゴリーリスト"
#: cps/web.py:1396 #: cps/web.py:1512
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "カテゴリー: %(name)s" msgstr "カテゴリー: %(name)s"
#: cps/templates/layout.html:71 cps/web.py:1535 #: cps/templates/layout.html:71 cps/web.py:1651
msgid "Tasks" msgid "Tasks"
msgstr "" msgstr ""
#: cps/web.py:1565 #: cps/web.py:1681
msgid "Statistics" msgid "Statistics"
msgstr "統計" msgstr "統計"
#: cps/web.py:1670 #: cps/web.py:1786
msgid "" msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
"Callback domain is not verified, please follow steps to verify domain in "
"google developer console"
msgstr "" msgstr ""
#: cps/web.py:1746 #: cps/web.py:1861
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "サーバを再起動しました、ページを再読み込みしてください" msgstr "サーバを再起動しました、ページを再読み込みしてください"
#: cps/web.py:1749 #: cps/web.py:1864
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "サーバをシャットダウンします、ページを閉じてください" msgstr "サーバをシャットダウンします、ページを閉じてください"
#: cps/web.py:1767 #: cps/web.py:1883
msgid "Update done" msgid "Update done"
msgstr "更新完了" msgstr "更新完了"
#: cps/web.py:1837 #: cps/web.py:1953
msgid "Published after " msgid "Published after "
msgstr "" msgstr ""
#: cps/web.py:1844 #: cps/web.py:1960
msgid "Published before " msgid "Published before "
msgstr "" msgstr ""
#: cps/web.py:1858 #: cps/web.py:1974
#, python-format #, python-format
msgid "Rating <= %(rating)s" msgid "Rating <= %(rating)s"
msgstr "" msgstr ""
#: cps/web.py:1860 #: cps/web.py:1976
#, python-format #, python-format
msgid "Rating >= %(rating)s" msgid "Rating >= %(rating)s"
msgstr "" msgstr ""
#: cps/web.py:1919 cps/web.py:1928 #: cps/web.py:2035 cps/web.py:2044
msgid "search" msgid "search"
msgstr "検索" msgstr "検索"
#: cps/templates/index.xml:44 cps/templates/index.xml:48 #: cps/templates/index.xml:44 cps/templates/index.xml:48
#: cps/templates/layout.html:146 cps/web.py:1995 #: cps/templates/layout.html:146 cps/web.py:2111
msgid "Read Books" msgid "Read Books"
msgstr "既読の本" msgstr "既読の本"
#: cps/templates/index.xml:52 cps/templates/index.xml:56 #: cps/templates/index.xml:52 cps/templates/index.xml:56
#: cps/templates/layout.html:148 cps/web.py:1998 #: cps/templates/layout.html:148 cps/web.py:2114
msgid "Unread Books" msgid "Unread Books"
msgstr "未読の本" msgstr "未読の本"
#: cps/web.py:2046 cps/web.py:2048 cps/web.py:2050 cps/web.py:2062 #: cps/web.py:2162 cps/web.py:2164 cps/web.py:2166 cps/web.py:2178
msgid "Read a Book" msgid "Read a Book"
msgstr "本を読む" msgstr "本を読む"
#: cps/web.py:2128 cps/web.py:3006 #: cps/web.py:2244 cps/web.py:3129
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "全ての項目を入力してください" msgstr "全ての項目を入力してください"
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159 #: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
#: cps/web.py:2161 #: cps/web.py:2277
msgid "register" msgid "register"
msgstr "登録" msgstr "登録"
#: cps/web.py:2149 cps/web.py:3222 #: cps/web.py:2265 cps/web.py:3345
msgid "An unknown error occurred. Please try again later." msgid "An unknown error occurred. Please try again later."
msgstr "" msgstr ""
#: cps/web.py:2152 #: cps/web.py:2268
msgid "Your e-mail is not allowed to register" msgid "Your e-mail is not allowed to register"
msgstr "" msgstr ""
#: cps/web.py:2155 #: cps/web.py:2271
msgid "Confirmation e-mail was send to your e-mail account." msgid "Confirmation e-mail was send to your e-mail account."
msgstr "" msgstr ""
#: cps/web.py:2158 #: cps/web.py:2274
msgid "This username or e-mail address is already in use." msgid "This username or e-mail address is already in use."
msgstr "" msgstr ""
#: cps/web.py:2175 cps/web.py:2271 #: cps/web.py:2291 cps/web.py:2387
#, python-format #, python-format
msgid "you are now logged in as: '%(nickname)s'" msgid "you are now logged in as: '%(nickname)s'"
msgstr "%(nickname)s としてログインします" msgstr "%(nickname)s としてログインします"
#: cps/web.py:2180 #: cps/web.py:2296
msgid "Wrong Username or Password" msgid "Wrong Username or Password"
msgstr "ユーザ名またはパスワードは間違いました" msgstr "ユーザ名またはパスワードは間違いました"
#: cps/web.py:2186 cps/web.py:2207 #: cps/web.py:2302 cps/web.py:2323
msgid "login" msgid "login"
msgstr "ログイン" msgstr "ログイン"
#: cps/web.py:2219 cps/web.py:2250 #: cps/web.py:2335 cps/web.py:2366
msgid "Token not found" msgid "Token not found"
msgstr "トークンは見つかりません" msgstr "トークンは見つかりません"
#: cps/web.py:2227 cps/web.py:2258 #: cps/web.py:2343 cps/web.py:2374
msgid "Token has expired" msgid "Token has expired"
msgstr "トークンは失効されました" msgstr "トークンは失効されました"
#: cps/web.py:2235 #: cps/web.py:2351
msgid "Success! Please return to your device" msgid "Success! Please return to your device"
msgstr "成功しまた!端末に戻ってください" msgstr "成功しまた!端末に戻ってください"
#: cps/web.py:2285 #: cps/web.py:2401
msgid "Please configure the SMTP mail settings first..." msgid "Please configure the SMTP mail settings first..."
msgstr "SMTPメールをまず設定してください" msgstr "SMTPメールをまず設定してください"
#: cps/web.py:2289 #: cps/web.py:2405
#, python-format #, python-format
msgid "Book successfully queued for sending to %(kindlemail)s" msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:2293 #: cps/web.py:2409
#, python-format #, python-format
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "%(res)s を送信する際にエーラが発生しました" msgstr "%(res)s を送信する際にエーラが発生しました"
#: cps/web.py:2295 cps/web.py:3060 #: cps/web.py:2411 cps/web.py:3183
msgid "Please configure your kindle e-mail address first..." msgid "Please configure your kindle e-mail address first..."
msgstr "" msgstr ""
#: cps/web.py:2339 #: cps/web.py:2455
#, python-format #, python-format
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "本 %(sname)s を書架に追加されました" msgstr "本 %(sname)s を書架に追加されました"
#: cps/web.py:2350 #: cps/web.py:2466
msgid "Invalid shelf specified" msgid "Invalid shelf specified"
msgstr "" msgstr ""
#: cps/web.py:2355 #: cps/web.py:2471
#, python-format #, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s" msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2360 #: cps/web.py:2476
msgid "User is not allowed to edit public shelves" msgid "User is not allowed to edit public shelves"
msgstr "" msgstr ""
#: cps/web.py:2378 #: cps/web.py:2494
#, python-format #, python-format
msgid "Books are already part of the shelf: %(name)s" msgid "Books are already part of the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2392 #: cps/web.py:2508
#, python-format #, python-format
msgid "Books have been added to shelf: %(sname)s" msgid "Books have been added to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2394 #: cps/web.py:2510
#, python-format #, python-format
msgid "Could not add books to shelf: %(sname)s" msgid "Could not add books to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2431 #: cps/web.py:2547
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "本 %(sname)s を書架から除去されました" msgstr "本 %(sname)s を書架から除去されました"
#: cps/web.py:2437 #: cps/web.py:2553
#, python-format #, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2457 cps/web.py:2481 #: cps/web.py:2573 cps/web.py:2597
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "名前を使った書架 '%(title)s' は既に存在しました" msgstr "名前を使った書架 '%(title)s' は既に存在しました"
#: cps/web.py:2462 #: cps/web.py:2578
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "書架%(title)s は作成されました" msgstr "書架%(title)s は作成されました"
#: cps/web.py:2464 cps/web.py:2492 #: cps/web.py:2580 cps/web.py:2608
msgid "There was an error" msgid "There was an error"
msgstr "エーラが発生しました" msgstr "エーラが発生しました"
#: cps/web.py:2465 cps/web.py:2467 #: cps/web.py:2581 cps/web.py:2583
msgid "create a shelf" msgid "create a shelf"
msgstr "書架を作成する" msgstr "書架を作成する"
#: cps/web.py:2490 #: cps/web.py:2606
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "書架 %(title)s 変わりました" msgstr "書架 %(title)s 変わりました"
#: cps/web.py:2493 cps/web.py:2495 #: cps/web.py:2609 cps/web.py:2611
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "書架を編集する" msgstr "書架を編集する"
#: cps/web.py:2516 #: cps/web.py:2632
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "%(name)s の書架を削除されました" msgstr "%(name)s の書架を削除されました"
#: cps/web.py:2538 #: cps/web.py:2659
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "書架: '%(name)s'" msgstr "書架: '%(name)s'"
#: cps/web.py:2541 #: cps/web.py:2662
msgid "Error opening shelf. Shelf does not exist or is not accessible" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "書架を開けません。書架は存在しないまたはアクセスできません" msgstr "書架を開けません。書架は存在しないまたはアクセスできません"
#: cps/web.py:2572 #: cps/web.py:2693
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "'%(name)s' の書架の順番を入れ替える" msgstr "'%(name)s' の書架の順番を入れ替える"
#: cps/web.py:2601 cps/web.py:3012 #: cps/web.py:2722 cps/web.py:3135
msgid "E-mail is not from valid domain" msgid "E-mail is not from valid domain"
msgstr "" msgstr ""
#: cps/web.py:2603 cps/web.py:2644 cps/web.py:2647 #: cps/web.py:2724 cps/web.py:2765 cps/web.py:2768
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "%(name)sのプロファイル" msgstr "%(name)sのプロファイル"
#: cps/web.py:2642 #: cps/web.py:2763
msgid "Found an existing account for this e-mail address." msgid "Found an existing account for this e-mail address."
msgstr "" msgstr ""
#: cps/web.py:2645 #: cps/web.py:2766
msgid "Profile updated" msgid "Profile updated"
msgstr "プロファイルが更新されました" msgstr "プロファイルが更新されました"
#: cps/web.py:2657 #: cps/web.py:2794
msgid "Unknown"
msgstr ""
#: cps/web.py:2671
msgid "Admin page" msgid "Admin page"
msgstr "管理者ページ" msgstr "管理者ページ"
#: cps/web.py:2749 cps/web.py:2922 #: cps/web.py:2872 cps/web.py:3045
msgid "Calibre-Web configuration updated" msgid "Calibre-Web configuration updated"
msgstr "Calibre-Web 設定を更新されました" msgstr "Calibre-Web 設定を更新されました"
#: cps/templates/admin.html:91 cps/web.py:2762 #: cps/templates/admin.html:100 cps/web.py:2885
msgid "UI Configuration" msgid "UI Configuration"
msgstr "" msgstr ""
#: cps/web.py:2780 #: cps/web.py:2903
msgid "Import of optional Google Drive requirements missing" msgid "Import of optional Google Drive requirements missing"
msgstr "" msgstr ""
#: cps/web.py:2783 #: cps/web.py:2906
msgid "client_secrets.json is missing or not readable" msgid "client_secrets.json is missing or not readable"
msgstr "" msgstr ""
#: cps/web.py:2788 cps/web.py:2815 #: cps/web.py:2911 cps/web.py:2938
msgid "client_secrets.json is not configured for web application" msgid "client_secrets.json is not configured for web application"
msgstr "" msgstr ""
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856 #: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937 #: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
#: cps/web.py:2954 #: cps/web.py:3077
msgid "Basic Configuration" msgid "Basic Configuration"
msgstr "基本設定" msgstr "基本設定"
#: cps/web.py:2841 #: cps/web.py:2964
msgid "Keyfile location is not valid, please enter correct path" msgid "Keyfile location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/web.py:2853 #: cps/web.py:2976
msgid "Certfile location is not valid, please enter correct path" msgid "Certfile location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/web.py:2895 #: cps/web.py:3018
msgid "Logfile location is not valid, please enter correct path" msgid "Logfile location is not valid, please enter correct path"
msgstr "ログファイルの場所は不適切です。正しい場所を入力してください" msgstr "ログファイルの場所は不適切です。正しい場所を入力してください"
#: cps/web.py:2934 #: cps/web.py:3057
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "データベースの場所は不適切です。正しい場所を入力してください" msgstr "データベースの場所は不適切です。正しい場所を入力してください"
#: cps/templates/admin.html:31 cps/web.py:3008 cps/web.py:3014 cps/web.py:3030 #: cps/templates/admin.html:33 cps/web.py:3131 cps/web.py:3137 cps/web.py:3153
msgid "Add new user" msgid "Add new user"
msgstr "新規ユーザ追加" msgstr "新規ユーザ追加"
#: cps/web.py:3020 #: cps/web.py:3143
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "ユーザ '%(user)s' が作成されました" msgstr "ユーザ '%(user)s' が作成されました"
#: cps/web.py:3024 #: cps/web.py:3147
msgid "Found an existing account for this e-mail address or nickname." msgid "Found an existing account for this e-mail address or nickname."
msgstr "" msgstr ""
#: cps/web.py:3048 cps/web.py:3062 #: cps/web.py:3171 cps/web.py:3185
msgid "E-mail server settings updated" msgid "E-mail server settings updated"
msgstr "" msgstr ""
#: cps/web.py:3055 #: cps/web.py:3178
#, python-format #, python-format
msgid "Test e-mail successfully send to %(kindlemail)s" msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:3058 #: cps/web.py:3181
#, python-format #, python-format
msgid "There was an error sending the Test e-mail: %(res)s" msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:3063 #: cps/web.py:3186
msgid "Edit e-mail server settings" msgid "Edit e-mail server settings"
msgstr "" msgstr ""
#: cps/web.py:3088 #: cps/web.py:3211
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "ユーザ '%(nick)s' 削除されました" msgstr "ユーザ '%(nick)s' 削除されました"
#: cps/web.py:3197 #: cps/web.py:3320
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "ユーザ '%(nick)s' 更新されました" msgstr "ユーザ '%(nick)s' 更新されました"
#: cps/web.py:3200 #: cps/web.py:3323
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "不明のエーラが発生しました" msgstr "不明のエーラが発生しました"
#: cps/web.py:3202 #: cps/web.py:3325
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "ユーザ編集 %(nick)s" msgstr "ユーザ編集 %(nick)s"
#: cps/web.py:3219 #: cps/web.py:3342
#, python-format #, python-format
msgid "Password for user %(user)s reset" msgid "Password for user %(user)s reset"
msgstr "" msgstr ""
#: cps/web.py:3239 #: cps/web.py:3362
msgid "Error opening eBook. File does not exist or file is not accessible" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません" msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません"
#: cps/web.py:3270 cps/web.py:3546 cps/web.py:3551 cps/web.py:3706 #: cps/web.py:3390 cps/web.py:3667 cps/web.py:3672 cps/web.py:3827
msgid "edit metadata" msgid "edit metadata"
msgstr "メタデータを編集します" msgstr "メタデータを編集します"
#: cps/web.py:3284 cps/web.py:3576 #: cps/web.py:3401 cps/web.py:3697
#, python-format #, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "ファイル拡張子 '%(ext)s' をこのサーバにアップロードする許可はありません" msgstr "ファイル拡張子 '%(ext)s' をこのサーバにアップロードする許可はありません"
#: cps/web.py:3288 cps/web.py:3580 #: cps/web.py:3405 cps/web.py:3701
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "ファイルをアップロードするために拡張子が必要です" msgstr "ファイルをアップロードするために拡張子が必要です"
#: cps/web.py:3300 cps/web.py:3600 #: cps/web.py:3417 cps/web.py:3721
#, python-format #, python-format
msgid "Failed to create path %(path)s (Permission denied)." msgid "Failed to create path %(path)s (Permission denied)."
msgstr "場所 %(path)s の作成を失敗しました (許可拒否)" msgstr "場所 %(path)s の作成を失敗しました (許可拒否)"
#: cps/web.py:3305 #: cps/web.py:3422
#, python-format #, python-format
msgid "Failed to store file %(file)s." msgid "Failed to store file %(file)s."
msgstr "フアイル %(file)s の保存を失敗しました" msgstr "フアイル %(file)s の保存を失敗しました"
#: cps/web.py:3321 #: cps/web.py:3438
#, python-format #, python-format
msgid "File format %(ext)s added to %(book)s" msgid "File format %(ext)s added to %(book)s"
msgstr "" msgstr ""
#: cps/web.py:3339 #: cps/web.py:3455
#, python-format #, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)." msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3346 #: cps/web.py:3462
#, python-format #, python-format
msgid "Failed to store cover-file %(cover)s." msgid "Failed to store cover-file %(cover)s."
msgstr "" msgstr ""
#: cps/web.py:3349 #: cps/web.py:3465
msgid "Cover-file is not a valid image file" msgid "Cover-file is not a valid image file"
msgstr "" msgstr ""
#: cps/web.py:3362 cps/web.py:3366 #: cps/web.py:3482 cps/web.py:3486
msgid "unknown" msgid "unknown"
msgstr "不明" msgstr "不明"
#: cps/web.py:3388 #: cps/web.py:3508
msgid "Cover is not a jpg file, can't save" msgid "Cover is not a jpg file, can't save"
msgstr "" msgstr ""
#: cps/web.py:3555 #: cps/web.py:3554
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
#: cps/web.py:3676
msgid "Error editing book, please check logfile for details" msgid "Error editing book, please check logfile for details"
msgstr "" msgstr ""
#: cps/web.py:3605 #: cps/web.py:3726
#, python-format #, python-format
msgid "Failed to store file %(file)s (Permission denied)." msgid "Failed to store file %(file)s (Permission denied)."
msgstr "ファイル %(file)s の保存を失敗しました (許可拒否)" msgstr "ファイル %(file)s の保存を失敗しました (許可拒否)"
#: cps/web.py:3610 #: cps/web.py:3731
#, python-format #, python-format
msgid "Failed to delete file %(file)s (Permission denied)." msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "ファイル %(file)s の削除を失敗しました (許可拒否)" msgstr "ファイル %(file)s の削除を失敗しました (許可拒否)"
#: cps/web.py:3692 #: cps/web.py:3813
#, python-format #, python-format
msgid "File %(file)s uploaded" msgid "File %(file)s uploaded"
msgstr "" msgstr ""
#: cps/web.py:3722 #: cps/web.py:3843
msgid "Source or destination format for conversion missing" msgid "Source or destination format for conversion missing"
msgstr "" msgstr ""
#: cps/web.py:3732 #: cps/web.py:3853
#, python-format #, python-format
msgid "Book successfully queued for converting to %(book_format)s" msgid "Book successfully queued for converting to %(book_format)s"
msgstr "" msgstr ""
#: cps/web.py:3736 #: cps/web.py:3857
#, python-format #, python-format
msgid "There was an error converting this book: %(res)s" msgid "There was an error converting this book: %(res)s"
msgstr "" msgstr ""
#: cps/worker.py:215 cps/worker.py:387 #: cps/worker.py:215 cps/worker.py:398
msgid "Started" msgid "Started"
msgstr "" msgstr ""
#: cps/worker.py:237 #: cps/worker.py:251
#, python-format #, python-format
msgid "Convertertool %(converter)s not found" msgid "Convertertool %(converter)s not found"
msgstr "" msgstr ""
#: cps/worker.py:272 #: cps/worker.py:287
#, python-format #, python-format
msgid "Ebook-converter failed: %(error)s" msgid "Ebook-converter failed: %(error)s"
msgstr "" msgstr ""
#: cps/worker.py:283 #: cps/worker.py:298
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen 失敗しました、エーラ %(error)s. メッセージ: %(message)s" msgstr "Kindlegen 失敗しました、エーラ %(error)s. メッセージ: %(message)s"
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438 #: cps/worker.py:355 cps/worker.py:374
msgid "Finished"
msgstr ""
#: cps/worker.py:344 cps/worker.py:363
msgid "Waiting" msgid "Waiting"
msgstr "" msgstr ""
#: cps/worker.py:351 #: cps/worker.py:362
msgid "This e-mail has been sent via Calibre-Web." msgid "This e-mail has been sent via Calibre-Web."
msgstr "" msgstr ""
#: cps/worker.py:472 #: cps/worker.py:388 cps/worker.py:484
msgid "Finished"
msgstr ""
#: cps/worker.py:476
msgid "Failed" msgid "Failed"
msgstr "" msgstr ""
#: cps/templates/admin.html:4 #: cps/templates/admin.html:6
msgid "User list" msgid "User list"
msgstr "ユーザリスト" msgstr "ユーザリスト"
#: cps/templates/admin.html:7 #: cps/templates/admin.html:9
msgid "Nickname" msgid "Nickname"
msgstr "通称" msgstr "通称"
#: cps/templates/admin.html:8 #: cps/templates/admin.html:10
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
#: cps/templates/admin.html:9 #: cps/templates/admin.html:11
msgid "Kindle" msgid "Kindle"
msgstr "Kindle" msgstr "Kindle"
#: cps/templates/admin.html:10 #: cps/templates/admin.html:12
msgid "DLS" msgid "DLS"
msgstr "DLS" msgstr "DLS"
#: cps/templates/admin.html:11 cps/templates/layout.html:74 #: cps/templates/admin.html:13 cps/templates/layout.html:74
msgid "Admin" msgid "Admin"
msgstr "管理者" msgstr "管理者"
#: cps/templates/admin.html:12 cps/templates/detail.html:22 #: cps/templates/admin.html:14 cps/templates/detail.html:22
#: cps/templates/detail.html:31 #: cps/templates/detail.html:31
msgid "Download" msgid "Download"
msgstr "ダウンロード" msgstr "ダウンロード"
#: cps/templates/admin.html:13 cps/templates/layout.html:64 #: cps/templates/admin.html:15 cps/templates/layout.html:64
msgid "Upload" msgid "Upload"
msgstr "アップロード" msgstr "アップロード"
#: cps/templates/admin.html:14 #: cps/templates/admin.html:16
msgid "Edit" msgid "Edit"
msgstr "編集" msgstr "編集"
#: cps/templates/admin.html:32 #: cps/templates/admin.html:39
msgid "SMTP e-mail server settings" msgid "SMTP e-mail server settings"
msgstr "" msgstr ""
#: cps/templates/admin.html:35 cps/templates/email_edit.html:11 #: cps/templates/admin.html:42 cps/templates/email_edit.html:11
msgid "SMTP hostname" msgid "SMTP hostname"
msgstr "SMTPホスト名" msgstr "SMTPホスト名"
#: cps/templates/admin.html:36 #: cps/templates/admin.html:43
msgid "SMTP port" msgid "SMTP port"
msgstr "SMTPポート" msgstr "SMTPポート"
#: cps/templates/admin.html:37 #: cps/templates/admin.html:44
msgid "SSL" msgid "SSL"
msgstr "SSL" msgstr "SSL"
#: cps/templates/admin.html:38 cps/templates/email_edit.html:27 #: cps/templates/admin.html:45 cps/templates/email_edit.html:27
msgid "SMTP login" msgid "SMTP login"
msgstr "SMTP ログイン" msgstr "SMTP ログイン"
#: cps/templates/admin.html:39 #: cps/templates/admin.html:46
msgid "From mail" msgid "From mail"
msgstr "メールから" msgstr "メールから"
#: cps/templates/admin.html:48 #: cps/templates/admin.html:56
msgid "Change SMTP settings" msgid "Change SMTP settings"
msgstr "SMTP設定を変更する" msgstr "SMTP設定を変更する"
#: cps/templates/admin.html:50 #: cps/templates/admin.html:62
msgid "Configuration" msgid "Configuration"
msgstr "設定" msgstr "設定"
#: cps/templates/admin.html:53 #: cps/templates/admin.html:65
msgid "Calibre DB dir" msgid "Calibre DB dir"
msgstr "Calibre データベースの場所" msgstr "Calibre データベースの場所"
#: cps/templates/admin.html:57 #: cps/templates/admin.html:69
msgid "Log level" msgid "Log level"
msgstr "" msgstr ""
#: cps/templates/admin.html:61 #: cps/templates/admin.html:73
msgid "Port" msgid "Port"
msgstr "ポート" msgstr "ポート"
#: cps/templates/admin.html:67 cps/templates/config_view_edit.html:23 #: cps/templates/admin.html:79 cps/templates/config_view_edit.html:23
msgid "Books per page" msgid "Books per page"
msgstr "本数毎ページ" msgstr "本数毎ページ"
#: cps/templates/admin.html:71 #: cps/templates/admin.html:83
msgid "Uploading" msgid "Uploading"
msgstr "アップロード中" msgstr "アップロード中"
#: cps/templates/admin.html:75 #: cps/templates/admin.html:87
msgid "Anonymous browsing" msgid "Anonymous browsing"
msgstr "" msgstr ""
#: cps/templates/admin.html:79 #: cps/templates/admin.html:91
msgid "Public registration" msgid "Public registration"
msgstr "公的登録" msgstr "公的登録"
#: cps/templates/admin.html:83 cps/templates/remote_login.html:4 #: cps/templates/admin.html:95 cps/templates/remote_login.html:4
msgid "Remote login" msgid "Remote login"
msgstr "遠距離ログイン" msgstr "遠距離ログイン"
#: cps/templates/admin.html:93 #: cps/templates/admin.html:106
msgid "Administration" msgid "Administration"
msgstr "管理" msgstr "管理"
#: cps/templates/admin.html:94 #: cps/templates/admin.html:107
msgid "Current commit timestamp"
msgstr "現在コミットのタイムスタンプ"
#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr "最新コミットのタイムスタンプ"
#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB" msgid "Reconnect to Calibre DB"
msgstr "Calibreデータベースに再接続します" msgstr "Calibreデータベースに再接続します"
#: cps/templates/admin.html:98 #: cps/templates/admin.html:108
msgid "Restart Calibre-Web" msgid "Restart Calibre-Web"
msgstr "Calibre-Webを再起動します" msgstr "Calibre-Webを再起動します"
#: cps/templates/admin.html:99 #: cps/templates/admin.html:109
msgid "Stop Calibre-Web" msgid "Stop Calibre-Web"
msgstr "Calibre-Webを停止します" msgstr "Calibre-Webを停止します"
#: cps/templates/admin.html:100 #: cps/templates/admin.html:115
msgid "Update"
msgstr ""
#: cps/templates/admin.html:119
msgid "Version"
msgstr ""
#: cps/templates/admin.html:120
msgid "Details"
msgstr ""
#: cps/templates/admin.html:126
msgid "Current version"
msgstr ""
#: cps/templates/admin.html:132
msgid "Check for update" msgid "Check for update"
msgstr "更新を確認します" msgstr "更新を確認します"
#: cps/templates/admin.html:101 #: cps/templates/admin.html:133
msgid "Perform Update" msgid "Perform Update"
msgstr "更新を実行します" msgstr "更新を実行します"
#: cps/templates/admin.html:110 #: cps/templates/admin.html:145
msgid "Do you really want to restart Calibre-Web?" msgid "Do you really want to restart Calibre-Web?"
msgstr "Calibre-Webを再起動します。宜しいですか?" msgstr "Calibre-Webを再起動します。宜しいですか?"
#: cps/templates/admin.html:115 cps/templates/admin.html:129 #: cps/templates/admin.html:150 cps/templates/admin.html:164
#: cps/templates/admin.html:150 cps/templates/shelf.html:59 #: cps/templates/admin.html:184 cps/templates/shelf.html:59
msgid "Ok" msgid "Ok"
msgstr "はい" msgstr "はい"
#: cps/templates/admin.html:116 cps/templates/admin.html:130 #: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164 #: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
@ -825,11 +866,11 @@ msgstr "はい"
msgid "Back" msgid "Back"
msgstr "戻る" msgstr "戻る"
#: cps/templates/admin.html:128 #: cps/templates/admin.html:163
msgid "Do you really want to stop Calibre-Web?" msgid "Do you really want to stop Calibre-Web?"
msgstr "Calibre-Webを停止します。宜しいですか?" msgstr "Calibre-Webを停止します。宜しいですか?"
#: cps/templates/admin.html:141 #: cps/templates/admin.html:175
msgid "Updating, please do not reload page" msgid "Updating, please do not reload page"
msgstr "更新中、ページ再読み込みしないでください" msgstr "更新中、ページ再読み込みしないでください"
@ -910,9 +951,7 @@ msgid "Rating"
msgstr "評価" msgstr "評価"
#: cps/templates/book_edit.html:87 #: cps/templates/book_edit.html:87
msgid "" msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
"Cover URL (jpg, cover is downloaded and stored in database, field is "
"afterwards empty again)"
msgstr "" msgstr ""
#: cps/templates/book_edit.html:91 #: cps/templates/book_edit.html:91
@ -1840,9 +1879,7 @@ msgstr "最近ダウンロード"
#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" #~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ msgstr "タイトルを'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ: %(error)s" #~ msgstr "タイトルを'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ: %(error)s"
#~ msgid "" #~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ "Rename author from: '%(src)s' to "
#~ "'%(dest)s' failed with error: %(error)s"
#~ msgstr "著者を'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ:%(error)s" #~ msgstr "著者を'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ:%(error)s"
#~ msgid "Password for user %(user)s reset" #~ msgid "Password for user %(user)s reset"
@ -1866,3 +1903,9 @@ msgstr "最近ダウンロード"
#~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server" #~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server"
#~ msgstr "ファイル拡張子 \"%(ext)s\" をこのサーバにアップロードする許可はありません" #~ msgstr "ファイル拡張子 \"%(ext)s\" をこのサーバにアップロードする許可はありません"
#~ msgid "Current commit timestamp"
#~ msgstr "現在コミットのタイムスタンプ"
#~ msgid "Newest commit timestamp"
#~ msgstr "最新コミットのタイムスタンプ"

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-Web\n" "Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2018-09-08 14:49+0200\n" "POT-Creation-Date: 2018-09-14 21:11+0200\n"
"PO-Revision-Date: 2018-08-27 17:06+0700\n" "PO-Revision-Date: 2018-08-27 17:06+0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language: km_KH\n" "Language: km_KH\n"
@ -115,709 +115,750 @@ msgstr ""
msgid "Unrar binary file not found" msgid "Unrar binary file not found"
msgstr "" msgstr ""
#: cps/web.py:1114 #: cps/web.py:1112 cps/web.py:2778
msgid "Unknown"
msgstr "មិនដឹង"
#: cps/web.py:1121 cps/web.py:1152
msgid "HTTP Error"
msgstr ""
#: cps/web.py:1123 cps/web.py:1154
msgid "Connection error"
msgstr ""
#: cps/web.py:1125 cps/web.py:1156
msgid "Timeout while establishing connection"
msgstr ""
#: cps/web.py:1127 cps/web.py:1158
msgid "General error"
msgstr ""
#: cps/web.py:1133
msgid "Unexpected data while reading update information"
msgstr ""
#: cps/web.py:1140
msgid "No update available. You already have the latest version installed"
msgstr ""
#: cps/web.py:1165
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
#: cps/web.py:1215
msgid "Could not fetch update information"
msgstr ""
#: cps/web.py:1230
msgid "Requesting update package" msgid "Requesting update package"
msgstr "កំពុងស្នើសុំឯកសារបច្ចុប្បន្នភាព" msgstr "កំពុងស្នើសុំឯកសារបច្ចុប្បន្នភាព"
#: cps/web.py:1115 #: cps/web.py:1231
msgid "Downloading update package" msgid "Downloading update package"
msgstr "កំពុងទាញយកឯកសារបច្ចុប្បន្នភាព" msgstr "កំពុងទាញយកឯកសារបច្ចុប្បន្នភាព"
#: cps/web.py:1116 #: cps/web.py:1232
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "កំពុងពន្លាឯកសារបច្ចុប្បន្នភាព" msgstr "កំពុងពន្លាឯកសារបច្ចុប្បន្នភាព"
#: cps/web.py:1117 #: cps/web.py:1233
msgid "Files are replaced" msgid "Files are replaced"
msgstr "ឯកសារត្រូវបានផ្លាស់ប្តូរ" msgstr "ឯកសារត្រូវបានផ្លាស់ប្តូរ"
#: cps/web.py:1118 #: cps/web.py:1234
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "ទំនាក់ទំនងទៅមូលដ្ឋានទិន្នន័យត្រូវបានផ្តាច់" msgstr "ទំនាក់ទំនងទៅមូលដ្ឋានទិន្នន័យត្រូវបានផ្តាច់"
#: cps/web.py:1119 #: cps/web.py:1235
msgid "Server is stopped" msgid "Server is stopped"
msgstr "ម៉ាស៊ីន server ត្រូវបានបញ្ឈប់" msgstr "ម៉ាស៊ីន server ត្រូវបានបញ្ឈប់"
#: cps/web.py:1120 #: cps/web.py:1236
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "ការធ្វើបច្ចុប្បន្នភាពបានបញ្ចប់ សូមចុច okay រួចបើកទំព័រជាថ្មី" msgstr "ការធ្វើបច្ចុប្បន្នភាពបានបញ្ចប់ សូមចុច okay រួចបើកទំព័រជាថ្មី"
#: cps/web.py:1140 #: cps/web.py:1256
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "សៀវភៅដែលទើបបានបន្ថែម" msgstr "សៀវភៅដែលទើបបានបន្ថែម"
#: cps/web.py:1150 #: cps/web.py:1266
msgid "Newest Books" msgid "Newest Books"
msgstr "សៀវភៅថ្មីៗជាងគេ" msgstr "សៀវភៅថ្មីៗជាងគេ"
#: cps/web.py:1162 #: cps/web.py:1278
msgid "Oldest Books" msgid "Oldest Books"
msgstr "សៀវភៅចាស់ជាងគេ" msgstr "សៀវភៅចាស់ជាងគេ"
#: cps/web.py:1174 #: cps/web.py:1290
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "សៀវភៅពី A ទៅ Z" msgstr "សៀវភៅពី A ទៅ Z"
#: cps/web.py:1185 #: cps/web.py:1301
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "សៀវភៅពី Z ទៅ A" msgstr "សៀវភៅពី Z ទៅ A"
#: cps/web.py:1214 #: cps/web.py:1330
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "សៀវភៅដែលត្រូវបានទាញយកច្រើនជាងគេ" msgstr "សៀវភៅដែលត្រូវបានទាញយកច្រើនជាងគេ"
#: cps/web.py:1227 #: cps/web.py:1343
msgid "Best rated books" msgid "Best rated books"
msgstr "សៀវភៅដែលត្រូវបានវាយតម្លៃល្អជាងគេ" msgstr "សៀវភៅដែលត្រូវបានវាយតម្លៃល្អជាងគេ"
#: cps/templates/index.xml:36 cps/web.py:1239 #: cps/templates/index.xml:36 cps/web.py:1355
msgid "Random Books" msgid "Random Books"
msgstr "សៀវភៅចៃដន្យ" msgstr "សៀវភៅចៃដន្យ"
#: cps/web.py:1254 #: cps/web.py:1370
msgid "Author list" msgid "Author list"
msgstr "បញ្ជីអ្នកនិពន្ធ" msgstr "បញ្ជីអ្នកនិពន្ធ"
#: cps/web.py:1266 cps/web.py:1329 cps/web.py:1484 cps/web.py:2036 #: cps/web.py:1382 cps/web.py:1445 cps/web.py:1600 cps/web.py:2152
msgid "Error opening eBook. File does not exist or file is not accessible:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ មិនមានឯកសារនេះ ឬមិនអាចបើកបាន៖" msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ មិនមានឯកសារនេះ ឬមិនអាចបើកបាន៖"
#: cps/templates/index.xml:73 cps/web.py:1313 #: cps/templates/index.xml:73 cps/web.py:1429
msgid "Series list" msgid "Series list"
msgstr "បញ្ជីស៊េរី" msgstr "បញ្ជីស៊េរី"
#: cps/web.py:1327 #: cps/web.py:1443
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "ស៊េរី៖ %(serie)s" msgstr "ស៊េរី៖ %(serie)s"
#: cps/web.py:1354 #: cps/web.py:1470
msgid "Available languages" msgid "Available languages"
msgstr "ភាសាដែលមាន" msgstr "ភាសាដែលមាន"
#: cps/web.py:1371 #: cps/web.py:1487
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "ភាសា៖ %(name)s" msgstr "ភាសា៖ %(name)s"
#: cps/templates/index.xml:66 cps/web.py:1382 #: cps/templates/index.xml:66 cps/web.py:1498
msgid "Category list" msgid "Category list"
msgstr "បញ្ជីប្រភេទ" msgstr "បញ្ជីប្រភេទ"
#: cps/web.py:1396 #: cps/web.py:1512
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "ប្រភេទ៖ %(name)s" msgstr "ប្រភេទ៖ %(name)s"
#: cps/templates/layout.html:71 cps/web.py:1535 #: cps/templates/layout.html:71 cps/web.py:1651
msgid "Tasks" msgid "Tasks"
msgstr "កិច្ចការនានា" msgstr "កិច្ចការនានា"
#: cps/web.py:1565 #: cps/web.py:1681
msgid "Statistics" msgid "Statistics"
msgstr "ស្ថិតិ" msgstr "ស្ថិតិ"
#: cps/web.py:1670 #: cps/web.py:1786
msgid "" msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
"Callback domain is not verified, please follow steps to verify domain in " msgstr "Callback domain មិនទាន់បានផ្ទៀងផ្ទាត់ឲប្រើទេ សូមធ្វើតាមជំហានដើម្បីផ្ទៀងផ្ទាត់ domain នៅក្នុង Google Developer Console"
"google developer console"
msgstr ""
"Callback domain មិនទាន់បានផ្ទៀងផ្ទាត់ឲប្រើទេ "
"សូមធ្វើតាមជំហានដើម្បីផ្ទៀងផ្ទាត់ domain នៅក្នុង Google Developer Console"
#: cps/web.py:1746 #: cps/web.py:1861
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "ម៉ាស៊ីន server បានដំណើរការម្តងទៀត សូមបើកទំព័រជាថ្មី" msgstr "ម៉ាស៊ីន server បានដំណើរការម្តងទៀត សូមបើកទំព័រជាថ្មី"
#: cps/web.py:1749 #: cps/web.py:1864
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "កំពុងបិទម៉ាស៊ីន server សូមបិទផ្ទាំងនេះ" msgstr "កំពុងបិទម៉ាស៊ីន server សូមបិទផ្ទាំងនេះ"
#: cps/web.py:1767 #: cps/web.py:1883
msgid "Update done" msgid "Update done"
msgstr "ការធ្វើបច្ចុប្បន្នភាពរួចរាល់" msgstr "ការធ្វើបច្ចុប្បន្នភាពរួចរាល់"
#: cps/web.py:1837 #: cps/web.py:1953
msgid "Published after " msgid "Published after "
msgstr "បានបោះពុម្ភក្រោយ " msgstr "បានបោះពុម្ភក្រោយ "
#: cps/web.py:1844 #: cps/web.py:1960
msgid "Published before " msgid "Published before "
msgstr "បានបោះពុម្ភមុន " msgstr "បានបោះពុម្ភមុន "
#: cps/web.py:1858 #: cps/web.py:1974
#, python-format #, python-format
msgid "Rating <= %(rating)s" msgid "Rating <= %(rating)s"
msgstr "ការវាយតម្លៃ <= %(rating)s" msgstr "ការវាយតម្លៃ <= %(rating)s"
#: cps/web.py:1860 #: cps/web.py:1976
#, python-format #, python-format
msgid "Rating >= %(rating)s" msgid "Rating >= %(rating)s"
msgstr "ការវាយតម្លៃ >= %(rating)s" msgstr "ការវាយតម្លៃ >= %(rating)s"
#: cps/web.py:1919 cps/web.py:1928 #: cps/web.py:2035 cps/web.py:2044
msgid "search" msgid "search"
msgstr "ស្វែងរក" msgstr "ស្វែងរក"
#: cps/templates/index.xml:44 cps/templates/index.xml:48 #: cps/templates/index.xml:44 cps/templates/index.xml:48
#: cps/templates/layout.html:146 cps/web.py:1995 #: cps/templates/layout.html:146 cps/web.py:2111
msgid "Read Books" msgid "Read Books"
msgstr "សៀវភៅដែលបានអានរួច" msgstr "សៀវភៅដែលបានអានរួច"
#: cps/templates/index.xml:52 cps/templates/index.xml:56 #: cps/templates/index.xml:52 cps/templates/index.xml:56
#: cps/templates/layout.html:148 cps/web.py:1998 #: cps/templates/layout.html:148 cps/web.py:2114
msgid "Unread Books" msgid "Unread Books"
msgstr "សៀវភៅដែលមិនទាន់បានអាន" msgstr "សៀវភៅដែលមិនទាន់បានអាន"
#: cps/web.py:2046 cps/web.py:2048 cps/web.py:2050 cps/web.py:2062 #: cps/web.py:2162 cps/web.py:2164 cps/web.py:2166 cps/web.py:2178
msgid "Read a Book" msgid "Read a Book"
msgstr "អានសៀវភៅ" msgstr "អានសៀវភៅ"
#: cps/web.py:2128 cps/web.py:3006 #: cps/web.py:2244 cps/web.py:3129
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "សូមបំពេញចន្លោះទាំងអស់!" msgstr "សូមបំពេញចន្លោះទាំងអស់!"
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159 #: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
#: cps/web.py:2161 #: cps/web.py:2277
msgid "register" msgid "register"
msgstr "ចុះឈ្មោះ" msgstr "ចុះឈ្មោះ"
#: cps/web.py:2149 cps/web.py:3222 #: cps/web.py:2265 cps/web.py:3345
msgid "An unknown error occurred. Please try again later." msgid "An unknown error occurred. Please try again later."
msgstr "" msgstr ""
#: cps/web.py:2152 #: cps/web.py:2268
msgid "Your e-mail is not allowed to register" msgid "Your e-mail is not allowed to register"
msgstr "" msgstr ""
#: cps/web.py:2155 #: cps/web.py:2271
msgid "Confirmation e-mail was send to your e-mail account." msgid "Confirmation e-mail was send to your e-mail account."
msgstr "" msgstr ""
#: cps/web.py:2158 #: cps/web.py:2274
msgid "This username or e-mail address is already in use." msgid "This username or e-mail address is already in use."
msgstr "" msgstr ""
#: cps/web.py:2175 cps/web.py:2271 #: cps/web.py:2291 cps/web.py:2387
#, python-format #, python-format
msgid "you are now logged in as: '%(nickname)s'" msgid "you are now logged in as: '%(nickname)s'"
msgstr "ឥឡូវអ្នកបានចូលដោយមានឈ្មោះថា៖ %(nickname)s" msgstr "ឥឡូវអ្នកបានចូលដោយមានឈ្មោះថា៖ %(nickname)s"
#: cps/web.py:2180 #: cps/web.py:2296
msgid "Wrong Username or Password" msgid "Wrong Username or Password"
msgstr "ខុសឈ្មោះអ្នកប្រើប្រាស់ ឬលេខសម្ងាត់" msgstr "ខុសឈ្មោះអ្នកប្រើប្រាស់ ឬលេខសម្ងាត់"
#: cps/web.py:2186 cps/web.py:2207 #: cps/web.py:2302 cps/web.py:2323
msgid "login" msgid "login"
msgstr "ចូលប្រើ" msgstr "ចូលប្រើ"
#: cps/web.py:2219 cps/web.py:2250 #: cps/web.py:2335 cps/web.py:2366
msgid "Token not found" msgid "Token not found"
msgstr "រកមិនឃើញវត្ថុតាង" msgstr "រកមិនឃើញវត្ថុតាង"
#: cps/web.py:2227 cps/web.py:2258 #: cps/web.py:2343 cps/web.py:2374
msgid "Token has expired" msgid "Token has expired"
msgstr "វត្ថុតាងហួសពេលកំណត់" msgstr "វត្ថុតាងហួសពេលកំណត់"
#: cps/web.py:2235 #: cps/web.py:2351
msgid "Success! Please return to your device" msgid "Success! Please return to your device"
msgstr "ជោគជ័យ! សូមវិលមកឧបករណ៍អ្នកវិញ" msgstr "ជោគជ័យ! សូមវិលមកឧបករណ៍អ្នកវិញ"
#: cps/web.py:2285 #: cps/web.py:2401
msgid "Please configure the SMTP mail settings first..." msgid "Please configure the SMTP mail settings first..."
msgstr "សូមកំណត់អ៊ីមែល SMTP ជាមុនសិន" msgstr "សូមកំណត់អ៊ីមែល SMTP ជាមុនសិន"
#: cps/web.py:2289 #: cps/web.py:2405
#, python-format #, python-format
msgid "Book successfully queued for sending to %(kindlemail)s" msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "សៀវភៅបានចូលជួរសម្រាប់ផ្ញើទៅ %(kindlemail)s ដោយជោគជ័យ" msgstr "សៀវភៅបានចូលជួរសម្រាប់ផ្ញើទៅ %(kindlemail)s ដោយជោគជ័យ"
#: cps/web.py:2293 #: cps/web.py:2409
#, python-format #, python-format
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "មានបញ្ហានៅពេលផ្ញើសៀវភៅនេះ៖ %(res)s" msgstr "មានបញ្ហានៅពេលផ្ញើសៀវភៅនេះ៖ %(res)s"
#: cps/web.py:2295 cps/web.py:3060 #: cps/web.py:2411 cps/web.py:3183
msgid "Please configure your kindle e-mail address first..." msgid "Please configure your kindle e-mail address first..."
msgstr "" msgstr ""
#: cps/web.py:2339 #: cps/web.py:2455
#, python-format #, python-format
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "សៀវភៅត្រូវបានបន្ថែមទៅធ្នើ៖ %(sname)s" msgstr "សៀវភៅត្រូវបានបន្ថែមទៅធ្នើ៖ %(sname)s"
#: cps/web.py:2350 #: cps/web.py:2466
msgid "Invalid shelf specified" msgid "Invalid shelf specified"
msgstr "" msgstr ""
#: cps/web.py:2355 #: cps/web.py:2471
#, python-format #, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s" msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2360 #: cps/web.py:2476
msgid "User is not allowed to edit public shelves" msgid "User is not allowed to edit public shelves"
msgstr "" msgstr ""
#: cps/web.py:2378 #: cps/web.py:2494
#, python-format #, python-format
msgid "Books are already part of the shelf: %(name)s" msgid "Books are already part of the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2392 #: cps/web.py:2508
#, python-format #, python-format
msgid "Books have been added to shelf: %(sname)s" msgid "Books have been added to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2394 #: cps/web.py:2510
#, python-format #, python-format
msgid "Could not add books to shelf: %(sname)s" msgid "Could not add books to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2431 #: cps/web.py:2547
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "សៀវភៅត្រូវបានដកចេញពីធ្នើ៖ %(sname)s" msgstr "សៀវភៅត្រូវបានដកចេញពីធ្នើ៖ %(sname)s"
#: cps/web.py:2437 #: cps/web.py:2553
#, python-format #, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "សូមអភ័យទោស អ្នកមិនមានសិទ្ធិដកសៀវភៅចេញពីធ្នើនេះទេ៖ %(sname)s" msgstr "សូមអភ័យទោស អ្នកមិនមានសិទ្ធិដកសៀវភៅចេញពីធ្នើនេះទេ៖ %(sname)s"
#: cps/web.py:2457 cps/web.py:2481 #: cps/web.py:2573 cps/web.py:2597
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "មានធ្នើដែលមានឈ្មោះ %(title)s រួចហើយ។" msgstr "មានធ្នើដែលមានឈ្មោះ %(title)s រួចហើយ។"
#: cps/web.py:2462 #: cps/web.py:2578
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានបង្កើត" msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានបង្កើត"
#: cps/web.py:2464 cps/web.py:2492 #: cps/web.py:2580 cps/web.py:2608
msgid "There was an error" msgid "There was an error"
msgstr "មានបញ្ហា" msgstr "មានបញ្ហា"
#: cps/web.py:2465 cps/web.py:2467 #: cps/web.py:2581 cps/web.py:2583
msgid "create a shelf" msgid "create a shelf"
msgstr "បង្កើតធ្នើ" msgstr "បង្កើតធ្នើ"
#: cps/web.py:2490 #: cps/web.py:2606
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានប្តូរ" msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានប្តូរ"
#: cps/web.py:2493 cps/web.py:2495 #: cps/web.py:2609 cps/web.py:2611
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "កែប្រែធ្នើ" msgstr "កែប្រែធ្នើ"
#: cps/web.py:2516 #: cps/web.py:2632
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "បានបង្កើតធ្នើឈ្មោះ %(name)s ដោយជោគជ័យ" msgstr "បានបង្កើតធ្នើឈ្មោះ %(name)s ដោយជោគជ័យ"
#: cps/web.py:2538 #: cps/web.py:2659
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "ធ្នើ៖ %(name)s" msgstr "ធ្នើ៖ %(name)s"
#: cps/web.py:2541 #: cps/web.py:2662
msgid "Error opening shelf. Shelf does not exist or is not accessible" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "មានបញ្ហាពេលបើកធ្នើ។ ពុំមានធ្នើ ឬមិនអាចបើកបាន" msgstr "មានបញ្ហាពេលបើកធ្នើ។ ពុំមានធ្នើ ឬមិនអាចបើកបាន"
#: cps/web.py:2572 #: cps/web.py:2693
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "ប្តូរលំដាប់ធ្នើ៖ %(name)s" msgstr "ប្តូរលំដាប់ធ្នើ៖ %(name)s"
#: cps/web.py:2601 cps/web.py:3012 #: cps/web.py:2722 cps/web.py:3135
msgid "E-mail is not from valid domain" msgid "E-mail is not from valid domain"
msgstr "" msgstr ""
#: cps/web.py:2603 cps/web.py:2644 cps/web.py:2647 #: cps/web.py:2724 cps/web.py:2765 cps/web.py:2768
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "ព័ត៌មានសង្ខេបរបស់ %(name)s" msgstr "ព័ត៌មានសង្ខេបរបស់ %(name)s"
#: cps/web.py:2642 #: cps/web.py:2763
msgid "Found an existing account for this e-mail address." msgid "Found an existing account for this e-mail address."
msgstr "" msgstr ""
#: cps/web.py:2645 #: cps/web.py:2766
msgid "Profile updated" msgid "Profile updated"
msgstr "ព័ត៌មានសង្ខេបបានកែប្រែ" msgstr "ព័ត៌មានសង្ខេបបានកែប្រែ"
#: cps/web.py:2657 #: cps/web.py:2794
msgid "Unknown"
msgstr "មិនដឹង"
#: cps/web.py:2671
msgid "Admin page" msgid "Admin page"
msgstr "ទំព័ររដ្ឋបាល" msgstr "ទំព័ររដ្ឋបាល"
#: cps/web.py:2749 cps/web.py:2922 #: cps/web.py:2872 cps/web.py:3045
msgid "Calibre-Web configuration updated" msgid "Calibre-Web configuration updated"
msgstr "" msgstr ""
#: cps/templates/admin.html:91 cps/web.py:2762 #: cps/templates/admin.html:100 cps/web.py:2885
msgid "UI Configuration" msgid "UI Configuration"
msgstr "ការកំណត់ផ្ទាំងប្រើប្រាស់" msgstr "ការកំណត់ផ្ទាំងប្រើប្រាស់"
#: cps/web.py:2780 #: cps/web.py:2903
msgid "Import of optional Google Drive requirements missing" msgid "Import of optional Google Drive requirements missing"
msgstr "ខ្វះការនាំចូលតម្រូវការបន្ថែមរបស់ Google Drive" msgstr "ខ្វះការនាំចូលតម្រូវការបន្ថែមរបស់ Google Drive"
#: cps/web.py:2783 #: cps/web.py:2906
msgid "client_secrets.json is missing or not readable" msgid "client_secrets.json is missing or not readable"
msgstr "មិនមានឯកសារ client_secrets.json ឬមិនអាចបើកបាន" msgstr "មិនមានឯកសារ client_secrets.json ឬមិនអាចបើកបាន"
#: cps/web.py:2788 cps/web.py:2815 #: cps/web.py:2911 cps/web.py:2938
msgid "client_secrets.json is not configured for web application" msgid "client_secrets.json is not configured for web application"
msgstr "ឯកសារ client_secrets.json មិនទាន់បានកំណត់សម្រាប់កម្មវិធីវែប" msgstr "ឯកសារ client_secrets.json មិនទាន់បានកំណត់សម្រាប់កម្មវិធីវែប"
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856 #: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937 #: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
#: cps/web.py:2954 #: cps/web.py:3077
msgid "Basic Configuration" msgid "Basic Configuration"
msgstr "ការកំណត់សាមញ្ញ" msgstr "ការកំណត់សាមញ្ញ"
#: cps/web.py:2841 #: cps/web.py:2964
msgid "Keyfile location is not valid, please enter correct path" msgid "Keyfile location is not valid, please enter correct path"
msgstr "ទីតាំងរបស់ keyfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" msgstr "ទីតាំងរបស់ keyfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
#: cps/web.py:2853 #: cps/web.py:2976
msgid "Certfile location is not valid, please enter correct path" msgid "Certfile location is not valid, please enter correct path"
msgstr "ទីតាំងរបស់ certfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" msgstr "ទីតាំងរបស់ certfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
#: cps/web.py:2895 #: cps/web.py:3018
msgid "Logfile location is not valid, please enter correct path" msgid "Logfile location is not valid, please enter correct path"
msgstr "ទីតាំងរបស់ logfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" msgstr "ទីតាំងរបស់ logfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
#: cps/web.py:2934 #: cps/web.py:3057
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "ទីតាំងរបស់ database មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ" msgstr "ទីតាំងរបស់ database មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
#: cps/templates/admin.html:31 cps/web.py:3008 cps/web.py:3014 cps/web.py:3030 #: cps/templates/admin.html:33 cps/web.py:3131 cps/web.py:3137 cps/web.py:3153
msgid "Add new user" msgid "Add new user"
msgstr "បន្ថែមអ្នកប្រើប្រាស់ថ្មី" msgstr "បន្ថែមអ្នកប្រើប្រាស់ថ្មី"
#: cps/web.py:3020 #: cps/web.py:3143
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "បានបង្កើតអ្នកប្រើប្រាស់ %(user)s" msgstr "បានបង្កើតអ្នកប្រើប្រាស់ %(user)s"
#: cps/web.py:3024 #: cps/web.py:3147
msgid "Found an existing account for this e-mail address or nickname." msgid "Found an existing account for this e-mail address or nickname."
msgstr "" msgstr ""
#: cps/web.py:3048 cps/web.py:3062 #: cps/web.py:3171 cps/web.py:3185
msgid "E-mail server settings updated" msgid "E-mail server settings updated"
msgstr "" msgstr ""
#: cps/web.py:3055 #: cps/web.py:3178
#, python-format #, python-format
msgid "Test e-mail successfully send to %(kindlemail)s" msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:3058 #: cps/web.py:3181
#, python-format #, python-format
msgid "There was an error sending the Test e-mail: %(res)s" msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:3063 #: cps/web.py:3186
msgid "Edit e-mail server settings" msgid "Edit e-mail server settings"
msgstr "" msgstr ""
#: cps/web.py:3088 #: cps/web.py:3211
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "អ្នកប្រើប្រាស់ %(nick)s ត្រូវបានលុប" msgstr "អ្នកប្រើប្រាស់ %(nick)s ត្រូវបានលុប"
#: cps/web.py:3197 #: cps/web.py:3320
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "អ្នកប្រើប្រាស់ %(nick)s ត្រូវបានកែប្រែ" msgstr "អ្នកប្រើប្រាស់ %(nick)s ត្រូវបានកែប្រែ"
#: cps/web.py:3200 #: cps/web.py:3323
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "បញ្ហាដែលមិនដឹងបានកើតឡើង។" msgstr "បញ្ហាដែលមិនដឹងបានកើតឡើង។"
#: cps/web.py:3202 #: cps/web.py:3325
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "កែប្រែអ្នកប្រើប្រាស់ %(nick)s" msgstr "កែប្រែអ្នកប្រើប្រាស់ %(nick)s"
#: cps/web.py:3219 #: cps/web.py:3342
#, python-format #, python-format
msgid "Password for user %(user)s reset" msgid "Password for user %(user)s reset"
msgstr "" msgstr ""
#: cps/web.py:3239 #: cps/web.py:3362
msgid "Error opening eBook. File does not exist or file is not accessible" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ ពុំមានឯកសារ ឬឯកសារនេះមិនអាចបើកបាន" msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ ពុំមានឯកសារ ឬឯកសារនេះមិនអាចបើកបាន"
#: cps/web.py:3270 cps/web.py:3546 cps/web.py:3551 cps/web.py:3706 #: cps/web.py:3390 cps/web.py:3667 cps/web.py:3672 cps/web.py:3827
msgid "edit metadata" msgid "edit metadata"
msgstr "កែប្រែទិន្នន័យមេតា" msgstr "កែប្រែទិន្នន័យមេតា"
#: cps/web.py:3284 cps/web.py:3576 #: cps/web.py:3401 cps/web.py:3697
#, python-format #, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "ឯកសារប្រភេទ '%(ext)s' មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ" msgstr "ឯកសារប្រភេទ '%(ext)s' មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ"
#: cps/web.py:3288 cps/web.py:3580 #: cps/web.py:3405 cps/web.py:3701
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "ឯកសារដែលត្រូវអាប់ឡូដត្រូវមានកន្ទុយឯកសារ" msgstr "ឯកសារដែលត្រូវអាប់ឡូដត្រូវមានកន្ទុយឯកសារ"
#: cps/web.py:3300 cps/web.py:3600 #: cps/web.py:3417 cps/web.py:3721
#, python-format #, python-format
msgid "Failed to create path %(path)s (Permission denied)." msgid "Failed to create path %(path)s (Permission denied)."
msgstr "មិនអាចបង្កើតទីតាំង %(path)s (ពុំមានសិទ្ធិ)។" msgstr "មិនអាចបង្កើតទីតាំង %(path)s (ពុំមានសិទ្ធិ)។"
#: cps/web.py:3305 #: cps/web.py:3422
#, python-format #, python-format
msgid "Failed to store file %(file)s." msgid "Failed to store file %(file)s."
msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។" msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។"
#: cps/web.py:3321 #: cps/web.py:3438
#, python-format #, python-format
msgid "File format %(ext)s added to %(book)s" msgid "File format %(ext)s added to %(book)s"
msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(book)s" msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(book)s"
#: cps/web.py:3339 #: cps/web.py:3455
#, python-format #, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)." msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3346 #: cps/web.py:3462
#, python-format #, python-format
msgid "Failed to store cover-file %(cover)s." msgid "Failed to store cover-file %(cover)s."
msgstr "" msgstr ""
#: cps/web.py:3349 #: cps/web.py:3465
msgid "Cover-file is not a valid image file" msgid "Cover-file is not a valid image file"
msgstr "" msgstr ""
#: cps/web.py:3362 cps/web.py:3366 #: cps/web.py:3482 cps/web.py:3486
msgid "unknown" msgid "unknown"
msgstr "មិនដឹង" msgstr "មិនដឹង"
#: cps/web.py:3388 #: cps/web.py:3508
msgid "Cover is not a jpg file, can't save" msgid "Cover is not a jpg file, can't save"
msgstr "គម្របមិនមែនជាឯកសារ JPG មិនអាចរក្សាទុក" msgstr "គម្របមិនមែនជាឯកសារ JPG មិនអាចរក្សាទុក"
#: cps/web.py:3555 #: cps/web.py:3554
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
#: cps/web.py:3676
msgid "Error editing book, please check logfile for details" msgid "Error editing book, please check logfile for details"
msgstr "មានបញ្ហាពេលកែប្រែសៀវភៅ សូមពិនិត្យមើល logfile សម្រាប់ព័ត៌មានបន្ថែម" msgstr "មានបញ្ហាពេលកែប្រែសៀវភៅ សូមពិនិត្យមើល logfile សម្រាប់ព័ត៌មានបន្ថែម"
#: cps/web.py:3605 #: cps/web.py:3726
#, python-format #, python-format
msgid "Failed to store file %(file)s (Permission denied)." msgid "Failed to store file %(file)s (Permission denied)."
msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s (មិនមានសិទ្ធិ)។" msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s (មិនមានសិទ្ធិ)។"
#: cps/web.py:3610 #: cps/web.py:3731
#, python-format #, python-format
msgid "Failed to delete file %(file)s (Permission denied)." msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "មិនអាចលុបឯកសារ %(file)s (មិនមានសិទ្ធិ)។" msgstr "មិនអាចលុបឯកសារ %(file)s (មិនមានសិទ្ធិ)។"
#: cps/web.py:3692 #: cps/web.py:3813
#, python-format #, python-format
msgid "File %(file)s uploaded" msgid "File %(file)s uploaded"
msgstr "ឯកសារ %(file)s ត្រូវបានអាប់ឡូដ" msgstr "ឯកសារ %(file)s ត្រូវបានអាប់ឡូដ"
#: cps/web.py:3722 #: cps/web.py:3843
msgid "Source or destination format for conversion missing" msgid "Source or destination format for conversion missing"
msgstr "" msgstr ""
#: cps/web.py:3732 #: cps/web.py:3853
#, python-format #, python-format
msgid "Book successfully queued for converting to %(book_format)s" msgid "Book successfully queued for converting to %(book_format)s"
msgstr "" msgstr ""
#: cps/web.py:3736 #: cps/web.py:3857
#, python-format #, python-format
msgid "There was an error converting this book: %(res)s" msgid "There was an error converting this book: %(res)s"
msgstr "" msgstr ""
#: cps/worker.py:215 cps/worker.py:387 #: cps/worker.py:215 cps/worker.py:398
msgid "Started" msgid "Started"
msgstr "បានចាប់ផ្តើម" msgstr "បានចាប់ផ្តើម"
#: cps/worker.py:237 #: cps/worker.py:251
#, python-format #, python-format
msgid "Convertertool %(converter)s not found" msgid "Convertertool %(converter)s not found"
msgstr "មិនអាចរកឃើញកម្មវិធីបម្លែង %(converter)s" msgstr "មិនអាចរកឃើញកម្មវិធីបម្លែង %(converter)s"
#: cps/worker.py:272 #: cps/worker.py:287
#, python-format #, python-format
msgid "Ebook-converter failed: %(error)s" msgid "Ebook-converter failed: %(error)s"
msgstr "Ebook-converter បានបរាជ័យ៖ %(error)s" msgstr "Ebook-converter បានបរាជ័យ៖ %(error)s"
#: cps/worker.py:283 #: cps/worker.py:298
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen បានបរាជ័យដោយមានកំហុស %(error)s. សារ៖ %(message)s" msgstr "Kindlegen បានបរាជ័យដោយមានកំហុស %(error)s. សារ៖ %(message)s"
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438 #: cps/worker.py:355 cps/worker.py:374
msgid "Finished"
msgstr "បានបញ្ចប់"
#: cps/worker.py:344 cps/worker.py:363
msgid "Waiting" msgid "Waiting"
msgstr "កំពុងរង់ចាំ" msgstr "កំពុងរង់ចាំ"
#: cps/worker.py:351 #: cps/worker.py:362
msgid "This e-mail has been sent via Calibre-Web." msgid "This e-mail has been sent via Calibre-Web."
msgstr "" msgstr ""
#: cps/worker.py:472 #: cps/worker.py:388 cps/worker.py:484
msgid "Finished"
msgstr "បានបញ្ចប់"
#: cps/worker.py:476
msgid "Failed" msgid "Failed"
msgstr "បានបរាជ័យ" msgstr "បានបរាជ័យ"
#: cps/templates/admin.html:4 #: cps/templates/admin.html:6
msgid "User list" msgid "User list"
msgstr "បញ្ជីអ្នកប្រើប្រាស់" msgstr "បញ្ជីអ្នកប្រើប្រាស់"
#: cps/templates/admin.html:7 #: cps/templates/admin.html:9
msgid "Nickname" msgid "Nickname"
msgstr "ឈ្មោះហៅក្រៅ" msgstr "ឈ្មោះហៅក្រៅ"
#: cps/templates/admin.html:8 #: cps/templates/admin.html:10
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
#: cps/templates/admin.html:9 #: cps/templates/admin.html:11
msgid "Kindle" msgid "Kindle"
msgstr "ឧបករណ៍ Kindle" msgstr "ឧបករណ៍ Kindle"
#: cps/templates/admin.html:10 #: cps/templates/admin.html:12
msgid "DLS" msgid "DLS"
msgstr "ឯកសារ DLS" msgstr "ឯកសារ DLS"
#: cps/templates/admin.html:11 cps/templates/layout.html:74 #: cps/templates/admin.html:13 cps/templates/layout.html:74
msgid "Admin" msgid "Admin"
msgstr "រដ្ឋបាល" msgstr "រដ្ឋបាល"
#: cps/templates/admin.html:12 cps/templates/detail.html:22 #: cps/templates/admin.html:14 cps/templates/detail.html:22
#: cps/templates/detail.html:31 #: cps/templates/detail.html:31
msgid "Download" msgid "Download"
msgstr "ទាញយក" msgstr "ទាញយក"
#: cps/templates/admin.html:13 cps/templates/layout.html:64 #: cps/templates/admin.html:15 cps/templates/layout.html:64
msgid "Upload" msgid "Upload"
msgstr "អាប់ឡូដ" msgstr "អាប់ឡូដ"
#: cps/templates/admin.html:14 #: cps/templates/admin.html:16
msgid "Edit" msgid "Edit"
msgstr "កែប្រែ" msgstr "កែប្រែ"
#: cps/templates/admin.html:32 #: cps/templates/admin.html:39
msgid "SMTP e-mail server settings" msgid "SMTP e-mail server settings"
msgstr "" msgstr ""
#: cps/templates/admin.html:35 cps/templates/email_edit.html:11 #: cps/templates/admin.html:42 cps/templates/email_edit.html:11
msgid "SMTP hostname" msgid "SMTP hostname"
msgstr "ឈ្មោះម៉ាស៊ីន SMTP" msgstr "ឈ្មោះម៉ាស៊ីន SMTP"
#: cps/templates/admin.html:36 #: cps/templates/admin.html:43
msgid "SMTP port" msgid "SMTP port"
msgstr "លេខ port SMTP" msgstr "លេខ port SMTP"
#: cps/templates/admin.html:37 #: cps/templates/admin.html:44
msgid "SSL" msgid "SSL"
msgstr "SSL" msgstr "SSL"
#: cps/templates/admin.html:38 cps/templates/email_edit.html:27 #: cps/templates/admin.html:45 cps/templates/email_edit.html:27
msgid "SMTP login" msgid "SMTP login"
msgstr "អ្នកចូលប្រើ SMTP" msgstr "អ្នកចូលប្រើ SMTP"
#: cps/templates/admin.html:39 #: cps/templates/admin.html:46
msgid "From mail" msgid "From mail"
msgstr "ពីអ៊ីមែល" msgstr "ពីអ៊ីមែល"
#: cps/templates/admin.html:48 #: cps/templates/admin.html:56
msgid "Change SMTP settings" msgid "Change SMTP settings"
msgstr "ប្តូរការកំណត់ SMTP" msgstr "ប្តូរការកំណត់ SMTP"
#: cps/templates/admin.html:50 #: cps/templates/admin.html:62
msgid "Configuration" msgid "Configuration"
msgstr "ការកំណត់" msgstr "ការកំណត់"
#: cps/templates/admin.html:53 #: cps/templates/admin.html:65
msgid "Calibre DB dir" msgid "Calibre DB dir"
msgstr "ទីតាំង database Calibre" msgstr "ទីតាំង database Calibre"
#: cps/templates/admin.html:57 #: cps/templates/admin.html:69
msgid "Log level" msgid "Log level"
msgstr "" msgstr ""
#: cps/templates/admin.html:61 #: cps/templates/admin.html:73
msgid "Port" msgid "Port"
msgstr "លេខ port" msgstr "លេខ port"
#: cps/templates/admin.html:67 cps/templates/config_view_edit.html:23 #: cps/templates/admin.html:79 cps/templates/config_view_edit.html:23
msgid "Books per page" msgid "Books per page"
msgstr "ចំនួនសៀវភៅក្នុងមួយទំព័រ" msgstr "ចំនួនសៀវភៅក្នុងមួយទំព័រ"
#: cps/templates/admin.html:71 #: cps/templates/admin.html:83
msgid "Uploading" msgid "Uploading"
msgstr "កំពុងអាប់ឡូដ" msgstr "កំពុងអាប់ឡូដ"
#: cps/templates/admin.html:75 #: cps/templates/admin.html:87
msgid "Anonymous browsing" msgid "Anonymous browsing"
msgstr "" msgstr ""
#: cps/templates/admin.html:79 #: cps/templates/admin.html:91
msgid "Public registration" msgid "Public registration"
msgstr "ការចុះឈ្មាះសាធារណៈ" msgstr "ការចុះឈ្មាះសាធារណៈ"
#: cps/templates/admin.html:83 cps/templates/remote_login.html:4 #: cps/templates/admin.html:95 cps/templates/remote_login.html:4
msgid "Remote login" msgid "Remote login"
msgstr "ការចូលប្រើប្រាស់ពីចម្ងាយ" msgstr "ការចូលប្រើប្រាស់ពីចម្ងាយ"
#: cps/templates/admin.html:93 #: cps/templates/admin.html:106
msgid "Administration" msgid "Administration"
msgstr "កិច្ចការរដ្ឋបាល" msgstr "កិច្ចការរដ្ឋបាល"
#: cps/templates/admin.html:94 #: cps/templates/admin.html:107
msgid "Current commit timestamp"
msgstr "Commit timestamp បច្ចុប្បន្ន"
#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr "Commit timestamp ចុងក្រោយគេ"
#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB" msgid "Reconnect to Calibre DB"
msgstr "ភ្ជាប់ទៅ database Calibre ម្តងទៀត" msgstr "ភ្ជាប់ទៅ database Calibre ម្តងទៀត"
#: cps/templates/admin.html:98 #: cps/templates/admin.html:108
msgid "Restart Calibre-Web" msgid "Restart Calibre-Web"
msgstr "" msgstr ""
#: cps/templates/admin.html:99 #: cps/templates/admin.html:109
msgid "Stop Calibre-Web" msgid "Stop Calibre-Web"
msgstr "" msgstr ""
#: cps/templates/admin.html:100 #: cps/templates/admin.html:115
msgid "Update"
msgstr ""
#: cps/templates/admin.html:119
msgid "Version"
msgstr ""
#: cps/templates/admin.html:120
msgid "Details"
msgstr ""
#: cps/templates/admin.html:126
msgid "Current version"
msgstr ""
#: cps/templates/admin.html:132
msgid "Check for update" msgid "Check for update"
msgstr "រកមើលបច្ចុប្បន្នភាព" msgstr "រកមើលបច្ចុប្បន្នភាព"
#: cps/templates/admin.html:101 #: cps/templates/admin.html:133
msgid "Perform Update" msgid "Perform Update"
msgstr "ធ្វើបច្ចុប្បន្នភាព" msgstr "ធ្វើបច្ចុប្បន្នភាព"
#: cps/templates/admin.html:110 #: cps/templates/admin.html:145
msgid "Do you really want to restart Calibre-Web?" msgid "Do you really want to restart Calibre-Web?"
msgstr "" msgstr ""
#: cps/templates/admin.html:115 cps/templates/admin.html:129 #: cps/templates/admin.html:150 cps/templates/admin.html:164
#: cps/templates/admin.html:150 cps/templates/shelf.html:59 #: cps/templates/admin.html:184 cps/templates/shelf.html:59
msgid "Ok" msgid "Ok"
msgstr "បាទ/ចាស" msgstr "បាទ/ចាស"
#: cps/templates/admin.html:116 cps/templates/admin.html:130 #: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164 #: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
@ -826,11 +867,11 @@ msgstr "បាទ/ចាស"
msgid "Back" msgid "Back"
msgstr "មកក្រោយ" msgstr "មកក្រោយ"
#: cps/templates/admin.html:128 #: cps/templates/admin.html:163
msgid "Do you really want to stop Calibre-Web?" msgid "Do you really want to stop Calibre-Web?"
msgstr "" msgstr ""
#: cps/templates/admin.html:141 #: cps/templates/admin.html:175
msgid "Updating, please do not reload page" msgid "Updating, please do not reload page"
msgstr "កំពុងធ្វើបច្ចុប្បន្នភាព សូមកុំបើកទំព័រជាថ្មី" msgstr "កំពុងធ្វើបច្ចុប្បន្នភាព សូមកុំបើកទំព័រជាថ្មី"
@ -911,12 +952,8 @@ msgid "Rating"
msgstr "ការវាយតម្លៃ" msgstr "ការវាយតម្លៃ"
#: cps/templates/book_edit.html:87 #: cps/templates/book_edit.html:87
msgid "" msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
"Cover URL (jpg, cover is downloaded and stored in database, field is " msgstr "URL របស់ក្របមុខ (ឯកសារ JPG ក្របមុខត្រូវបានទាញយក និងរក្សាទុកក្នុង database ក្រោយមកចន្លោះនេះទទេម្តងទៀត)"
"afterwards empty again)"
msgstr ""
"URL របស់ក្របមុខ (ឯកសារ JPG ក្របមុខត្រូវបានទាញយក និងរក្សាទុកក្នុង database"
" ក្រោយមកចន្លោះនេះទទេម្តងទៀត)"
#: cps/templates/book_edit.html:91 #: cps/templates/book_edit.html:91
msgid "Upload Cover from local drive" msgid "Upload Cover from local drive"
@ -1291,9 +1328,7 @@ msgstr "កែប្រែទិន្នន័យមេតា"
#: cps/templates/email_edit.html:15 #: cps/templates/email_edit.html:15
msgid "SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)" msgid "SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)"
msgstr "" msgstr "លេខ port SMTP (ជាធម្មតាលេខ 25 សម្រាប់ SMTP ធម្មតា ឬ 465 សម្រាប់ SSL ឬ 587 សម្រាប់ STARTTLS)"
"លេខ port SMTP (ជាធម្មតាលេខ 25 សម្រាប់ SMTP ធម្មតា ឬ 465 សម្រាប់ SSL ឬ 587"
" សម្រាប់ STARTTLS)"
#: cps/templates/email_edit.html:19 #: cps/templates/email_edit.html:19
msgid "Encryption" msgid "Encryption"
@ -1845,9 +1880,7 @@ msgstr "ការទាញយកថ្មីៗ"
#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" #~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" #~ msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s"
#~ msgid "" #~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ "Rename author from: '%(src)s' to "
#~ "'%(dest)s' failed with error: %(error)s"
#~ msgstr "ប្តូរអ្នកនិពន្ធពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s" #~ msgstr "ប្តូរអ្នកនិពន្ធពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s"
#~ msgid "Password for user %(user)s reset" #~ msgid "Password for user %(user)s reset"
@ -1871,3 +1904,9 @@ msgstr "ការទាញយកថ្មីៗ"
#~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server" #~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server"
#~ msgstr "ឯកសារប្រភេទ “%(ext)s” មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ" #~ msgstr "ឯកសារប្រភេទ “%(ext)s” មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ"
#~ msgid "Current commit timestamp"
#~ msgstr "Commit timestamp បច្ចុប្បន្ន"
#~ msgid "Newest commit timestamp"
#~ msgstr "Commit timestamp ចុងក្រោយគេ"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -3,19 +3,11 @@
# This file is distributed under the same license as the Calibre-Web # This file is distributed under the same license as the Calibre-Web
# project. # project.
# FIRST AUTHOR dalin <dalin.lin@gmail.com>, 2017. # FIRST AUTHOR dalin <dalin.lin@gmail.com>, 2017.
# # Translation template file..
# Copyright (C) 2011 Kovid Goyal
#
# Translators:
# Alastair McKinstry <mckinstry@computer.org>, 2001
# LI Daobing <lidaobing@gmail.com>, 2007-2008
# nature <wangyihaoa@gmail.com>, 2015
# Wang Vincent <susemm@163.com>, 2016
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: Calibre-Web\n" "Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
"POT-Creation-Date: 2018-09-08 14:49+0200\n" "POT-Creation-Date: 2018-09-14 21:11+0200\n"
"PO-Revision-Date: 2017-01-06 17:00+0000\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n"
"Last-Translator: dalin <dalin.lin@gmail.com>\n" "Last-Translator: dalin <dalin.lin@gmail.com>\n"
"Language: zh_Hans_CN\n" "Language: zh_Hans_CN\n"
@ -122,707 +114,750 @@ msgstr "执行UnRar时出错"
msgid "Unrar binary file not found" msgid "Unrar binary file not found"
msgstr "找不到Unrar二进制文件" msgstr "找不到Unrar二进制文件"
#: cps/web.py:1114 #: cps/web.py:1112 cps/web.py:2778
msgid "Unknown"
msgstr "未知"
#: cps/web.py:1121 cps/web.py:1152
msgid "HTTP Error"
msgstr ""
#: cps/web.py:1123 cps/web.py:1154
msgid "Connection error"
msgstr ""
#: cps/web.py:1125 cps/web.py:1156
msgid "Timeout while establishing connection"
msgstr ""
#: cps/web.py:1127 cps/web.py:1158
msgid "General error"
msgstr ""
#: cps/web.py:1133
msgid "Unexpected data while reading update information"
msgstr ""
#: cps/web.py:1140
msgid "No update available. You already have the latest version installed"
msgstr ""
#: cps/web.py:1165
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
#: cps/web.py:1215
msgid "Could not fetch update information"
msgstr ""
#: cps/web.py:1230
msgid "Requesting update package" msgid "Requesting update package"
msgstr "正在请求更新包" msgstr "正在请求更新包"
#: cps/web.py:1115 #: cps/web.py:1231
msgid "Downloading update package" msgid "Downloading update package"
msgstr "正在下载更新包" msgstr "正在下载更新包"
#: cps/web.py:1116 #: cps/web.py:1232
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "正在解压更新包" msgstr "正在解压更新包"
#: cps/web.py:1117 #: cps/web.py:1233
msgid "Files are replaced" msgid "Files are replaced"
msgstr "文件已替换" msgstr "文件已替换"
#: cps/web.py:1118 #: cps/web.py:1234
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "数据库连接已关闭" msgstr "数据库连接已关闭"
#: cps/web.py:1119 #: cps/web.py:1235
msgid "Server is stopped" msgid "Server is stopped"
msgstr "服务器已停止" msgstr "服务器已停止"
#: cps/web.py:1120 #: cps/web.py:1236
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "更新完成,请按确定并刷新页面" msgstr "更新完成,请按确定并刷新页面"
#: cps/web.py:1140 #: cps/web.py:1256
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "最近添加的书籍" msgstr "最近添加的书籍"
#: cps/web.py:1150 #: cps/web.py:1266
msgid "Newest Books" msgid "Newest Books"
msgstr "最新书籍" msgstr "最新书籍"
#: cps/web.py:1162 #: cps/web.py:1278
msgid "Oldest Books" msgid "Oldest Books"
msgstr "最旧书籍" msgstr "最旧书籍"
#: cps/web.py:1174 #: cps/web.py:1290
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "书籍 (A-Z)" msgstr "书籍 (A-Z)"
#: cps/web.py:1185 #: cps/web.py:1301
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "书籍 (Z-A)" msgstr "书籍 (Z-A)"
#: cps/web.py:1214 #: cps/web.py:1330
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "热门书籍(最多下载)" msgstr "热门书籍(最多下载)"
#: cps/web.py:1227 #: cps/web.py:1343
msgid "Best rated books" msgid "Best rated books"
msgstr "最高评分书籍" msgstr "最高评分书籍"
#: cps/templates/index.xml:36 cps/web.py:1239 #: cps/templates/index.xml:36 cps/web.py:1355
msgid "Random Books" msgid "Random Books"
msgstr "随机书籍" msgstr "随机书籍"
#: cps/web.py:1254 #: cps/web.py:1370
msgid "Author list" msgid "Author list"
msgstr "作者列表" msgstr "作者列表"
#: cps/web.py:1266 cps/web.py:1329 cps/web.py:1484 cps/web.py:2036 #: cps/web.py:1382 cps/web.py:1445 cps/web.py:1600 cps/web.py:2152
msgid "Error opening eBook. File does not exist or file is not accessible:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "无法打开电子书。 文件不存在或者文件不可访问:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
#: cps/templates/index.xml:73 cps/web.py:1313 #: cps/templates/index.xml:73 cps/web.py:1429
msgid "Series list" msgid "Series list"
msgstr "丛书列表" msgstr "丛书列表"
#: cps/web.py:1327 #: cps/web.py:1443
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "丛书: %(serie)s" msgstr "丛书: %(serie)s"
#: cps/web.py:1354 #: cps/web.py:1470
msgid "Available languages" msgid "Available languages"
msgstr "可用语言" msgstr "可用语言"
#: cps/web.py:1371 #: cps/web.py:1487
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "语言: %(name)s" msgstr "语言: %(name)s"
#: cps/templates/index.xml:66 cps/web.py:1382 #: cps/templates/index.xml:66 cps/web.py:1498
msgid "Category list" msgid "Category list"
msgstr "分类列表" msgstr "分类列表"
#: cps/web.py:1396 #: cps/web.py:1512
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "分类: %(name)s" msgstr "分类: %(name)s"
#: cps/templates/layout.html:71 cps/web.py:1535 #: cps/templates/layout.html:71 cps/web.py:1651
msgid "Tasks" msgid "Tasks"
msgstr "任务" msgstr "任务"
#: cps/web.py:1565 #: cps/web.py:1681
msgid "Statistics" msgid "Statistics"
msgstr "统计" msgstr "统计"
#: cps/web.py:1670 #: cps/web.py:1786
msgid "" msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
"Callback domain is not verified, please follow steps to verify domain in "
"google developer console"
msgstr "回调域名尚未被校验请在google开发者控制台按步骤校验域名" msgstr "回调域名尚未被校验请在google开发者控制台按步骤校验域名"
#: cps/web.py:1746 #: cps/web.py:1861
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "服务器已重启,请刷新页面" msgstr "服务器已重启,请刷新页面"
#: cps/web.py:1749 #: cps/web.py:1864
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "正在关闭服务器,请关闭窗口" msgstr "正在关闭服务器,请关闭窗口"
#: cps/web.py:1767 #: cps/web.py:1883
msgid "Update done" msgid "Update done"
msgstr "更新完成" msgstr "更新完成"
#: cps/web.py:1837 #: cps/web.py:1953
msgid "Published after " msgid "Published after "
msgstr "" msgstr ""
#: cps/web.py:1844 #: cps/web.py:1960
msgid "Published before " msgid "Published before "
msgstr "出版时早于 " msgstr "出版时早于 "
#: cps/web.py:1858 #: cps/web.py:1974
#, python-format #, python-format
msgid "Rating <= %(rating)s" msgid "Rating <= %(rating)s"
msgstr "评分 <= %(rating)s" msgstr "评分 <= %(rating)s"
#: cps/web.py:1860 #: cps/web.py:1976
#, python-format #, python-format
msgid "Rating >= %(rating)s" msgid "Rating >= %(rating)s"
msgstr "评分 >= %(rating)s" msgstr "评分 >= %(rating)s"
#: cps/web.py:1919 cps/web.py:1928 #: cps/web.py:2035 cps/web.py:2044
msgid "search" msgid "search"
msgstr "搜索" msgstr "搜索"
#: cps/templates/index.xml:44 cps/templates/index.xml:48 #: cps/templates/index.xml:44 cps/templates/index.xml:48
#: cps/templates/layout.html:146 cps/web.py:1995 #: cps/templates/layout.html:146 cps/web.py:2111
msgid "Read Books" msgid "Read Books"
msgstr "已读书籍" msgstr "已读书籍"
#: cps/templates/index.xml:52 cps/templates/index.xml:56 #: cps/templates/index.xml:52 cps/templates/index.xml:56
#: cps/templates/layout.html:148 cps/web.py:1998 #: cps/templates/layout.html:148 cps/web.py:2114
msgid "Unread Books" msgid "Unread Books"
msgstr "未读书籍" msgstr "未读书籍"
#: cps/web.py:2046 cps/web.py:2048 cps/web.py:2050 cps/web.py:2062 #: cps/web.py:2162 cps/web.py:2164 cps/web.py:2166 cps/web.py:2178
msgid "Read a Book" msgid "Read a Book"
msgstr "阅读一本书" msgstr "阅读一本书"
#: cps/web.py:2128 cps/web.py:3006 #: cps/web.py:2244 cps/web.py:3129
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "请填写所有字段" msgstr "请填写所有字段"
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159 #: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
#: cps/web.py:2161 #: cps/web.py:2277
msgid "register" msgid "register"
msgstr "注册" msgstr "注册"
#: cps/web.py:2149 cps/web.py:3222 #: cps/web.py:2265 cps/web.py:3345
msgid "An unknown error occurred. Please try again later." msgid "An unknown error occurred. Please try again later."
msgstr "发生一个未知错误,请稍后再试。" msgstr "发生一个未知错误,请稍后再试。"
#: cps/web.py:2152 #: cps/web.py:2268
msgid "Your e-mail is not allowed to register" msgid "Your e-mail is not allowed to register"
msgstr "您的邮箱不能用来注册" msgstr "您的邮箱不能用来注册"
#: cps/web.py:2155 #: cps/web.py:2271
msgid "Confirmation e-mail was send to your e-mail account." msgid "Confirmation e-mail was send to your e-mail account."
msgstr "确认邮件已经发送到您的邮箱。" msgstr "确认邮件已经发送到您的邮箱。"
#: cps/web.py:2158 #: cps/web.py:2274
msgid "This username or e-mail address is already in use." msgid "This username or e-mail address is already in use."
msgstr "这个用户名或者邮箱已经被使用。" msgstr "这个用户名或者邮箱已经被使用。"
#: cps/web.py:2175 cps/web.py:2271 #: cps/web.py:2291 cps/web.py:2387
#, python-format #, python-format
msgid "you are now logged in as: '%(nickname)s'" msgid "you are now logged in as: '%(nickname)s'"
msgstr "您现在已以'%(nickname)s'身份登录" msgstr "您现在已以'%(nickname)s'身份登录"
#: cps/web.py:2180 #: cps/web.py:2296
msgid "Wrong Username or Password" msgid "Wrong Username or Password"
msgstr "用户名或密码错误" msgstr "用户名或密码错误"
#: cps/web.py:2186 cps/web.py:2207 #: cps/web.py:2302 cps/web.py:2323
msgid "login" msgid "login"
msgstr "登录" msgstr "登录"
#: cps/web.py:2219 cps/web.py:2250 #: cps/web.py:2335 cps/web.py:2366
msgid "Token not found" msgid "Token not found"
msgstr "找不到Token" msgstr "找不到Token"
#: cps/web.py:2227 cps/web.py:2258 #: cps/web.py:2343 cps/web.py:2374
msgid "Token has expired" msgid "Token has expired"
msgstr "Token已过期" msgstr "Token已过期"
#: cps/web.py:2235 #: cps/web.py:2351
msgid "Success! Please return to your device" msgid "Success! Please return to your device"
msgstr "成功!请返回您的设备" msgstr "成功!请返回您的设备"
#: cps/web.py:2285 #: cps/web.py:2401
msgid "Please configure the SMTP mail settings first..." msgid "Please configure the SMTP mail settings first..."
msgstr "请先配置SMTP邮箱..." msgstr "请先配置SMTP邮箱..."
#: cps/web.py:2289 #: cps/web.py:2405
#, python-format #, python-format
msgid "Book successfully queued for sending to %(kindlemail)s" msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "书籍已经被成功加入 %(kindlemail)s 的发送队列" msgstr "书籍已经被成功加入 %(kindlemail)s 的发送队列"
#: cps/web.py:2293 #: cps/web.py:2409
#, python-format #, python-format
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "发送这本书的时候出现错误: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s"
#: cps/web.py:2295 cps/web.py:3060 #: cps/web.py:2411 cps/web.py:3183
msgid "Please configure your kindle e-mail address first..." msgid "Please configure your kindle e-mail address first..."
msgstr "请先配置您的kindle邮箱..." msgstr "请先配置您的kindle邮箱..."
#: cps/web.py:2339 #: cps/web.py:2455
#, python-format #, python-format
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "此书已被添加到书架: %(sname)s" msgstr "此书已被添加到书架: %(sname)s"
#: cps/web.py:2350 #: cps/web.py:2466
msgid "Invalid shelf specified" msgid "Invalid shelf specified"
msgstr "指定的书架无效" msgstr "指定的书架无效"
#: cps/web.py:2355 #: cps/web.py:2471
#, python-format #, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s" msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "您没有添加书籍到书架 %(name)s 的权限" msgstr "您没有添加书籍到书架 %(name)s 的权限"
#: cps/web.py:2360 #: cps/web.py:2476
msgid "User is not allowed to edit public shelves" msgid "User is not allowed to edit public shelves"
msgstr "用户没有编辑公开书架的权限" msgstr "用户没有编辑公开书架的权限"
#: cps/web.py:2378 #: cps/web.py:2494
#, python-format #, python-format
msgid "Books are already part of the shelf: %(name)s" msgid "Books are already part of the shelf: %(name)s"
msgstr "书籍已经在书架 %(name)s 中了" msgstr "书籍已经在书架 %(name)s 中了"
#: cps/web.py:2392 #: cps/web.py:2508
#, python-format #, python-format
msgid "Books have been added to shelf: %(sname)s" msgid "Books have been added to shelf: %(sname)s"
msgstr "书籍已经被添加到书架 %(sname)s 中'" msgstr "书籍已经被添加到书架 %(sname)s 中'"
#: cps/web.py:2394 #: cps/web.py:2510
#, python-format #, python-format
msgid "Could not add books to shelf: %(sname)s" msgid "Could not add books to shelf: %(sname)s"
msgstr "无法添加书籍到书架: %(sname)s" msgstr "无法添加书籍到书架: %(sname)s"
#: cps/web.py:2431 #: cps/web.py:2547
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "此书已从书架 %(sname)s 中删除" msgstr "此书已从书架 %(sname)s 中删除"
#: cps/web.py:2437 #: cps/web.py:2553
#, python-format #, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "对不起,您没有从书架 %(sname)s 中删除书籍的权限" msgstr "对不起,您没有从书架 %(sname)s 中删除书籍的权限"
#: cps/web.py:2457 cps/web.py:2481 #: cps/web.py:2573 cps/web.py:2597
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "已存在书架 '%(title)s'。" msgstr "已存在书架 '%(title)s'。"
#: cps/web.py:2462 #: cps/web.py:2578
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "书架 %(title)s 已被创建" msgstr "书架 %(title)s 已被创建"
#: cps/web.py:2464 cps/web.py:2492 #: cps/web.py:2580 cps/web.py:2608
msgid "There was an error" msgid "There was an error"
msgstr "发生错误" msgstr "发生错误"
#: cps/web.py:2465 cps/web.py:2467 #: cps/web.py:2581 cps/web.py:2583
msgid "create a shelf" msgid "create a shelf"
msgstr "创建书架" msgstr "创建书架"
#: cps/web.py:2490 #: cps/web.py:2606
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "书架 %(title)s 已被修改" msgstr "书架 %(title)s 已被修改"
#: cps/web.py:2493 cps/web.py:2495 #: cps/web.py:2609 cps/web.py:2611
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "编辑书架" msgstr "编辑书架"
#: cps/web.py:2516 #: cps/web.py:2632
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "成功删除书架 %(name)s" msgstr "成功删除书架 %(name)s"
#: cps/web.py:2538 #: cps/web.py:2659
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "书架: '%(name)s'" msgstr "书架: '%(name)s'"
#: cps/web.py:2541 #: cps/web.py:2662
msgid "Error opening shelf. Shelf does not exist or is not accessible" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "打开书架出错。书架不存在或不可访问" msgstr "打开书架出错。书架不存在或不可访问"
#: cps/web.py:2572 #: cps/web.py:2693
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "修改书架 '%(name)s' 顺序" msgstr "修改书架 '%(name)s' 顺序"
#: cps/web.py:2601 cps/web.py:3012 #: cps/web.py:2722 cps/web.py:3135
msgid "E-mail is not from valid domain" msgid "E-mail is not from valid domain"
msgstr "邮箱不在有效域中'" msgstr "邮箱不在有效域中'"
#: cps/web.py:2603 cps/web.py:2644 cps/web.py:2647 #: cps/web.py:2724 cps/web.py:2765 cps/web.py:2768
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "%(name)s 的资料" msgstr "%(name)s 的资料"
#: cps/web.py:2642 #: cps/web.py:2763
msgid "Found an existing account for this e-mail address." msgid "Found an existing account for this e-mail address."
msgstr "找到一个已有账号使用这个邮箱。" msgstr "找到一个已有账号使用这个邮箱。"
#: cps/web.py:2645 #: cps/web.py:2766
msgid "Profile updated" msgid "Profile updated"
msgstr "资料已更新" msgstr "资料已更新"
#: cps/web.py:2657 #: cps/web.py:2794
msgid "Unknown"
msgstr "未知"
#: cps/web.py:2671
msgid "Admin page" msgid "Admin page"
msgstr "管理页" msgstr "管理页"
#: cps/web.py:2749 cps/web.py:2922 #: cps/web.py:2872 cps/web.py:3045
msgid "Calibre-Web configuration updated" msgid "Calibre-Web configuration updated"
msgstr "Calibre-Web配置已更新" msgstr "Calibre-Web配置已更新"
#: cps/templates/admin.html:91 cps/web.py:2762 #: cps/templates/admin.html:100 cps/web.py:2885
msgid "UI Configuration" msgid "UI Configuration"
msgstr "UI配置" msgstr "UI配置"
#: cps/web.py:2780 #: cps/web.py:2903
msgid "Import of optional Google Drive requirements missing" msgid "Import of optional Google Drive requirements missing"
msgstr "可选的Google Drive依赖导入缺失" msgstr "可选的Google Drive依赖导入缺失"
#: cps/web.py:2783 #: cps/web.py:2906
msgid "client_secrets.json is missing or not readable" msgid "client_secrets.json is missing or not readable"
msgstr "client_secrets.json文件缺失或不可读" msgstr "client_secrets.json文件缺失或不可读"
#: cps/web.py:2788 cps/web.py:2815 #: cps/web.py:2911 cps/web.py:2938
msgid "client_secrets.json is not configured for web application" msgid "client_secrets.json is not configured for web application"
msgstr "没有为web应用配置client_secrets.json" msgstr "没有为web应用配置client_secrets.json"
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856 #: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937 #: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
#: cps/web.py:2954 #: cps/web.py:3077
msgid "Basic Configuration" msgid "Basic Configuration"
msgstr "基本配置" msgstr "基本配置"
#: cps/web.py:2841 #: cps/web.py:2964
msgid "Keyfile location is not valid, please enter correct path" msgid "Keyfile location is not valid, please enter correct path"
msgstr "key文件位置无效请输入正确路径" msgstr "key文件位置无效请输入正确路径"
#: cps/web.py:2853 #: cps/web.py:2976
msgid "Certfile location is not valid, please enter correct path" msgid "Certfile location is not valid, please enter correct path"
msgstr "证书文件位置无效,请输入正确路径" msgstr "证书文件位置无效,请输入正确路径"
#: cps/web.py:2895 #: cps/web.py:3018
msgid "Logfile location is not valid, please enter correct path" msgid "Logfile location is not valid, please enter correct path"
msgstr "日志文件位置无效,请输入正确路径" msgstr "日志文件位置无效,请输入正确路径"
#: cps/web.py:2934 #: cps/web.py:3057
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "DB位置无效请输入正确路径" msgstr "DB位置无效请输入正确路径"
#: cps/templates/admin.html:31 cps/web.py:3008 cps/web.py:3014 cps/web.py:3030 #: cps/templates/admin.html:33 cps/web.py:3131 cps/web.py:3137 cps/web.py:3153
msgid "Add new user" msgid "Add new user"
msgstr "添加新用户" msgstr "添加新用户"
#: cps/web.py:3020 #: cps/web.py:3143
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "用户 '%(user)s' 已被创建" msgstr "用户 '%(user)s' 已被创建"
#: cps/web.py:3024 #: cps/web.py:3147
msgid "Found an existing account for this e-mail address or nickname." msgid "Found an existing account for this e-mail address or nickname."
msgstr "此邮箱或昵称的账号已经存在。" msgstr "此邮箱或昵称的账号已经存在。"
#: cps/web.py:3048 cps/web.py:3062 #: cps/web.py:3171 cps/web.py:3185
msgid "E-mail server settings updated" msgid "E-mail server settings updated"
msgstr "已更新邮件服务器设置" msgstr "已更新邮件服务器设置"
#: cps/web.py:3055 #: cps/web.py:3178
#, python-format #, python-format
msgid "Test e-mail successfully send to %(kindlemail)s" msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "测试邮件已经被成功发到 %(kindlemail)s" msgstr "测试邮件已经被成功发到 %(kindlemail)s"
#: cps/web.py:3058 #: cps/web.py:3181
#, python-format #, python-format
msgid "There was an error sending the Test e-mail: %(res)s" msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "发送测试邮件出错了: %(res)s" msgstr "发送测试邮件出错了: %(res)s"
#: cps/web.py:3063 #: cps/web.py:3186
msgid "Edit e-mail server settings" msgid "Edit e-mail server settings"
msgstr "编辑邮箱服务器设置" msgstr "编辑邮箱服务器设置"
#: cps/web.py:3088 #: cps/web.py:3211
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "用户 '%(nick)s' 已被删除" msgstr "用户 '%(nick)s' 已被删除"
#: cps/web.py:3197 #: cps/web.py:3320
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "用户 '%(nick)s' 已被更新" msgstr "用户 '%(nick)s' 已被更新"
#: cps/web.py:3200 #: cps/web.py:3323
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "发生未知错误。" msgstr "发生未知错误。"
#: cps/web.py:3202 #: cps/web.py:3325
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "编辑用户 %(nick)s" msgstr "编辑用户 %(nick)s"
#: cps/web.py:3219 #: cps/web.py:3342
#, python-format #, python-format
msgid "Password for user %(user)s reset" msgid "Password for user %(user)s reset"
msgstr "用户 %(user)s 的密码已重置" msgstr "用户 %(user)s 的密码已重置"
#: cps/web.py:3239 #: cps/web.py:3362
msgid "Error opening eBook. File does not exist or file is not accessible" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "打开电子书出错。文件不存在或不可访问" msgstr "打开电子书出错。文件不存在或不可访问"
#: cps/web.py:3270 cps/web.py:3546 cps/web.py:3551 cps/web.py:3706 #: cps/web.py:3390 cps/web.py:3667 cps/web.py:3672 cps/web.py:3827
msgid "edit metadata" msgid "edit metadata"
msgstr "编辑元数据" msgstr "编辑元数据"
#: cps/web.py:3284 cps/web.py:3576 #: cps/web.py:3401 cps/web.py:3697
#, python-format #, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "不能上传后缀为 '%(ext)s' 的文件到此服务器" msgstr "不能上传后缀为 '%(ext)s' 的文件到此服务器"
#: cps/web.py:3288 cps/web.py:3580 #: cps/web.py:3405 cps/web.py:3701
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "要上传的文件必须有一个后缀" msgstr "要上传的文件必须有一个后缀"
#: cps/web.py:3300 cps/web.py:3600 #: cps/web.py:3417 cps/web.py:3721
#, python-format #, python-format
msgid "Failed to create path %(path)s (Permission denied)." msgid "Failed to create path %(path)s (Permission denied)."
msgstr "创建路径 %(path)s 失败(权限拒绝)。" msgstr "创建路径 %(path)s 失败(权限拒绝)。"
#: cps/web.py:3305 #: cps/web.py:3422
#, python-format #, python-format
msgid "Failed to store file %(file)s." msgid "Failed to store file %(file)s."
msgstr "保存文件 %(file)s 失败。" msgstr "保存文件 %(file)s 失败。"
#: cps/web.py:3321 #: cps/web.py:3438
#, python-format #, python-format
msgid "File format %(ext)s added to %(book)s" msgid "File format %(ext)s added to %(book)s"
msgstr "已添加 %(ext)s 格式到 %(book)s" msgstr "已添加 %(ext)s 格式到 %(book)s"
#: cps/web.py:3339 #: cps/web.py:3455
#, python-format #, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)." msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3346 #: cps/web.py:3462
#, python-format #, python-format
msgid "Failed to store cover-file %(cover)s." msgid "Failed to store cover-file %(cover)s."
msgstr "保存封面文件 %(cover)s 失败。" msgstr "保存封面文件 %(cover)s 失败。"
#: cps/web.py:3349 #: cps/web.py:3465
msgid "Cover-file is not a valid image file" msgid "Cover-file is not a valid image file"
msgstr "封面文件不是一个有效的图片文件" msgstr "封面文件不是一个有效的图片文件"
#: cps/web.py:3362 cps/web.py:3366 #: cps/web.py:3482 cps/web.py:3486
msgid "unknown" msgid "unknown"
msgstr "未知" msgstr "未知"
#: cps/web.py:3388 #: cps/web.py:3508
msgid "Cover is not a jpg file, can't save" msgid "Cover is not a jpg file, can't save"
msgstr "封面不是一个jpg文件无法保存" msgstr "封面不是一个jpg文件无法保存"
#: cps/web.py:3555 #: cps/web.py:3554
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
#: cps/web.py:3676
msgid "Error editing book, please check logfile for details" msgid "Error editing book, please check logfile for details"
msgstr "编辑书籍出错,详情请检查日志文件" msgstr "编辑书籍出错,详情请检查日志文件"
#: cps/web.py:3605 #: cps/web.py:3726
#, python-format #, python-format
msgid "Failed to store file %(file)s (Permission denied)." msgid "Failed to store file %(file)s (Permission denied)."
msgstr "存储文件 %(file)s 失败(权限拒绝)。" msgstr "存储文件 %(file)s 失败(权限拒绝)。"
#: cps/web.py:3610 #: cps/web.py:3731
#, python-format #, python-format
msgid "Failed to delete file %(file)s (Permission denied)." msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "删除文件 %(file)s 失败(权限拒绝)。" msgstr "删除文件 %(file)s 失败(权限拒绝)。"
#: cps/web.py:3692 #: cps/web.py:3813
#, python-format #, python-format
msgid "File %(file)s uploaded" msgid "File %(file)s uploaded"
msgstr "文件 %(file)s 已上传" msgstr "文件 %(file)s 已上传"
#: cps/web.py:3722 #: cps/web.py:3843
msgid "Source or destination format for conversion missing" msgid "Source or destination format for conversion missing"
msgstr "转换的源或目的格式缺失" msgstr "转换的源或目的格式缺失"
#: cps/web.py:3732 #: cps/web.py:3853
#, python-format #, python-format
msgid "Book successfully queued for converting to %(book_format)s" msgid "Book successfully queued for converting to %(book_format)s"
msgstr "书籍已经被成功加入 %(book_format)s 的转换队列" msgstr "书籍已经被成功加入 %(book_format)s 的转换队列"
#: cps/web.py:3736 #: cps/web.py:3857
#, python-format #, python-format
msgid "There was an error converting this book: %(res)s" msgid "There was an error converting this book: %(res)s"
msgstr "转换此书时出现错误: %(res)s" msgstr "转换此书时出现错误: %(res)s"
#: cps/worker.py:215 cps/worker.py:387 #: cps/worker.py:215 cps/worker.py:398
msgid "Started" msgid "Started"
msgstr "已开始" msgstr "已开始"
#: cps/worker.py:237 #: cps/worker.py:251
#, python-format #, python-format
msgid "Convertertool %(converter)s not found" msgid "Convertertool %(converter)s not found"
msgstr "找不到转换工具 $(converter)s" msgstr "找不到转换工具 $(converter)s"
#: cps/worker.py:272 #: cps/worker.py:287
#, python-format #, python-format
msgid "Ebook-converter failed: %(error)s" msgid "Ebook-converter failed: %(error)s"
msgstr "电子书转换器失败: %(error)s" msgstr "电子书转换器失败: %(error)s"
#: cps/worker.py:283 #: cps/worker.py:298
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s" msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s"
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438 #: cps/worker.py:355 cps/worker.py:374
msgid "Finished"
msgstr "已完成"
#: cps/worker.py:344 cps/worker.py:363
msgid "Waiting" msgid "Waiting"
msgstr "等待中" msgstr "等待中"
#: cps/worker.py:351 #: cps/worker.py:362
msgid "This e-mail has been sent via Calibre-Web." msgid "This e-mail has been sent via Calibre-Web."
msgstr "此邮件已经通过Calibre-Web发送" msgstr "此邮件已经通过Calibre-Web发送"
#: cps/worker.py:472 #: cps/worker.py:388 cps/worker.py:484
msgid "Finished"
msgstr "已完成"
#: cps/worker.py:476
msgid "Failed" msgid "Failed"
msgstr "失败" msgstr "失败"
#: cps/templates/admin.html:4 #: cps/templates/admin.html:6
msgid "User list" msgid "User list"
msgstr "用户列表" msgstr "用户列表"
#: cps/templates/admin.html:7 #: cps/templates/admin.html:9
msgid "Nickname" msgid "Nickname"
msgstr "昵称" msgstr "昵称"
#: cps/templates/admin.html:8 #: cps/templates/admin.html:10
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
#: cps/templates/admin.html:9 #: cps/templates/admin.html:11
msgid "Kindle" msgid "Kindle"
msgstr "" msgstr ""
#: cps/templates/admin.html:10 #: cps/templates/admin.html:12
msgid "DLS" msgid "DLS"
msgstr "" msgstr ""
#: cps/templates/admin.html:11 cps/templates/layout.html:74 #: cps/templates/admin.html:13 cps/templates/layout.html:74
msgid "Admin" msgid "Admin"
msgstr "管理" msgstr "管理"
#: cps/templates/admin.html:12 cps/templates/detail.html:22 #: cps/templates/admin.html:14 cps/templates/detail.html:22
#: cps/templates/detail.html:31 #: cps/templates/detail.html:31
msgid "Download" msgid "Download"
msgstr "下载" msgstr "下载"
#: cps/templates/admin.html:13 cps/templates/layout.html:64 #: cps/templates/admin.html:15 cps/templates/layout.html:64
msgid "Upload" msgid "Upload"
msgstr "上传" msgstr "上传"
#: cps/templates/admin.html:14 #: cps/templates/admin.html:16
msgid "Edit" msgid "Edit"
msgstr "编辑" msgstr "编辑"
#: cps/templates/admin.html:32 #: cps/templates/admin.html:39
msgid "SMTP e-mail server settings" msgid "SMTP e-mail server settings"
msgstr "SMTP邮件服务器设置" msgstr "SMTP邮件服务器设置"
#: cps/templates/admin.html:35 cps/templates/email_edit.html:11 #: cps/templates/admin.html:42 cps/templates/email_edit.html:11
msgid "SMTP hostname" msgid "SMTP hostname"
msgstr "SMTP地址" msgstr "SMTP地址"
#: cps/templates/admin.html:36 #: cps/templates/admin.html:43
msgid "SMTP port" msgid "SMTP port"
msgstr "SMTP端口" msgstr "SMTP端口"
#: cps/templates/admin.html:37 #: cps/templates/admin.html:44
msgid "SSL" msgid "SSL"
msgstr "" msgstr ""
#: cps/templates/admin.html:38 cps/templates/email_edit.html:27 #: cps/templates/admin.html:45 cps/templates/email_edit.html:27
msgid "SMTP login" msgid "SMTP login"
msgstr "SMTP用户名" msgstr "SMTP用户名"
#: cps/templates/admin.html:39 #: cps/templates/admin.html:46
msgid "From mail" msgid "From mail"
msgstr "来自邮箱" msgstr "来自邮箱"
#: cps/templates/admin.html:48 #: cps/templates/admin.html:56
msgid "Change SMTP settings" msgid "Change SMTP settings"
msgstr "修改SMTP设置" msgstr "修改SMTP设置"
#: cps/templates/admin.html:50 #: cps/templates/admin.html:62
msgid "Configuration" msgid "Configuration"
msgstr "配置" msgstr "配置"
#: cps/templates/admin.html:53 #: cps/templates/admin.html:65
msgid "Calibre DB dir" msgid "Calibre DB dir"
msgstr "Calibre DB目录" msgstr "Calibre DB目录"
#: cps/templates/admin.html:57 #: cps/templates/admin.html:69
msgid "Log level" msgid "Log level"
msgstr "日志级别" msgstr "日志级别"
#: cps/templates/admin.html:61 #: cps/templates/admin.html:73
msgid "Port" msgid "Port"
msgstr "端口" msgstr "端口"
#: cps/templates/admin.html:67 cps/templates/config_view_edit.html:23 #: cps/templates/admin.html:79 cps/templates/config_view_edit.html:23
msgid "Books per page" msgid "Books per page"
msgstr "每页书籍数" msgstr "每页书籍数"
#: cps/templates/admin.html:71 #: cps/templates/admin.html:83
msgid "Uploading" msgid "Uploading"
msgstr "上传" msgstr "上传"
#: cps/templates/admin.html:75 #: cps/templates/admin.html:87
msgid "Anonymous browsing" msgid "Anonymous browsing"
msgstr "匿名浏览" msgstr "匿名浏览"
#: cps/templates/admin.html:79 #: cps/templates/admin.html:91
msgid "Public registration" msgid "Public registration"
msgstr "开放注册" msgstr "开放注册"
#: cps/templates/admin.html:83 cps/templates/remote_login.html:4 #: cps/templates/admin.html:95 cps/templates/remote_login.html:4
msgid "Remote login" msgid "Remote login"
msgstr "远程登录" msgstr "远程登录"
#: cps/templates/admin.html:93 #: cps/templates/admin.html:106
msgid "Administration" msgid "Administration"
msgstr "管理" msgstr "管理"
#: cps/templates/admin.html:94 #: cps/templates/admin.html:107
msgid "Current commit timestamp"
msgstr "当前提交时间戳"
#: cps/templates/admin.html:95
msgid "Newest commit timestamp"
msgstr "最新提交时间戳"
#: cps/templates/admin.html:97
msgid "Reconnect to Calibre DB" msgid "Reconnect to Calibre DB"
msgstr "重新连接到Calibre数据库" msgstr "重新连接到Calibre数据库"
#: cps/templates/admin.html:98 #: cps/templates/admin.html:108
msgid "Restart Calibre-Web" msgid "Restart Calibre-Web"
msgstr "重启 Calibre-Web" msgstr "重启 Calibre-Web"
#: cps/templates/admin.html:99 #: cps/templates/admin.html:109
msgid "Stop Calibre-Web" msgid "Stop Calibre-Web"
msgstr "停止 Calibre-Web" msgstr "停止 Calibre-Web"
#: cps/templates/admin.html:100 #: cps/templates/admin.html:115
msgid "Update"
msgstr ""
#: cps/templates/admin.html:119
msgid "Version"
msgstr ""
#: cps/templates/admin.html:120
msgid "Details"
msgstr ""
#: cps/templates/admin.html:126
msgid "Current version"
msgstr ""
#: cps/templates/admin.html:132
msgid "Check for update" msgid "Check for update"
msgstr "检查更新" msgstr "检查更新"
#: cps/templates/admin.html:101 #: cps/templates/admin.html:133
msgid "Perform Update" msgid "Perform Update"
msgstr "执行更新" msgstr "执行更新"
#: cps/templates/admin.html:110 #: cps/templates/admin.html:145
msgid "Do you really want to restart Calibre-Web?" msgid "Do you really want to restart Calibre-Web?"
msgstr "您确定要重启 Calibre-Web 吗?" msgstr "您确定要重启 Calibre-Web 吗?"
#: cps/templates/admin.html:115 cps/templates/admin.html:129 #: cps/templates/admin.html:150 cps/templates/admin.html:164
#: cps/templates/admin.html:150 cps/templates/shelf.html:59 #: cps/templates/admin.html:184 cps/templates/shelf.html:59
msgid "Ok" msgid "Ok"
msgstr "确定" msgstr "确定"
#: cps/templates/admin.html:116 cps/templates/admin.html:130 #: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164 #: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
@ -831,11 +866,11 @@ msgstr "确定"
msgid "Back" msgid "Back"
msgstr "后退" msgstr "后退"
#: cps/templates/admin.html:128 #: cps/templates/admin.html:163
msgid "Do you really want to stop Calibre-Web?" msgid "Do you really want to stop Calibre-Web?"
msgstr "您确定要关闭 Calibre-Web 吗?" msgstr "您确定要关闭 Calibre-Web 吗?"
#: cps/templates/admin.html:141 #: cps/templates/admin.html:175
msgid "Updating, please do not reload page" msgid "Updating, please do not reload page"
msgstr "正在更新,请不要刷新页面" msgstr "正在更新,请不要刷新页面"
@ -916,9 +951,7 @@ msgid "Rating"
msgstr "评分" msgstr "评分"
#: cps/templates/book_edit.html:87 #: cps/templates/book_edit.html:87
msgid "" msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
"Cover URL (jpg, cover is downloaded and stored in database, field is "
"afterwards empty again)"
msgstr "封面URL(jpg,封面会被下载被保存在数据库中,然后字段会被重新清空)" msgstr "封面URL(jpg,封面会被下载被保存在数据库中,然后字段会被重新清空)"
#: cps/templates/book_edit.html:91 #: cps/templates/book_edit.html:91
@ -1849,9 +1882,7 @@ msgstr "最近下载"
#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s" #~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s" #~ msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
#~ msgid "" #~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
#~ "Rename author from: '%(src)s' to "
#~ "'%(dest)s' failed with error: %(error)s"
#~ msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s" #~ msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
#~ msgid "Password for user %(user)s reset" #~ msgid "Password for user %(user)s reset"
@ -1875,3 +1906,9 @@ msgstr "最近下载"
#~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server" #~ msgid "File extension \"%(ext)s\" is not allowed to be uploaded to this server"
#~ msgstr "不能上传后缀为 \"%(ext)s\" 的文件到此服务器" #~ msgstr "不能上传后缀为 \"%(ext)s\" 的文件到此服务器"
#~ msgid "Current commit timestamp"
#~ msgstr "当前提交时间戳"
#~ msgid "Newest commit timestamp"
#~ msgstr "最新提交时间戳"

@ -41,6 +41,8 @@ from flask import (Flask, render_template, request, Response, redirect,
url_for, send_from_directory, make_response, g, flash, url_for, send_from_directory, make_response, g, flash,
abort, Markup) abort, Markup)
from flask import __version__ as flaskVersion from flask import __version__ as flaskVersion
from werkzeug import __version__ as werkzeugVersion
from jinja2 import __version__ as jinja2Version
import cache_buster import cache_buster
import ub import ub
from ub import config from ub import config
@ -85,6 +87,10 @@ import hashlib
from redirect import redirect_back from redirect import redirect_back
import time import time
import server import server
try:
import cPickle
except ImportError:
import pickle as cPickle
try: try:
from urllib.parse import quote from urllib.parse import quote
@ -103,10 +109,12 @@ current_milli_time = lambda: int(round(time.time() * 1000))
# Global variables # Global variables
gdrive_watch_callback_token = 'target=calibreweb-watch_files' gdrive_watch_callback_token = 'target=calibreweb-watch_files'
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx',
'fb2'} 'fb2', 'html', 'rtf', 'odt'}
# READER_EXTENSIONS = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt'] + (['rar','cbr'] if rar_support else [])) EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'html', 'rtf', 'odt'}
# READER_EXTENSIONS = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt', 'rar', 'cbr'])
# EXTENSIONS_READER = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt'] + (['rar','cbr'] if rar_support else []))
def md5(fname): def md5(fname):
hash_md5 = hashlib.md5() hash_md5 = hashlib.md5()
@ -183,7 +191,6 @@ logging.getLogger("book_formats").addHandler(file_handler)
logging.getLogger("book_formats").setLevel(config.config_log_level) logging.getLogger("book_formats").setLevel(config.config_log_level)
Principal(app) Principal(app)
babel = Babel(app) babel = Babel(app)
import uploader import uploader
@ -195,6 +202,9 @@ lm.anonymous_user = ub.Anonymous
app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT') app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT')
db.setup_db() db.setup_db()
with open(os.path.join(config.get_main_dir, 'cps/translations/iso639.pickle'), 'rb') as f:
language_table = cPickle.load(f)
def is_gdrive_ready(): def is_gdrive_ready():
return os.path.exists(os.path.join(config.get_main_dir, 'settings.yaml')) and \ return os.path.exists(os.path.join(config.get_main_dir, 'settings.yaml')) and \
@ -418,7 +428,7 @@ def yesno(value, yes, no):
def canread(ext): def canread(ext):
if isinstance(ext, db.Data): if isinstance(ext, db.Data):
ext = ext.format ext = ext.format
return ext.lower() in READER_EXTENSIONS''' return ext.lower() in EXTENSIONS_READER'''
def admin_required(f): def admin_required(f):
@ -582,7 +592,7 @@ def modify_database_object(input_elements, db_book_object, db_object, db_session
new_element = db_object(add_element, add_element) new_element = db_object(add_element, add_element)
elif db_type == 'custom': elif db_type == 'custom':
new_element = db_object(value=add_element) new_element = db_object(value=add_element)
else: # db_type should be tag, or languages else: # db_type should be tag, language or publisher
new_element = db_object(add_element) new_element = db_object(add_element)
db_session.add(new_element) db_session.add(new_element)
# add element to book # add element to book
@ -1036,9 +1046,14 @@ def get_tags_json():
def get_languages_json(): def get_languages_json():
if request.method == "GET": if request.method == "GET":
query = request.args.get('q').lower() query = request.args.get('q').lower()
languages = speaking_language() # languages = speaking_language()
entries = [s for s in languages if query in s.name.lower()] languages = language_table[get_locale()]
json_dumps = json.dumps([dict(name=r.name) for r in entries]) entries_start = [s for key, s in languages.items() if s.lower().startswith(query.lower())]
if len(entries_start) < 5:
entries = [s for key,s in languages.items() if query in s.lower()]
entries_start.extend(entries[0:(5-len(entries_start))])
entries_start = list(set(entries_start))
json_dumps = json.dumps([dict(name=r) for r in entries_start[0:5]])
return json_dumps return json_dumps
@ -1149,7 +1164,7 @@ def get_update_status():
if 'committer' in update_data and 'message' in update_data: if 'committer' in update_data and 'message' in update_data:
status['success'] = True status['success'] = True
status['message'] = _(u'A new update is available. Click on the button below update to the latest version.') status['message'] = _(u'A new update is available. Click on the button below to update to the latest version.')
new_commit_date = datetime.datetime.strptime( new_commit_date = datetime.datetime.strptime(
update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
@ -1652,8 +1667,10 @@ def stats():
categorys = db.session.query(db.Tags).count() categorys = db.session.query(db.Tags).count()
series = db.session.query(db.Series).count() series = db.session.query(db.Series).count()
versions = uploader.book_formats.get_versions() versions = uploader.book_formats.get_versions()
versions['Babel'] = 'v'+babelVersion versions['Babel'] = 'v' + babelVersion
versions['Sqlalchemy'] = 'v'+sqlalchemyVersion versions['Sqlalchemy'] = 'v' + sqlalchemyVersion
versions['Werkzeug'] = 'v' + werkzeugVersion
versions['Jinja2'] = 'v' + jinja2Version
versions['Flask'] = 'v'+flaskVersion versions['Flask'] = 'v'+flaskVersion
versions['Flask Login'] = 'v'+flask_loginVersion versions['Flask Login'] = 'v'+flask_loginVersion
versions['Flask Principal'] = 'v'+flask_principalVersion versions['Flask Principal'] = 'v'+flask_principalVersion
@ -1689,7 +1706,7 @@ def delete_book(book_id, book_format):
modify_database_object([u''], book.tags, db.Tags, db.session, 'tags') modify_database_object([u''], book.tags, db.Tags, db.session, 'tags')
modify_database_object([u''], book.series, db.Series, db.session, 'series') modify_database_object([u''], book.series, db.Series, db.session, 'series')
modify_database_object([u''], book.languages, db.Languages, db.session, 'languages') modify_database_object([u''], book.languages, db.Languages, db.session, 'languages')
modify_database_object([u''], book.publishers, db.Publishers, db.session, 'series') modify_database_object([u''], book.publishers, db.Publishers, db.session, 'publishers')
cc = db.session.query(db.Custom_Columns).filter(db.Custom_Columns.datatype.notin_(db.cc_exceptions)).all() cc = db.session.query(db.Custom_Columns).filter(db.Custom_Columns.datatype.notin_(db.cc_exceptions)).all()
for c in cc: for c in cc:
@ -2406,18 +2423,22 @@ def add_to_shelf(shelf_id, book_id):
if shelf is None: if shelf is None:
app.logger.info("Invalid shelf specified") app.logger.info("Invalid shelf specified")
if not request.is_xhr: if not request.is_xhr:
flash(_(u"Invalid shelf specified"), category="error")
return redirect(url_for('index')) return redirect(url_for('index'))
return "Invalid shelf specified", 400 return "Invalid shelf specified", 400
if not shelf.is_public and not shelf.user_id == int(current_user.id): if not shelf.is_public and not shelf.user_id == int(current_user.id):
app.logger.info("Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name) app.logger.info("Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name)
if not request.is_xhr: if not request.is_xhr:
flash(_(u"Sorry you are not allowed to add a book to the the shelf: %(shelfname)s", shelfname=shelf.name),
category="error")
return redirect(url_for('index')) return redirect(url_for('index'))
return "Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name, 403 return "Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name, 403
if shelf.is_public and not current_user.role_edit_shelfs(): if shelf.is_public and not current_user.role_edit_shelfs():
app.logger.info("User is not allowed to edit public shelves") app.logger.info("User is not allowed to edit public shelves")
if not request.is_xhr: if not request.is_xhr:
flash(_(u"You are not allowed to edit public shelves"), category="error")
return redirect(url_for('index')) return redirect(url_for('index'))
return "User is not allowed to edit public shelves", 403 return "User is not allowed to edit public shelves", 403
@ -2426,6 +2447,7 @@ def add_to_shelf(shelf_id, book_id):
if book_in_shelf: if book_in_shelf:
app.logger.info("Book is already part of the shelf: %s" % shelf.name) app.logger.info("Book is already part of the shelf: %s" % shelf.name)
if not request.is_xhr: if not request.is_xhr:
flash(_(u"Book is already part of the shelf: %(shelfname)s", shelfname=shelf.name), category="error")
return redirect(url_for('index')) return redirect(url_for('index'))
return "Book is already part of the shelf: %s" % shelf.name, 400 return "Book is already part of the shelf: %s" % shelf.name, 400
@ -2440,7 +2462,10 @@ def add_to_shelf(shelf_id, book_id):
ub.session.commit() ub.session.commit()
if not request.is_xhr: if not request.is_xhr:
flash(_(u"Book has been added to shelf: %(sname)s", sname=shelf.name), category="success") flash(_(u"Book has been added to shelf: %(sname)s", sname=shelf.name), category="success")
return redirect(request.environ["HTTP_REFERER"]) if "HTTP_REFERER" in request.environ:
return redirect(request.environ["HTTP_REFERER"])
else:
return redirect(url_for('index'))
return "", 204 return "", 204
@ -2637,7 +2662,12 @@ def show_shelf(shelf_id):
ub.BookShelf.order.asc()).all() ub.BookShelf.order.asc()).all()
for book in books_in_shelf: for book in books_in_shelf:
cur_book = db.session.query(db.Books).filter(db.Books.id == book.book_id).first() cur_book = db.session.query(db.Books).filter(db.Books.id == book.book_id).first()
result.append(cur_book) if cur_book:
result.append(cur_book)
else:
app.logger.info('Not existing book %s in shelf %s deleted' % (book.book_id, shelf.id))
ub.session.query(ub.BookShelf).filter(ub.BookShelf.book_id == book.book_id).delete()
ub.session.commit()
return render_title_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name), return render_title_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name),
shelf=shelf, page="shelf") shelf=shelf, page="shelf")
else: else:
@ -2993,7 +3023,8 @@ def configuration_helper(origin):
if content.config_logfile != to_save["config_logfile"]: if content.config_logfile != to_save["config_logfile"]:
# check valid path, only path or file # check valid path, only path or file
if os.path.dirname(to_save["config_logfile"]): if os.path.dirname(to_save["config_logfile"]):
if os.path.exists(os.path.dirname(to_save["config_logfile"])): if os.path.exists(os.path.dirname(to_save["config_logfile"])) and \
os.path.basename(to_save["config_logfile"]) and not os.path.isdir(to_save["config_logfile"]):
content.config_logfile = to_save["config_logfile"] content.config_logfile = to_save["config_logfile"]
else: else:
ub.session.commit() ub.session.commit()
@ -3041,8 +3072,6 @@ def configuration_helper(origin):
gdriveError=gdriveError, goodreads=goodreads_support, rarfile_support=rar_support, gdriveError=gdriveError, goodreads=goodreads_support, rarfile_support=rar_support,
title=_(u"Basic Configuration"), page="config") title=_(u"Basic Configuration"), page="config")
if reboot_required: if reboot_required:
# ub.session.close()
# ub.engine.dispose()
# stop Server # stop Server
server.Server.setRestartTyp(True) server.Server.setRestartTyp(True)
server.Server.stopServer() server.Server.stopServer()
@ -3092,6 +3121,11 @@ def new_user():
content.sidebar_view += ub.SIDEBAR_AUTHOR content.sidebar_view += ub.SIDEBAR_AUTHOR
if "show_detail_random" in to_save: if "show_detail_random" in to_save:
content.sidebar_view += ub.DETAIL_RANDOM content.sidebar_view += ub.DETAIL_RANDOM
if "show_sorted" in to_save:
content.sidebar_view += ub.SIDEBAR_SORTED
if "show_recent" in to_save:
content.sidebar_view += ub.SIDEBAR_RECENT
content.role = 0 content.role = 0
if "admin_role" in to_save: if "admin_role" in to_save:
content.role = content.role + ub.ROLE_ADMIN content.role = content.role + ub.ROLE_ADMIN
@ -3345,22 +3379,19 @@ def edit_book(book_id):
return redirect(url_for("index")) return redirect(url_for("index"))
for indx in range(0, len(book.languages)): for indx in range(0, len(book.languages)):
try: book.languages[indx].language_name = language_table[get_locale()][book.languages[indx].lang_code]
book.languages[indx].language_name = LC.parse(book.languages[indx].lang_code).get_language_name(
get_locale())
except UnknownLocaleError:
book.languages[indx].language_name = _(isoLanguages.get(part3=book.languages[indx].lang_code).name)
for authr in book.authors: for authr in book.authors:
author_names.append(authr.name.replace('|', ',')) author_names.append(authr.name.replace('|', ','))
# Option for showing convertbook button # Option for showing convertbook button
valid_source_formats=list()
if config.config_ebookconverter == 2: if config.config_ebookconverter == 2:
display_convertbtn = True for file in book.data:
else: if file.format.lower() in EXTENSIONS_CONVERT:
display_convertbtn = False valid_source_formats.append(file.format.lower())
# Determine what formats don't already exist # Determine what formats don't already exist
allowed_conversion_formats = ALLOWED_EXTENSIONS.copy() allowed_conversion_formats = EXTENSIONS_CONVERT.copy()
for file in book.data: for file in book.data:
try: try:
allowed_conversion_formats.remove(file.format.lower()) allowed_conversion_formats.remove(file.format.lower())
@ -3372,12 +3403,9 @@ def edit_book(book_id):
# Show form # Show form
if request.method != 'POST': if request.method != 'POST':
return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,
title=_(u"edit metadata"), page="editbook", display_convertbtn=display_convertbtn, title=_(u"edit metadata"), page="editbook",
conversion_formats=allowed_conversion_formats) conversion_formats=allowed_conversion_formats,
source_formats=valid_source_formats)
# Update book
edited_books_id = set()
# Check and handle Uploaded file # Check and handle Uploaded file
if 'btn-upload-format' in request.files: if 'btn-upload-format' in request.files:
requested_file = request.files['btn-upload-format'] requested_file = request.files['btn-upload-format']
@ -3385,7 +3413,7 @@ def edit_book(book_id):
if requested_file.filename != '': if requested_file.filename != '':
if '.' in requested_file.filename: if '.' in requested_file.filename:
file_ext = requested_file.filename.rsplit('.', 1)[-1].lower() file_ext = requested_file.filename.rsplit('.', 1)[-1].lower()
if file_ext not in ALLOWED_EXTENSIONS: if file_ext not in EXTENSIONS_UPLOAD:
flash(_("File extension '%(ext)s' is not allowed to be uploaded to this server", ext=file_ext), flash(_("File extension '%(ext)s' is not allowed to be uploaded to this server", ext=file_ext),
category="error") category="error")
return redirect(url_for('show_book', book_id=book.id)) return redirect(url_for('show_book', book_id=book.id))
@ -3432,7 +3460,6 @@ def edit_book(book_id):
# check for empty request # check for empty request
if requested_file.filename != '': if requested_file.filename != '':
file_ext = requested_file.filename.rsplit('.', 1)[-1].lower() file_ext = requested_file.filename.rsplit('.', 1)[-1].lower()
# file_name = book.path.rsplit('/', 1)[-1]
filepath = os.path.normpath(os.path.join(config.config_calibre_dir, book.path)) filepath = os.path.normpath(os.path.join(config.config_calibre_dir, book.path))
saved_filename = os.path.join(filepath, 'cover.' + file_ext) saved_filename = os.path.join(filepath, 'cover.' + file_ext)
@ -3456,10 +3483,14 @@ def edit_book(book_id):
to_save = request.form.to_dict() to_save = request.form.to_dict()
try: try:
# Update book
edited_books_id = set()
#handle book title
if book.title != to_save["book_title"]: if book.title != to_save["book_title"]:
book.title = to_save["book_title"] book.title = to_save["book_title"]
edited_books_id.add(book.id) edited_books_id.add(book.id)
# handle author(s)
input_authors = to_save["author_name"].split('&') input_authors = to_save["author_name"].split('&')
input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors)) input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors))
# we have all author names now # we have all author names now
@ -3495,22 +3526,22 @@ def edit_book(book_id):
if book.series_index != to_save["series_index"]: if book.series_index != to_save["series_index"]:
book.series_index = to_save["series_index"] book.series_index = to_save["series_index"]
# Handle book comments/description
if len(book.comments): if len(book.comments):
book.comments[0].text = to_save["description"] book.comments[0].text = to_save["description"]
else: else:
book.comments.append(db.Comments(text=to_save["description"], book=book.id)) book.comments.append(db.Comments(text=to_save["description"], book=book.id))
# Handle book tags
input_tags = to_save["tags"].split(',') input_tags = to_save["tags"].split(',')
input_tags = list(map(lambda it: it.strip(), input_tags)) input_tags = list(map(lambda it: it.strip(), input_tags))
modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags') modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags')
# Handle book series
input_series = [to_save["series"].strip()] input_series = [to_save["series"].strip()]
input_series = [x for x in input_series if x != ''] input_series = [x for x in input_series if x != '']
modify_database_object(input_series, book.series, db.Series, db.session, 'series') modify_database_object(input_series, book.series, db.Series, db.session, 'series')
input_languages = to_save["languages"].split(',')
input_languages = list(map(lambda it: it.strip().lower(), input_languages))
if to_save["pubdate"]: if to_save["pubdate"]:
try: try:
book.pubdate = datetime.datetime.strptime(to_save["pubdate"], "%Y-%m-%d") book.pubdate = datetime.datetime.strptime(to_save["pubdate"], "%Y-%m-%d")
@ -3518,24 +3549,25 @@ def edit_book(book_id):
book.pubdate = db.Books.DEFAULT_PUBDATE book.pubdate = db.Books.DEFAULT_PUBDATE
else: else:
book.pubdate = db.Books.DEFAULT_PUBDATE book.pubdate = db.Books.DEFAULT_PUBDATE
'''if len(book.publishers): '''if len(book.publishers):
if to_save["publisher"] != book.publishers[0].name: if to_save["publisher"] != book.publishers[0].name:
modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series') modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series')
else: else:
modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series')''' modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series')'''
# retranslate displayed text to language codes # handle book languages
languages = db.session.query(db.Languages).all() input_languages = to_save["languages"].split(',')
# input_languages = list(map(lambda it: it.strip().lower(), input_languages))
input_languages = [x.strip().lower() for x in input_languages if x != '']
input_l = [] input_l = []
for lang in languages: invers_lang_table = [x.lower() for x in language_table[get_locale()].values()]
for lang in input_languages:
try: try:
lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower() res = list(language_table[get_locale()].keys())[invers_lang_table.index(lang)]
except UnknownLocaleError: input_l.append(res)
lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower() except ValueError:
for inp_lang in input_languages: app.logger.error('%s is not a valid language' % lang)
if inp_lang == lang.name: flash(_(u"%(langname)s is not a valid language", langname=lang), category="error")
input_l.append(lang.lang_code)
modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages') modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages')
if to_save["rating"].strip(): if to_save["rating"].strip():
@ -3676,7 +3708,7 @@ def upload():
# check if file extension is correct # check if file extension is correct
if '.' in requested_file.filename: if '.' in requested_file.filename:
file_ext = requested_file.filename.rsplit('.', 1)[-1].lower() file_ext = requested_file.filename.rsplit('.', 1)[-1].lower()
if file_ext not in ALLOWED_EXTENSIONS: if file_ext not in EXTENSIONS_UPLOAD:
flash( flash(
_("File extension '%(ext)s' is not allowed to be uploaded to this server", _("File extension '%(ext)s' is not allowed to be uploaded to this server",
ext=file_ext), category="error") ext=file_ext), category="error")

@ -232,10 +232,25 @@ class WorkerThread(threading.Thread):
bookid = self.queue[self.current]['bookid'] bookid = self.queue[self.current]['bookid']
format_old_ext = u'.' + self.queue[self.current]['settings']['old_book_format'].lower() format_old_ext = u'.' + self.queue[self.current]['settings']['old_book_format'].lower()
format_new_ext = u'.' + self.queue[self.current]['settings']['new_book_format'].lower() format_new_ext = u'.' + self.queue[self.current]['settings']['new_book_format'].lower()
# check to see if destination format already exists -
# if it does - mark the conversion task as complete and return a success
# this will allow send to kindle workflow to continue to work
if os.path.isfile(file_path + format_new_ext):
web.app.logger.info("Book id %d already converted to %s", bookid, format_new_ext)
cur_book = web.db.session.query(web.db.Books).filter(web.db.Books.id == bookid).first()
self.queue[self.current]['path'] = file_path
self.queue[self.current]['title'] = cur_book.title
self._handleSuccess()
return file_path + format_new_ext
else:
web.app.logger.info("Book id %d - target format of %s does not existing. Moving forward with convert.", bookid, format_new_ext)
# check if converter-executable is existing # check if converter-executable is existing
if not os.path.exists(web.ub.config.config_converterpath): if not os.path.exists(web.ub.config.config_converterpath):
self._handleError(_(u"Convertertool %(converter)s not found", converter=web.ub.config.config_converterpath)) self._handleError(_(u"Convertertool %(converter)s not found", converter=web.ub.config.config_converterpath))
return return
try: try:
# check which converter to use kindlegen is "1" # check which converter to use kindlegen is "1"
if format_old_ext == '.epub' and format_new_ext == '.mobi': if format_old_ext == '.epub' and format_new_ext == '.mobi':
@ -313,11 +328,7 @@ class WorkerThread(threading.Thread):
self.queue[self.current]['title'] = cur_book.title self.queue[self.current]['title'] = cur_book.title
if web.ub.config.config_use_google_drive: if web.ub.config.config_use_google_drive:
os.remove(file_path + format_old_ext) os.remove(file_path + format_old_ext)
self.queue[self.current]['status'] = STAT_FINISH_SUCCESS self._handleSuccess()
self.UIqueue[self.current]['status'] = _('Finished')
self.UIqueue[self.current]['progress'] = "100 %"
self.UIqueue[self.current]['runtime'] = self._formatRuntime(
datetime.now() - self.queue[self.current]['starttime'])
return file_path + format_new_ext return file_path + format_new_ext
else: else:
error_message = format_new_ext.upper() + ' format not found on disk' error_message = format_new_ext.upper() + ' format not found on disk'
@ -434,12 +445,7 @@ class WorkerThread(threading.Thread):
self.asyncSMTP.login(str(obj['settings']["mail_login"]), str(obj['settings']["mail_password"])) self.asyncSMTP.login(str(obj['settings']["mail_login"]), str(obj['settings']["mail_password"]))
self.asyncSMTP.sendmail(obj['settings']["mail_from"], obj['recipent'], msg) self.asyncSMTP.sendmail(obj['settings']["mail_from"], obj['recipent'], msg)
self.asyncSMTP.quit() self.asyncSMTP.quit()
self.queue[self.current]['status'] = STAT_FINISH_SUCCESS self._handleSuccess()
self.UIqueue[self.current]['status'] = _('Finished')
self.UIqueue[self.current]['progress'] = "100 %"
self.UIqueue[self.current]['runtime'] = self._formatRuntime(
datetime.now() - self.queue[self.current]['starttime'])
sys.stderr = org_stderr sys.stderr = org_stderr
except (MemoryError) as e: except (MemoryError) as e:
@ -452,8 +458,6 @@ class WorkerThread(threading.Thread):
self._handleError(u'Error sending email: ' + e.strerror) self._handleError(u'Error sending email: ' + e.strerror)
return None return None
def _formatRuntime(self, runtime): def _formatRuntime(self, runtime):
self.UIqueue[self.current]['rt'] = runtime.total_seconds() self.UIqueue[self.current]['rt'] = runtime.total_seconds()
val = re.split('\:|\.', str(runtime))[0:3] val = re.split('\:|\.', str(runtime))[0:3]
@ -475,8 +479,15 @@ class WorkerThread(threading.Thread):
datetime.now() - self.queue[self.current]['starttime']) datetime.now() - self.queue[self.current]['starttime'])
self.UIqueue[self.current]['message'] = error_message self.UIqueue[self.current]['message'] = error_message
def _handleSuccess(self):
self.queue[self.current]['status'] = STAT_FINISH_SUCCESS
self.UIqueue[self.current]['status'] = _('Finished')
self.UIqueue[self.current]['progress'] = "100 %"
self.UIqueue[self.current]['runtime'] = self._formatRuntime(
datetime.now() - self.queue[self.current]['starttime'])
# Enable logging of smtp lib debug output
class StderrLogger(object): class StderrLogger(object):
buffer = '' buffer = ''

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-09-08 14:49+0200\n" "POT-Creation-Date: 2018-09-14 21:11+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -113,705 +113,750 @@ msgstr ""
msgid "Unrar binary file not found" msgid "Unrar binary file not found"
msgstr "" msgstr ""
#: cps/web.py:1114 #: cps/web.py:1112 cps/web.py:2778
msgid "Unknown"
msgstr ""
#: cps/web.py:1121 cps/web.py:1152
msgid "HTTP Error"
msgstr ""
#: cps/web.py:1123 cps/web.py:1154
msgid "Connection error"
msgstr ""
#: cps/web.py:1125 cps/web.py:1156
msgid "Timeout while establishing connection"
msgstr ""
#: cps/web.py:1127 cps/web.py:1158
msgid "General error"
msgstr ""
#: cps/web.py:1133
msgid "Unexpected data while reading update information"
msgstr ""
#: cps/web.py:1140
msgid "No update available. You already have the latest version installed"
msgstr ""
#: cps/web.py:1165
msgid "A new update is available. Click on the button below to update to the latest version."
msgstr ""
#: cps/web.py:1215
msgid "Could not fetch update information"
msgstr ""
#: cps/web.py:1230
msgid "Requesting update package" msgid "Requesting update package"
msgstr "" msgstr ""
#: cps/web.py:1115 #: cps/web.py:1231
msgid "Downloading update package" msgid "Downloading update package"
msgstr "" msgstr ""
#: cps/web.py:1116 #: cps/web.py:1232
msgid "Unzipping update package" msgid "Unzipping update package"
msgstr "" msgstr ""
#: cps/web.py:1117 #: cps/web.py:1233
msgid "Files are replaced" msgid "Files are replaced"
msgstr "" msgstr ""
#: cps/web.py:1118 #: cps/web.py:1234
msgid "Database connections are closed" msgid "Database connections are closed"
msgstr "" msgstr ""
#: cps/web.py:1119 #: cps/web.py:1235
msgid "Server is stopped" msgid "Server is stopped"
msgstr "" msgstr ""
#: cps/web.py:1120 #: cps/web.py:1236
msgid "Update finished, please press okay and reload page" msgid "Update finished, please press okay and reload page"
msgstr "" msgstr ""
#: cps/web.py:1140 #: cps/web.py:1256
msgid "Recently Added Books" msgid "Recently Added Books"
msgstr "" msgstr ""
#: cps/web.py:1150 #: cps/web.py:1266
msgid "Newest Books" msgid "Newest Books"
msgstr "" msgstr ""
#: cps/web.py:1162 #: cps/web.py:1278
msgid "Oldest Books" msgid "Oldest Books"
msgstr "" msgstr ""
#: cps/web.py:1174 #: cps/web.py:1290
msgid "Books (A-Z)" msgid "Books (A-Z)"
msgstr "" msgstr ""
#: cps/web.py:1185 #: cps/web.py:1301
msgid "Books (Z-A)" msgid "Books (Z-A)"
msgstr "" msgstr ""
#: cps/web.py:1214 #: cps/web.py:1330
msgid "Hot Books (most downloaded)" msgid "Hot Books (most downloaded)"
msgstr "" msgstr ""
#: cps/web.py:1227 #: cps/web.py:1343
msgid "Best rated books" msgid "Best rated books"
msgstr "" msgstr ""
#: cps/templates/index.xml:36 cps/web.py:1239 #: cps/templates/index.xml:36 cps/web.py:1355
msgid "Random Books" msgid "Random Books"
msgstr "" msgstr ""
#: cps/web.py:1254 #: cps/web.py:1370
msgid "Author list" msgid "Author list"
msgstr "" msgstr ""
#: cps/web.py:1266 cps/web.py:1329 cps/web.py:1484 cps/web.py:2036 #: cps/web.py:1382 cps/web.py:1445 cps/web.py:1600 cps/web.py:2152
msgid "Error opening eBook. File does not exist or file is not accessible:" msgid "Error opening eBook. File does not exist or file is not accessible:"
msgstr "" msgstr ""
#: cps/templates/index.xml:73 cps/web.py:1313 #: cps/templates/index.xml:73 cps/web.py:1429
msgid "Series list" msgid "Series list"
msgstr "" msgstr ""
#: cps/web.py:1327 #: cps/web.py:1443
#, python-format #, python-format
msgid "Series: %(serie)s" msgid "Series: %(serie)s"
msgstr "" msgstr ""
#: cps/web.py:1354 #: cps/web.py:1470
msgid "Available languages" msgid "Available languages"
msgstr "" msgstr ""
#: cps/web.py:1371 #: cps/web.py:1487
#, python-format #, python-format
msgid "Language: %(name)s" msgid "Language: %(name)s"
msgstr "" msgstr ""
#: cps/templates/index.xml:66 cps/web.py:1382 #: cps/templates/index.xml:66 cps/web.py:1498
msgid "Category list" msgid "Category list"
msgstr "" msgstr ""
#: cps/web.py:1396 #: cps/web.py:1512
#, python-format #, python-format
msgid "Category: %(name)s" msgid "Category: %(name)s"
msgstr "" msgstr ""
#: cps/templates/layout.html:71 cps/web.py:1535 #: cps/templates/layout.html:71 cps/web.py:1651
msgid "Tasks" msgid "Tasks"
msgstr "" msgstr ""
#: cps/web.py:1565 #: cps/web.py:1681
msgid "Statistics" msgid "Statistics"
msgstr "" msgstr ""
#: cps/web.py:1670 #: cps/web.py:1786
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console" msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
msgstr "" msgstr ""
#: cps/web.py:1746 #: cps/web.py:1861
msgid "Server restarted, please reload page" msgid "Server restarted, please reload page"
msgstr "" msgstr ""
#: cps/web.py:1749 #: cps/web.py:1864
msgid "Performing shutdown of server, please close window" msgid "Performing shutdown of server, please close window"
msgstr "" msgstr ""
#: cps/web.py:1767 #: cps/web.py:1883
msgid "Update done" msgid "Update done"
msgstr "" msgstr ""
#: cps/web.py:1837 #: cps/web.py:1953
msgid "Published after " msgid "Published after "
msgstr "" msgstr ""
#: cps/web.py:1844 #: cps/web.py:1960
msgid "Published before " msgid "Published before "
msgstr "" msgstr ""
#: cps/web.py:1858 #: cps/web.py:1974
#, python-format #, python-format
msgid "Rating <= %(rating)s" msgid "Rating <= %(rating)s"
msgstr "" msgstr ""
#: cps/web.py:1860 #: cps/web.py:1976
#, python-format #, python-format
msgid "Rating >= %(rating)s" msgid "Rating >= %(rating)s"
msgstr "" msgstr ""
#: cps/web.py:1919 cps/web.py:1928 #: cps/web.py:2035 cps/web.py:2044
msgid "search" msgid "search"
msgstr "" msgstr ""
#: cps/templates/index.xml:44 cps/templates/index.xml:48 #: cps/templates/index.xml:44 cps/templates/index.xml:48
#: cps/templates/layout.html:146 cps/web.py:1995 #: cps/templates/layout.html:146 cps/web.py:2111
msgid "Read Books" msgid "Read Books"
msgstr "" msgstr ""
#: cps/templates/index.xml:52 cps/templates/index.xml:56 #: cps/templates/index.xml:52 cps/templates/index.xml:56
#: cps/templates/layout.html:148 cps/web.py:1998 #: cps/templates/layout.html:148 cps/web.py:2114
msgid "Unread Books" msgid "Unread Books"
msgstr "" msgstr ""
#: cps/web.py:2046 cps/web.py:2048 cps/web.py:2050 cps/web.py:2062 #: cps/web.py:2162 cps/web.py:2164 cps/web.py:2166 cps/web.py:2178
msgid "Read a Book" msgid "Read a Book"
msgstr "" msgstr ""
#: cps/web.py:2128 cps/web.py:3006 #: cps/web.py:2244 cps/web.py:3129
msgid "Please fill out all fields!" msgid "Please fill out all fields!"
msgstr "" msgstr ""
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159 #: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
#: cps/web.py:2161 #: cps/web.py:2277
msgid "register" msgid "register"
msgstr "" msgstr ""
#: cps/web.py:2149 cps/web.py:3222 #: cps/web.py:2265 cps/web.py:3345
msgid "An unknown error occurred. Please try again later." msgid "An unknown error occurred. Please try again later."
msgstr "" msgstr ""
#: cps/web.py:2152 #: cps/web.py:2268
msgid "Your e-mail is not allowed to register" msgid "Your e-mail is not allowed to register"
msgstr "" msgstr ""
#: cps/web.py:2155 #: cps/web.py:2271
msgid "Confirmation e-mail was send to your e-mail account." msgid "Confirmation e-mail was send to your e-mail account."
msgstr "" msgstr ""
#: cps/web.py:2158 #: cps/web.py:2274
msgid "This username or e-mail address is already in use." msgid "This username or e-mail address is already in use."
msgstr "" msgstr ""
#: cps/web.py:2175 cps/web.py:2271 #: cps/web.py:2291 cps/web.py:2387
#, python-format #, python-format
msgid "you are now logged in as: '%(nickname)s'" msgid "you are now logged in as: '%(nickname)s'"
msgstr "" msgstr ""
#: cps/web.py:2180 #: cps/web.py:2296
msgid "Wrong Username or Password" msgid "Wrong Username or Password"
msgstr "" msgstr ""
#: cps/web.py:2186 cps/web.py:2207 #: cps/web.py:2302 cps/web.py:2323
msgid "login" msgid "login"
msgstr "" msgstr ""
#: cps/web.py:2219 cps/web.py:2250 #: cps/web.py:2335 cps/web.py:2366
msgid "Token not found" msgid "Token not found"
msgstr "" msgstr ""
#: cps/web.py:2227 cps/web.py:2258 #: cps/web.py:2343 cps/web.py:2374
msgid "Token has expired" msgid "Token has expired"
msgstr "" msgstr ""
#: cps/web.py:2235 #: cps/web.py:2351
msgid "Success! Please return to your device" msgid "Success! Please return to your device"
msgstr "" msgstr ""
#: cps/web.py:2285 #: cps/web.py:2401
msgid "Please configure the SMTP mail settings first..." msgid "Please configure the SMTP mail settings first..."
msgstr "" msgstr ""
#: cps/web.py:2289 #: cps/web.py:2405
#, python-format #, python-format
msgid "Book successfully queued for sending to %(kindlemail)s" msgid "Book successfully queued for sending to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:2293 #: cps/web.py:2409
#, python-format #, python-format
msgid "There was an error sending this book: %(res)s" msgid "There was an error sending this book: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:2295 cps/web.py:3060 #: cps/web.py:2411 cps/web.py:3183
msgid "Please configure your kindle e-mail address first..." msgid "Please configure your kindle e-mail address first..."
msgstr "" msgstr ""
#: cps/web.py:2339 #: cps/web.py:2455
#, python-format #, python-format
msgid "Book has been added to shelf: %(sname)s" msgid "Book has been added to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2350 #: cps/web.py:2466
msgid "Invalid shelf specified" msgid "Invalid shelf specified"
msgstr "" msgstr ""
#: cps/web.py:2355 #: cps/web.py:2471
#, python-format #, python-format
msgid "You are not allowed to add a book to the the shelf: %(name)s" msgid "You are not allowed to add a book to the the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2360 #: cps/web.py:2476
msgid "User is not allowed to edit public shelves" msgid "User is not allowed to edit public shelves"
msgstr "" msgstr ""
#: cps/web.py:2378 #: cps/web.py:2494
#, python-format #, python-format
msgid "Books are already part of the shelf: %(name)s" msgid "Books are already part of the shelf: %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2392 #: cps/web.py:2508
#, python-format #, python-format
msgid "Books have been added to shelf: %(sname)s" msgid "Books have been added to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2394 #: cps/web.py:2510
#, python-format #, python-format
msgid "Could not add books to shelf: %(sname)s" msgid "Could not add books to shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2431 #: cps/web.py:2547
#, python-format #, python-format
msgid "Book has been removed from shelf: %(sname)s" msgid "Book has been removed from shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2437 #: cps/web.py:2553
#, python-format #, python-format
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s" msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
msgstr "" msgstr ""
#: cps/web.py:2457 cps/web.py:2481 #: cps/web.py:2573 cps/web.py:2597
#, python-format #, python-format
msgid "A shelf with the name '%(title)s' already exists." msgid "A shelf with the name '%(title)s' already exists."
msgstr "" msgstr ""
#: cps/web.py:2462 #: cps/web.py:2578
#, python-format #, python-format
msgid "Shelf %(title)s created" msgid "Shelf %(title)s created"
msgstr "" msgstr ""
#: cps/web.py:2464 cps/web.py:2492 #: cps/web.py:2580 cps/web.py:2608
msgid "There was an error" msgid "There was an error"
msgstr "" msgstr ""
#: cps/web.py:2465 cps/web.py:2467 #: cps/web.py:2581 cps/web.py:2583
msgid "create a shelf" msgid "create a shelf"
msgstr "" msgstr ""
#: cps/web.py:2490 #: cps/web.py:2606
#, python-format #, python-format
msgid "Shelf %(title)s changed" msgid "Shelf %(title)s changed"
msgstr "" msgstr ""
#: cps/web.py:2493 cps/web.py:2495 #: cps/web.py:2609 cps/web.py:2611
msgid "Edit a shelf" msgid "Edit a shelf"
msgstr "" msgstr ""
#: cps/web.py:2516 #: cps/web.py:2632
#, python-format #, python-format
msgid "successfully deleted shelf %(name)s" msgid "successfully deleted shelf %(name)s"
msgstr "" msgstr ""
#: cps/web.py:2538 #: cps/web.py:2659
#, python-format #, python-format
msgid "Shelf: '%(name)s'" msgid "Shelf: '%(name)s'"
msgstr "" msgstr ""
#: cps/web.py:2541 #: cps/web.py:2662
msgid "Error opening shelf. Shelf does not exist or is not accessible" msgid "Error opening shelf. Shelf does not exist or is not accessible"
msgstr "" msgstr ""
#: cps/web.py:2572 #: cps/web.py:2693
#, python-format #, python-format
msgid "Change order of Shelf: '%(name)s'" msgid "Change order of Shelf: '%(name)s'"
msgstr "" msgstr ""
#: cps/web.py:2601 cps/web.py:3012 #: cps/web.py:2722 cps/web.py:3135
msgid "E-mail is not from valid domain" msgid "E-mail is not from valid domain"
msgstr "" msgstr ""
#: cps/web.py:2603 cps/web.py:2644 cps/web.py:2647 #: cps/web.py:2724 cps/web.py:2765 cps/web.py:2768
#, python-format #, python-format
msgid "%(name)s's profile" msgid "%(name)s's profile"
msgstr "" msgstr ""
#: cps/web.py:2642 #: cps/web.py:2763
msgid "Found an existing account for this e-mail address." msgid "Found an existing account for this e-mail address."
msgstr "" msgstr ""
#: cps/web.py:2645 #: cps/web.py:2766
msgid "Profile updated" msgid "Profile updated"
msgstr "" msgstr ""
#: cps/web.py:2657 #: cps/web.py:2794
msgid "Unknown"
msgstr ""
#: cps/web.py:2671
msgid "Admin page" msgid "Admin page"
msgstr "" msgstr ""
#: cps/web.py:2749 cps/web.py:2922 #: cps/web.py:2872 cps/web.py:3045
msgid "Calibre-Web configuration updated" msgid "Calibre-Web configuration updated"
msgstr "" msgstr ""
#: cps/templates/admin.html:91 cps/web.py:2762 #: cps/templates/admin.html:100 cps/web.py:2885
msgid "UI Configuration" msgid "UI Configuration"
msgstr "" msgstr ""
#: cps/web.py:2780 #: cps/web.py:2903
msgid "Import of optional Google Drive requirements missing" msgid "Import of optional Google Drive requirements missing"
msgstr "" msgstr ""
#: cps/web.py:2783 #: cps/web.py:2906
msgid "client_secrets.json is missing or not readable" msgid "client_secrets.json is missing or not readable"
msgstr "" msgstr ""
#: cps/web.py:2788 cps/web.py:2815 #: cps/web.py:2911 cps/web.py:2938
msgid "client_secrets.json is not configured for web application" msgid "client_secrets.json is not configured for web application"
msgstr "" msgstr ""
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856 #: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937 #: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
#: cps/web.py:2954 #: cps/web.py:3077
msgid "Basic Configuration" msgid "Basic Configuration"
msgstr "" msgstr ""
#: cps/web.py:2841 #: cps/web.py:2964
msgid "Keyfile location is not valid, please enter correct path" msgid "Keyfile location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/web.py:2853 #: cps/web.py:2976
msgid "Certfile location is not valid, please enter correct path" msgid "Certfile location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/web.py:2895 #: cps/web.py:3018
msgid "Logfile location is not valid, please enter correct path" msgid "Logfile location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/web.py:2934 #: cps/web.py:3057
msgid "DB location is not valid, please enter correct path" msgid "DB location is not valid, please enter correct path"
msgstr "" msgstr ""
#: cps/templates/admin.html:31 cps/web.py:3008 cps/web.py:3014 cps/web.py:3030 #: cps/templates/admin.html:33 cps/web.py:3131 cps/web.py:3137 cps/web.py:3153
msgid "Add new user" msgid "Add new user"
msgstr "" msgstr ""
#: cps/web.py:3020 #: cps/web.py:3143
#, python-format #, python-format
msgid "User '%(user)s' created" msgid "User '%(user)s' created"
msgstr "" msgstr ""
#: cps/web.py:3024 #: cps/web.py:3147
msgid "Found an existing account for this e-mail address or nickname." msgid "Found an existing account for this e-mail address or nickname."
msgstr "" msgstr ""
#: cps/web.py:3048 cps/web.py:3062 #: cps/web.py:3171 cps/web.py:3185
msgid "E-mail server settings updated" msgid "E-mail server settings updated"
msgstr "" msgstr ""
#: cps/web.py:3055 #: cps/web.py:3178
#, python-format #, python-format
msgid "Test e-mail successfully send to %(kindlemail)s" msgid "Test e-mail successfully send to %(kindlemail)s"
msgstr "" msgstr ""
#: cps/web.py:3058 #: cps/web.py:3181
#, python-format #, python-format
msgid "There was an error sending the Test e-mail: %(res)s" msgid "There was an error sending the Test e-mail: %(res)s"
msgstr "" msgstr ""
#: cps/web.py:3063 #: cps/web.py:3186
msgid "Edit e-mail server settings" msgid "Edit e-mail server settings"
msgstr "" msgstr ""
#: cps/web.py:3088 #: cps/web.py:3211
#, python-format #, python-format
msgid "User '%(nick)s' deleted" msgid "User '%(nick)s' deleted"
msgstr "" msgstr ""
#: cps/web.py:3197 #: cps/web.py:3320
#, python-format #, python-format
msgid "User '%(nick)s' updated" msgid "User '%(nick)s' updated"
msgstr "" msgstr ""
#: cps/web.py:3200 #: cps/web.py:3323
msgid "An unknown error occured." msgid "An unknown error occured."
msgstr "" msgstr ""
#: cps/web.py:3202 #: cps/web.py:3325
#, python-format #, python-format
msgid "Edit User %(nick)s" msgid "Edit User %(nick)s"
msgstr "" msgstr ""
#: cps/web.py:3219 #: cps/web.py:3342
#, python-format #, python-format
msgid "Password for user %(user)s reset" msgid "Password for user %(user)s reset"
msgstr "" msgstr ""
#: cps/web.py:3239 #: cps/web.py:3362
msgid "Error opening eBook. File does not exist or file is not accessible" msgid "Error opening eBook. File does not exist or file is not accessible"
msgstr "" msgstr ""
#: cps/web.py:3270 cps/web.py:3546 cps/web.py:3551 cps/web.py:3706 #: cps/web.py:3390 cps/web.py:3667 cps/web.py:3672 cps/web.py:3827
msgid "edit metadata" msgid "edit metadata"
msgstr "" msgstr ""
#: cps/web.py:3284 cps/web.py:3576 #: cps/web.py:3401 cps/web.py:3697
#, python-format #, python-format
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server" msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
msgstr "" msgstr ""
#: cps/web.py:3288 cps/web.py:3580 #: cps/web.py:3405 cps/web.py:3701
msgid "File to be uploaded must have an extension" msgid "File to be uploaded must have an extension"
msgstr "" msgstr ""
#: cps/web.py:3300 cps/web.py:3600 #: cps/web.py:3417 cps/web.py:3721
#, python-format #, python-format
msgid "Failed to create path %(path)s (Permission denied)." msgid "Failed to create path %(path)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3305 #: cps/web.py:3422
#, python-format #, python-format
msgid "Failed to store file %(file)s." msgid "Failed to store file %(file)s."
msgstr "" msgstr ""
#: cps/web.py:3321 #: cps/web.py:3438
#, python-format #, python-format
msgid "File format %(ext)s added to %(book)s" msgid "File format %(ext)s added to %(book)s"
msgstr "" msgstr ""
#: cps/web.py:3339 #: cps/web.py:3455
#, python-format #, python-format
msgid "Failed to create path for cover %(path)s (Permission denied)." msgid "Failed to create path for cover %(path)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3346 #: cps/web.py:3462
#, python-format #, python-format
msgid "Failed to store cover-file %(cover)s." msgid "Failed to store cover-file %(cover)s."
msgstr "" msgstr ""
#: cps/web.py:3349 #: cps/web.py:3465
msgid "Cover-file is not a valid image file" msgid "Cover-file is not a valid image file"
msgstr "" msgstr ""
#: cps/web.py:3362 cps/web.py:3366 #: cps/web.py:3482 cps/web.py:3486
msgid "unknown" msgid "unknown"
msgstr "" msgstr ""
#: cps/web.py:3388 #: cps/web.py:3508
msgid "Cover is not a jpg file, can't save" msgid "Cover is not a jpg file, can't save"
msgstr "" msgstr ""
#: cps/web.py:3555 #: cps/web.py:3554
#, python-format
msgid "%(langname)s is not a valid language"
msgstr ""
#: cps/web.py:3676
msgid "Error editing book, please check logfile for details" msgid "Error editing book, please check logfile for details"
msgstr "" msgstr ""
#: cps/web.py:3605 #: cps/web.py:3726
#, python-format #, python-format
msgid "Failed to store file %(file)s (Permission denied)." msgid "Failed to store file %(file)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3610 #: cps/web.py:3731
#, python-format #, python-format
msgid "Failed to delete file %(file)s (Permission denied)." msgid "Failed to delete file %(file)s (Permission denied)."
msgstr "" msgstr ""
#: cps/web.py:3692 #: cps/web.py:3813
#, python-format #, python-format
msgid "File %(file)s uploaded" msgid "File %(file)s uploaded"
msgstr "" msgstr ""
#: cps/web.py:3722 #: cps/web.py:3843
msgid "Source or destination format for conversion missing" msgid "Source or destination format for conversion missing"
msgstr "" msgstr ""
#: cps/web.py:3732 #: cps/web.py:3853
#, python-format #, python-format
msgid "Book successfully queued for converting to %(book_format)s" msgid "Book successfully queued for converting to %(book_format)s"
msgstr "" msgstr ""
#: cps/web.py:3736 #: cps/web.py:3857
#, python-format #, python-format
msgid "There was an error converting this book: %(res)s" msgid "There was an error converting this book: %(res)s"
msgstr "" msgstr ""
#: cps/worker.py:215 cps/worker.py:387 #: cps/worker.py:215 cps/worker.py:398
msgid "Started" msgid "Started"
msgstr "" msgstr ""
#: cps/worker.py:237 #: cps/worker.py:251
#, python-format #, python-format
msgid "Convertertool %(converter)s not found" msgid "Convertertool %(converter)s not found"
msgstr "" msgstr ""
#: cps/worker.py:272 #: cps/worker.py:287
#, python-format #, python-format
msgid "Ebook-converter failed: %(error)s" msgid "Ebook-converter failed: %(error)s"
msgstr "" msgstr ""
#: cps/worker.py:283 #: cps/worker.py:298
#, python-format #, python-format
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
msgstr "" msgstr ""
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438 #: cps/worker.py:355 cps/worker.py:374
msgid "Finished"
msgstr ""
#: cps/worker.py:344 cps/worker.py:363
msgid "Waiting" msgid "Waiting"
msgstr "" msgstr ""
#: cps/worker.py:351 #: cps/worker.py:362
msgid "This e-mail has been sent via Calibre-Web." msgid "This e-mail has been sent via Calibre-Web."
msgstr "" msgstr ""
#: cps/worker.py:472 #: cps/worker.py:388 cps/worker.py:484
msgid "Finished"
msgstr ""
#: cps/worker.py:476
msgid "Failed" msgid "Failed"
msgstr "" msgstr ""
#: cps/templates/admin.html:4 #: cps/templates/admin.html:6
msgid "User list" msgid "User list"
msgstr "" msgstr ""
#: cps/templates/admin.html:7 #: cps/templates/admin.html:9
msgid "Nickname" msgid "Nickname"
msgstr "" msgstr ""
#: cps/templates/admin.html:8 #: cps/templates/admin.html:10
msgid "E-mail" msgid "E-mail"
msgstr "" msgstr ""
#: cps/templates/admin.html:9 #: cps/templates/admin.html:11
msgid "Kindle" msgid "Kindle"
msgstr "" msgstr ""
#: cps/templates/admin.html:10 #: cps/templates/admin.html:12
msgid "DLS" msgid "DLS"
msgstr "" msgstr ""
#: cps/templates/admin.html:11 cps/templates/layout.html:74 #: cps/templates/admin.html:13 cps/templates/layout.html:74
msgid "Admin" msgid "Admin"
msgstr "" msgstr ""
#: cps/templates/admin.html:12 cps/templates/detail.html:22 #: cps/templates/admin.html:14 cps/templates/detail.html:22
#: cps/templates/detail.html:31 #: cps/templates/detail.html:31
msgid "Download" msgid "Download"
msgstr "" msgstr ""
#: cps/templates/admin.html:13 cps/templates/layout.html:64 #: cps/templates/admin.html:15 cps/templates/layout.html:64
msgid "Upload" msgid "Upload"
msgstr "" msgstr ""
#: cps/templates/admin.html:14 #: cps/templates/admin.html:16
msgid "Edit" msgid "Edit"
msgstr "" msgstr ""
#: cps/templates/admin.html:32 #: cps/templates/admin.html:39
msgid "SMTP e-mail server settings" msgid "SMTP e-mail server settings"
msgstr "" msgstr ""
#: cps/templates/admin.html:35 cps/templates/email_edit.html:11 #: cps/templates/admin.html:42 cps/templates/email_edit.html:11
msgid "SMTP hostname" msgid "SMTP hostname"
msgstr "" msgstr ""
#: cps/templates/admin.html:36 #: cps/templates/admin.html:43
msgid "SMTP port" msgid "SMTP port"
msgstr "" msgstr ""
#: cps/templates/admin.html:37 #: cps/templates/admin.html:44
msgid "SSL" msgid "SSL"
msgstr "" msgstr ""
#: cps/templates/admin.html:38 cps/templates/email_edit.html:27 #: cps/templates/admin.html:45 cps/templates/email_edit.html:27
msgid "SMTP login" msgid "SMTP login"
msgstr "" msgstr ""
#: cps/templates/admin.html:39 #: cps/templates/admin.html:46
msgid "From mail" msgid "From mail"
msgstr "" msgstr ""
#: cps/templates/admin.html:48 #: cps/templates/admin.html:56
msgid "Change SMTP settings" msgid "Change SMTP settings"
msgstr "" msgstr ""
#: cps/templates/admin.html:50 #: cps/templates/admin.html:62
msgid "Configuration" msgid "Configuration"
msgstr "" msgstr ""
#: cps/templates/admin.html:53 #: cps/templates/admin.html:65
msgid "Calibre DB dir" msgid "Calibre DB dir"
msgstr "" msgstr ""
#: cps/templates/admin.html:57 #: cps/templates/admin.html:69
msgid "Log level" msgid "Log level"
msgstr "" msgstr ""
#: cps/templates/admin.html:61 #: cps/templates/admin.html:73
msgid "Port" msgid "Port"
msgstr "" msgstr ""
#: cps/templates/admin.html:67 cps/templates/config_view_edit.html:23 #: cps/templates/admin.html:79 cps/templates/config_view_edit.html:23
msgid "Books per page" msgid "Books per page"
msgstr "" msgstr ""
#: cps/templates/admin.html:71 #: cps/templates/admin.html:83
msgid "Uploading" msgid "Uploading"
msgstr "" msgstr ""
#: cps/templates/admin.html:75 #: cps/templates/admin.html:87
msgid "Anonymous browsing" msgid "Anonymous browsing"
msgstr "" msgstr ""
#: cps/templates/admin.html:79 #: cps/templates/admin.html:91
msgid "Public registration" msgid "Public registration"
msgstr "" msgstr ""
#: cps/templates/admin.html:83 cps/templates/remote_login.html:4 #: cps/templates/admin.html:95 cps/templates/remote_login.html:4
msgid "Remote login" msgid "Remote login"
msgstr "" msgstr ""
#: cps/templates/admin.html:93 #: cps/templates/admin.html:106
msgid "Administration" msgid "Administration"
msgstr "" msgstr ""
#: cps/templates/admin.html:94 #: cps/templates/admin.html:107
msgid "Current commit timestamp" msgid "Reconnect to Calibre DB"
msgstr "" msgstr ""
#: cps/templates/admin.html:95 #: cps/templates/admin.html:108
msgid "Newest commit timestamp" msgid "Restart Calibre-Web"
msgstr "" msgstr ""
#: cps/templates/admin.html:97 #: cps/templates/admin.html:109
msgid "Reconnect to Calibre DB" msgid "Stop Calibre-Web"
msgstr "" msgstr ""
#: cps/templates/admin.html:98 #: cps/templates/admin.html:115
msgid "Restart Calibre-Web" msgid "Update"
msgstr "" msgstr ""
#: cps/templates/admin.html:99 #: cps/templates/admin.html:119
msgid "Stop Calibre-Web" msgid "Version"
msgstr ""
#: cps/templates/admin.html:120
msgid "Details"
msgstr ""
#: cps/templates/admin.html:126
msgid "Current version"
msgstr "" msgstr ""
#: cps/templates/admin.html:100 #: cps/templates/admin.html:132
msgid "Check for update" msgid "Check for update"
msgstr "" msgstr ""
#: cps/templates/admin.html:101 #: cps/templates/admin.html:133
msgid "Perform Update" msgid "Perform Update"
msgstr "" msgstr ""
#: cps/templates/admin.html:110 #: cps/templates/admin.html:145
msgid "Do you really want to restart Calibre-Web?" msgid "Do you really want to restart Calibre-Web?"
msgstr "" msgstr ""
#: cps/templates/admin.html:115 cps/templates/admin.html:129 #: cps/templates/admin.html:150 cps/templates/admin.html:164
#: cps/templates/admin.html:150 cps/templates/shelf.html:59 #: cps/templates/admin.html:184 cps/templates/shelf.html:59
msgid "Ok" msgid "Ok"
msgstr "" msgstr ""
#: cps/templates/admin.html:116 cps/templates/admin.html:130 #: cps/templates/admin.html:151 cps/templates/admin.html:165
#: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200 #: cps/templates/book_edit.html:178 cps/templates/book_edit.html:200
#: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164 #: cps/templates/config_edit.html:212 cps/templates/config_view_edit.html:164
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75 #: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
@ -820,11 +865,11 @@ msgstr ""
msgid "Back" msgid "Back"
msgstr "" msgstr ""
#: cps/templates/admin.html:128 #: cps/templates/admin.html:163
msgid "Do you really want to stop Calibre-Web?" msgid "Do you really want to stop Calibre-Web?"
msgstr "" msgstr ""
#: cps/templates/admin.html:141 #: cps/templates/admin.html:175
msgid "Updating, please do not reload page" msgid "Updating, please do not reload page"
msgstr "" msgstr ""

@ -15,6 +15,6 @@ six==1.10.0
goodreads>=0.3.2 goodreads>=0.3.2
python-Levenshtein>=0.12.0 python-Levenshtein>=0.12.0
# other # other
lxml==3.7.2 lxml>=3.8.0
rarfile>=2.7 rarfile>=2.7
natsort>=2.2.0 natsort>=2.2.0

@ -1,2 +0,0 @@
$Format:%H$
$Format:%cI$
Loading…
Cancel
Save