mirror of
https://github.com/janeczku/calibre-web.git
synced 2024-11-28 08:58:41 +02:00
commit
2b9ab96f28
2
.gitattributes
vendored
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/js/libs/* linguist-vendored
|
||||
|
@ -44,5 +44,9 @@ if args.k:
|
||||
print("Keyfilepath is invalid. Exiting...")
|
||||
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 "":
|
||||
keyfilepath = ""
|
||||
|
@ -559,16 +559,11 @@ def is_sha1(sha1):
|
||||
|
||||
|
||||
def get_current_version_info():
|
||||
try:
|
||||
with open('version', 'r') as f:
|
||||
content = f.readlines()
|
||||
content = [x.strip() for x in content]
|
||||
|
||||
if len(content) != 2:
|
||||
return False
|
||||
|
||||
if is_sha1(content[0]) and len(content[1]) > 0:
|
||||
return {'hash': content[0], 'datetime': content[1]}
|
||||
except FileNotFoundError:
|
||||
return False
|
||||
content = {}
|
||||
content[0] = '$Format:%H$'
|
||||
content[1] = '$Format:%cI$'
|
||||
# content[0] = 'bb7d2c6273ae4560e83950d36d64533343623a57'
|
||||
# content[1] = '2018-09-09T10:13:08+02:00'
|
||||
if is_sha1(content[0]) and len(content[1]) > 0:
|
||||
return {'hash': content[0], 'datetime': content[1]}
|
||||
return False
|
||||
|
@ -5,6 +5,8 @@
|
||||
from socket import error as SocketError
|
||||
import sys
|
||||
import os
|
||||
import signal
|
||||
|
||||
try:
|
||||
from gevent.pywsgi import WSGIServer
|
||||
from gevent.pool import Pool
|
||||
@ -26,7 +28,8 @@ class server:
|
||||
restart= False
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
signal.signal(signal.SIGINT, self.killServer)
|
||||
signal.signal(signal.SIGTERM, self.killServer)
|
||||
|
||||
def start_gevent(self):
|
||||
try:
|
||||
@ -86,6 +89,9 @@ class server:
|
||||
def setRestartTyp(self,starttyp):
|
||||
self.restart=starttyp
|
||||
|
||||
def killServer(self, signum, frame):
|
||||
self.stopServer()
|
||||
|
||||
def stopServer(self):
|
||||
if gevent_present:
|
||||
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>
|
||||
</div>
|
||||
<div class="btn btn-default"><a 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="basic_config" href="{{url_for('configuration')}}">{{_('Basic Configuration')}}</a></div>
|
||||
<div class="btn btn-default"><a id="view_config" href="{{url_for('view_configuration')}}">{{_('UI Configuration')}}</a></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -105,8 +105,8 @@
|
||||
<div class="col">
|
||||
<h2>{{_('Administration')}}</h2>
|
||||
<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" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop 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" id="admin_stop" data-toggle="modal" data-target="#ShutdownDialog">{{_('Stop Calibre-Web')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -122,8 +122,8 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="current_version">
|
||||
<td>{{commit}} <i>({{_('current version')}})</i></td>
|
||||
<td>/</td>
|
||||
<td>{{commit}} </td>
|
||||
<td><i>{{_('Current version')}}</i></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -26,7 +26,7 @@
|
||||
{% 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>
|
||||
<form class="padded-bottom" action="{{ url_for('convert_bookformat', book_id=book.id) }}" method="post" id="book_convert_frm">
|
||||
<div class="form-group">
|
||||
@ -34,8 +34,8 @@
|
||||
<label class="control-label" for="book_format_from">{{_('Convert from:')}}</label>
|
||||
<select class="form-control" name="book_format_from" id="book_format_from">
|
||||
<option disabled selected value> -- {{_('select an option')}} -- </option>
|
||||
{% for file in book.data %}
|
||||
<option>{{file.format}} </option>
|
||||
{% for format in source_formats %}
|
||||
<option>{{format|upper}} </option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<label class="control-label" for="book_format_to">{{_('Convert to:')}}</label>
|
||||
|
@ -207,12 +207,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 %}
|
||||
<a href="{{ url_for('admin') }}" class="btn btn-default">{{_('Back')}}</a>
|
||||
{% endif %}
|
||||
{% 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 %}
|
||||
</div>
|
||||
</form>
|
||||
|
@ -160,7 +160,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</form>
|
||||
|
@ -174,8 +174,10 @@
|
||||
|
||||
|
||||
{% if entry.comments|length > 0 and entry.comments[0].text|length > 0%}
|
||||
<h3>{{_('Description:')}}</h3>
|
||||
{{entry.comments[0].text|safe}}
|
||||
<div class="comments">
|
||||
<h3>{{_('Description:')}}</h3>
|
||||
{{entry.comments[0].text|safe}}
|
||||
</div>
|
||||
{% 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>
|
||||
{%endif%}
|
||||
{% 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">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes"></span>{{_('Sorted Books')}}
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li {% 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 {% 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_old" {% if page == 'newest' %}class="active"{% endif %}><a href="{{url_for('newest_books')}}">{{_('Sort By')}} {{_('Newest')}}</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 id="nav_sort_asc" {% if page == 'a-z' %}class="active"{% endif %}><a href="{{url_for('titles_ascending')}}">{{_('Sort By')}} {{_('Title')}} ({{_('Ascending')}})</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>
|
||||
</li>
|
||||
{%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>
|
||||
{%endif%}
|
||||
{% 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%}
|
||||
{% if g.user.show_read_and_unread() %}
|
||||
{% 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%}
|
||||
<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%}
|
||||
{% 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>
|
||||
@ -165,11 +165,11 @@
|
||||
{% if g.user.is_authenticated or g.user.is_anonymous %}
|
||||
<li class="nav-head hidden-xs">{{_('Public Shelves')}}</li>
|
||||
{% 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 %}
|
||||
<li class="nav-head hidden-xs">{{_('Your Shelves')}}</li>
|
||||
{% 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 %}
|
||||
{% if not g.user.is_anonymous %}
|
||||
<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>
|
||||
<input type="text" class="form-control" id="nickname" name="nickname" placeholder="{{_('Choose a username')}}" required>
|
||||
</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">
|
||||
<label for="email">{{_('E-mail address')}}</label>
|
||||
<input type="email" class="form-control" id="email" name="email" placeholder="{{_('Your email address')}}" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">{{_('Register')}}</button>
|
||||
<button type="submit" id="submit" class="btn btn-primary">{{_('Register')}}</button>
|
||||
</form>
|
||||
</div>
|
||||
{% if error %}
|
||||
|
@ -4,9 +4,9 @@
|
||||
<h2>{{title}}</h2>
|
||||
{% if g.user.is_authenticated %}
|
||||
{% 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>
|
||||
<a 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>
|
||||
<div id="delete_shelf" data-toggle="modal" data-target="#DeleteShelfDialog" class="btn btn-danger">{{ _('Delete this Shelf') }} </div>
|
||||
<a id="edit_shelf" href="{{ url_for('edit_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Edit Shelf') }} </a>
|
||||
<a id="order_shelf" href="{{ url_for('order_shelf', shelf_id=shelf.id) }}" class="btn btn-primary">{{ _('Change order') }} </a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<div class="row">
|
||||
@ -14,11 +14,13 @@
|
||||
{% for entry in entries %}
|
||||
<div class="col-sm-3 col-lg-2 col-xs-6 book">
|
||||
<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">
|
||||
<img src="{{ url_for('get_cover', cover_path=entry.path.replace('\\','/')) }}" />
|
||||
</a>
|
||||
{% endif %}
|
||||
<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('\\','/')) }}" alt="{{ entry.title }}" />
|
||||
{% else %}
|
||||
<img src="{{ url_for('static', filename='generic_cover.jpg') }}" alt="{{ entry.title }}" />
|
||||
{% endif %}
|
||||
</a>
|
||||
</div>
|
||||
<div class="meta">
|
||||
<p class="title">{{entry.title|shortentitle}}</p>
|
||||
@ -56,7 +58,7 @@
|
||||
<div class="modal-body text-center">
|
||||
<span>{{_('Shelf will be lost for everybody and forever!')}}</span>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -14,7 +14,7 @@
|
||||
</label>
|
||||
</div>
|
||||
{% 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 %}
|
||||
<a href="{{ url_for('show_shelf', shelf_id=shelf.id) }}" class="btn btn-default">{{_('Back')}}</a>
|
||||
{% endif %}
|
||||
|
@ -22,8 +22,6 @@
|
||||
<input type="password" class="form-control" name="password" id="password" value="" autocomplete="off">
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% endif %}
|
||||
<div class="form-group">
|
||||
<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() %}
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" name="delete"> {{_('Delete this user')}}
|
||||
<input type="checkbox" id="delete" name="delete"> {{_('Delete this user')}}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -151,8 +149,8 @@
|
||||
<button type="submit" id="submit" class="btn btn-default">{{_('Submit')}}</button>
|
||||
{% if not profile %}
|
||||
<a href="{{ url_for('admin') }}" id="back" class="btn btn-default">{{_('Back')}}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{% if downloads %}
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
16755
cps/translations/iso639.pickle
Normal file
16755
cps/translations/iso639.pickle
Normal file
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
|
||||
# project.
|
||||
# FIRST AUTHOR white<space_white@yahoo.com>, 2017.
|
||||
# # Translation template file..
|
||||
# Copyright (C) 2011 Kovid Goyal
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 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"
|
||||
"Last-Translator: white <space_white@yahoo.com>\n"
|
||||
"Language: ja\n"
|
||||
@ -116,707 +114,750 @@ msgstr ""
|
||||
msgid "Unrar binary file not found"
|
||||
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"
|
||||
msgstr "更新パッケージを要求します"
|
||||
|
||||
#: cps/web.py:1115
|
||||
#: cps/web.py:1231
|
||||
msgid "Downloading update package"
|
||||
msgstr "更新パッケージをダウンロードします"
|
||||
|
||||
#: cps/web.py:1116
|
||||
#: cps/web.py:1232
|
||||
msgid "Unzipping update package"
|
||||
msgstr "更新パッケージをZIP解凍します"
|
||||
|
||||
#: cps/web.py:1117
|
||||
#: cps/web.py:1233
|
||||
msgid "Files are replaced"
|
||||
msgstr "ファイルを書き換えました"
|
||||
|
||||
#: cps/web.py:1118
|
||||
#: cps/web.py:1234
|
||||
msgid "Database connections are closed"
|
||||
msgstr "データベースの接続が閉じられました"
|
||||
|
||||
#: cps/web.py:1119
|
||||
#: cps/web.py:1235
|
||||
msgid "Server is stopped"
|
||||
msgstr "サーバがシャットダウンされました"
|
||||
|
||||
#: cps/web.py:1120
|
||||
#: cps/web.py:1236
|
||||
msgid "Update finished, please press okay and reload page"
|
||||
msgstr "更新完了、Okayまたは再読み込みボタンを押してください"
|
||||
|
||||
#: cps/web.py:1140
|
||||
#: cps/web.py:1256
|
||||
msgid "Recently Added Books"
|
||||
msgstr "最近追加された本"
|
||||
|
||||
#: cps/web.py:1150
|
||||
#: cps/web.py:1266
|
||||
msgid "Newest Books"
|
||||
msgstr "最新の本"
|
||||
|
||||
#: cps/web.py:1162
|
||||
#: cps/web.py:1278
|
||||
msgid "Oldest Books"
|
||||
msgstr "最古の本"
|
||||
|
||||
#: cps/web.py:1174
|
||||
#: cps/web.py:1290
|
||||
msgid "Books (A-Z)"
|
||||
msgstr "本(A-Z)"
|
||||
|
||||
#: cps/web.py:1185
|
||||
#: cps/web.py:1301
|
||||
msgid "Books (Z-A)"
|
||||
msgstr "本 (Z-A)"
|
||||
|
||||
#: cps/web.py:1214
|
||||
#: cps/web.py:1330
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "有名な本(ダウンロード数)"
|
||||
|
||||
#: cps/web.py:1227
|
||||
#: cps/web.py:1343
|
||||
msgid "Best rated books"
|
||||
msgstr "最高評判の本"
|
||||
|
||||
#: cps/templates/index.xml:36 cps/web.py:1239
|
||||
#: cps/templates/index.xml:36 cps/web.py:1355
|
||||
msgid "Random Books"
|
||||
msgstr "任意の本"
|
||||
|
||||
#: cps/web.py:1254
|
||||
#: cps/web.py:1370
|
||||
msgid "Author list"
|
||||
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:"
|
||||
msgstr "電子本を開けません。ファイルは存在しないまたはアクセスできません"
|
||||
|
||||
#: cps/templates/index.xml:73 cps/web.py:1313
|
||||
#: cps/templates/index.xml:73 cps/web.py:1429
|
||||
msgid "Series list"
|
||||
msgstr "叢書リスト"
|
||||
|
||||
#: cps/web.py:1327
|
||||
#: cps/web.py:1443
|
||||
#, python-format
|
||||
msgid "Series: %(serie)s"
|
||||
msgstr "叢書: %(serie)s"
|
||||
|
||||
#: cps/web.py:1354
|
||||
#: cps/web.py:1470
|
||||
msgid "Available languages"
|
||||
msgstr "利用可能な言語"
|
||||
|
||||
#: cps/web.py:1371
|
||||
#: cps/web.py:1487
|
||||
#, python-format
|
||||
msgid "Language: %(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"
|
||||
msgstr "カテゴリーリスト"
|
||||
|
||||
#: cps/web.py:1396
|
||||
#: cps/web.py:1512
|
||||
#, python-format
|
||||
msgid "Category: %(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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1565
|
||||
#: cps/web.py:1681
|
||||
msgid "Statistics"
|
||||
msgstr "統計"
|
||||
|
||||
#: cps/web.py:1670
|
||||
msgid ""
|
||||
"Callback domain is not verified, please follow steps to verify domain in "
|
||||
"google developer console"
|
||||
#: cps/web.py:1786
|
||||
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1746
|
||||
#: cps/web.py:1861
|
||||
msgid "Server restarted, please reload page"
|
||||
msgstr "サーバを再起動しました、ページを再読み込みしてください"
|
||||
|
||||
#: cps/web.py:1749
|
||||
#: cps/web.py:1864
|
||||
msgid "Performing shutdown of server, please close window"
|
||||
msgstr "サーバをシャットダウンします、ページを閉じてください"
|
||||
|
||||
#: cps/web.py:1767
|
||||
#: cps/web.py:1883
|
||||
msgid "Update done"
|
||||
msgstr "更新完了"
|
||||
|
||||
#: cps/web.py:1837
|
||||
#: cps/web.py:1953
|
||||
msgid "Published after "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1844
|
||||
#: cps/web.py:1960
|
||||
msgid "Published before "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1858
|
||||
#: cps/web.py:1974
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1860
|
||||
#: cps/web.py:1976
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1919 cps/web.py:1928
|
||||
#: cps/web.py:2035 cps/web.py:2044
|
||||
msgid "search"
|
||||
msgstr "検索"
|
||||
|
||||
#: 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"
|
||||
msgstr "既読の本"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "本を読む"
|
||||
|
||||
#: cps/web.py:2128 cps/web.py:3006
|
||||
#: cps/web.py:2244 cps/web.py:3129
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "全ての項目を入力してください"
|
||||
|
||||
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159
|
||||
#: cps/web.py:2161
|
||||
#: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
|
||||
#: cps/web.py:2277
|
||||
msgid "register"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2152
|
||||
#: cps/web.py:2268
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2155
|
||||
#: cps/web.py:2271
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2158
|
||||
#: cps/web.py:2274
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2175 cps/web.py:2271
|
||||
#: cps/web.py:2291 cps/web.py:2387
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "%(nickname)s としてログインします"
|
||||
|
||||
#: cps/web.py:2180
|
||||
#: cps/web.py:2296
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "ユーザ名またはパスワードは間違いました"
|
||||
|
||||
#: cps/web.py:2186 cps/web.py:2207
|
||||
#: cps/web.py:2302 cps/web.py:2323
|
||||
msgid "login"
|
||||
msgstr "ログイン"
|
||||
|
||||
#: cps/web.py:2219 cps/web.py:2250
|
||||
#: cps/web.py:2335 cps/web.py:2366
|
||||
msgid "Token not found"
|
||||
msgstr "トークンは見つかりません"
|
||||
|
||||
#: cps/web.py:2227 cps/web.py:2258
|
||||
#: cps/web.py:2343 cps/web.py:2374
|
||||
msgid "Token has expired"
|
||||
msgstr "トークンは失効されました"
|
||||
|
||||
#: cps/web.py:2235
|
||||
#: cps/web.py:2351
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "成功しまた!端末に戻ってください"
|
||||
|
||||
#: cps/web.py:2285
|
||||
#: cps/web.py:2401
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "SMTPメールをまず設定してください"
|
||||
|
||||
#: cps/web.py:2289
|
||||
#: cps/web.py:2405
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2293
|
||||
#: cps/web.py:2409
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(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..."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2339
|
||||
#: cps/web.py:2455
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr "本 %(sname)s を書架に追加されました"
|
||||
|
||||
#: cps/web.py:2350
|
||||
#: cps/web.py:2466
|
||||
msgid "Invalid shelf specified"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2355
|
||||
#: cps/web.py:2471
|
||||
#, python-format
|
||||
msgid "You are not allowed to add a book to the the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2360
|
||||
#: cps/web.py:2476
|
||||
msgid "User is not allowed to edit public shelves"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2378
|
||||
#: cps/web.py:2494
|
||||
#, python-format
|
||||
msgid "Books are already part of the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2392
|
||||
#: cps/web.py:2508
|
||||
#, python-format
|
||||
msgid "Books have been added to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2394
|
||||
#: cps/web.py:2510
|
||||
#, python-format
|
||||
msgid "Could not add books to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2431
|
||||
#: cps/web.py:2547
|
||||
#, python-format
|
||||
msgid "Book has been removed from shelf: %(sname)s"
|
||||
msgstr "本 %(sname)s を書架から除去されました"
|
||||
|
||||
#: cps/web.py:2437
|
||||
#: cps/web.py:2553
|
||||
#, python-format
|
||||
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2457 cps/web.py:2481
|
||||
#: cps/web.py:2573 cps/web.py:2597
|
||||
#, python-format
|
||||
msgid "A shelf with the name '%(title)s' already exists."
|
||||
msgstr "名前を使った書架 '%(title)s' は既に存在しました"
|
||||
|
||||
#: cps/web.py:2462
|
||||
#: cps/web.py:2578
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s created"
|
||||
msgstr "書架%(title)s は作成されました"
|
||||
|
||||
#: cps/web.py:2464 cps/web.py:2492
|
||||
#: cps/web.py:2580 cps/web.py:2608
|
||||
msgid "There was an error"
|
||||
msgstr "エーラが発生しました"
|
||||
|
||||
#: cps/web.py:2465 cps/web.py:2467
|
||||
#: cps/web.py:2581 cps/web.py:2583
|
||||
msgid "create a shelf"
|
||||
msgstr "書架を作成する"
|
||||
|
||||
#: cps/web.py:2490
|
||||
#: cps/web.py:2606
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s changed"
|
||||
msgstr "書架 %(title)s 変わりました"
|
||||
|
||||
#: cps/web.py:2493 cps/web.py:2495
|
||||
#: cps/web.py:2609 cps/web.py:2611
|
||||
msgid "Edit a shelf"
|
||||
msgstr "書架を編集する"
|
||||
|
||||
#: cps/web.py:2516
|
||||
#: cps/web.py:2632
|
||||
#, python-format
|
||||
msgid "successfully deleted shelf %(name)s"
|
||||
msgstr "%(name)s の書架を削除されました"
|
||||
|
||||
#: cps/web.py:2538
|
||||
#: cps/web.py:2659
|
||||
#, python-format
|
||||
msgid "Shelf: '%(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"
|
||||
msgstr "書架を開けません。書架は存在しないまたはアクセスできません"
|
||||
|
||||
#: cps/web.py:2572
|
||||
#: cps/web.py:2693
|
||||
#, python-format
|
||||
msgid "Change order of Shelf: '%(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"
|
||||
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
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)sのプロファイル"
|
||||
|
||||
#: cps/web.py:2642
|
||||
#: cps/web.py:2763
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2645
|
||||
#: cps/web.py:2766
|
||||
msgid "Profile updated"
|
||||
msgstr "プロファイルが更新されました"
|
||||
|
||||
#: cps/web.py:2657
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2671
|
||||
#: cps/web.py:2794
|
||||
msgid "Admin page"
|
||||
msgstr "管理者ページ"
|
||||
|
||||
#: cps/web.py:2749 cps/web.py:2922
|
||||
#: cps/web.py:2872 cps/web.py:3045
|
||||
msgid "Calibre-Web configuration updated"
|
||||
msgstr "Calibre-Web 設定を更新されました"
|
||||
|
||||
#: cps/templates/admin.html:91 cps/web.py:2762
|
||||
#: cps/templates/admin.html:100 cps/web.py:2885
|
||||
msgid "UI Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2780
|
||||
#: cps/web.py:2903
|
||||
msgid "Import of optional Google Drive requirements missing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2783
|
||||
#: cps/web.py:2906
|
||||
msgid "client_secrets.json is missing or not readable"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856
|
||||
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937
|
||||
#: cps/web.py:2954
|
||||
#: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
|
||||
#: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
|
||||
#: cps/web.py:3077
|
||||
msgid "Basic Configuration"
|
||||
msgstr "基本設定"
|
||||
|
||||
#: cps/web.py:2841
|
||||
#: cps/web.py:2964
|
||||
msgid "Keyfile location is not valid, please enter correct path"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2853
|
||||
#: cps/web.py:2976
|
||||
msgid "Certfile location is not valid, please enter correct path"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2895
|
||||
#: cps/web.py:3018
|
||||
msgid "Logfile location is not valid, please enter correct path"
|
||||
msgstr "ログファイルの場所は不適切です。正しい場所を入力してください"
|
||||
|
||||
#: cps/web.py:2934
|
||||
#: cps/web.py:3057
|
||||
msgid "DB location is not valid, please enter correct path"
|
||||
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"
|
||||
msgstr "新規ユーザ追加"
|
||||
|
||||
#: cps/web.py:3020
|
||||
#: cps/web.py:3143
|
||||
#, python-format
|
||||
msgid "User '%(user)s' created"
|
||||
msgstr "ユーザ '%(user)s' が作成されました"
|
||||
|
||||
#: cps/web.py:3024
|
||||
#: cps/web.py:3147
|
||||
msgid "Found an existing account for this e-mail address or nickname."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3048 cps/web.py:3062
|
||||
#: cps/web.py:3171 cps/web.py:3185
|
||||
msgid "E-mail server settings updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3055
|
||||
#: cps/web.py:3178
|
||||
#, python-format
|
||||
msgid "Test e-mail successfully send to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3058
|
||||
#: cps/web.py:3181
|
||||
#, python-format
|
||||
msgid "There was an error sending the Test e-mail: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3063
|
||||
#: cps/web.py:3186
|
||||
msgid "Edit e-mail server settings"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3088
|
||||
#: cps/web.py:3211
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' deleted"
|
||||
msgstr "ユーザ '%(nick)s' 削除されました"
|
||||
|
||||
#: cps/web.py:3197
|
||||
#: cps/web.py:3320
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr "ユーザ '%(nick)s' 更新されました"
|
||||
|
||||
#: cps/web.py:3200
|
||||
#: cps/web.py:3323
|
||||
msgid "An unknown error occured."
|
||||
msgstr "不明のエーラが発生しました"
|
||||
|
||||
#: cps/web.py:3202
|
||||
#: cps/web.py:3325
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "ユーザ編集 %(nick)s"
|
||||
|
||||
#: cps/web.py:3219
|
||||
#: cps/web.py:3342
|
||||
#, python-format
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3239
|
||||
#: cps/web.py:3362
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible"
|
||||
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"
|
||||
msgstr "メタデータを編集します"
|
||||
|
||||
#: cps/web.py:3284 cps/web.py:3576
|
||||
#: cps/web.py:3401 cps/web.py:3697
|
||||
#, python-format
|
||||
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
|
||||
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"
|
||||
msgstr "ファイルをアップロードするために拡張子が必要です"
|
||||
|
||||
#: cps/web.py:3300 cps/web.py:3600
|
||||
#: cps/web.py:3417 cps/web.py:3721
|
||||
#, python-format
|
||||
msgid "Failed to create path %(path)s (Permission denied)."
|
||||
msgstr "場所 %(path)s の作成を失敗しました (許可拒否)"
|
||||
|
||||
#: cps/web.py:3305
|
||||
#: cps/web.py:3422
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s."
|
||||
msgstr "フアイル %(file)s の保存を失敗しました"
|
||||
|
||||
#: cps/web.py:3321
|
||||
#: cps/web.py:3438
|
||||
#, python-format
|
||||
msgid "File format %(ext)s added to %(book)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3339
|
||||
#: cps/web.py:3455
|
||||
#, python-format
|
||||
msgid "Failed to create path for cover %(path)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3346
|
||||
#: cps/web.py:3462
|
||||
#, python-format
|
||||
msgid "Failed to store cover-file %(cover)s."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3349
|
||||
#: cps/web.py:3465
|
||||
msgid "Cover-file is not a valid image file"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3362 cps/web.py:3366
|
||||
#: cps/web.py:3482 cps/web.py:3486
|
||||
msgid "unknown"
|
||||
msgstr "不明"
|
||||
|
||||
#: cps/web.py:3388
|
||||
#: cps/web.py:3508
|
||||
msgid "Cover is not a jpg file, can't save"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3605
|
||||
#: cps/web.py:3726
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s (Permission denied)."
|
||||
msgstr "ファイル %(file)s の保存を失敗しました (許可拒否)"
|
||||
|
||||
#: cps/web.py:3610
|
||||
#: cps/web.py:3731
|
||||
#, python-format
|
||||
msgid "Failed to delete file %(file)s (Permission denied)."
|
||||
msgstr "ファイル %(file)s の削除を失敗しました (許可拒否)"
|
||||
|
||||
#: cps/web.py:3692
|
||||
#: cps/web.py:3813
|
||||
#, python-format
|
||||
msgid "File %(file)s uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3722
|
||||
#: cps/web.py:3843
|
||||
msgid "Source or destination format for conversion missing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3732
|
||||
#: cps/web.py:3853
|
||||
#, python-format
|
||||
msgid "Book successfully queued for converting to %(book_format)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3736
|
||||
#: cps/web.py:3857
|
||||
#, python-format
|
||||
msgid "There was an error converting this book: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:215 cps/worker.py:387
|
||||
#: cps/worker.py:215 cps/worker.py:398
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:237
|
||||
#: cps/worker.py:251
|
||||
#, python-format
|
||||
msgid "Convertertool %(converter)s not found"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:272
|
||||
#: cps/worker.py:287
|
||||
#, python-format
|
||||
msgid "Ebook-converter failed: %(error)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:283
|
||||
#: cps/worker.py:298
|
||||
#, python-format
|
||||
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
|
||||
msgstr "Kindlegen 失敗しました、エーラ %(error)s. メッセージ: %(message)s"
|
||||
|
||||
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:344 cps/worker.py:363
|
||||
#: cps/worker.py:355 cps/worker.py:374
|
||||
msgid "Waiting"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:351
|
||||
#: cps/worker.py:362
|
||||
msgid "This e-mail has been sent via Calibre-Web."
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:472
|
||||
#: cps/worker.py:388 cps/worker.py:484
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:476
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:4
|
||||
#: cps/templates/admin.html:6
|
||||
msgid "User list"
|
||||
msgstr "ユーザリスト"
|
||||
|
||||
#: cps/templates/admin.html:7
|
||||
#: cps/templates/admin.html:9
|
||||
msgid "Nickname"
|
||||
msgstr "通称"
|
||||
|
||||
#: cps/templates/admin.html:8
|
||||
#: cps/templates/admin.html:10
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:9
|
||||
#: cps/templates/admin.html:11
|
||||
msgid "Kindle"
|
||||
msgstr "Kindle"
|
||||
|
||||
#: cps/templates/admin.html:10
|
||||
#: cps/templates/admin.html:12
|
||||
msgid "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"
|
||||
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
|
||||
msgid "Download"
|
||||
msgstr "ダウンロード"
|
||||
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:64
|
||||
#: cps/templates/admin.html:15 cps/templates/layout.html:64
|
||||
msgid "Upload"
|
||||
msgstr "アップロード"
|
||||
|
||||
#: cps/templates/admin.html:14
|
||||
#: cps/templates/admin.html:16
|
||||
msgid "Edit"
|
||||
msgstr "編集"
|
||||
|
||||
#: cps/templates/admin.html:32
|
||||
#: cps/templates/admin.html:39
|
||||
msgid "SMTP e-mail server settings"
|
||||
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"
|
||||
msgstr "SMTPホスト名"
|
||||
|
||||
#: cps/templates/admin.html:36
|
||||
#: cps/templates/admin.html:43
|
||||
msgid "SMTP port"
|
||||
msgstr "SMTPポート"
|
||||
|
||||
#: cps/templates/admin.html:37
|
||||
#: cps/templates/admin.html:44
|
||||
msgid "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"
|
||||
msgstr "SMTP ログイン"
|
||||
|
||||
#: cps/templates/admin.html:39
|
||||
#: cps/templates/admin.html:46
|
||||
msgid "From mail"
|
||||
msgstr "メールから"
|
||||
|
||||
#: cps/templates/admin.html:48
|
||||
#: cps/templates/admin.html:56
|
||||
msgid "Change SMTP settings"
|
||||
msgstr "SMTP設定を変更する"
|
||||
|
||||
#: cps/templates/admin.html:50
|
||||
#: cps/templates/admin.html:62
|
||||
msgid "Configuration"
|
||||
msgstr "設定"
|
||||
|
||||
#: cps/templates/admin.html:53
|
||||
#: cps/templates/admin.html:65
|
||||
msgid "Calibre DB dir"
|
||||
msgstr "Calibre データベースの場所"
|
||||
|
||||
#: cps/templates/admin.html:57
|
||||
#: cps/templates/admin.html:69
|
||||
msgid "Log level"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:61
|
||||
#: cps/templates/admin.html:73
|
||||
msgid "Port"
|
||||
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"
|
||||
msgstr "本数毎ページ"
|
||||
|
||||
#: cps/templates/admin.html:71
|
||||
#: cps/templates/admin.html:83
|
||||
msgid "Uploading"
|
||||
msgstr "アップロード中"
|
||||
|
||||
#: cps/templates/admin.html:75
|
||||
#: cps/templates/admin.html:87
|
||||
msgid "Anonymous browsing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:79
|
||||
#: cps/templates/admin.html:91
|
||||
msgid "Public registration"
|
||||
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"
|
||||
msgstr "遠距離ログイン"
|
||||
|
||||
#: cps/templates/admin.html:93
|
||||
#: cps/templates/admin.html:106
|
||||
msgid "Administration"
|
||||
msgstr "管理"
|
||||
|
||||
#: cps/templates/admin.html:94
|
||||
msgid "Current commit timestamp"
|
||||
msgstr "現在コミットのタイムスタンプ"
|
||||
|
||||
#: cps/templates/admin.html:95
|
||||
msgid "Newest commit timestamp"
|
||||
msgstr "最新コミットのタイムスタンプ"
|
||||
|
||||
#: cps/templates/admin.html:97
|
||||
#: cps/templates/admin.html:107
|
||||
msgid "Reconnect to Calibre DB"
|
||||
msgstr "Calibreデータベースに再接続します"
|
||||
|
||||
#: cps/templates/admin.html:98
|
||||
#: cps/templates/admin.html:108
|
||||
msgid "Restart Calibre-Web"
|
||||
msgstr "Calibre-Webを再起動します"
|
||||
|
||||
#: cps/templates/admin.html:99
|
||||
#: cps/templates/admin.html:109
|
||||
msgid "Stop 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"
|
||||
msgstr "更新を確認します"
|
||||
|
||||
#: cps/templates/admin.html:101
|
||||
#: cps/templates/admin.html:133
|
||||
msgid "Perform Update"
|
||||
msgstr "更新を実行します"
|
||||
|
||||
#: cps/templates/admin.html:110
|
||||
#: cps/templates/admin.html:145
|
||||
msgid "Do you really want to restart Calibre-Web?"
|
||||
msgstr "Calibre-Webを再起動します。宜しいですか?"
|
||||
|
||||
#: cps/templates/admin.html:115 cps/templates/admin.html:129
|
||||
#: cps/templates/admin.html:150 cps/templates/shelf.html:59
|
||||
#: cps/templates/admin.html:150 cps/templates/admin.html:164
|
||||
#: cps/templates/admin.html:184 cps/templates/shelf.html:59
|
||||
msgid "Ok"
|
||||
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/config_edit.html:212 cps/templates/config_view_edit.html:164
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
|
||||
@ -825,11 +866,11 @@ msgstr "はい"
|
||||
msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
#: cps/templates/admin.html:128
|
||||
#: cps/templates/admin.html:163
|
||||
msgid "Do you really want to stop Calibre-Web?"
|
||||
msgstr "Calibre-Webを停止します。宜しいですか?"
|
||||
|
||||
#: cps/templates/admin.html:141
|
||||
#: cps/templates/admin.html:175
|
||||
msgid "Updating, please do not reload page"
|
||||
msgstr "更新中、ページ再読み込みしないでください"
|
||||
|
||||
@ -910,9 +951,7 @@ msgid "Rating"
|
||||
msgstr "評価"
|
||||
|
||||
#: cps/templates/book_edit.html:87
|
||||
msgid ""
|
||||
"Cover URL (jpg, cover is downloaded and stored in database, field is "
|
||||
"afterwards empty again)"
|
||||
msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
#~ msgstr "タイトルを'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ: %(error)s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Rename author from: '%(src)s' to "
|
||||
#~ "'%(dest)s' failed with error: %(error)s"
|
||||
#~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
|
||||
#~ msgstr "著者を'%(src)s'から'%(dest)s'の改名は失敗しました。エーラ:%(error)s"
|
||||
|
||||
#~ 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"
|
||||
#~ msgstr "ファイル拡張子 \"%(ext)s\" をこのサーバにアップロードする許可はありません"
|
||||
|
||||
#~ msgid "Current commit timestamp"
|
||||
#~ msgstr "現在コミットのタイムスタンプ"
|
||||
|
||||
#~ msgid "Newest commit timestamp"
|
||||
#~ msgstr "最新コミットのタイムスタンプ"
|
||||
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 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"
|
||||
"Last-Translator: \n"
|
||||
"Language: km_KH\n"
|
||||
@ -115,709 +115,750 @@ msgstr ""
|
||||
msgid "Unrar binary file not found"
|
||||
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"
|
||||
msgstr "កំពុងស្នើសុំឯកសារបច្ចុប្បន្នភាព"
|
||||
|
||||
#: cps/web.py:1115
|
||||
#: cps/web.py:1231
|
||||
msgid "Downloading update package"
|
||||
msgstr "កំពុងទាញយកឯកសារបច្ចុប្បន្នភាព"
|
||||
|
||||
#: cps/web.py:1116
|
||||
#: cps/web.py:1232
|
||||
msgid "Unzipping update package"
|
||||
msgstr "កំពុងពន្លាឯកសារបច្ចុប្បន្នភាព"
|
||||
|
||||
#: cps/web.py:1117
|
||||
#: cps/web.py:1233
|
||||
msgid "Files are replaced"
|
||||
msgstr "ឯកសារត្រូវបានផ្លាស់ប្តូរ"
|
||||
|
||||
#: cps/web.py:1118
|
||||
#: cps/web.py:1234
|
||||
msgid "Database connections are closed"
|
||||
msgstr "ទំនាក់ទំនងទៅមូលដ្ឋានទិន្នន័យត្រូវបានផ្តាច់"
|
||||
|
||||
#: cps/web.py:1119
|
||||
#: cps/web.py:1235
|
||||
msgid "Server is stopped"
|
||||
msgstr "ម៉ាស៊ីន server ត្រូវបានបញ្ឈប់"
|
||||
|
||||
#: cps/web.py:1120
|
||||
#: cps/web.py:1236
|
||||
msgid "Update finished, please press okay and reload page"
|
||||
msgstr "ការធ្វើបច្ចុប្បន្នភាពបានបញ្ចប់ សូមចុច okay រួចបើកទំព័រជាថ្មី"
|
||||
|
||||
#: cps/web.py:1140
|
||||
#: cps/web.py:1256
|
||||
msgid "Recently Added Books"
|
||||
msgstr "សៀវភៅដែលទើបបានបន្ថែម"
|
||||
|
||||
#: cps/web.py:1150
|
||||
#: cps/web.py:1266
|
||||
msgid "Newest Books"
|
||||
msgstr "សៀវភៅថ្មីៗជាងគេ"
|
||||
|
||||
#: cps/web.py:1162
|
||||
#: cps/web.py:1278
|
||||
msgid "Oldest Books"
|
||||
msgstr "សៀវភៅចាស់ជាងគេ"
|
||||
|
||||
#: cps/web.py:1174
|
||||
#: cps/web.py:1290
|
||||
msgid "Books (A-Z)"
|
||||
msgstr "សៀវភៅពី A ទៅ Z"
|
||||
|
||||
#: cps/web.py:1185
|
||||
#: cps/web.py:1301
|
||||
msgid "Books (Z-A)"
|
||||
msgstr "សៀវភៅពី Z ទៅ A"
|
||||
|
||||
#: cps/web.py:1214
|
||||
#: cps/web.py:1330
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "សៀវភៅដែលត្រូវបានទាញយកច្រើនជាងគេ"
|
||||
|
||||
#: cps/web.py:1227
|
||||
#: cps/web.py:1343
|
||||
msgid "Best rated books"
|
||||
msgstr "សៀវភៅដែលត្រូវបានវាយតម្លៃល្អជាងគេ"
|
||||
|
||||
#: cps/templates/index.xml:36 cps/web.py:1239
|
||||
#: cps/templates/index.xml:36 cps/web.py:1355
|
||||
msgid "Random Books"
|
||||
msgstr "សៀវភៅចៃដន្យ"
|
||||
|
||||
#: cps/web.py:1254
|
||||
#: cps/web.py:1370
|
||||
msgid "Author list"
|
||||
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:"
|
||||
msgstr "មានបញ្ហាពេលបើកឯកសារ eBook ។ មិនមានឯកសារនេះ ឬមិនអាចបើកបាន៖"
|
||||
|
||||
#: cps/templates/index.xml:73 cps/web.py:1313
|
||||
#: cps/templates/index.xml:73 cps/web.py:1429
|
||||
msgid "Series list"
|
||||
msgstr "បញ្ជីស៊េរី"
|
||||
|
||||
#: cps/web.py:1327
|
||||
#: cps/web.py:1443
|
||||
#, python-format
|
||||
msgid "Series: %(serie)s"
|
||||
msgstr "ស៊េរី៖ %(serie)s"
|
||||
|
||||
#: cps/web.py:1354
|
||||
#: cps/web.py:1470
|
||||
msgid "Available languages"
|
||||
msgstr "ភាសាដែលមាន"
|
||||
|
||||
#: cps/web.py:1371
|
||||
#: cps/web.py:1487
|
||||
#, python-format
|
||||
msgid "Language: %(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"
|
||||
msgstr "បញ្ជីប្រភេទ"
|
||||
|
||||
#: cps/web.py:1396
|
||||
#: cps/web.py:1512
|
||||
#, python-format
|
||||
msgid "Category: %(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"
|
||||
msgstr "កិច្ចការនានា"
|
||||
|
||||
#: cps/web.py:1565
|
||||
#: cps/web.py:1681
|
||||
msgid "Statistics"
|
||||
msgstr "ស្ថិតិ"
|
||||
|
||||
#: cps/web.py:1670
|
||||
msgid ""
|
||||
"Callback domain is not verified, please follow steps to verify domain in "
|
||||
"google developer console"
|
||||
msgstr ""
|
||||
"Callback domain មិនទាន់បានផ្ទៀងផ្ទាត់ឲប្រើទេ "
|
||||
"សូមធ្វើតាមជំហានដើម្បីផ្ទៀងផ្ទាត់ domain នៅក្នុង Google Developer Console"
|
||||
#: cps/web.py:1786
|
||||
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
|
||||
msgstr "Callback domain មិនទាន់បានផ្ទៀងផ្ទាត់ឲប្រើទេ សូមធ្វើតាមជំហានដើម្បីផ្ទៀងផ្ទាត់ domain នៅក្នុង Google Developer Console"
|
||||
|
||||
#: cps/web.py:1746
|
||||
#: cps/web.py:1861
|
||||
msgid "Server restarted, please reload page"
|
||||
msgstr "ម៉ាស៊ីន server បានដំណើរការម្តងទៀត សូមបើកទំព័រជាថ្មី"
|
||||
|
||||
#: cps/web.py:1749
|
||||
#: cps/web.py:1864
|
||||
msgid "Performing shutdown of server, please close window"
|
||||
msgstr "កំពុងបិទម៉ាស៊ីន server សូមបិទផ្ទាំងនេះ"
|
||||
|
||||
#: cps/web.py:1767
|
||||
#: cps/web.py:1883
|
||||
msgid "Update done"
|
||||
msgstr "ការធ្វើបច្ចុប្បន្នភាពរួចរាល់"
|
||||
|
||||
#: cps/web.py:1837
|
||||
#: cps/web.py:1953
|
||||
msgid "Published after "
|
||||
msgstr "បានបោះពុម្ភក្រោយ "
|
||||
|
||||
#: cps/web.py:1844
|
||||
#: cps/web.py:1960
|
||||
msgid "Published before "
|
||||
msgstr "បានបោះពុម្ភមុន "
|
||||
|
||||
#: cps/web.py:1858
|
||||
#: cps/web.py:1974
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr "ការវាយតម្លៃ <= %(rating)s"
|
||||
|
||||
#: cps/web.py:1860
|
||||
#: cps/web.py:1976
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr "ការវាយតម្លៃ >= %(rating)s"
|
||||
|
||||
#: cps/web.py:1919 cps/web.py:1928
|
||||
#: cps/web.py:2035 cps/web.py:2044
|
||||
msgid "search"
|
||||
msgstr "ស្វែងរក"
|
||||
|
||||
#: 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"
|
||||
msgstr "សៀវភៅដែលបានអានរួច"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "អានសៀវភៅ"
|
||||
|
||||
#: cps/web.py:2128 cps/web.py:3006
|
||||
#: cps/web.py:2244 cps/web.py:3129
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "សូមបំពេញចន្លោះទាំងអស់!"
|
||||
|
||||
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159
|
||||
#: cps/web.py:2161
|
||||
#: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
|
||||
#: cps/web.py:2277
|
||||
msgid "register"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2152
|
||||
#: cps/web.py:2268
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2155
|
||||
#: cps/web.py:2271
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2158
|
||||
#: cps/web.py:2274
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2175 cps/web.py:2271
|
||||
#: cps/web.py:2291 cps/web.py:2387
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "ឥឡូវអ្នកបានចូលដោយមានឈ្មោះថា៖ ‘%(nickname)s’"
|
||||
|
||||
#: cps/web.py:2180
|
||||
#: cps/web.py:2296
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "ខុសឈ្មោះអ្នកប្រើប្រាស់ ឬលេខសម្ងាត់"
|
||||
|
||||
#: cps/web.py:2186 cps/web.py:2207
|
||||
#: cps/web.py:2302 cps/web.py:2323
|
||||
msgid "login"
|
||||
msgstr "ចូលប្រើ"
|
||||
|
||||
#: cps/web.py:2219 cps/web.py:2250
|
||||
#: cps/web.py:2335 cps/web.py:2366
|
||||
msgid "Token not found"
|
||||
msgstr "រកមិនឃើញវត្ថុតាង"
|
||||
|
||||
#: cps/web.py:2227 cps/web.py:2258
|
||||
#: cps/web.py:2343 cps/web.py:2374
|
||||
msgid "Token has expired"
|
||||
msgstr "វត្ថុតាងហួសពេលកំណត់"
|
||||
|
||||
#: cps/web.py:2235
|
||||
#: cps/web.py:2351
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "ជោគជ័យ! សូមវិលមកឧបករណ៍អ្នកវិញ"
|
||||
|
||||
#: cps/web.py:2285
|
||||
#: cps/web.py:2401
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "សូមកំណត់អ៊ីមែល SMTP ជាមុនសិន"
|
||||
|
||||
#: cps/web.py:2289
|
||||
#: cps/web.py:2405
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr "សៀវភៅបានចូលជួរសម្រាប់ផ្ញើទៅ %(kindlemail)s ដោយជោគជ័យ"
|
||||
|
||||
#: cps/web.py:2293
|
||||
#: cps/web.py:2409
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(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..."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2339
|
||||
#: cps/web.py:2455
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr "សៀវភៅត្រូវបានបន្ថែមទៅធ្នើ៖ %(sname)s"
|
||||
|
||||
#: cps/web.py:2350
|
||||
#: cps/web.py:2466
|
||||
msgid "Invalid shelf specified"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2355
|
||||
#: cps/web.py:2471
|
||||
#, python-format
|
||||
msgid "You are not allowed to add a book to the the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2360
|
||||
#: cps/web.py:2476
|
||||
msgid "User is not allowed to edit public shelves"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2378
|
||||
#: cps/web.py:2494
|
||||
#, python-format
|
||||
msgid "Books are already part of the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2392
|
||||
#: cps/web.py:2508
|
||||
#, python-format
|
||||
msgid "Books have been added to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2394
|
||||
#: cps/web.py:2510
|
||||
#, python-format
|
||||
msgid "Could not add books to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2431
|
||||
#: cps/web.py:2547
|
||||
#, python-format
|
||||
msgid "Book has been removed from shelf: %(sname)s"
|
||||
msgstr "សៀវភៅត្រូវបានដកចេញពីធ្នើ៖ %(sname)s"
|
||||
|
||||
#: cps/web.py:2437
|
||||
#: cps/web.py:2553
|
||||
#, python-format
|
||||
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
|
||||
msgstr "សូមអភ័យទោស អ្នកមិនមានសិទ្ធិដកសៀវភៅចេញពីធ្នើនេះទេ៖ %(sname)s"
|
||||
|
||||
#: cps/web.py:2457 cps/web.py:2481
|
||||
#: cps/web.py:2573 cps/web.py:2597
|
||||
#, python-format
|
||||
msgid "A shelf with the name '%(title)s' already exists."
|
||||
msgstr "មានធ្នើដែលមានឈ្មោះ ‘%(title)s’ រួចហើយ។"
|
||||
|
||||
#: cps/web.py:2462
|
||||
#: cps/web.py:2578
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s created"
|
||||
msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានបង្កើត"
|
||||
|
||||
#: cps/web.py:2464 cps/web.py:2492
|
||||
#: cps/web.py:2580 cps/web.py:2608
|
||||
msgid "There was an error"
|
||||
msgstr "មានបញ្ហា"
|
||||
|
||||
#: cps/web.py:2465 cps/web.py:2467
|
||||
#: cps/web.py:2581 cps/web.py:2583
|
||||
msgid "create a shelf"
|
||||
msgstr "បង្កើតធ្នើ"
|
||||
|
||||
#: cps/web.py:2490
|
||||
#: cps/web.py:2606
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s changed"
|
||||
msgstr "ធ្នើឈ្មោះ %(title)s ត្រូវបានប្តូរ"
|
||||
|
||||
#: cps/web.py:2493 cps/web.py:2495
|
||||
#: cps/web.py:2609 cps/web.py:2611
|
||||
msgid "Edit a shelf"
|
||||
msgstr "កែប្រែធ្នើ"
|
||||
|
||||
#: cps/web.py:2516
|
||||
#: cps/web.py:2632
|
||||
#, python-format
|
||||
msgid "successfully deleted shelf %(name)s"
|
||||
msgstr "បានបង្កើតធ្នើឈ្មោះ %(name)s ដោយជោគជ័យ"
|
||||
|
||||
#: cps/web.py:2538
|
||||
#: cps/web.py:2659
|
||||
#, python-format
|
||||
msgid "Shelf: '%(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"
|
||||
msgstr "មានបញ្ហាពេលបើកធ្នើ។ ពុំមានធ្នើ ឬមិនអាចបើកបាន"
|
||||
|
||||
#: cps/web.py:2572
|
||||
#: cps/web.py:2693
|
||||
#, python-format
|
||||
msgid "Change order of Shelf: '%(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"
|
||||
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
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "ព័ត៌មានសង្ខេបរបស់ %(name)s"
|
||||
|
||||
#: cps/web.py:2642
|
||||
#: cps/web.py:2763
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2645
|
||||
#: cps/web.py:2766
|
||||
msgid "Profile updated"
|
||||
msgstr "ព័ត៌មានសង្ខេបបានកែប្រែ"
|
||||
|
||||
#: cps/web.py:2657
|
||||
msgid "Unknown"
|
||||
msgstr "មិនដឹង"
|
||||
|
||||
#: cps/web.py:2671
|
||||
#: cps/web.py:2794
|
||||
msgid "Admin page"
|
||||
msgstr "ទំព័ររដ្ឋបាល"
|
||||
|
||||
#: cps/web.py:2749 cps/web.py:2922
|
||||
#: cps/web.py:2872 cps/web.py:3045
|
||||
msgid "Calibre-Web configuration updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:91 cps/web.py:2762
|
||||
#: cps/templates/admin.html:100 cps/web.py:2885
|
||||
msgid "UI Configuration"
|
||||
msgstr "ការកំណត់ផ្ទាំងប្រើប្រាស់"
|
||||
|
||||
#: cps/web.py:2780
|
||||
#: cps/web.py:2903
|
||||
msgid "Import of optional Google Drive requirements missing"
|
||||
msgstr "ខ្វះការនាំចូលតម្រូវការបន្ថែមរបស់ Google Drive"
|
||||
|
||||
#: cps/web.py:2783
|
||||
#: cps/web.py:2906
|
||||
msgid "client_secrets.json is missing or not readable"
|
||||
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"
|
||||
msgstr "ឯកសារ client_secrets.json មិនទាន់បានកំណត់សម្រាប់កម្មវិធីវែប"
|
||||
|
||||
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856
|
||||
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937
|
||||
#: cps/web.py:2954
|
||||
#: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
|
||||
#: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
|
||||
#: cps/web.py:3077
|
||||
msgid "Basic Configuration"
|
||||
msgstr "ការកំណត់សាមញ្ញ"
|
||||
|
||||
#: cps/web.py:2841
|
||||
#: cps/web.py:2964
|
||||
msgid "Keyfile location is not valid, please enter correct path"
|
||||
msgstr "ទីតាំងរបស់ keyfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
|
||||
|
||||
#: cps/web.py:2853
|
||||
#: cps/web.py:2976
|
||||
msgid "Certfile location is not valid, please enter correct path"
|
||||
msgstr "ទីតាំងរបស់ certfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
|
||||
|
||||
#: cps/web.py:2895
|
||||
#: cps/web.py:3018
|
||||
msgid "Logfile location is not valid, please enter correct path"
|
||||
msgstr "ទីតាំងរបស់ logfile មិនត្រឹមត្រូវ សូមបញ្ចូលទីតាំងត្រឹមត្រូវ"
|
||||
|
||||
#: cps/web.py:2934
|
||||
#: cps/web.py:3057
|
||||
msgid "DB location is not valid, please enter correct path"
|
||||
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"
|
||||
msgstr "បន្ថែមអ្នកប្រើប្រាស់ថ្មី"
|
||||
|
||||
#: cps/web.py:3020
|
||||
#: cps/web.py:3143
|
||||
#, python-format
|
||||
msgid "User '%(user)s' created"
|
||||
msgstr "បានបង្កើតអ្នកប្រើប្រាស់ ‘%(user)s’"
|
||||
|
||||
#: cps/web.py:3024
|
||||
#: cps/web.py:3147
|
||||
msgid "Found an existing account for this e-mail address or nickname."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3048 cps/web.py:3062
|
||||
#: cps/web.py:3171 cps/web.py:3185
|
||||
msgid "E-mail server settings updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3055
|
||||
#: cps/web.py:3178
|
||||
#, python-format
|
||||
msgid "Test e-mail successfully send to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3058
|
||||
#: cps/web.py:3181
|
||||
#, python-format
|
||||
msgid "There was an error sending the Test e-mail: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3063
|
||||
#: cps/web.py:3186
|
||||
msgid "Edit e-mail server settings"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3088
|
||||
#: cps/web.py:3211
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' deleted"
|
||||
msgstr "អ្នកប្រើប្រាស់ ‘%(nick)s’ ត្រូវបានលុប"
|
||||
|
||||
#: cps/web.py:3197
|
||||
#: cps/web.py:3320
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr "អ្នកប្រើប្រាស់ ‘%(nick)s’ ត្រូវបានកែប្រែ"
|
||||
|
||||
#: cps/web.py:3200
|
||||
#: cps/web.py:3323
|
||||
msgid "An unknown error occured."
|
||||
msgstr "បញ្ហាដែលមិនដឹងបានកើតឡើង។"
|
||||
|
||||
#: cps/web.py:3202
|
||||
#: cps/web.py:3325
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "កែប្រែអ្នកប្រើប្រាស់ %(nick)s"
|
||||
|
||||
#: cps/web.py:3219
|
||||
#: cps/web.py:3342
|
||||
#, python-format
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3239
|
||||
#: cps/web.py:3362
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible"
|
||||
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"
|
||||
msgstr "កែប្រែទិន្នន័យមេតា"
|
||||
|
||||
#: cps/web.py:3284 cps/web.py:3576
|
||||
#: cps/web.py:3401 cps/web.py:3697
|
||||
#, python-format
|
||||
msgid "File extension '%(ext)s' is not allowed to be uploaded to this 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"
|
||||
msgstr "ឯកសារដែលត្រូវអាប់ឡូដត្រូវមានកន្ទុយឯកសារ"
|
||||
|
||||
#: cps/web.py:3300 cps/web.py:3600
|
||||
#: cps/web.py:3417 cps/web.py:3721
|
||||
#, python-format
|
||||
msgid "Failed to create path %(path)s (Permission denied)."
|
||||
msgstr "មិនអាចបង្កើតទីតាំង %(path)s (ពុំមានសិទ្ធិ)។"
|
||||
|
||||
#: cps/web.py:3305
|
||||
#: cps/web.py:3422
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s."
|
||||
msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s ។"
|
||||
|
||||
#: cps/web.py:3321
|
||||
#: cps/web.py:3438
|
||||
#, python-format
|
||||
msgid "File format %(ext)s added to %(book)s"
|
||||
msgstr "ឯកសារទម្រង់ %(ext)s ត្រូវបានបន្ថែមទៅ %(book)s"
|
||||
|
||||
#: cps/web.py:3339
|
||||
#: cps/web.py:3455
|
||||
#, python-format
|
||||
msgid "Failed to create path for cover %(path)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3346
|
||||
#: cps/web.py:3462
|
||||
#, python-format
|
||||
msgid "Failed to store cover-file %(cover)s."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3349
|
||||
#: cps/web.py:3465
|
||||
msgid "Cover-file is not a valid image file"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3362 cps/web.py:3366
|
||||
#: cps/web.py:3482 cps/web.py:3486
|
||||
msgid "unknown"
|
||||
msgstr "មិនដឹង"
|
||||
|
||||
#: cps/web.py:3388
|
||||
#: cps/web.py:3508
|
||||
msgid "Cover is not a jpg file, can't save"
|
||||
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"
|
||||
msgstr "មានបញ្ហាពេលកែប្រែសៀវភៅ សូមពិនិត្យមើល logfile សម្រាប់ព័ត៌មានបន្ថែម"
|
||||
|
||||
#: cps/web.py:3605
|
||||
#: cps/web.py:3726
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s (Permission denied)."
|
||||
msgstr "មិនអាចរក្សាទុកឯកសារ %(file)s (មិនមានសិទ្ធិ)។"
|
||||
|
||||
#: cps/web.py:3610
|
||||
#: cps/web.py:3731
|
||||
#, python-format
|
||||
msgid "Failed to delete file %(file)s (Permission denied)."
|
||||
msgstr "មិនអាចលុបឯកសារ %(file)s (មិនមានសិទ្ធិ)។"
|
||||
|
||||
#: cps/web.py:3692
|
||||
#: cps/web.py:3813
|
||||
#, python-format
|
||||
msgid "File %(file)s uploaded"
|
||||
msgstr "ឯកសារ %(file)s ត្រូវបានអាប់ឡូដ"
|
||||
|
||||
#: cps/web.py:3722
|
||||
#: cps/web.py:3843
|
||||
msgid "Source or destination format for conversion missing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3732
|
||||
#: cps/web.py:3853
|
||||
#, python-format
|
||||
msgid "Book successfully queued for converting to %(book_format)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3736
|
||||
#: cps/web.py:3857
|
||||
#, python-format
|
||||
msgid "There was an error converting this book: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:215 cps/worker.py:387
|
||||
#: cps/worker.py:215 cps/worker.py:398
|
||||
msgid "Started"
|
||||
msgstr "បានចាប់ផ្តើម"
|
||||
|
||||
#: cps/worker.py:237
|
||||
#: cps/worker.py:251
|
||||
#, python-format
|
||||
msgid "Convertertool %(converter)s not found"
|
||||
msgstr "មិនអាចរកឃើញកម្មវិធីបម្លែង %(converter)s"
|
||||
|
||||
#: cps/worker.py:272
|
||||
#: cps/worker.py:287
|
||||
#, python-format
|
||||
msgid "Ebook-converter failed: %(error)s"
|
||||
msgstr "Ebook-converter បានបរាជ័យ៖ %(error)s"
|
||||
|
||||
#: cps/worker.py:283
|
||||
#: cps/worker.py:298
|
||||
#, python-format
|
||||
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
|
||||
msgstr "Kindlegen បានបរាជ័យដោយមានកំហុស %(error)s. សារ៖ %(message)s"
|
||||
|
||||
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438
|
||||
msgid "Finished"
|
||||
msgstr "បានបញ្ចប់"
|
||||
|
||||
#: cps/worker.py:344 cps/worker.py:363
|
||||
#: cps/worker.py:355 cps/worker.py:374
|
||||
msgid "Waiting"
|
||||
msgstr "កំពុងរង់ចាំ"
|
||||
|
||||
#: cps/worker.py:351
|
||||
#: cps/worker.py:362
|
||||
msgid "This e-mail has been sent via Calibre-Web."
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:472
|
||||
#: cps/worker.py:388 cps/worker.py:484
|
||||
msgid "Finished"
|
||||
msgstr "បានបញ្ចប់"
|
||||
|
||||
#: cps/worker.py:476
|
||||
msgid "Failed"
|
||||
msgstr "បានបរាជ័យ"
|
||||
|
||||
#: cps/templates/admin.html:4
|
||||
#: cps/templates/admin.html:6
|
||||
msgid "User list"
|
||||
msgstr "បញ្ជីអ្នកប្រើប្រាស់"
|
||||
|
||||
#: cps/templates/admin.html:7
|
||||
#: cps/templates/admin.html:9
|
||||
msgid "Nickname"
|
||||
msgstr "ឈ្មោះហៅក្រៅ"
|
||||
|
||||
#: cps/templates/admin.html:8
|
||||
#: cps/templates/admin.html:10
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:9
|
||||
#: cps/templates/admin.html:11
|
||||
msgid "Kindle"
|
||||
msgstr "ឧបករណ៍ Kindle"
|
||||
|
||||
#: cps/templates/admin.html:10
|
||||
#: cps/templates/admin.html:12
|
||||
msgid "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"
|
||||
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
|
||||
msgid "Download"
|
||||
msgstr "ទាញយក"
|
||||
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:64
|
||||
#: cps/templates/admin.html:15 cps/templates/layout.html:64
|
||||
msgid "Upload"
|
||||
msgstr "អាប់ឡូដ"
|
||||
|
||||
#: cps/templates/admin.html:14
|
||||
#: cps/templates/admin.html:16
|
||||
msgid "Edit"
|
||||
msgstr "កែប្រែ"
|
||||
|
||||
#: cps/templates/admin.html:32
|
||||
#: cps/templates/admin.html:39
|
||||
msgid "SMTP e-mail server settings"
|
||||
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"
|
||||
msgstr "ឈ្មោះម៉ាស៊ីន SMTP"
|
||||
|
||||
#: cps/templates/admin.html:36
|
||||
#: cps/templates/admin.html:43
|
||||
msgid "SMTP port"
|
||||
msgstr "លេខ port SMTP"
|
||||
|
||||
#: cps/templates/admin.html:37
|
||||
#: cps/templates/admin.html:44
|
||||
msgid "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"
|
||||
msgstr "អ្នកចូលប្រើ SMTP"
|
||||
|
||||
#: cps/templates/admin.html:39
|
||||
#: cps/templates/admin.html:46
|
||||
msgid "From mail"
|
||||
msgstr "ពីអ៊ីមែល"
|
||||
|
||||
#: cps/templates/admin.html:48
|
||||
#: cps/templates/admin.html:56
|
||||
msgid "Change SMTP settings"
|
||||
msgstr "ប្តូរការកំណត់ SMTP"
|
||||
|
||||
#: cps/templates/admin.html:50
|
||||
#: cps/templates/admin.html:62
|
||||
msgid "Configuration"
|
||||
msgstr "ការកំណត់"
|
||||
|
||||
#: cps/templates/admin.html:53
|
||||
#: cps/templates/admin.html:65
|
||||
msgid "Calibre DB dir"
|
||||
msgstr "ទីតាំង database Calibre"
|
||||
|
||||
#: cps/templates/admin.html:57
|
||||
#: cps/templates/admin.html:69
|
||||
msgid "Log level"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:61
|
||||
#: cps/templates/admin.html:73
|
||||
msgid "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"
|
||||
msgstr "ចំនួនសៀវភៅក្នុងមួយទំព័រ"
|
||||
|
||||
#: cps/templates/admin.html:71
|
||||
#: cps/templates/admin.html:83
|
||||
msgid "Uploading"
|
||||
msgstr "កំពុងអាប់ឡូដ"
|
||||
|
||||
#: cps/templates/admin.html:75
|
||||
#: cps/templates/admin.html:87
|
||||
msgid "Anonymous browsing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:79
|
||||
#: cps/templates/admin.html:91
|
||||
msgid "Public registration"
|
||||
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"
|
||||
msgstr "ការចូលប្រើប្រាស់ពីចម្ងាយ"
|
||||
|
||||
#: cps/templates/admin.html:93
|
||||
#: cps/templates/admin.html:106
|
||||
msgid "Administration"
|
||||
msgstr "កិច្ចការរដ្ឋបាល"
|
||||
|
||||
#: cps/templates/admin.html:94
|
||||
msgid "Current commit timestamp"
|
||||
msgstr "Commit timestamp បច្ចុប្បន្ន"
|
||||
|
||||
#: cps/templates/admin.html:95
|
||||
msgid "Newest commit timestamp"
|
||||
msgstr "Commit timestamp ចុងក្រោយគេ"
|
||||
|
||||
#: cps/templates/admin.html:97
|
||||
#: cps/templates/admin.html:107
|
||||
msgid "Reconnect to Calibre DB"
|
||||
msgstr "ភ្ជាប់ទៅ database Calibre ម្តងទៀត"
|
||||
|
||||
#: cps/templates/admin.html:98
|
||||
#: cps/templates/admin.html:108
|
||||
msgid "Restart Calibre-Web"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:99
|
||||
#: cps/templates/admin.html:109
|
||||
msgid "Stop Calibre-Web"
|
||||
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"
|
||||
msgstr "រកមើលបច្ចុប្បន្នភាព"
|
||||
|
||||
#: cps/templates/admin.html:101
|
||||
#: cps/templates/admin.html:133
|
||||
msgid "Perform Update"
|
||||
msgstr "ធ្វើបច្ចុប្បន្នភាព"
|
||||
|
||||
#: cps/templates/admin.html:110
|
||||
#: cps/templates/admin.html:145
|
||||
msgid "Do you really want to restart Calibre-Web?"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:115 cps/templates/admin.html:129
|
||||
#: cps/templates/admin.html:150 cps/templates/shelf.html:59
|
||||
#: cps/templates/admin.html:150 cps/templates/admin.html:164
|
||||
#: cps/templates/admin.html:184 cps/templates/shelf.html:59
|
||||
msgid "Ok"
|
||||
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/config_edit.html:212 cps/templates/config_view_edit.html:164
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
|
||||
@ -826,11 +867,11 @@ msgstr "បាទ/ចាស"
|
||||
msgid "Back"
|
||||
msgstr "មកក្រោយ"
|
||||
|
||||
#: cps/templates/admin.html:128
|
||||
#: cps/templates/admin.html:163
|
||||
msgid "Do you really want to stop Calibre-Web?"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:141
|
||||
#: cps/templates/admin.html:175
|
||||
msgid "Updating, please do not reload page"
|
||||
msgstr "កំពុងធ្វើបច្ចុប្បន្នភាព សូមកុំបើកទំព័រជាថ្មី"
|
||||
|
||||
@ -911,12 +952,8 @@ msgid "Rating"
|
||||
msgstr "ការវាយតម្លៃ"
|
||||
|
||||
#: cps/templates/book_edit.html:87
|
||||
msgid ""
|
||||
"Cover URL (jpg, cover is downloaded and stored in database, field is "
|
||||
"afterwards empty again)"
|
||||
msgstr ""
|
||||
"URL របស់ក្របមុខ (ឯកសារ JPG ក្របមុខត្រូវបានទាញយក និងរក្សាទុកក្នុង database"
|
||||
" ក្រោយមកចន្លោះនេះទទេម្តងទៀត)"
|
||||
msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
|
||||
msgstr "URL របស់ក្របមុខ (ឯកសារ JPG ក្របមុខត្រូវបានទាញយក និងរក្សាទុកក្នុង database ក្រោយមកចន្លោះនេះទទេម្តងទៀត)"
|
||||
|
||||
#: cps/templates/book_edit.html:91
|
||||
msgid "Upload Cover from local drive"
|
||||
@ -1291,9 +1328,7 @@ msgstr "កែប្រែទិន្នន័យមេតា"
|
||||
|
||||
#: cps/templates/email_edit.html:15
|
||||
msgid "SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)"
|
||||
msgstr ""
|
||||
"លេខ port SMTP (ជាធម្មតាលេខ 25 សម្រាប់ SMTP ធម្មតា ឬ 465 សម្រាប់ SSL ឬ 587"
|
||||
" សម្រាប់ STARTTLS)"
|
||||
msgstr "លេខ port SMTP (ជាធម្មតាលេខ 25 សម្រាប់ SMTP ធម្មតា ឬ 465 សម្រាប់ SSL ឬ 587 សម្រាប់ STARTTLS)"
|
||||
|
||||
#: cps/templates/email_edit.html:19
|
||||
msgid "Encryption"
|
||||
@ -1845,9 +1880,7 @@ msgstr "ការទាញយកថ្មីៗ"
|
||||
#~ msgid "Rename title from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
|
||||
#~ msgstr "ប្តូរចំណងជើងពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Rename author from: '%(src)s' to "
|
||||
#~ "'%(dest)s' failed with error: %(error)s"
|
||||
#~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
|
||||
#~ msgstr "ប្តូរអ្នកនិពន្ធពី “%(src)s” ទៅជា “%(dest)s” បរាជ័យដោយបញ្ហា: %(error)s"
|
||||
|
||||
#~ 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"
|
||||
#~ msgstr "ឯកសារប្រភេទ “%(ext)s” មិនត្រូវបានអនុញ្ញាតឲអាប់ឡូដទៅម៉ាស៊ីន server នេះទេ"
|
||||
|
||||
#~ msgid "Current commit timestamp"
|
||||
#~ msgstr "Commit timestamp បច្ចុប្បន្ន"
|
||||
|
||||
#~ msgid "Newest commit timestamp"
|
||||
#~ msgstr "Commit timestamp ចុងក្រោយគេ"
|
||||
|
||||
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
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
|
||||
# project.
|
||||
# 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 ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 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"
|
||||
"Last-Translator: dalin <dalin.lin@gmail.com>\n"
|
||||
"Language: zh_Hans_CN\n"
|
||||
@ -122,707 +114,750 @@ msgstr "执行UnRar时出错"
|
||||
msgid "Unrar binary file not found"
|
||||
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"
|
||||
msgstr "正在请求更新包"
|
||||
|
||||
#: cps/web.py:1115
|
||||
#: cps/web.py:1231
|
||||
msgid "Downloading update package"
|
||||
msgstr "正在下载更新包"
|
||||
|
||||
#: cps/web.py:1116
|
||||
#: cps/web.py:1232
|
||||
msgid "Unzipping update package"
|
||||
msgstr "正在解压更新包"
|
||||
|
||||
#: cps/web.py:1117
|
||||
#: cps/web.py:1233
|
||||
msgid "Files are replaced"
|
||||
msgstr "文件已替换"
|
||||
|
||||
#: cps/web.py:1118
|
||||
#: cps/web.py:1234
|
||||
msgid "Database connections are closed"
|
||||
msgstr "数据库连接已关闭"
|
||||
|
||||
#: cps/web.py:1119
|
||||
#: cps/web.py:1235
|
||||
msgid "Server is stopped"
|
||||
msgstr "服务器已停止"
|
||||
|
||||
#: cps/web.py:1120
|
||||
#: cps/web.py:1236
|
||||
msgid "Update finished, please press okay and reload page"
|
||||
msgstr "更新完成,请按确定并刷新页面"
|
||||
|
||||
#: cps/web.py:1140
|
||||
#: cps/web.py:1256
|
||||
msgid "Recently Added Books"
|
||||
msgstr "最近添加的书籍"
|
||||
|
||||
#: cps/web.py:1150
|
||||
#: cps/web.py:1266
|
||||
msgid "Newest Books"
|
||||
msgstr "最新书籍"
|
||||
|
||||
#: cps/web.py:1162
|
||||
#: cps/web.py:1278
|
||||
msgid "Oldest Books"
|
||||
msgstr "最旧书籍"
|
||||
|
||||
#: cps/web.py:1174
|
||||
#: cps/web.py:1290
|
||||
msgid "Books (A-Z)"
|
||||
msgstr "书籍 (A-Z)"
|
||||
|
||||
#: cps/web.py:1185
|
||||
#: cps/web.py:1301
|
||||
msgid "Books (Z-A)"
|
||||
msgstr "书籍 (Z-A)"
|
||||
|
||||
#: cps/web.py:1214
|
||||
#: cps/web.py:1330
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "热门书籍(最多下载)"
|
||||
|
||||
#: cps/web.py:1227
|
||||
#: cps/web.py:1343
|
||||
msgid "Best rated books"
|
||||
msgstr "最高评分书籍"
|
||||
|
||||
#: cps/templates/index.xml:36 cps/web.py:1239
|
||||
#: cps/templates/index.xml:36 cps/web.py:1355
|
||||
msgid "Random Books"
|
||||
msgstr "随机书籍"
|
||||
|
||||
#: cps/web.py:1254
|
||||
#: cps/web.py:1370
|
||||
msgid "Author list"
|
||||
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:"
|
||||
msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
|
||||
|
||||
#: cps/templates/index.xml:73 cps/web.py:1313
|
||||
#: cps/templates/index.xml:73 cps/web.py:1429
|
||||
msgid "Series list"
|
||||
msgstr "丛书列表"
|
||||
|
||||
#: cps/web.py:1327
|
||||
#: cps/web.py:1443
|
||||
#, python-format
|
||||
msgid "Series: %(serie)s"
|
||||
msgstr "丛书: %(serie)s"
|
||||
|
||||
#: cps/web.py:1354
|
||||
#: cps/web.py:1470
|
||||
msgid "Available languages"
|
||||
msgstr "可用语言"
|
||||
|
||||
#: cps/web.py:1371
|
||||
#: cps/web.py:1487
|
||||
#, python-format
|
||||
msgid "Language: %(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"
|
||||
msgstr "分类列表"
|
||||
|
||||
#: cps/web.py:1396
|
||||
#: cps/web.py:1512
|
||||
#, python-format
|
||||
msgid "Category: %(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"
|
||||
msgstr "任务"
|
||||
|
||||
#: cps/web.py:1565
|
||||
#: cps/web.py:1681
|
||||
msgid "Statistics"
|
||||
msgstr "统计"
|
||||
|
||||
#: cps/web.py:1670
|
||||
msgid ""
|
||||
"Callback domain is not verified, please follow steps to verify domain in "
|
||||
"google developer console"
|
||||
#: cps/web.py:1786
|
||||
msgid "Callback domain is not verified, please follow steps to verify domain in google developer console"
|
||||
msgstr "回调域名尚未被校验,请在google开发者控制台按步骤校验域名"
|
||||
|
||||
#: cps/web.py:1746
|
||||
#: cps/web.py:1861
|
||||
msgid "Server restarted, please reload page"
|
||||
msgstr "服务器已重启,请刷新页面"
|
||||
|
||||
#: cps/web.py:1749
|
||||
#: cps/web.py:1864
|
||||
msgid "Performing shutdown of server, please close window"
|
||||
msgstr "正在关闭服务器,请关闭窗口"
|
||||
|
||||
#: cps/web.py:1767
|
||||
#: cps/web.py:1883
|
||||
msgid "Update done"
|
||||
msgstr "更新完成"
|
||||
|
||||
#: cps/web.py:1837
|
||||
#: cps/web.py:1953
|
||||
msgid "Published after "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1844
|
||||
#: cps/web.py:1960
|
||||
msgid "Published before "
|
||||
msgstr "出版时早于 "
|
||||
|
||||
#: cps/web.py:1858
|
||||
#: cps/web.py:1974
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr "评分 <= %(rating)s"
|
||||
|
||||
#: cps/web.py:1860
|
||||
#: cps/web.py:1976
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr "评分 >= %(rating)s"
|
||||
|
||||
#: cps/web.py:1919 cps/web.py:1928
|
||||
#: cps/web.py:2035 cps/web.py:2044
|
||||
msgid "search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: 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"
|
||||
msgstr "已读书籍"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "阅读一本书"
|
||||
|
||||
#: cps/web.py:2128 cps/web.py:3006
|
||||
#: cps/web.py:2244 cps/web.py:3129
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "请填写所有字段"
|
||||
|
||||
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159
|
||||
#: cps/web.py:2161
|
||||
#: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
|
||||
#: cps/web.py:2277
|
||||
msgid "register"
|
||||
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."
|
||||
msgstr "发生一个未知错误,请稍后再试。"
|
||||
|
||||
#: cps/web.py:2152
|
||||
#: cps/web.py:2268
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr "您的邮箱不能用来注册"
|
||||
|
||||
#: cps/web.py:2155
|
||||
#: cps/web.py:2271
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr "确认邮件已经发送到您的邮箱。"
|
||||
|
||||
#: cps/web.py:2158
|
||||
#: cps/web.py:2274
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr "这个用户名或者邮箱已经被使用。"
|
||||
|
||||
#: cps/web.py:2175 cps/web.py:2271
|
||||
#: cps/web.py:2291 cps/web.py:2387
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "您现在已以'%(nickname)s'身份登录"
|
||||
|
||||
#: cps/web.py:2180
|
||||
#: cps/web.py:2296
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "用户名或密码错误"
|
||||
|
||||
#: cps/web.py:2186 cps/web.py:2207
|
||||
#: cps/web.py:2302 cps/web.py:2323
|
||||
msgid "login"
|
||||
msgstr "登录"
|
||||
|
||||
#: cps/web.py:2219 cps/web.py:2250
|
||||
#: cps/web.py:2335 cps/web.py:2366
|
||||
msgid "Token not found"
|
||||
msgstr "找不到Token"
|
||||
|
||||
#: cps/web.py:2227 cps/web.py:2258
|
||||
#: cps/web.py:2343 cps/web.py:2374
|
||||
msgid "Token has expired"
|
||||
msgstr "Token已过期"
|
||||
|
||||
#: cps/web.py:2235
|
||||
#: cps/web.py:2351
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr "成功!请返回您的设备"
|
||||
|
||||
#: cps/web.py:2285
|
||||
#: cps/web.py:2401
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "请先配置SMTP邮箱..."
|
||||
|
||||
#: cps/web.py:2289
|
||||
#: cps/web.py:2405
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr "书籍已经被成功加入 %(kindlemail)s 的发送队列"
|
||||
|
||||
#: cps/web.py:2293
|
||||
#: cps/web.py:2409
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(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..."
|
||||
msgstr "请先配置您的kindle邮箱..."
|
||||
|
||||
#: cps/web.py:2339
|
||||
#: cps/web.py:2455
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr "此书已被添加到书架: %(sname)s"
|
||||
|
||||
#: cps/web.py:2350
|
||||
#: cps/web.py:2466
|
||||
msgid "Invalid shelf specified"
|
||||
msgstr "指定的书架无效"
|
||||
|
||||
#: cps/web.py:2355
|
||||
#: cps/web.py:2471
|
||||
#, python-format
|
||||
msgid "You are not allowed to add a book to the the shelf: %(name)s"
|
||||
msgstr "您没有添加书籍到书架 %(name)s 的权限"
|
||||
|
||||
#: cps/web.py:2360
|
||||
#: cps/web.py:2476
|
||||
msgid "User is not allowed to edit public shelves"
|
||||
msgstr "用户没有编辑公开书架的权限"
|
||||
|
||||
#: cps/web.py:2378
|
||||
#: cps/web.py:2494
|
||||
#, python-format
|
||||
msgid "Books are already part of the shelf: %(name)s"
|
||||
msgstr "书籍已经在书架 %(name)s 中了"
|
||||
|
||||
#: cps/web.py:2392
|
||||
#: cps/web.py:2508
|
||||
#, python-format
|
||||
msgid "Books have been added to shelf: %(sname)s"
|
||||
msgstr "书籍已经被添加到书架 %(sname)s 中'"
|
||||
|
||||
#: cps/web.py:2394
|
||||
#: cps/web.py:2510
|
||||
#, python-format
|
||||
msgid "Could not add books to shelf: %(sname)s"
|
||||
msgstr "无法添加书籍到书架: %(sname)s"
|
||||
|
||||
#: cps/web.py:2431
|
||||
#: cps/web.py:2547
|
||||
#, python-format
|
||||
msgid "Book has been removed from shelf: %(sname)s"
|
||||
msgstr "此书已从书架 %(sname)s 中删除"
|
||||
|
||||
#: cps/web.py:2437
|
||||
#: cps/web.py:2553
|
||||
#, python-format
|
||||
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
|
||||
msgstr "对不起,您没有从书架 %(sname)s 中删除书籍的权限"
|
||||
|
||||
#: cps/web.py:2457 cps/web.py:2481
|
||||
#: cps/web.py:2573 cps/web.py:2597
|
||||
#, python-format
|
||||
msgid "A shelf with the name '%(title)s' already exists."
|
||||
msgstr "已存在书架 '%(title)s'。"
|
||||
|
||||
#: cps/web.py:2462
|
||||
#: cps/web.py:2578
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s created"
|
||||
msgstr "书架 %(title)s 已被创建"
|
||||
|
||||
#: cps/web.py:2464 cps/web.py:2492
|
||||
#: cps/web.py:2580 cps/web.py:2608
|
||||
msgid "There was an error"
|
||||
msgstr "发生错误"
|
||||
|
||||
#: cps/web.py:2465 cps/web.py:2467
|
||||
#: cps/web.py:2581 cps/web.py:2583
|
||||
msgid "create a shelf"
|
||||
msgstr "创建书架"
|
||||
|
||||
#: cps/web.py:2490
|
||||
#: cps/web.py:2606
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s changed"
|
||||
msgstr "书架 %(title)s 已被修改"
|
||||
|
||||
#: cps/web.py:2493 cps/web.py:2495
|
||||
#: cps/web.py:2609 cps/web.py:2611
|
||||
msgid "Edit a shelf"
|
||||
msgstr "编辑书架"
|
||||
|
||||
#: cps/web.py:2516
|
||||
#: cps/web.py:2632
|
||||
#, python-format
|
||||
msgid "successfully deleted shelf %(name)s"
|
||||
msgstr "成功删除书架 %(name)s"
|
||||
|
||||
#: cps/web.py:2538
|
||||
#: cps/web.py:2659
|
||||
#, python-format
|
||||
msgid "Shelf: '%(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"
|
||||
msgstr "打开书架出错。书架不存在或不可访问"
|
||||
|
||||
#: cps/web.py:2572
|
||||
#: cps/web.py:2693
|
||||
#, python-format
|
||||
msgid "Change order of Shelf: '%(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"
|
||||
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
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)s 的资料"
|
||||
|
||||
#: cps/web.py:2642
|
||||
#: cps/web.py:2763
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr "找到一个已有账号使用这个邮箱。"
|
||||
|
||||
#: cps/web.py:2645
|
||||
#: cps/web.py:2766
|
||||
msgid "Profile updated"
|
||||
msgstr "资料已更新"
|
||||
|
||||
#: cps/web.py:2657
|
||||
msgid "Unknown"
|
||||
msgstr "未知"
|
||||
|
||||
#: cps/web.py:2671
|
||||
#: cps/web.py:2794
|
||||
msgid "Admin page"
|
||||
msgstr "管理页"
|
||||
|
||||
#: cps/web.py:2749 cps/web.py:2922
|
||||
#: cps/web.py:2872 cps/web.py:3045
|
||||
msgid "Calibre-Web configuration updated"
|
||||
msgstr "Calibre-Web配置已更新"
|
||||
|
||||
#: cps/templates/admin.html:91 cps/web.py:2762
|
||||
#: cps/templates/admin.html:100 cps/web.py:2885
|
||||
msgid "UI Configuration"
|
||||
msgstr "UI配置"
|
||||
|
||||
#: cps/web.py:2780
|
||||
#: cps/web.py:2903
|
||||
msgid "Import of optional Google Drive requirements missing"
|
||||
msgstr "可选的Google Drive依赖导入缺失"
|
||||
|
||||
#: cps/web.py:2783
|
||||
#: cps/web.py:2906
|
||||
msgid "client_secrets.json is missing or not readable"
|
||||
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"
|
||||
msgstr "没有为web应用配置client_secrets.json"
|
||||
|
||||
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856
|
||||
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937
|
||||
#: cps/web.py:2954
|
||||
#: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
|
||||
#: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
|
||||
#: cps/web.py:3077
|
||||
msgid "Basic Configuration"
|
||||
msgstr "基本配置"
|
||||
|
||||
#: cps/web.py:2841
|
||||
#: cps/web.py:2964
|
||||
msgid "Keyfile location is not valid, please enter correct path"
|
||||
msgstr "key文件位置无效,请输入正确路径"
|
||||
|
||||
#: cps/web.py:2853
|
||||
#: cps/web.py:2976
|
||||
msgid "Certfile location is not valid, please enter correct path"
|
||||
msgstr "证书文件位置无效,请输入正确路径"
|
||||
|
||||
#: cps/web.py:2895
|
||||
#: cps/web.py:3018
|
||||
msgid "Logfile location is not valid, please enter correct path"
|
||||
msgstr "日志文件位置无效,请输入正确路径"
|
||||
|
||||
#: cps/web.py:2934
|
||||
#: cps/web.py:3057
|
||||
msgid "DB location is not valid, please enter correct path"
|
||||
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"
|
||||
msgstr "添加新用户"
|
||||
|
||||
#: cps/web.py:3020
|
||||
#: cps/web.py:3143
|
||||
#, python-format
|
||||
msgid "User '%(user)s' created"
|
||||
msgstr "用户 '%(user)s' 已被创建"
|
||||
|
||||
#: cps/web.py:3024
|
||||
#: cps/web.py:3147
|
||||
msgid "Found an existing account for this e-mail address or nickname."
|
||||
msgstr "此邮箱或昵称的账号已经存在。"
|
||||
|
||||
#: cps/web.py:3048 cps/web.py:3062
|
||||
#: cps/web.py:3171 cps/web.py:3185
|
||||
msgid "E-mail server settings updated"
|
||||
msgstr "已更新邮件服务器设置"
|
||||
|
||||
#: cps/web.py:3055
|
||||
#: cps/web.py:3178
|
||||
#, python-format
|
||||
msgid "Test e-mail successfully send to %(kindlemail)s"
|
||||
msgstr "测试邮件已经被成功发到 %(kindlemail)s"
|
||||
|
||||
#: cps/web.py:3058
|
||||
#: cps/web.py:3181
|
||||
#, python-format
|
||||
msgid "There was an error sending the Test e-mail: %(res)s"
|
||||
msgstr "发送测试邮件出错了: %(res)s"
|
||||
|
||||
#: cps/web.py:3063
|
||||
#: cps/web.py:3186
|
||||
msgid "Edit e-mail server settings"
|
||||
msgstr "编辑邮箱服务器设置"
|
||||
|
||||
#: cps/web.py:3088
|
||||
#: cps/web.py:3211
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' deleted"
|
||||
msgstr "用户 '%(nick)s' 已被删除"
|
||||
|
||||
#: cps/web.py:3197
|
||||
#: cps/web.py:3320
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr "用户 '%(nick)s' 已被更新"
|
||||
|
||||
#: cps/web.py:3200
|
||||
#: cps/web.py:3323
|
||||
msgid "An unknown error occured."
|
||||
msgstr "发生未知错误。"
|
||||
|
||||
#: cps/web.py:3202
|
||||
#: cps/web.py:3325
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "编辑用户 %(nick)s"
|
||||
|
||||
#: cps/web.py:3219
|
||||
#: cps/web.py:3342
|
||||
#, python-format
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr "用户 %(user)s 的密码已重置"
|
||||
|
||||
#: cps/web.py:3239
|
||||
#: cps/web.py:3362
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible"
|
||||
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"
|
||||
msgstr "编辑元数据"
|
||||
|
||||
#: cps/web.py:3284 cps/web.py:3576
|
||||
#: cps/web.py:3401 cps/web.py:3697
|
||||
#, python-format
|
||||
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
|
||||
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"
|
||||
msgstr "要上传的文件必须有一个后缀"
|
||||
|
||||
#: cps/web.py:3300 cps/web.py:3600
|
||||
#: cps/web.py:3417 cps/web.py:3721
|
||||
#, python-format
|
||||
msgid "Failed to create path %(path)s (Permission denied)."
|
||||
msgstr "创建路径 %(path)s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/web.py:3305
|
||||
#: cps/web.py:3422
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s."
|
||||
msgstr "保存文件 %(file)s 失败。"
|
||||
|
||||
#: cps/web.py:3321
|
||||
#: cps/web.py:3438
|
||||
#, python-format
|
||||
msgid "File format %(ext)s added to %(book)s"
|
||||
msgstr "已添加 %(ext)s 格式到 %(book)s"
|
||||
|
||||
#: cps/web.py:3339
|
||||
#: cps/web.py:3455
|
||||
#, python-format
|
||||
msgid "Failed to create path for cover %(path)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3346
|
||||
#: cps/web.py:3462
|
||||
#, python-format
|
||||
msgid "Failed to store cover-file %(cover)s."
|
||||
msgstr "保存封面文件 %(cover)s 失败。"
|
||||
|
||||
#: cps/web.py:3349
|
||||
#: cps/web.py:3465
|
||||
msgid "Cover-file is not a valid image file"
|
||||
msgstr "封面文件不是一个有效的图片文件"
|
||||
|
||||
#: cps/web.py:3362 cps/web.py:3366
|
||||
#: cps/web.py:3482 cps/web.py:3486
|
||||
msgid "unknown"
|
||||
msgstr "未知"
|
||||
|
||||
#: cps/web.py:3388
|
||||
#: cps/web.py:3508
|
||||
msgid "Cover is not a jpg file, can't save"
|
||||
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"
|
||||
msgstr "编辑书籍出错,详情请检查日志文件"
|
||||
|
||||
#: cps/web.py:3605
|
||||
#: cps/web.py:3726
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s (Permission denied)."
|
||||
msgstr "存储文件 %(file)s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/web.py:3610
|
||||
#: cps/web.py:3731
|
||||
#, python-format
|
||||
msgid "Failed to delete file %(file)s (Permission denied)."
|
||||
msgstr "删除文件 %(file)s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/web.py:3692
|
||||
#: cps/web.py:3813
|
||||
#, python-format
|
||||
msgid "File %(file)s uploaded"
|
||||
msgstr "文件 %(file)s 已上传"
|
||||
|
||||
#: cps/web.py:3722
|
||||
#: cps/web.py:3843
|
||||
msgid "Source or destination format for conversion missing"
|
||||
msgstr "转换的源或目的格式缺失"
|
||||
|
||||
#: cps/web.py:3732
|
||||
#: cps/web.py:3853
|
||||
#, python-format
|
||||
msgid "Book successfully queued for converting to %(book_format)s"
|
||||
msgstr "书籍已经被成功加入 %(book_format)s 的转换队列"
|
||||
|
||||
#: cps/web.py:3736
|
||||
#: cps/web.py:3857
|
||||
#, python-format
|
||||
msgid "There was an error converting this book: %(res)s"
|
||||
msgstr "转换此书时出现错误: %(res)s"
|
||||
|
||||
#: cps/worker.py:215 cps/worker.py:387
|
||||
#: cps/worker.py:215 cps/worker.py:398
|
||||
msgid "Started"
|
||||
msgstr "已开始"
|
||||
|
||||
#: cps/worker.py:237
|
||||
#: cps/worker.py:251
|
||||
#, python-format
|
||||
msgid "Convertertool %(converter)s not found"
|
||||
msgstr "找不到转换工具 $(converter)s"
|
||||
|
||||
#: cps/worker.py:272
|
||||
#: cps/worker.py:287
|
||||
#, python-format
|
||||
msgid "Ebook-converter failed: %(error)s"
|
||||
msgstr "电子书转换器失败: %(error)s"
|
||||
|
||||
#: cps/worker.py:283
|
||||
#: cps/worker.py:298
|
||||
#, python-format
|
||||
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
|
||||
msgstr "Kindlegen 因为错误 %(error)s 失败。消息: %(message)s"
|
||||
|
||||
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438
|
||||
msgid "Finished"
|
||||
msgstr "已完成"
|
||||
|
||||
#: cps/worker.py:344 cps/worker.py:363
|
||||
#: cps/worker.py:355 cps/worker.py:374
|
||||
msgid "Waiting"
|
||||
msgstr "等待中"
|
||||
|
||||
#: cps/worker.py:351
|
||||
#: cps/worker.py:362
|
||||
msgid "This e-mail has been sent via 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"
|
||||
msgstr "失败"
|
||||
|
||||
#: cps/templates/admin.html:4
|
||||
#: cps/templates/admin.html:6
|
||||
msgid "User list"
|
||||
msgstr "用户列表"
|
||||
|
||||
#: cps/templates/admin.html:7
|
||||
#: cps/templates/admin.html:9
|
||||
msgid "Nickname"
|
||||
msgstr "昵称"
|
||||
|
||||
#: cps/templates/admin.html:8
|
||||
#: cps/templates/admin.html:10
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:9
|
||||
#: cps/templates/admin.html:11
|
||||
msgid "Kindle"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:10
|
||||
#: cps/templates/admin.html:12
|
||||
msgid "DLS"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:11 cps/templates/layout.html:74
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:74
|
||||
msgid "Admin"
|
||||
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
|
||||
msgid "Download"
|
||||
msgstr "下载"
|
||||
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:64
|
||||
#: cps/templates/admin.html:15 cps/templates/layout.html:64
|
||||
msgid "Upload"
|
||||
msgstr "上传"
|
||||
|
||||
#: cps/templates/admin.html:14
|
||||
#: cps/templates/admin.html:16
|
||||
msgid "Edit"
|
||||
msgstr "编辑"
|
||||
|
||||
#: cps/templates/admin.html:32
|
||||
#: cps/templates/admin.html:39
|
||||
msgid "SMTP e-mail server settings"
|
||||
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"
|
||||
msgstr "SMTP地址"
|
||||
|
||||
#: cps/templates/admin.html:36
|
||||
#: cps/templates/admin.html:43
|
||||
msgid "SMTP port"
|
||||
msgstr "SMTP端口"
|
||||
|
||||
#: cps/templates/admin.html:37
|
||||
#: cps/templates/admin.html:44
|
||||
msgid "SSL"
|
||||
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"
|
||||
msgstr "SMTP用户名"
|
||||
|
||||
#: cps/templates/admin.html:39
|
||||
#: cps/templates/admin.html:46
|
||||
msgid "From mail"
|
||||
msgstr "来自邮箱"
|
||||
|
||||
#: cps/templates/admin.html:48
|
||||
#: cps/templates/admin.html:56
|
||||
msgid "Change SMTP settings"
|
||||
msgstr "修改SMTP设置"
|
||||
|
||||
#: cps/templates/admin.html:50
|
||||
#: cps/templates/admin.html:62
|
||||
msgid "Configuration"
|
||||
msgstr "配置"
|
||||
|
||||
#: cps/templates/admin.html:53
|
||||
#: cps/templates/admin.html:65
|
||||
msgid "Calibre DB dir"
|
||||
msgstr "Calibre DB目录"
|
||||
|
||||
#: cps/templates/admin.html:57
|
||||
#: cps/templates/admin.html:69
|
||||
msgid "Log level"
|
||||
msgstr "日志级别"
|
||||
|
||||
#: cps/templates/admin.html:61
|
||||
#: cps/templates/admin.html:73
|
||||
msgid "Port"
|
||||
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"
|
||||
msgstr "每页书籍数"
|
||||
|
||||
#: cps/templates/admin.html:71
|
||||
#: cps/templates/admin.html:83
|
||||
msgid "Uploading"
|
||||
msgstr "上传"
|
||||
|
||||
#: cps/templates/admin.html:75
|
||||
#: cps/templates/admin.html:87
|
||||
msgid "Anonymous browsing"
|
||||
msgstr "匿名浏览"
|
||||
|
||||
#: cps/templates/admin.html:79
|
||||
#: cps/templates/admin.html:91
|
||||
msgid "Public registration"
|
||||
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"
|
||||
msgstr "远程登录"
|
||||
|
||||
#: cps/templates/admin.html:93
|
||||
#: cps/templates/admin.html:106
|
||||
msgid "Administration"
|
||||
msgstr "管理"
|
||||
|
||||
#: cps/templates/admin.html:94
|
||||
msgid "Current commit timestamp"
|
||||
msgstr "当前提交时间戳"
|
||||
|
||||
#: cps/templates/admin.html:95
|
||||
msgid "Newest commit timestamp"
|
||||
msgstr "最新提交时间戳"
|
||||
|
||||
#: cps/templates/admin.html:97
|
||||
#: cps/templates/admin.html:107
|
||||
msgid "Reconnect to Calibre DB"
|
||||
msgstr "重新连接到Calibre数据库"
|
||||
|
||||
#: cps/templates/admin.html:98
|
||||
#: cps/templates/admin.html:108
|
||||
msgid "Restart Calibre-Web"
|
||||
msgstr "重启 Calibre-Web"
|
||||
|
||||
#: cps/templates/admin.html:99
|
||||
#: cps/templates/admin.html:109
|
||||
msgid "Stop 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"
|
||||
msgstr "检查更新"
|
||||
|
||||
#: cps/templates/admin.html:101
|
||||
#: cps/templates/admin.html:133
|
||||
msgid "Perform Update"
|
||||
msgstr "执行更新"
|
||||
|
||||
#: cps/templates/admin.html:110
|
||||
#: cps/templates/admin.html:145
|
||||
msgid "Do you really want to restart Calibre-Web?"
|
||||
msgstr "您确定要重启 Calibre-Web 吗?"
|
||||
|
||||
#: cps/templates/admin.html:115 cps/templates/admin.html:129
|
||||
#: cps/templates/admin.html:150 cps/templates/shelf.html:59
|
||||
#: cps/templates/admin.html:150 cps/templates/admin.html:164
|
||||
#: cps/templates/admin.html:184 cps/templates/shelf.html:59
|
||||
msgid "Ok"
|
||||
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/config_edit.html:212 cps/templates/config_view_edit.html:164
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
|
||||
@ -831,11 +866,11 @@ msgstr "确定"
|
||||
msgid "Back"
|
||||
msgstr "后退"
|
||||
|
||||
#: cps/templates/admin.html:128
|
||||
#: cps/templates/admin.html:163
|
||||
msgid "Do you really want to stop Calibre-Web?"
|
||||
msgstr "您确定要关闭 Calibre-Web 吗?"
|
||||
|
||||
#: cps/templates/admin.html:141
|
||||
#: cps/templates/admin.html:175
|
||||
msgid "Updating, please do not reload page"
|
||||
msgstr "正在更新,请不要刷新页面"
|
||||
|
||||
@ -916,9 +951,7 @@ msgid "Rating"
|
||||
msgstr "评分"
|
||||
|
||||
#: cps/templates/book_edit.html:87
|
||||
msgid ""
|
||||
"Cover URL (jpg, cover is downloaded and stored in database, field is "
|
||||
"afterwards empty again)"
|
||||
msgid "Cover URL (jpg, cover is downloaded and stored in database, field is afterwards empty again)"
|
||||
msgstr "封面URL(jpg,封面会被下载被保存在数据库中,然后字段会被重新清空)"
|
||||
|
||||
#: 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"
|
||||
#~ msgstr "将标题从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Rename author from: '%(src)s' to "
|
||||
#~ "'%(dest)s' failed with error: %(error)s"
|
||||
#~ msgid "Rename author from: '%(src)s' to '%(dest)s' failed with error: %(error)s"
|
||||
#~ msgstr "将作者从'%(src)s'改为'%(dest)s'时失败,出错信息: %(error)s"
|
||||
|
||||
#~ 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"
|
||||
#~ msgstr "不能上传后缀为 \"%(ext)s\" 的文件到此服务器"
|
||||
|
||||
#~ msgid "Current commit timestamp"
|
||||
#~ msgstr "当前提交时间戳"
|
||||
|
||||
#~ msgid "Newest commit timestamp"
|
||||
#~ msgstr "最新提交时间戳"
|
||||
|
||||
|
132
cps/web.py
132
cps/web.py
@ -41,6 +41,8 @@ from flask import (Flask, render_template, request, Response, redirect,
|
||||
url_for, send_from_directory, make_response, g, flash,
|
||||
abort, Markup)
|
||||
from flask import __version__ as flaskVersion
|
||||
from werkzeug import __version__ as werkzeugVersion
|
||||
from jinja2 import __version__ as jinja2Version
|
||||
import cache_buster
|
||||
import ub
|
||||
from ub import config
|
||||
@ -85,6 +87,10 @@ import hashlib
|
||||
from redirect import redirect_back
|
||||
import time
|
||||
import server
|
||||
try:
|
||||
import cPickle
|
||||
except ImportError:
|
||||
import pickle as cPickle
|
||||
|
||||
try:
|
||||
from urllib.parse import quote
|
||||
@ -103,10 +109,12 @@ current_milli_time = lambda: int(round(time.time() * 1000))
|
||||
# Global variables
|
||||
gdrive_watch_callback_token = 'target=calibreweb-watch_files'
|
||||
|
||||
ALLOWED_EXTENSIONS = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx',
|
||||
'fb2'}
|
||||
# READER_EXTENSIONS = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt'] + (['rar','cbr'] if rar_support else []))
|
||||
# READER_EXTENSIONS = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt', 'rar', 'cbr'])
|
||||
EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx',
|
||||
'fb2', 'html', 'rtf', 'odt'}
|
||||
EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'html', 'rtf', 'odt'}
|
||||
|
||||
# EXTENSIONS_READER = set(['txt', 'pdf', 'epub', 'zip', 'cbz', 'tar', 'cbt'] + (['rar','cbr'] if rar_support else []))
|
||||
|
||||
|
||||
def md5(fname):
|
||||
hash_md5 = hashlib.md5()
|
||||
@ -183,7 +191,6 @@ logging.getLogger("book_formats").addHandler(file_handler)
|
||||
logging.getLogger("book_formats").setLevel(config.config_log_level)
|
||||
|
||||
Principal(app)
|
||||
|
||||
babel = Babel(app)
|
||||
|
||||
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')
|
||||
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():
|
||||
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):
|
||||
if isinstance(ext, db.Data):
|
||||
ext = ext.format
|
||||
return ext.lower() in READER_EXTENSIONS'''
|
||||
return ext.lower() in EXTENSIONS_READER'''
|
||||
|
||||
|
||||
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)
|
||||
elif db_type == 'custom':
|
||||
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)
|
||||
db_session.add(new_element)
|
||||
# add element to book
|
||||
@ -1036,9 +1046,14 @@ def get_tags_json():
|
||||
def get_languages_json():
|
||||
if request.method == "GET":
|
||||
query = request.args.get('q').lower()
|
||||
languages = speaking_language()
|
||||
entries = [s for s in languages if query in s.name.lower()]
|
||||
json_dumps = json.dumps([dict(name=r.name) for r in entries])
|
||||
# languages = speaking_language()
|
||||
languages = language_table[get_locale()]
|
||||
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
|
||||
|
||||
|
||||
@ -1149,7 +1164,7 @@ def get_update_status():
|
||||
|
||||
if 'committer' in update_data and 'message' in update_data:
|
||||
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(
|
||||
update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz
|
||||
@ -1652,8 +1667,10 @@ def stats():
|
||||
categorys = db.session.query(db.Tags).count()
|
||||
series = db.session.query(db.Series).count()
|
||||
versions = uploader.book_formats.get_versions()
|
||||
versions['Babel'] = 'v'+babelVersion
|
||||
versions['Sqlalchemy'] = 'v'+sqlalchemyVersion
|
||||
versions['Babel'] = 'v' + babelVersion
|
||||
versions['Sqlalchemy'] = 'v' + sqlalchemyVersion
|
||||
versions['Werkzeug'] = 'v' + werkzeugVersion
|
||||
versions['Jinja2'] = 'v' + jinja2Version
|
||||
versions['Flask'] = 'v'+flaskVersion
|
||||
versions['Flask Login'] = 'v'+flask_loginVersion
|
||||
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.series, db.Series, db.session, 'series')
|
||||
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()
|
||||
for c in cc:
|
||||
@ -2406,18 +2423,22 @@ def add_to_shelf(shelf_id, book_id):
|
||||
if shelf is None:
|
||||
app.logger.info("Invalid shelf specified")
|
||||
if not request.is_xhr:
|
||||
flash(_(u"Invalid shelf specified"), category="error")
|
||||
return redirect(url_for('index'))
|
||||
return "Invalid shelf specified", 400
|
||||
|
||||
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)
|
||||
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 "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():
|
||||
app.logger.info("User is not allowed to edit public shelves")
|
||||
if not request.is_xhr:
|
||||
flash(_(u"You are not allowed to edit public shelves"), category="error")
|
||||
return redirect(url_for('index'))
|
||||
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:
|
||||
app.logger.info("Book is already part of the shelf: %s" % shelf.name)
|
||||
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 "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()
|
||||
if not request.is_xhr:
|
||||
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
|
||||
|
||||
|
||||
@ -2637,7 +2662,12 @@ def show_shelf(shelf_id):
|
||||
ub.BookShelf.order.asc()).all()
|
||||
for book in books_in_shelf:
|
||||
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),
|
||||
shelf=shelf, page="shelf")
|
||||
else:
|
||||
@ -2993,7 +3023,8 @@ def configuration_helper(origin):
|
||||
if content.config_logfile != to_save["config_logfile"]:
|
||||
# check valid path, only path or file
|
||||
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"]
|
||||
else:
|
||||
ub.session.commit()
|
||||
@ -3041,8 +3072,6 @@ def configuration_helper(origin):
|
||||
gdriveError=gdriveError, goodreads=goodreads_support, rarfile_support=rar_support,
|
||||
title=_(u"Basic Configuration"), page="config")
|
||||
if reboot_required:
|
||||
# ub.session.close()
|
||||
# ub.engine.dispose()
|
||||
# stop Server
|
||||
server.Server.setRestartTyp(True)
|
||||
server.Server.stopServer()
|
||||
@ -3092,6 +3121,11 @@ def new_user():
|
||||
content.sidebar_view += ub.SIDEBAR_AUTHOR
|
||||
if "show_detail_random" in to_save:
|
||||
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
|
||||
if "admin_role" in to_save:
|
||||
content.role = content.role + ub.ROLE_ADMIN
|
||||
@ -3345,22 +3379,19 @@ def edit_book(book_id):
|
||||
return redirect(url_for("index"))
|
||||
|
||||
for indx in range(0, len(book.languages)):
|
||||
try:
|
||||
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)
|
||||
book.languages[indx].language_name = language_table[get_locale()][book.languages[indx].lang_code]
|
||||
for authr in book.authors:
|
||||
author_names.append(authr.name.replace('|', ','))
|
||||
|
||||
# Option for showing convertbook button
|
||||
valid_source_formats=list()
|
||||
if config.config_ebookconverter == 2:
|
||||
display_convertbtn = True
|
||||
else:
|
||||
display_convertbtn = False
|
||||
for file in book.data:
|
||||
if file.format.lower() in EXTENSIONS_CONVERT:
|
||||
valid_source_formats.append(file.format.lower())
|
||||
|
||||
# Determine what formats don't already exist
|
||||
allowed_conversion_formats = ALLOWED_EXTENSIONS.copy()
|
||||
allowed_conversion_formats = EXTENSIONS_CONVERT.copy()
|
||||
for file in book.data:
|
||||
try:
|
||||
allowed_conversion_formats.remove(file.format.lower())
|
||||
@ -3372,12 +3403,9 @@ def edit_book(book_id):
|
||||
# Show form
|
||||
if request.method != 'POST':
|
||||
return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc,
|
||||
title=_(u"edit metadata"), page="editbook", display_convertbtn=display_convertbtn,
|
||||
conversion_formats=allowed_conversion_formats)
|
||||
|
||||
# Update book
|
||||
edited_books_id = set()
|
||||
|
||||
title=_(u"edit metadata"), page="editbook",
|
||||
conversion_formats=allowed_conversion_formats,
|
||||
source_formats=valid_source_formats)
|
||||
# Check and handle Uploaded file
|
||||
if 'btn-upload-format' in request.files:
|
||||
requested_file = request.files['btn-upload-format']
|
||||
@ -3385,7 +3413,7 @@ def edit_book(book_id):
|
||||
if requested_file.filename != '':
|
||||
if '.' in requested_file.filename:
|
||||
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),
|
||||
category="error")
|
||||
return redirect(url_for('show_book', book_id=book.id))
|
||||
@ -3432,7 +3460,6 @@ def edit_book(book_id):
|
||||
# check for empty request
|
||||
if requested_file.filename != '':
|
||||
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))
|
||||
saved_filename = os.path.join(filepath, 'cover.' + file_ext)
|
||||
|
||||
@ -3456,10 +3483,14 @@ def edit_book(book_id):
|
||||
to_save = request.form.to_dict()
|
||||
|
||||
try:
|
||||
# Update book
|
||||
edited_books_id = set()
|
||||
#handle book title
|
||||
if book.title != to_save["book_title"]:
|
||||
book.title = to_save["book_title"]
|
||||
edited_books_id.add(book.id)
|
||||
|
||||
# handle author(s)
|
||||
input_authors = to_save["author_name"].split('&')
|
||||
input_authors = list(map(lambda it: it.strip().replace(',', '|'), input_authors))
|
||||
# we have all author names now
|
||||
@ -3495,22 +3526,22 @@ def edit_book(book_id):
|
||||
if book.series_index != to_save["series_index"]:
|
||||
book.series_index = to_save["series_index"]
|
||||
|
||||
# Handle book comments/description
|
||||
if len(book.comments):
|
||||
book.comments[0].text = to_save["description"]
|
||||
else:
|
||||
book.comments.append(db.Comments(text=to_save["description"], book=book.id))
|
||||
|
||||
# Handle book tags
|
||||
input_tags = to_save["tags"].split(',')
|
||||
input_tags = list(map(lambda it: it.strip(), input_tags))
|
||||
modify_database_object(input_tags, book.tags, db.Tags, db.session, 'tags')
|
||||
|
||||
# Handle book series
|
||||
input_series = [to_save["series"].strip()]
|
||||
input_series = [x for x in input_series if x != '']
|
||||
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"]:
|
||||
try:
|
||||
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
|
||||
else:
|
||||
book.pubdate = db.Books.DEFAULT_PUBDATE
|
||||
|
||||
'''if len(book.publishers):
|
||||
if to_save["publisher"] != book.publishers[0].name:
|
||||
modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series')
|
||||
else:
|
||||
modify_database_object(to_save["publisher"], book.publishers, db.Publishers, db.session, 'series')'''
|
||||
|
||||
# retranslate displayed text to language codes
|
||||
languages = db.session.query(db.Languages).all()
|
||||
# handle book languages
|
||||
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 = []
|
||||
for lang in languages:
|
||||
invers_lang_table = [x.lower() for x in language_table[get_locale()].values()]
|
||||
for lang in input_languages:
|
||||
try:
|
||||
lang.name = LC.parse(lang.lang_code).get_language_name(get_locale()).lower()
|
||||
except UnknownLocaleError:
|
||||
lang.name = _(isoLanguages.get(part3=lang.lang_code).name).lower()
|
||||
for inp_lang in input_languages:
|
||||
if inp_lang == lang.name:
|
||||
input_l.append(lang.lang_code)
|
||||
res = list(language_table[get_locale()].keys())[invers_lang_table.index(lang)]
|
||||
input_l.append(res)
|
||||
except ValueError:
|
||||
app.logger.error('%s is not a valid language' % lang)
|
||||
flash(_(u"%(langname)s is not a valid language", langname=lang), category="error")
|
||||
modify_database_object(input_l, book.languages, db.Languages, db.session, 'languages')
|
||||
|
||||
if to_save["rating"].strip():
|
||||
@ -3676,7 +3708,7 @@ def upload():
|
||||
# check if file extension is correct
|
||||
if '.' in requested_file.filename:
|
||||
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), category="error")
|
||||
|
@ -232,10 +232,25 @@ class WorkerThread(threading.Thread):
|
||||
bookid = self.queue[self.current]['bookid']
|
||||
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()
|
||||
|
||||
# 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
|
||||
if not os.path.exists(web.ub.config.config_converterpath):
|
||||
self._handleError(_(u"Convertertool %(converter)s not found", converter=web.ub.config.config_converterpath))
|
||||
return
|
||||
|
||||
try:
|
||||
# check which converter to use kindlegen is "1"
|
||||
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
|
||||
if web.ub.config.config_use_google_drive:
|
||||
os.remove(file_path + format_old_ext)
|
||||
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'])
|
||||
self._handleSuccess()
|
||||
return file_path + format_new_ext
|
||||
else:
|
||||
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.sendmail(obj['settings']["mail_from"], obj['recipent'], msg)
|
||||
self.asyncSMTP.quit()
|
||||
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'])
|
||||
|
||||
self._handleSuccess()
|
||||
sys.stderr = org_stderr
|
||||
|
||||
except (MemoryError) as e:
|
||||
@ -452,8 +458,6 @@ class WorkerThread(threading.Thread):
|
||||
self._handleError(u'Error sending email: ' + e.strerror)
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def _formatRuntime(self, runtime):
|
||||
self.UIqueue[self.current]['rt'] = runtime.total_seconds()
|
||||
val = re.split('\:|\.', str(runtime))[0:3]
|
||||
@ -475,8 +479,15 @@ class WorkerThread(threading.Thread):
|
||||
datetime.now() - self.queue[self.current]['starttime'])
|
||||
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):
|
||||
|
||||
buffer = ''
|
||||
|
425
messages.pot
425
messages.pot
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -113,705 +113,750 @@ msgstr ""
|
||||
msgid "Unrar binary file not found"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1114
|
||||
msgid "Requesting update package"
|
||||
#: cps/web.py:1112 cps/web.py:2778
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1115
|
||||
msgid "Downloading update package"
|
||||
#: cps/web.py:1121 cps/web.py:1152
|
||||
msgid "HTTP Error"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1116
|
||||
msgid "Unzipping update package"
|
||||
#: cps/web.py:1123 cps/web.py:1154
|
||||
msgid "Connection error"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1117
|
||||
msgid "Files are replaced"
|
||||
#: cps/web.py:1125 cps/web.py:1156
|
||||
msgid "Timeout while establishing connection"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1118
|
||||
msgid "Database connections are closed"
|
||||
#: cps/web.py:1127 cps/web.py:1158
|
||||
msgid "General error"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1119
|
||||
msgid "Server is stopped"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1120
|
||||
msgid "Update finished, please press okay and reload page"
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1231
|
||||
msgid "Downloading update package"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1232
|
||||
msgid "Unzipping update package"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1233
|
||||
msgid "Files are replaced"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1234
|
||||
msgid "Database connections are closed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1235
|
||||
msgid "Server is stopped"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1236
|
||||
msgid "Update finished, please press okay and reload page"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1256
|
||||
msgid "Recently Added Books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1150
|
||||
#: cps/web.py:1266
|
||||
msgid "Newest Books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1162
|
||||
#: cps/web.py:1278
|
||||
msgid "Oldest Books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1174
|
||||
#: cps/web.py:1290
|
||||
msgid "Books (A-Z)"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1185
|
||||
#: cps/web.py:1301
|
||||
msgid "Books (Z-A)"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1214
|
||||
#: cps/web.py:1330
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1227
|
||||
#: cps/web.py:1343
|
||||
msgid "Best rated books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/index.xml:36 cps/web.py:1239
|
||||
#: cps/templates/index.xml:36 cps/web.py:1355
|
||||
msgid "Random Books"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1254
|
||||
#: cps/web.py:1370
|
||||
msgid "Author list"
|
||||
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:"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/index.xml:73 cps/web.py:1313
|
||||
#: cps/templates/index.xml:73 cps/web.py:1429
|
||||
msgid "Series list"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1327
|
||||
#: cps/web.py:1443
|
||||
#, python-format
|
||||
msgid "Series: %(serie)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1354
|
||||
#: cps/web.py:1470
|
||||
msgid "Available languages"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1371
|
||||
#: cps/web.py:1487
|
||||
#, python-format
|
||||
msgid "Language: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/index.xml:66 cps/web.py:1382
|
||||
#: cps/templates/index.xml:66 cps/web.py:1498
|
||||
msgid "Category list"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1396
|
||||
#: cps/web.py:1512
|
||||
#, python-format
|
||||
msgid "Category: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/layout.html:71 cps/web.py:1535
|
||||
#: cps/templates/layout.html:71 cps/web.py:1651
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1565
|
||||
#: cps/web.py:1681
|
||||
msgid "Statistics"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1746
|
||||
#: cps/web.py:1861
|
||||
msgid "Server restarted, please reload page"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1749
|
||||
#: cps/web.py:1864
|
||||
msgid "Performing shutdown of server, please close window"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1767
|
||||
#: cps/web.py:1883
|
||||
msgid "Update done"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1837
|
||||
#: cps/web.py:1953
|
||||
msgid "Published after "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1844
|
||||
#: cps/web.py:1960
|
||||
msgid "Published before "
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1858
|
||||
#: cps/web.py:1974
|
||||
#, python-format
|
||||
msgid "Rating <= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1860
|
||||
#: cps/web.py:1976
|
||||
#, python-format
|
||||
msgid "Rating >= %(rating)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:1919 cps/web.py:1928
|
||||
#: cps/web.py:2035 cps/web.py:2044
|
||||
msgid "search"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2128 cps/web.py:3006
|
||||
#: cps/web.py:2244 cps/web.py:3129
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2129 cps/web.py:2150 cps/web.py:2154 cps/web.py:2159
|
||||
#: cps/web.py:2161
|
||||
#: cps/web.py:2245 cps/web.py:2266 cps/web.py:2270 cps/web.py:2275
|
||||
#: cps/web.py:2277
|
||||
msgid "register"
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2152
|
||||
#: cps/web.py:2268
|
||||
msgid "Your e-mail is not allowed to register"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2155
|
||||
#: cps/web.py:2271
|
||||
msgid "Confirmation e-mail was send to your e-mail account."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2158
|
||||
#: cps/web.py:2274
|
||||
msgid "This username or e-mail address is already in use."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2175 cps/web.py:2271
|
||||
#: cps/web.py:2291 cps/web.py:2387
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2180
|
||||
#: cps/web.py:2296
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2186 cps/web.py:2207
|
||||
#: cps/web.py:2302 cps/web.py:2323
|
||||
msgid "login"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2219 cps/web.py:2250
|
||||
#: cps/web.py:2335 cps/web.py:2366
|
||||
msgid "Token not found"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2227 cps/web.py:2258
|
||||
#: cps/web.py:2343 cps/web.py:2374
|
||||
msgid "Token has expired"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2235
|
||||
#: cps/web.py:2351
|
||||
msgid "Success! Please return to your device"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2285
|
||||
#: cps/web.py:2401
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2289
|
||||
#: cps/web.py:2405
|
||||
#, python-format
|
||||
msgid "Book successfully queued for sending to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2293
|
||||
#: cps/web.py:2409
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
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..."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2339
|
||||
#: cps/web.py:2455
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2350
|
||||
#: cps/web.py:2466
|
||||
msgid "Invalid shelf specified"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2355
|
||||
#: cps/web.py:2471
|
||||
#, python-format
|
||||
msgid "You are not allowed to add a book to the the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2360
|
||||
#: cps/web.py:2476
|
||||
msgid "User is not allowed to edit public shelves"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2378
|
||||
#: cps/web.py:2494
|
||||
#, python-format
|
||||
msgid "Books are already part of the shelf: %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2392
|
||||
#: cps/web.py:2508
|
||||
#, python-format
|
||||
msgid "Books have been added to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2394
|
||||
#: cps/web.py:2510
|
||||
#, python-format
|
||||
msgid "Could not add books to shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2431
|
||||
#: cps/web.py:2547
|
||||
#, python-format
|
||||
msgid "Book has been removed from shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2437
|
||||
#: cps/web.py:2553
|
||||
#, python-format
|
||||
msgid "Sorry you are not allowed to remove a book from this shelf: %(sname)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2457 cps/web.py:2481
|
||||
#: cps/web.py:2573 cps/web.py:2597
|
||||
#, python-format
|
||||
msgid "A shelf with the name '%(title)s' already exists."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2462
|
||||
#: cps/web.py:2578
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s created"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2464 cps/web.py:2492
|
||||
#: cps/web.py:2580 cps/web.py:2608
|
||||
msgid "There was an error"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2465 cps/web.py:2467
|
||||
#: cps/web.py:2581 cps/web.py:2583
|
||||
msgid "create a shelf"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2490
|
||||
#: cps/web.py:2606
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s changed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2493 cps/web.py:2495
|
||||
#: cps/web.py:2609 cps/web.py:2611
|
||||
msgid "Edit a shelf"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2516
|
||||
#: cps/web.py:2632
|
||||
#, python-format
|
||||
msgid "successfully deleted shelf %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2538
|
||||
#: cps/web.py:2659
|
||||
#, python-format
|
||||
msgid "Shelf: '%(name)s'"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2541
|
||||
#: cps/web.py:2662
|
||||
msgid "Error opening shelf. Shelf does not exist or is not accessible"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2572
|
||||
#: cps/web.py:2693
|
||||
#, python-format
|
||||
msgid "Change order of Shelf: '%(name)s'"
|
||||
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"
|
||||
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
|
||||
msgid "%(name)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2642
|
||||
#: cps/web.py:2763
|
||||
msgid "Found an existing account for this e-mail address."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2645
|
||||
#: cps/web.py:2766
|
||||
msgid "Profile updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2657
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2671
|
||||
#: cps/web.py:2794
|
||||
msgid "Admin page"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2749 cps/web.py:2922
|
||||
#: cps/web.py:2872 cps/web.py:3045
|
||||
msgid "Calibre-Web configuration updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:91 cps/web.py:2762
|
||||
#: cps/templates/admin.html:100 cps/web.py:2885
|
||||
msgid "UI Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2780
|
||||
#: cps/web.py:2903
|
||||
msgid "Import of optional Google Drive requirements missing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2783
|
||||
#: cps/web.py:2906
|
||||
msgid "client_secrets.json is missing or not readable"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:90 cps/web.py:2818 cps/web.py:2844 cps/web.py:2856
|
||||
#: cps/web.py:2898 cps/web.py:2913 cps/web.py:2930 cps/web.py:2937
|
||||
#: cps/web.py:2954
|
||||
#: cps/templates/admin.html:99 cps/web.py:2941 cps/web.py:2967 cps/web.py:2979
|
||||
#: cps/web.py:3021 cps/web.py:3036 cps/web.py:3053 cps/web.py:3060
|
||||
#: cps/web.py:3077
|
||||
msgid "Basic Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2841
|
||||
#: cps/web.py:2964
|
||||
msgid "Keyfile location is not valid, please enter correct path"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2853
|
||||
#: cps/web.py:2976
|
||||
msgid "Certfile location is not valid, please enter correct path"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2895
|
||||
#: cps/web.py:3018
|
||||
msgid "Logfile location is not valid, please enter correct path"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:2934
|
||||
#: cps/web.py:3057
|
||||
msgid "DB location is not valid, please enter correct path"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3020
|
||||
#: cps/web.py:3143
|
||||
#, python-format
|
||||
msgid "User '%(user)s' created"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3024
|
||||
#: cps/web.py:3147
|
||||
msgid "Found an existing account for this e-mail address or nickname."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3048 cps/web.py:3062
|
||||
#: cps/web.py:3171 cps/web.py:3185
|
||||
msgid "E-mail server settings updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3055
|
||||
#: cps/web.py:3178
|
||||
#, python-format
|
||||
msgid "Test e-mail successfully send to %(kindlemail)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3058
|
||||
#: cps/web.py:3181
|
||||
#, python-format
|
||||
msgid "There was an error sending the Test e-mail: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3063
|
||||
#: cps/web.py:3186
|
||||
msgid "Edit e-mail server settings"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3088
|
||||
#: cps/web.py:3211
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' deleted"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3197
|
||||
#: cps/web.py:3320
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3200
|
||||
#: cps/web.py:3323
|
||||
msgid "An unknown error occured."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3202
|
||||
#: cps/web.py:3325
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3219
|
||||
#: cps/web.py:3342
|
||||
#, python-format
|
||||
msgid "Password for user %(user)s reset"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3239
|
||||
#: cps/web.py:3362
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3284 cps/web.py:3576
|
||||
#: cps/web.py:3401 cps/web.py:3697
|
||||
#, python-format
|
||||
msgid "File extension '%(ext)s' is not allowed to be uploaded to this server"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3300 cps/web.py:3600
|
||||
#: cps/web.py:3417 cps/web.py:3721
|
||||
#, python-format
|
||||
msgid "Failed to create path %(path)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3305
|
||||
#: cps/web.py:3422
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3321
|
||||
#: cps/web.py:3438
|
||||
#, python-format
|
||||
msgid "File format %(ext)s added to %(book)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3339
|
||||
#: cps/web.py:3455
|
||||
#, python-format
|
||||
msgid "Failed to create path for cover %(path)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3346
|
||||
#: cps/web.py:3462
|
||||
#, python-format
|
||||
msgid "Failed to store cover-file %(cover)s."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3349
|
||||
#: cps/web.py:3465
|
||||
msgid "Cover-file is not a valid image file"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3362 cps/web.py:3366
|
||||
#: cps/web.py:3482 cps/web.py:3486
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3388
|
||||
#: cps/web.py:3508
|
||||
msgid "Cover is not a jpg file, can't save"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3605
|
||||
#: cps/web.py:3726
|
||||
#, python-format
|
||||
msgid "Failed to store file %(file)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3610
|
||||
#: cps/web.py:3731
|
||||
#, python-format
|
||||
msgid "Failed to delete file %(file)s (Permission denied)."
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3692
|
||||
#: cps/web.py:3813
|
||||
#, python-format
|
||||
msgid "File %(file)s uploaded"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3722
|
||||
#: cps/web.py:3843
|
||||
msgid "Source or destination format for conversion missing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3732
|
||||
#: cps/web.py:3853
|
||||
#, python-format
|
||||
msgid "Book successfully queued for converting to %(book_format)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/web.py:3736
|
||||
#: cps/web.py:3857
|
||||
#, python-format
|
||||
msgid "There was an error converting this book: %(res)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:215 cps/worker.py:387
|
||||
#: cps/worker.py:215 cps/worker.py:398
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:237
|
||||
#: cps/worker.py:251
|
||||
#, python-format
|
||||
msgid "Convertertool %(converter)s not found"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:272
|
||||
#: cps/worker.py:287
|
||||
#, python-format
|
||||
msgid "Ebook-converter failed: %(error)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:283
|
||||
#: cps/worker.py:298
|
||||
#, python-format
|
||||
msgid "Kindlegen failed with Error %(error)s. Message: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:317 cps/worker.py:377 cps/worker.py:438
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:344 cps/worker.py:363
|
||||
#: cps/worker.py:355 cps/worker.py:374
|
||||
msgid "Waiting"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:351
|
||||
#: cps/worker.py:362
|
||||
msgid "This e-mail has been sent via Calibre-Web."
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:472
|
||||
#: cps/worker.py:388 cps/worker.py:484
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: cps/worker.py:476
|
||||
msgid "Failed"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:4
|
||||
#: cps/templates/admin.html:6
|
||||
msgid "User list"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:7
|
||||
#: cps/templates/admin.html:9
|
||||
msgid "Nickname"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:8
|
||||
#: cps/templates/admin.html:10
|
||||
msgid "E-mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:9
|
||||
#: cps/templates/admin.html:11
|
||||
msgid "Kindle"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:10
|
||||
#: cps/templates/admin.html:12
|
||||
msgid "DLS"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:11 cps/templates/layout.html:74
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:74
|
||||
msgid "Admin"
|
||||
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
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:64
|
||||
#: cps/templates/admin.html:15 cps/templates/layout.html:64
|
||||
msgid "Upload"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:14
|
||||
#: cps/templates/admin.html:16
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:32
|
||||
#: cps/templates/admin.html:39
|
||||
msgid "SMTP e-mail server settings"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:36
|
||||
#: cps/templates/admin.html:43
|
||||
msgid "SMTP port"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:37
|
||||
#: cps/templates/admin.html:44
|
||||
msgid "SSL"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:39
|
||||
#: cps/templates/admin.html:46
|
||||
msgid "From mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:48
|
||||
#: cps/templates/admin.html:56
|
||||
msgid "Change SMTP settings"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:50
|
||||
#: cps/templates/admin.html:62
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:53
|
||||
#: cps/templates/admin.html:65
|
||||
msgid "Calibre DB dir"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:57
|
||||
#: cps/templates/admin.html:69
|
||||
msgid "Log level"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:61
|
||||
#: cps/templates/admin.html:73
|
||||
msgid "Port"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:71
|
||||
#: cps/templates/admin.html:83
|
||||
msgid "Uploading"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:75
|
||||
#: cps/templates/admin.html:87
|
||||
msgid "Anonymous browsing"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:79
|
||||
#: cps/templates/admin.html:91
|
||||
msgid "Public registration"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:93
|
||||
#: cps/templates/admin.html:106
|
||||
msgid "Administration"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:94
|
||||
msgid "Current commit timestamp"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:95
|
||||
msgid "Newest commit timestamp"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:97
|
||||
#: cps/templates/admin.html:107
|
||||
msgid "Reconnect to Calibre DB"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:98
|
||||
#: cps/templates/admin.html:108
|
||||
msgid "Restart Calibre-Web"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:99
|
||||
#: cps/templates/admin.html:109
|
||||
msgid "Stop Calibre-Web"
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:101
|
||||
#: cps/templates/admin.html:133
|
||||
msgid "Perform Update"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:110
|
||||
#: cps/templates/admin.html:145
|
||||
msgid "Do you really want to restart Calibre-Web?"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:115 cps/templates/admin.html:129
|
||||
#: cps/templates/admin.html:150 cps/templates/shelf.html:59
|
||||
#: cps/templates/admin.html:150 cps/templates/admin.html:164
|
||||
#: cps/templates/admin.html:184 cps/templates/shelf.html:59
|
||||
msgid "Ok"
|
||||
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/config_edit.html:212 cps/templates/config_view_edit.html:164
|
||||
#: cps/templates/email_edit.html:40 cps/templates/email_edit.html:75
|
||||
@ -820,11 +865,11 @@ msgstr ""
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:128
|
||||
#: cps/templates/admin.html:163
|
||||
msgid "Do you really want to stop Calibre-Web?"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:141
|
||||
#: cps/templates/admin.html:175
|
||||
msgid "Updating, please do not reload page"
|
||||
msgstr ""
|
||||
|
||||
|
@ -15,6 +15,6 @@ six==1.10.0
|
||||
goodreads>=0.3.2
|
||||
python-Levenshtein>=0.12.0
|
||||
# other
|
||||
lxml==3.7.2
|
||||
lxml>=3.8.0
|
||||
rarfile>=2.7
|
||||
natsort>=2.2.0
|
||||
|
Loading…
Reference in New Issue
Block a user