merge conflicts
commit
f11b123686
@ -0,0 +1 @@
|
||||
web.py ident export-subst
|
@ -1,13 +0,0 @@
|
||||
[General]
|
||||
DB_ROOT =
|
||||
APP_DB_ROOT =
|
||||
MAIN_DIR =
|
||||
LOG_DIR =
|
||||
PORT = 8083
|
||||
NEWEST_BOOKS = 60
|
||||
[Advanced]
|
||||
TITLE_REGEX = ^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+
|
||||
DEVELOPMENT = 0
|
||||
PUBLIC_REG = 0
|
||||
UPLOADING = 0
|
||||
ANON_BROWSE = 0
|
@ -1,61 +1,30 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
from threading import Thread
|
||||
from multiprocessing import Queue
|
||||
import time
|
||||
|
||||
base_path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
# Insert local directories into path
|
||||
sys.path.insert(0, os.path.join(base_path, 'vendor'))
|
||||
|
||||
from cps import web
|
||||
from cps import config
|
||||
from tornado.wsgi import WSGIContainer
|
||||
from tornado.httpserver import HTTPServer
|
||||
from tornado.ioloop import IOLoop
|
||||
|
||||
global title_sort
|
||||
|
||||
|
||||
def start_calibreweb(messagequeue):
|
||||
web.global_queue = messagequeue
|
||||
if config.DEVELOPMENT:
|
||||
web.app.run(host="0.0.0.0", port=config.PORT, debug=True)
|
||||
if __name__ == '__main__':
|
||||
if web.ub.DEVELOPMENT:
|
||||
web.app.run(host="0.0.0.0", port=web.ub.config.config_port, debug=True)
|
||||
else:
|
||||
http_server = HTTPServer(WSGIContainer(web.app))
|
||||
http_server.listen(config.PORT)
|
||||
http_server.listen(web.ub.config.config_port)
|
||||
IOLoop.instance().start()
|
||||
print "Tornado finished"
|
||||
http_server.stop()
|
||||
|
||||
|
||||
def stop_calibreweb():
|
||||
# Close Database connections for user and data
|
||||
web.db.session.close()
|
||||
web.db.engine.dispose()
|
||||
web.ub.session.close()
|
||||
web.ub.engine.dispose()
|
||||
test=IOLoop.instance()
|
||||
test.add_callback(test.stop)
|
||||
print("Asked Tornado to exit")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if config.DEVELOPMENT:
|
||||
web.app.run(host="0.0.0.0",port=config.PORT, debug=True)
|
||||
if web.global_task == 0:
|
||||
print("Performing restart of Calibre-web")
|
||||
os.execl(sys.executable, sys.executable, *sys.argv)
|
||||
else:
|
||||
while True:
|
||||
q = Queue()
|
||||
t = Thread(target=start_calibreweb, args=(q,))
|
||||
t.start()
|
||||
while True: #watching queue, if there is no call than sleep, otherwise break
|
||||
if q.empty():
|
||||
time.sleep(1)
|
||||
else:
|
||||
break
|
||||
stop_calibreweb()
|
||||
t.join()
|
||||
|
||||
print("Performing shutdown of Calibre-web")
|
||||
sys.exit(0)
|
||||
|
@ -1,97 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
from configobj import ConfigObj
|
||||
|
||||
CONFIG_FILE = os.path.join(os.path.normpath(os.path.dirname(os.path.realpath(__file__))+os.sep+".."+os.sep), "config.ini")
|
||||
CFG = ConfigObj(CONFIG_FILE)
|
||||
CFG.encoding = 'UTF-8'
|
||||
|
||||
|
||||
def CheckSection(sec):
|
||||
""" Check if INI section exists, if not create it """
|
||||
try:
|
||||
CFG[sec]
|
||||
return True
|
||||
except:
|
||||
CFG[sec] = {}
|
||||
return False
|
||||
|
||||
|
||||
def check_setting_str(config, cfg_name, item_name, def_val, log=True):
|
||||
try:
|
||||
my_val = config[cfg_name][item_name].decode('UTF-8')
|
||||
if my_val == u"":
|
||||
my_val = def_val
|
||||
config[cfg_name][item_name] = my_val
|
||||
except:
|
||||
my_val = def_val
|
||||
try:
|
||||
config[cfg_name][item_name] = my_val
|
||||
except:
|
||||
config[cfg_name] = {}
|
||||
config[cfg_name][item_name] = my_val
|
||||
return my_val
|
||||
|
||||
|
||||
def check_setting_int(config, cfg_name, item_name, def_val):
|
||||
try:
|
||||
my_val = int(config[cfg_name][item_name])
|
||||
except:
|
||||
my_val = def_val
|
||||
try:
|
||||
config[cfg_name][item_name] = my_val
|
||||
except:
|
||||
config[cfg_name] = {}
|
||||
config[cfg_name][item_name] = my_val
|
||||
return my_val
|
||||
|
||||
CheckSection('General')
|
||||
DB_ROOT = check_setting_str(CFG, 'General', 'DB_ROOT', "")
|
||||
APP_DB_ROOT = check_setting_str(CFG, 'General', 'APP_DB_ROOT', os.getcwd())
|
||||
MAIN_DIR = check_setting_str(CFG, 'General', 'MAIN_DIR', os.getcwd())
|
||||
LOG_DIR = check_setting_str(CFG, 'General', 'LOG_DIR', os.getcwd())
|
||||
PORT = check_setting_int(CFG, 'General', 'PORT', 8083)
|
||||
NEWEST_BOOKS = check_setting_str(CFG, 'General', 'NEWEST_BOOKS', 60)
|
||||
RANDOM_BOOKS = check_setting_int(CFG, 'General', 'RANDOM_BOOKS', 4)
|
||||
|
||||
CheckSection('Advanced')
|
||||
TITLE_REGEX = check_setting_str(CFG, 'Advanced', 'TITLE_REGEX', '^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+')
|
||||
DEVELOPMENT = bool(check_setting_int(CFG, 'Advanced', 'DEVELOPMENT', 0))
|
||||
PUBLIC_REG = bool(check_setting_int(CFG, 'Advanced', 'PUBLIC_REG', 0))
|
||||
UPLOADING = bool(check_setting_int(CFG, 'Advanced', 'UPLOADING', 0))
|
||||
ANON_BROWSE = bool(check_setting_int(CFG, 'Advanced', 'ANON_BROWSE', 0))
|
||||
|
||||
SYS_ENCODING = "UTF-8"
|
||||
|
||||
if DB_ROOT == "":
|
||||
print "Calibre database directory (DB_ROOT) is not configured"
|
||||
sys.exit(1)
|
||||
|
||||
configval = {"DB_ROOT": DB_ROOT, "APP_DB_ROOT": APP_DB_ROOT, "MAIN_DIR": MAIN_DIR, "LOG_DIR": LOG_DIR, "PORT": PORT,
|
||||
"NEWEST_BOOKS": NEWEST_BOOKS, "DEVELOPMENT": DEVELOPMENT, "TITLE_REGEX": TITLE_REGEX,
|
||||
"PUBLIC_REG": PUBLIC_REG, "UPLOADING": UPLOADING, "ANON_BROWSE": ANON_BROWSE}
|
||||
|
||||
|
||||
def save_config(configval):
|
||||
new_config = ConfigObj(encoding='UTF-8')
|
||||
new_config.filename = CONFIG_FILE
|
||||
new_config['General'] = {}
|
||||
new_config['General']['DB_ROOT'] = configval["DB_ROOT"]
|
||||
new_config['General']['APP_DB_ROOT'] = configval["APP_DB_ROOT"]
|
||||
new_config['General']['MAIN_DIR'] = configval["MAIN_DIR"]
|
||||
new_config['General']['LOG_DIR'] = configval["LOG_DIR"]
|
||||
new_config['General']['PORT'] = configval["PORT"]
|
||||
new_config['General']['NEWEST_BOOKS'] = configval["NEWEST_BOOKS"]
|
||||
new_config['Advanced'] = {}
|
||||
new_config['Advanced']['TITLE_REGEX'] = configval["TITLE_REGEX"]
|
||||
new_config['Advanced']['DEVELOPMENT'] = int(configval["DEVELOPMENT"])
|
||||
new_config['Advanced']['PUBLIC_REG'] = int(configval["PUBLIC_REG"])
|
||||
new_config['Advanced']['UPLOADING'] = int(configval["UPLOADING"])
|
||||
new_config['Advanced']['ANON_BROWSE'] = int(configval["ANON_BROWSE"])
|
||||
new_config.write()
|
||||
return "Saved"
|
||||
|
||||
save_config(configval)
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,61 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block body %}
|
||||
<div class="discover">
|
||||
<h1>{{title}}</h1>
|
||||
<form role="form" method="POST" autocomplete="off">
|
||||
<div class="form-group required">
|
||||
<label for="config_calibre_dir">{{_('Location of Calibre database')}}</label>
|
||||
<input type="text" class="form-control" name="config_calibre_dir" id="config_calibre_dir" value="{% if content.config_calibre_dir != None %}{{ content.config_calibre_dir }}{% endif %}" autocomplete="off">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="config_port">{{_('Server Port')}}</label>
|
||||
<input type="number" min="1" max="65535" class="form-control" name="config_port" id="config_port" value="{% if content.config_port != None %}{{ content.config_port }}{% endif %}" autocomplete="off" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="config_calibre_web_title">{{_('Title')}}</label>
|
||||
<input type="text" class="form-control" name="config_calibre_web_title" id="config_calibre_web_title" value="{% if content.config_calibre_web_title != None %}{{ content.config_calibre_web_title }}{% endif %}" autocomplete="off" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="config_books_per_page">{{_('Books per page')}}</label>
|
||||
<input type="number" min="1" max="200" class="form-control" name="config_books_per_page" id="config_books_per_page" value="{% if content.config_books_per_page != None %}{{ content.config_books_per_page }}{% endif %}" autocomplete="off">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="config_random_books">{{_('No. of random books to show')}}</label>
|
||||
<input type="number" min="1" max="30" class="form-control" name="config_random_books" id="config_random_books" value="{% if content.config_random_books != None %}{{ content.config_random_books }}{% endif %}" autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="config_title_regex">{{_('Regular expression for title sorting')}}</label>
|
||||
<input type="text" class="form-control" name="config_title_regex" id="config_title_regex" value="{% if content.config_title_regex != None %}{{ content.config_title_regex }}{% endif %}" autocomplete="off">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="config_log_level">{{_('Log Level')}}</label>
|
||||
<select name="config_log_level" id="config_log_level" class="form-control">
|
||||
<option value="10" {% if content.config_log_level == 10 %}selected{% endif %}>DEBUG</option>
|
||||
<option value="20" {% if content.config_log_level == 20 or content.config_log_level == None %}selected{% endif %}>INFO</option>
|
||||
<option value="30" {% if content.config_log_level == 30 %}selected{% endif %}>WARNING</option>
|
||||
<option value="40" {% if content.config_log_level == 40 %}selected{% endif %}>ERROR</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="checkbox" id="config_uploading" name="config_uploading" {% if content.config_uploading %}checked{% endif %}>
|
||||
<label for="config_uploading">{{_('Enable uploading')}}</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="checkbox" id="config_anonbrowse" name="config_anonbrowse" {% if content.config_anonbrowse %}checked{% endif %}>
|
||||
<label for="config_anonbrowse">{{_('Enable anonymous browsing')}}</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="checkbox" id="config_public_reg" name="config_public_reg" {% if content.config_public_reg %}checked{% endif %}>
|
||||
<label for="config_public_reg">{{_('Enable public registration')}}</label>
|
||||
</div>
|
||||
<button type="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>
|
||||
{% endif %}
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
@ -1,16 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<LongName>Calibre Web</LongName>
|
||||
<ShortName>Calibre Web</ShortName>
|
||||
<Description>Calibre Web ebook catalog</Description>
|
||||
<Developer>janeczku</Developer>
|
||||
<LongName>{{instance}}</LongName>
|
||||
<ShortName>{{instance}}</ShortName>
|
||||
<Description>{{_('instanceCalibre Web ebook catalog')}}</Description>
|
||||
<Developer>Janeczku</Developer>
|
||||
<Contact>https://github.com/janeczku/calibre-web</Contact>
|
||||
<Url type="text/html"
|
||||
template="{{url_for('search')}}?query={searchTerms}"/>
|
||||
<Url type="application/atom+xml"
|
||||
template="{{url_for('feed_normal_search')}}?query={searchTerms}"/>
|
||||
<SyndicationRight>open</SyndicationRight>
|
||||
<Language>de-DE</Language>
|
||||
<Language>{{lang}}</Language>
|
||||
<OutputEncoding>UTF-8</OutputEncoding>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
</OpenSearchDescription>
|
||||
|
@ -1,20 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<LongName>Calibre Web</LongName>
|
||||
<ShortName>Calibre Web</ShortName>
|
||||
<Description>Calibre Web ebook catalog</Description>
|
||||
<Developer>janeczku</Developer>
|
||||
<Contact>https://github.com/janeczku/calibre-web</Contact>
|
||||
|
||||
<Url type="text/html"
|
||||
template="{{url_for('search')}}?query={searchTerms}"/>
|
||||
|
||||
<Url type="application/atom+xml"
|
||||
template="{{url_for('feed_search')}}?query={searchTerms}"/>
|
||||
|
||||
<SyndicationRight>open</SyndicationRight>
|
||||
<Language>de-DE</Language>
|
||||
<OutputEncoding>UTF-8</OutputEncoding>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
</OpenSearchDescription>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,842 +0,0 @@
|
||||
# Chinese (Simplified, China) translations for PROJECT.
|
||||
# Copyright (C) 2017 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2017-01-18 19:12+0100\n"
|
||||
"PO-Revision-Date: 2017-01-06 17:00+0800\n"
|
||||
"Last-Translator: dalin <dalin.lin@gmail.com>\n"
|
||||
"Language: zh_Hans_CN\n"
|
||||
"Language-Team: zh_Hans_CN <LL@li.org>\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.3.4\n"
|
||||
|
||||
#: cps/book_formats.py:109 cps/book_formats.py:113 cps/web.py:948
|
||||
msgid "not installed"
|
||||
msgstr "未安装"
|
||||
|
||||
#: cps/helper.py:98
|
||||
msgid "Calibre-web test email"
|
||||
msgstr "Calibre-web 测试邮件"
|
||||
|
||||
#: cps/helper.py:99 cps/helper.py:155
|
||||
msgid "This email has been sent via calibre web."
|
||||
msgstr "此邮件由calibre web发送"
|
||||
|
||||
#: cps/helper.py:136 cps/helper.py:225
|
||||
#, python-format
|
||||
msgid "Failed to send mail: %s"
|
||||
msgstr "发送邮件失败: %s"
|
||||
|
||||
#: cps/helper.py:154 cps/templates/detail.html:127
|
||||
msgid "Send to Kindle"
|
||||
msgstr "发送到Kindle"
|
||||
|
||||
#: cps/helper.py:177 cps/helper.py:192
|
||||
msgid "Could not find any formats suitable for sending by email"
|
||||
msgstr "无法找到适合邮件发送的格式"
|
||||
|
||||
#: cps/helper.py:186
|
||||
msgid "Could not convert epub to mobi"
|
||||
msgstr "无法转换epub到mobi"
|
||||
|
||||
#: cps/helper.py:245
|
||||
msgid "The requested file could not be read. Maybe wrong permissions?"
|
||||
msgstr "无法读取所请求的文件。可能是权限不对?"
|
||||
|
||||
#: cps/ub.py:259
|
||||
msgid "Guest"
|
||||
msgstr "游客"
|
||||
|
||||
#: cps/web.py:742
|
||||
msgid "Latest Books"
|
||||
msgstr "最新书籍"
|
||||
|
||||
#: cps/web.py:767
|
||||
msgid "Hot Books (most downloaded)"
|
||||
msgstr "热门书籍(最多下载)"
|
||||
|
||||
#: cps/templates/index.xml:29 cps/web.py:775
|
||||
msgid "Random Books"
|
||||
msgstr "随机书籍"
|
||||
|
||||
#: cps/web.py:788
|
||||
msgid "Author list"
|
||||
msgstr "作者列表"
|
||||
|
||||
#: cps/web.py:805
|
||||
#, python-format
|
||||
msgid "Author: %(nam)s"
|
||||
msgstr "作者: %(nam)s"
|
||||
|
||||
#: cps/templates/index.xml:50 cps/web.py:818
|
||||
msgid "Series list"
|
||||
msgstr "丛书列表"
|
||||
|
||||
#: cps/web.py:829
|
||||
#, python-format
|
||||
msgid "Series: %(serie)s"
|
||||
msgstr "丛书: %(serie)s"
|
||||
|
||||
#: cps/web.py:831 cps/web.py:927 cps/web.py:1126 cps/web.py:1874
|
||||
msgid "Error opening eBook. File does not exist or file is not accessible:"
|
||||
msgstr "无法打开电子书。 文件不存在或者文件不可访问:"
|
||||
|
||||
#: cps/web.py:862
|
||||
msgid "Available languages"
|
||||
msgstr "可用语言"
|
||||
|
||||
#: cps/web.py:877
|
||||
#, python-format
|
||||
msgid "Language: %(name)s"
|
||||
msgstr "语言: %(name)s"
|
||||
|
||||
#: cps/templates/index.xml:43 cps/web.py:890
|
||||
msgid "Category list"
|
||||
msgstr "分类列表"
|
||||
|
||||
#: cps/web.py:900
|
||||
#, python-format
|
||||
msgid "Category: %(name)s"
|
||||
msgstr "分类: %(name)s"
|
||||
|
||||
#: cps/web.py:956
|
||||
msgid "Statistics"
|
||||
msgstr "统计"
|
||||
|
||||
#: cps/web.py:965
|
||||
msgid "Server restarts"
|
||||
msgstr "重启服务器"
|
||||
|
||||
#: cps/web.py:1102 cps/web.py:1109 cps/web.py:1116 cps/web.py:1123
|
||||
msgid "Read a Book"
|
||||
msgstr "阅读一本书"
|
||||
|
||||
#: cps/web.py:1172 cps/web.py:1510
|
||||
msgid "Please fill out all fields!"
|
||||
msgstr "请填写所有字段"
|
||||
|
||||
#: cps/web.py:1188
|
||||
msgid "An unknown error occured. Please try again later."
|
||||
msgstr "发生一个未知错误。请稍后再试。"
|
||||
|
||||
#: cps/web.py:1193
|
||||
msgid "This username or email address is already in use."
|
||||
msgstr "此用户名或邮箱已被使用。"
|
||||
|
||||
#: cps/web.py:1196
|
||||
msgid "register"
|
||||
msgstr "注册"
|
||||
|
||||
#: cps/web.py:1212
|
||||
#, python-format
|
||||
msgid "you are now logged in as: '%(nickname)s'"
|
||||
msgstr "您现在已以'%(nickname)s'身份登录"
|
||||
|
||||
#: cps/web.py:1216
|
||||
msgid "Wrong Username or Password"
|
||||
msgstr "用户名或密码错误"
|
||||
|
||||
#: cps/web.py:1218
|
||||
msgid "login"
|
||||
msgstr "登录"
|
||||
|
||||
#: cps/web.py:1235
|
||||
msgid "Please configure the SMTP mail settings first..."
|
||||
msgstr "请先配置SMTP邮箱..."
|
||||
|
||||
#: cps/web.py:1239
|
||||
#, python-format
|
||||
msgid "Book successfully send to %(kindlemail)s"
|
||||
msgstr "此书已被成功发给 %(kindlemail)s"
|
||||
|
||||
#: cps/web.py:1243
|
||||
#, python-format
|
||||
msgid "There was an error sending this book: %(res)s"
|
||||
msgstr "发送这本书的时候出现错误: %(res)s"
|
||||
|
||||
#: cps/web.py:1245
|
||||
msgid "Please configure your kindle email address first..."
|
||||
msgstr "请先配置您的kindle电子邮箱地址..."
|
||||
|
||||
#: cps/web.py:1265
|
||||
#, python-format
|
||||
msgid "Book has been added to shelf: %(sname)s"
|
||||
msgstr "此书已被添加到书架: %(sname)s"
|
||||
|
||||
#: cps/web.py:1286
|
||||
#, python-format
|
||||
msgid "Book has been removed from shelf: %(sname)s"
|
||||
msgstr "此书已从书架 %(sname)s 中删除"
|
||||
|
||||
#: cps/web.py:1304 cps/web.py:1325
|
||||
#, python-format
|
||||
msgid "A shelf with the name '%(title)s' already exists."
|
||||
msgstr "已存在书架 '%(title)s'。"
|
||||
|
||||
#: cps/web.py:1309
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s created"
|
||||
msgstr "书架 %(title)s 已被创建"
|
||||
|
||||
#: cps/web.py:1311 cps/web.py:1336
|
||||
msgid "There was an error"
|
||||
msgstr "发生错误"
|
||||
|
||||
#: cps/web.py:1312 cps/web.py:1314
|
||||
msgid "create a shelf"
|
||||
msgstr "创建书架"
|
||||
|
||||
#: cps/web.py:1334
|
||||
#, python-format
|
||||
msgid "Shelf %(title)s changed"
|
||||
msgstr "书架 %(title)s 已被修改"
|
||||
|
||||
#: cps/web.py:1337 cps/web.py:1339
|
||||
msgid "Edit a shelf"
|
||||
msgstr "编辑书架"
|
||||
|
||||
#: cps/web.py:1360
|
||||
#, python-format
|
||||
msgid "successfully deleted shelf %(name)s"
|
||||
msgstr "成功删除书架 %(name)s"
|
||||
|
||||
#: cps/web.py:1381
|
||||
#, python-format
|
||||
msgid "Shelf: '%(name)s'"
|
||||
msgstr "书架: '%(name)s'"
|
||||
|
||||
#: cps/web.py:1409
|
||||
#, python-format
|
||||
msgid "Change order of Shelf: '%(name)s'"
|
||||
msgstr "修改书架 '%(name)s' 顺序"
|
||||
|
||||
#: cps/web.py:1469
|
||||
msgid "Found an existing account for this email address."
|
||||
msgstr "找到已使用此邮箱的账号。"
|
||||
|
||||
#: cps/web.py:1471 cps/web.py:1474
|
||||
#, python-format
|
||||
msgid "%(name)s's profile"
|
||||
msgstr "%(name)s 的资料"
|
||||
|
||||
#: cps/web.py:1472
|
||||
msgid "Profile updated"
|
||||
msgstr "资料已更新"
|
||||
|
||||
#: cps/web.py:1483 cps/web.py:1491
|
||||
msgid "Admin page"
|
||||
msgstr "管理页"
|
||||
|
||||
#: cps/templates/admin.html:33 cps/web.py:1511
|
||||
msgid "Add new user"
|
||||
msgstr "添加新用户"
|
||||
|
||||
#: cps/web.py:1544
|
||||
#, python-format
|
||||
msgid "User '%(user)s' created"
|
||||
msgstr "用户 '%(user)s' 已被创建"
|
||||
|
||||
#: cps/web.py:1548
|
||||
msgid "Found an existing account for this email address or nickname."
|
||||
msgstr "已找到使用此邮箱或昵称的账号。"
|
||||
|
||||
#: cps/web.py:1568
|
||||
msgid "Mail settings updated"
|
||||
msgstr "邮箱设置已更新"
|
||||
|
||||
#: cps/web.py:1574
|
||||
#, python-format
|
||||
msgid "Test E-Mail successfully send to %(kindlemail)s"
|
||||
msgstr "测试邮件已成功发送到 %(kindlemail)s"
|
||||
|
||||
#: cps/web.py:1577
|
||||
#, python-format
|
||||
msgid "There was an error sending the Test E-Mail: %(res)s"
|
||||
msgstr "发送测试邮件时发生错误: %(res)s"
|
||||
|
||||
#: cps/web.py:1578
|
||||
msgid "Edit mail settings"
|
||||
msgstr "编辑邮箱设置"
|
||||
|
||||
#: cps/web.py:1606
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' deleted"
|
||||
msgstr "用户 '%(nick)s' 已被删除"
|
||||
|
||||
#: cps/web.py:1661
|
||||
#, python-format
|
||||
msgid "User '%(nick)s' updated"
|
||||
msgstr "用户 '%(nick)s' 已被更新"
|
||||
|
||||
#: cps/web.py:1664
|
||||
msgid "An unknown error occured."
|
||||
msgstr "发生未知错误。"
|
||||
|
||||
#: cps/web.py:1666
|
||||
#, python-format
|
||||
msgid "Edit User %(nick)s"
|
||||
msgstr "编辑用户 %(nick)s"
|
||||
|
||||
#: cps/web.py:1904
|
||||
#, python-format
|
||||
msgid "Failed to create path %s (Permission denied)."
|
||||
msgstr "创建路径 %s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/web.py:1909
|
||||
#, python-format
|
||||
msgid "Failed to store file %s (Permission denied)."
|
||||
msgstr "存储文件 %s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/web.py:1914
|
||||
#, python-format
|
||||
msgid "Failed to delete file %s (Permission denied)."
|
||||
msgstr "删除文件 %s 失败(权限拒绝)。"
|
||||
|
||||
#: cps/templates/admin.html:4
|
||||
msgid "User list"
|
||||
msgstr "用户列表"
|
||||
|
||||
#: cps/templates/admin.html:7
|
||||
msgid "Nickname"
|
||||
msgstr "昵称"
|
||||
|
||||
#: cps/templates/admin.html:8
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:9
|
||||
msgid "Kindle"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:10
|
||||
msgid "DLS"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:11 cps/templates/layout.html:83
|
||||
msgid "Admin"
|
||||
msgstr "管理"
|
||||
|
||||
#: cps/templates/admin.html:12 cps/templates/detail.html:114
|
||||
msgid "Download"
|
||||
msgstr "下载"
|
||||
|
||||
#: cps/templates/admin.html:13 cps/templates/layout.html:76
|
||||
msgid "Upload"
|
||||
msgstr "上传"
|
||||
|
||||
#: cps/templates/admin.html:14
|
||||
msgid "Edit"
|
||||
msgstr "编辑"
|
||||
|
||||
#: cps/templates/admin.html:15
|
||||
msgid "Passwd"
|
||||
msgstr "修改密码"
|
||||
|
||||
#: cps/templates/admin.html:34
|
||||
msgid "SMTP mail settings"
|
||||
msgstr "SMTP设置"
|
||||
|
||||
#: cps/templates/admin.html:37 cps/templates/email_edit.html:7
|
||||
msgid "SMTP hostname"
|
||||
msgstr "SMTP地址"
|
||||
|
||||
#: cps/templates/admin.html:38
|
||||
msgid "SMTP port"
|
||||
msgstr "SMTP端口"
|
||||
|
||||
#: cps/templates/admin.html:39
|
||||
msgid "SSL"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/admin.html:40 cps/templates/email_edit.html:23
|
||||
msgid "SMTP login"
|
||||
msgstr "SMTP用户名"
|
||||
|
||||
#: cps/templates/admin.html:41 cps/templates/email_edit.html:27
|
||||
msgid "SMTP password"
|
||||
msgstr "SMTP密码"
|
||||
|
||||
#: cps/templates/admin.html:42
|
||||
msgid "From mail"
|
||||
msgstr "来自邮箱"
|
||||
|
||||
#: cps/templates/admin.html:54
|
||||
msgid "Change SMTP settings"
|
||||
msgstr "修改SMTP设置"
|
||||
|
||||
#: cps/templates/admin.html:56
|
||||
msgid "Configuration"
|
||||
msgstr "配置"
|
||||
|
||||
#: cps/templates/admin.html:59
|
||||
msgid "Log File"
|
||||
msgstr "日志文件"
|
||||
|
||||
#: cps/templates/admin.html:60
|
||||
msgid "Log Level"
|
||||
msgstr "日志级别"
|
||||
|
||||
#: cps/templates/admin.html:61
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: cps/templates/admin.html:62
|
||||
msgid "Books per page"
|
||||
msgstr "每页书籍数"
|
||||
|
||||
#: cps/templates/admin.html:63
|
||||
msgid "Uploading"
|
||||
msgstr "上传"
|
||||
|
||||
#: cps/templates/admin.html:64
|
||||
msgid "Public registration"
|
||||
msgstr "开放注册"
|
||||
|
||||
#: cps/templates/admin.html:65
|
||||
msgid "Anonymous browsing"
|
||||
msgstr "匿名浏览"
|
||||
|
||||
#: cps/templates/admin.html:76
|
||||
msgid "Administration"
|
||||
msgstr "管理"
|
||||
|
||||
#: cps/templates/admin.html:78
|
||||
msgid "Restart Calibre-web"
|
||||
msgstr "重启 Calibre-web"
|
||||
|
||||
#: cps/templates/detail.html:38
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/detail.html:38
|
||||
msgid "of"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/detail.html:44
|
||||
msgid "language"
|
||||
msgstr "语言"
|
||||
|
||||
#: cps/templates/detail.html:103
|
||||
msgid "Description:"
|
||||
msgstr "简介:"
|
||||
|
||||
#: cps/templates/detail.html:131
|
||||
msgid "Read in browser"
|
||||
msgstr "在浏览器中阅读"
|
||||
|
||||
#: cps/templates/detail.html:151
|
||||
msgid "Add to shelf"
|
||||
msgstr "添加到书架"
|
||||
|
||||
#: cps/templates/detail.html:191
|
||||
msgid "Edit metadata"
|
||||
msgstr "编辑元数据"
|
||||
|
||||
#: cps/templates/edit_book.html:14 cps/templates/search_form.html:6
|
||||
msgid "Book Title"
|
||||
msgstr "书名"
|
||||
|
||||
#: cps/templates/edit_book.html:18 cps/templates/search_form.html:10
|
||||
msgid "Author"
|
||||
msgstr "作者"
|
||||
|
||||
#: cps/templates/edit_book.html:22
|
||||
msgid "Description"
|
||||
msgstr "简介"
|
||||
|
||||
#: cps/templates/edit_book.html:26 cps/templates/search_form.html:13
|
||||
msgid "Tags"
|
||||
msgstr "标签"
|
||||
|
||||
#: cps/templates/edit_book.html:31 cps/templates/layout.html:133
|
||||
#: cps/templates/search_form.html:33
|
||||
msgid "Series"
|
||||
msgstr "丛书"
|
||||
|
||||
#: cps/templates/edit_book.html:35
|
||||
msgid "Series id"
|
||||
msgstr "丛书ID"
|
||||
|
||||
#: cps/templates/edit_book.html:39
|
||||
msgid "Rating"
|
||||
msgstr "评分"
|
||||
|
||||
#: cps/templates/edit_book.html:43
|
||||
msgid "Cover URL (jpg)"
|
||||
msgstr "封面URL (jpg)"
|
||||
|
||||
#: cps/templates/edit_book.html:48 cps/templates/user_edit.html:27
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
|
||||
#: cps/templates/edit_book.html:59
|
||||
msgid "Yes"
|
||||
msgstr "确认"
|
||||
|
||||
#: cps/templates/edit_book.html:60
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/edit_book.html:102
|
||||
msgid "view book after edit"
|
||||
msgstr "编辑后查看书籍"
|
||||
|
||||
#: cps/templates/edit_book.html:105 cps/templates/login.html:19
|
||||
#: cps/templates/search_form.html:75 cps/templates/shelf_edit.html:15
|
||||
#: cps/templates/user_edit.html:97
|
||||
msgid "Submit"
|
||||
msgstr "提交"
|
||||
|
||||
#: cps/templates/edit_book.html:106 cps/templates/email_edit.html:36
|
||||
#: cps/templates/shelf_edit.html:17 cps/templates/shelf_order.html:12
|
||||
#: cps/templates/user_edit.html:99
|
||||
msgid "Back"
|
||||
msgstr "后退"
|
||||
|
||||
#: cps/templates/email_edit.html:11
|
||||
msgid "SMTP port (usually 25 for plain SMTP and 465 for SSL and 587 for STARTTLS)"
|
||||
msgstr "SMTP端口(明文SMTP通常是25, SSL加密的是465, STARTTLS的是587)"
|
||||
|
||||
#: cps/templates/email_edit.html:15
|
||||
msgid "Encryption"
|
||||
msgstr "加密方式"
|
||||
|
||||
#: cps/templates/email_edit.html:17
|
||||
msgid "None"
|
||||
msgstr "无"
|
||||
|
||||
#: cps/templates/email_edit.html:18
|
||||
msgid "STARTTLS"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/email_edit.html:19
|
||||
msgid "SSL/TLS"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/email_edit.html:31
|
||||
msgid "From e-mail"
|
||||
msgstr "来自邮箱"
|
||||
|
||||
#: cps/templates/email_edit.html:34
|
||||
msgid "Save settings"
|
||||
msgstr "保存设置"
|
||||
|
||||
#: cps/templates/email_edit.html:35
|
||||
msgid "Save settings and send Test E-Mail"
|
||||
msgstr "保存设置并发送测试邮件"
|
||||
|
||||
#: cps/templates/feed.xml:20
|
||||
msgid "Next"
|
||||
msgstr "下一个"
|
||||
|
||||
#: cps/templates/index.html:5
|
||||
msgid "Discover (Random Books)"
|
||||
msgstr "发现(随机书籍)"
|
||||
|
||||
#: cps/templates/index.xml:5
|
||||
msgid "Start"
|
||||
msgstr "开始"
|
||||
|
||||
#: cps/templates/index.xml:7 cps/templates/layout.html:61
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: cps/templates/index.xml:15 cps/templates/layout.html:124
|
||||
msgid "Hot Books"
|
||||
msgstr "热门书籍"
|
||||
|
||||
#: cps/templates/index.xml:19
|
||||
msgid "Popular publications from this catalog based on Rating."
|
||||
msgstr "此目录中的书籍是基于评分的热门出版物。"
|
||||
|
||||
#: cps/templates/index.xml:22 cps/templates/layout.html:122
|
||||
msgid "New Books"
|
||||
msgstr "新书"
|
||||
|
||||
#: cps/templates/index.xml:26
|
||||
msgid "The latest Books"
|
||||
msgstr "最新书籍"
|
||||
|
||||
#: cps/templates/index.xml:33
|
||||
msgid "Show Random Books"
|
||||
msgstr "显示随机书籍"
|
||||
|
||||
#: cps/templates/index.xml:36 cps/templates/layout.html:135
|
||||
msgid "Authors"
|
||||
msgstr "作者"
|
||||
|
||||
#: cps/templates/index.xml:40
|
||||
msgid "Books ordered by Author"
|
||||
msgstr "书籍按作者组织"
|
||||
|
||||
#: cps/templates/index.xml:47
|
||||
msgid "Books ordered by category"
|
||||
msgstr "书籍按分类组织"
|
||||
|
||||
#: cps/templates/index.xml:54
|
||||
msgid "Books ordered by series"
|
||||
msgstr "书籍按丛书组织"
|
||||
|
||||
#: cps/templates/layout.html:48
|
||||
msgid "Toggle navigation"
|
||||
msgstr "切换导航"
|
||||
|
||||
#: cps/templates/layout.html:63
|
||||
msgid "Go!"
|
||||
msgstr "走起!"
|
||||
|
||||
#: cps/templates/layout.html:66
|
||||
msgid "Advanced Search"
|
||||
msgstr "高级搜索"
|
||||
|
||||
#: cps/templates/layout.html:87
|
||||
msgid "Logout"
|
||||
msgstr "注销"
|
||||
|
||||
#: cps/templates/layout.html:91 cps/templates/login.html:4
|
||||
msgid "Login"
|
||||
msgstr "登录"
|
||||
|
||||
#: cps/templates/layout.html:92 cps/templates/register.html:18
|
||||
msgid "Register"
|
||||
msgstr "注册"
|
||||
|
||||
#: cps/templates/layout.html:121
|
||||
msgid "Browse"
|
||||
msgstr "浏览"
|
||||
|
||||
#: cps/templates/layout.html:127
|
||||
msgid "Discover"
|
||||
msgstr "发现"
|
||||
|
||||
#: cps/templates/layout.html:130
|
||||
msgid "Categories"
|
||||
msgstr "分类"
|
||||
|
||||
#: cps/templates/layout.html:137 cps/templates/search_form.html:54
|
||||
msgid "Languages"
|
||||
msgstr "语言"
|
||||
|
||||
#: cps/templates/layout.html:140
|
||||
msgid "Public Shelves"
|
||||
msgstr "公开书架"
|
||||
|
||||
#: cps/templates/layout.html:144
|
||||
msgid "Your Shelves"
|
||||
msgstr "您的书架"
|
||||
|
||||
#: cps/templates/layout.html:149
|
||||
msgid "Create a Shelf"
|
||||
msgstr "创建书架"
|
||||
|
||||
#: cps/templates/layout.html:150
|
||||
msgid "About"
|
||||
msgstr "关于"
|
||||
|
||||
#: cps/templates/login.html:7 cps/templates/login.html:8
|
||||
#: cps/templates/register.html:7 cps/templates/user_edit.html:8
|
||||
msgid "Username"
|
||||
msgstr "用户名"
|
||||
|
||||
#: cps/templates/login.html:11 cps/templates/login.html:12
|
||||
#: cps/templates/register.html:11 cps/templates/user_edit.html:18
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: cps/templates/login.html:16
|
||||
msgid "Remember me"
|
||||
msgstr "记住我"
|
||||
|
||||
#: cps/templates/read.html:136
|
||||
msgid "Reflow text when sidebars are open."
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/readpdf.html:29
|
||||
msgid "PDF.js viewer"
|
||||
msgstr "PDF.js查看器"
|
||||
|
||||
#: cps/templates/readtxt.html:6
|
||||
msgid "Basic txt Reader"
|
||||
msgstr "简单的txt阅读器"
|
||||
|
||||
#: cps/templates/register.html:4
|
||||
msgid "Register a new account"
|
||||
msgstr "注册新用户"
|
||||
|
||||
#: cps/templates/register.html:8
|
||||
msgid "Choose a username"
|
||||
msgstr "选择一个用户名"
|
||||
|
||||
#: cps/templates/register.html:12
|
||||
msgid "Choose a password"
|
||||
msgstr "选择一个密码"
|
||||
|
||||
#: cps/templates/register.html:15 cps/templates/user_edit.html:13
|
||||
msgid "Email address"
|
||||
msgstr "邮箱地址"
|
||||
|
||||
#: cps/templates/register.html:16
|
||||
msgid "Your email address"
|
||||
msgstr "您的邮箱地址"
|
||||
|
||||
#: cps/templates/search.html:6
|
||||
msgid "No Results for:"
|
||||
msgstr "找不到结果:"
|
||||
|
||||
#: cps/templates/search.html:7
|
||||
msgid "Please try a diffrent Search"
|
||||
msgstr "请尝试别的关键字"
|
||||
|
||||
#: cps/templates/search.html:9
|
||||
msgid "Results for:"
|
||||
msgstr "结果:"
|
||||
|
||||
#: cps/templates/search_form.html:23
|
||||
msgid "Exclude Tags"
|
||||
msgstr "排除标签"
|
||||
|
||||
#: cps/templates/search_form.html:43
|
||||
msgid "Exclude Series"
|
||||
msgstr "排除丛书"
|
||||
|
||||
#: cps/templates/search_form.html:64
|
||||
msgid "Exclude Languages"
|
||||
msgstr "排除语言"
|
||||
|
||||
#: cps/templates/shelf.html:6
|
||||
msgid "Delete this Shelf"
|
||||
msgstr "删除此书架"
|
||||
|
||||
#: cps/templates/shelf.html:7
|
||||
msgid "Edit Shelf name"
|
||||
msgstr "编辑书架名"
|
||||
|
||||
#: cps/templates/shelf.html:8 cps/templates/shelf_order.html:11
|
||||
msgid "Change order"
|
||||
msgstr "修改顺序"
|
||||
|
||||
#: cps/templates/shelf_edit.html:7
|
||||
msgid "Title"
|
||||
msgstr "标题"
|
||||
|
||||
#: cps/templates/shelf_edit.html:12
|
||||
msgid "should the shelf be public?"
|
||||
msgstr "要公开此书架吗?"
|
||||
|
||||
#: cps/templates/shelf_order.html:5
|
||||
msgid "Drag 'n drop to rearrange order"
|
||||
msgstr "通过拖拽进行重新排序"
|
||||
|
||||
#: cps/templates/stats.html:3
|
||||
msgid "Linked libraries"
|
||||
msgstr "链接库"
|
||||
|
||||
#: cps/templates/stats.html:8
|
||||
msgid "Program library"
|
||||
msgstr "程序库"
|
||||
|
||||
#: cps/templates/stats.html:9
|
||||
msgid "Installed Version"
|
||||
msgstr "已安装版本"
|
||||
|
||||
#: cps/templates/stats.html:32
|
||||
msgid "Calibre library statistics"
|
||||
msgstr "Calibre书库统计"
|
||||
|
||||
#: cps/templates/stats.html:37
|
||||
msgid "Books in this Library"
|
||||
msgstr "本书在此书库"
|
||||
|
||||
#: cps/templates/stats.html:41
|
||||
msgid "Authors in this Library"
|
||||
msgstr "个作者在此书库"
|
||||
|
||||
#: cps/templates/user_edit.html:23
|
||||
msgid "Kindle E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: cps/templates/user_edit.html:35
|
||||
msgid "Show books with language"
|
||||
msgstr "按语言显示书籍"
|
||||
|
||||
#: cps/templates/user_edit.html:37
|
||||
msgid "Show all"
|
||||
msgstr "显示全部"
|
||||
|
||||
#: cps/templates/user_edit.html:45
|
||||
msgid "Show random books"
|
||||
msgstr "显示随机书籍"
|
||||
|
||||
#: cps/templates/user_edit.html:49
|
||||
msgid "Show hot books"
|
||||
msgstr "显示热门书籍"
|
||||
|
||||
#: cps/templates/user_edit.html:53
|
||||
msgid "Show language selection"
|
||||
msgstr "显示语言选择"
|
||||
|
||||
#: cps/templates/user_edit.html:57
|
||||
msgid "Show series selection"
|
||||
msgstr "显示丛书选择"
|
||||
|
||||
#: cps/templates/user_edit.html:61
|
||||
msgid "Show category selection"
|
||||
msgstr "显示分类选择"
|
||||
|
||||
#: cps/templates/user_edit.html:68
|
||||
msgid "Admin user"
|
||||
msgstr "管理用户"
|
||||
|
||||
#: cps/templates/user_edit.html:73
|
||||
msgid "Allow Downloads"
|
||||
msgstr "允许下载"
|
||||
|
||||
#: cps/templates/user_edit.html:77
|
||||
msgid "Allow Uploads"
|
||||
msgstr "允许上传"
|
||||
|
||||
#: cps/templates/user_edit.html:81
|
||||
msgid "Allow Edit"
|
||||
msgstr "允许编辑"
|
||||
|
||||
#: cps/templates/user_edit.html:86
|
||||
msgid "Allow Changing Password"
|
||||
msgstr "允许修改密码"
|
||||
|
||||
#: cps/templates/user_edit.html:93
|
||||
msgid "Delete this user"
|
||||
msgstr "删除此用户"
|
||||
|
||||
#: cps/templates/user_edit.html:104
|
||||
msgid "Recent Downloads"
|
||||
msgstr "最近下载"
|
||||
|
||||
#~ msgid "SMTP port (usually 25 for plain SMTP and 587 for SSL)"
|
||||
#~ msgstr "SMTP端口(不加密的SMTP通常是25, SSL加密的是587)"
|
||||
|
||||
#~ msgid "Server uses SSL (StartTLS)"
|
||||
#~ msgstr "服务器使用SSL (StartTLS)"
|
||||
|
||||
#~ msgid "change order"
|
||||
#~ msgstr "修改顺序"
|
||||
|
||||
#~ msgid "Series in this Library"
|
||||
#~ msgstr "个丛书在此书库"
|
||||
|
||||
#~ msgid "Tags in this Library"
|
||||
#~ msgstr "个标签在此书库"
|
||||
|
||||
#~ msgid "Usercount for calibre web"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Latin"
|
||||
#~ msgstr ""
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue