mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
IGN:Clean up conversion queueing code and add feedback while calibre is queueing bulk conversions
This commit is contained in:
parent
a1b42542e1
commit
b52620748e
@ -1155,16 +1155,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.library_view.selectionModel().selectedRows()]
|
self.library_view.selectionModel().selectedRows()]
|
||||||
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
||||||
if jobs == []: return
|
if jobs == []: return
|
||||||
for func, args, desc, fmt, id, temp_files in jobs:
|
self.queue_convert_jobs(jobs, changed, bad, rows, previous,
|
||||||
if id not in bad:
|
self.book_auto_converted, extra_job_args=[on_card])
|
||||||
job = self.job_manager.run_job(Dispatcher(self.book_auto_converted),
|
|
||||||
func, args=args, description=desc)
|
|
||||||
self.conversion_jobs[job] = (temp_files, fmt, id, on_card)
|
|
||||||
|
|
||||||
if changed:
|
|
||||||
self.library_view.model().refresh_rows(rows)
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, previous)
|
|
||||||
|
|
||||||
def auto_convert_mail(self, to, fmts, delete_from_library, book_ids, format):
|
def auto_convert_mail(self, to, fmts, delete_from_library, book_ids, format):
|
||||||
previous = self.library_view.currentIndex()
|
previous = self.library_view.currentIndex()
|
||||||
@ -1172,17 +1164,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.library_view.selectionModel().selectedRows()]
|
self.library_view.selectionModel().selectedRows()]
|
||||||
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
||||||
if jobs == []: return
|
if jobs == []: return
|
||||||
for func, args, desc, fmt, id, temp_files in jobs:
|
self.queue_convert_jobs(jobs, changed, bad, rows, previous,
|
||||||
if id not in bad:
|
self.book_auto_converted_mail,
|
||||||
job = self.job_manager.run_job(Dispatcher(self.book_auto_converted_mail),
|
extra_job_args=[delete_from_library, to, fmts])
|
||||||
func, args=args, description=desc)
|
|
||||||
self.conversion_jobs[job] = (temp_files, fmt, id,
|
|
||||||
delete_from_library, to, fmts)
|
|
||||||
|
|
||||||
if changed:
|
|
||||||
self.library_view.model().refresh_rows(rows)
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, previous)
|
|
||||||
|
|
||||||
def auto_convert_news(self, book_ids, format):
|
def auto_convert_news(self, book_ids, format):
|
||||||
previous = self.library_view.currentIndex()
|
previous = self.library_view.currentIndex()
|
||||||
@ -1190,17 +1174,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.library_view.selectionModel().selectedRows()]
|
self.library_view.selectionModel().selectedRows()]
|
||||||
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
jobs, changed, bad = convert_single_ebook(self, self.library_view.model().db, book_ids, True, format)
|
||||||
if jobs == []: return
|
if jobs == []: return
|
||||||
for func, args, desc, fmt, id, temp_files in jobs:
|
self.queue_convert_jobs(jobs, changed, bad, rows, previous,
|
||||||
if id not in bad:
|
self.book_auto_converted_news)
|
||||||
job = self.job_manager.run_job(Dispatcher(self.book_auto_converted_news),
|
|
||||||
func, args=args, description=desc)
|
|
||||||
self.conversion_jobs[job] = (temp_files, fmt, id)
|
|
||||||
|
|
||||||
if changed:
|
|
||||||
self.library_view.model().refresh_rows(rows)
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, previous)
|
|
||||||
|
|
||||||
|
|
||||||
def get_books_for_conversion(self):
|
def get_books_for_conversion(self):
|
||||||
rows = [r.row() for r in \
|
rows = [r.row() for r in \
|
||||||
@ -1219,16 +1194,24 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
rows = [x.row() for x in \
|
rows = [x.row() for x in \
|
||||||
self.library_view.selectionModel().selectedRows()]
|
self.library_view.selectionModel().selectedRows()]
|
||||||
if bulk or (bulk is None and len(book_ids) > 1):
|
if bulk or (bulk is None and len(book_ids) > 1):
|
||||||
jobs, changed, bad = convert_bulk_ebook(self,
|
self.__bulk_queue = convert_bulk_ebook(self, self.queue_convert_jobs,
|
||||||
self.library_view.model().db, book_ids, out_format=prefs['output_format'])
|
self.library_view.model().db, book_ids,
|
||||||
|
out_format=prefs['output_format'], args=(rows, previous,
|
||||||
|
self.book_converted))
|
||||||
else:
|
else:
|
||||||
jobs, changed, bad = convert_single_ebook(self,
|
jobs, changed, bad = convert_single_ebook(self,
|
||||||
self.library_view.model().db, book_ids, out_format=prefs['output_format'])
|
self.library_view.model().db, book_ids, out_format=prefs['output_format'])
|
||||||
|
self.queue_convert_jobs(jobs, changed, bad, rows, previous,
|
||||||
|
self.book_converted)
|
||||||
|
|
||||||
|
def queue_convert_jobs(self, jobs, changed, bad, rows, previous,
|
||||||
|
converted_func, extra_job_args=[]):
|
||||||
for func, args, desc, fmt, id, temp_files in jobs:
|
for func, args, desc, fmt, id, temp_files in jobs:
|
||||||
if id not in bad:
|
if id not in bad:
|
||||||
job = self.job_manager.run_job(Dispatcher(self.book_converted),
|
job = self.job_manager.run_job(Dispatcher(converted_func),
|
||||||
func, args=args, description=desc)
|
func, args=args, description=desc)
|
||||||
self.conversion_jobs[job] = (temp_files, fmt, id)
|
args = [temp_files, fmt, id]+extra_job_args
|
||||||
|
self.conversion_jobs[job] = tuple(args)
|
||||||
|
|
||||||
if changed:
|
if changed:
|
||||||
self.library_view.model().refresh_rows(rows)
|
self.library_view.model().refresh_rows(rows)
|
||||||
@ -1236,77 +1219,22 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.library_view.model().current_changed(current, previous)
|
self.library_view.model().current_changed(current, previous)
|
||||||
|
|
||||||
def book_auto_converted(self, job):
|
def book_auto_converted(self, job):
|
||||||
temp_files, fmt, book_id, on_card = self.conversion_jobs.pop(job)
|
temp_files, fmt, book_id, on_card = self.conversion_jobs[job]
|
||||||
try:
|
self.book_converted(job)
|
||||||
if job.failed:
|
|
||||||
return self.job_exception(job)
|
|
||||||
data = open(temp_files[-1].name, 'rb')
|
|
||||||
self.library_view.model().db.add_format(book_id, fmt, data, index_is_id=True)
|
|
||||||
data.close()
|
|
||||||
self.status_bar.showMessage(job.description + (' completed'), 2000)
|
|
||||||
finally:
|
|
||||||
for f in temp_files:
|
|
||||||
try:
|
|
||||||
if os.path.exists(f.name):
|
|
||||||
os.remove(f.name)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
self.tags_view.recount()
|
|
||||||
if self.current_view() is self.library_view:
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, QModelIndex())
|
|
||||||
|
|
||||||
self.sync_to_device(on_card, False, specific_format=fmt, send_ids=[book_id], do_auto_convert=False)
|
self.sync_to_device(on_card, False, specific_format=fmt, send_ids=[book_id], do_auto_convert=False)
|
||||||
|
|
||||||
def book_auto_converted_mail(self, job):
|
def book_auto_converted_mail(self, job):
|
||||||
temp_files, fmt, book_id, delete_from_library, to, fmts = self.conversion_jobs.pop(job)
|
temp_files, fmt, book_id, delete_from_library, to, fmts = self.conversion_jobs[job]
|
||||||
try:
|
self.book_converted(job)
|
||||||
if job.failed:
|
|
||||||
self.job_exception(job)
|
|
||||||
return
|
|
||||||
data = open(temp_files[-1].name, 'rb')
|
|
||||||
self.library_view.model().db.add_format(book_id, fmt, data, index_is_id=True)
|
|
||||||
data.close()
|
|
||||||
self.status_bar.showMessage(job.description + (' completed'), 2000)
|
|
||||||
finally:
|
|
||||||
for f in temp_files:
|
|
||||||
try:
|
|
||||||
if os.path.exists(f.name):
|
|
||||||
os.remove(f.name)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
self.tags_view.recount()
|
|
||||||
if self.current_view() is self.library_view:
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, QModelIndex())
|
|
||||||
|
|
||||||
self.send_by_mail(to, fmts, delete_from_library, specific_format=fmt, send_ids=[book_id], do_auto_convert=False)
|
self.send_by_mail(to, fmts, delete_from_library, specific_format=fmt, send_ids=[book_id], do_auto_convert=False)
|
||||||
|
|
||||||
def book_auto_converted_news(self, job):
|
def book_auto_converted_news(self, job):
|
||||||
temp_files, fmt, book_id = self.conversion_jobs.pop(job)
|
temp_files, fmt, book_id = self.conversion_jobs[job]
|
||||||
try:
|
self.book_converted(job)
|
||||||
if job.failed:
|
|
||||||
return self.job_exception(job)
|
|
||||||
data = open(temp_files[-1].name, 'rb')
|
|
||||||
self.library_view.model().db.add_format(book_id, fmt, data, index_is_id=True)
|
|
||||||
data.close()
|
|
||||||
self.status_bar.showMessage(job.description + (' completed'), 2000)
|
|
||||||
finally:
|
|
||||||
for f in temp_files:
|
|
||||||
try:
|
|
||||||
if os.path.exists(f.name):
|
|
||||||
os.remove(f.name)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
self.tags_view.recount()
|
|
||||||
if self.current_view() is self.library_view:
|
|
||||||
current = self.library_view.currentIndex()
|
|
||||||
self.library_view.model().current_changed(current, QModelIndex())
|
|
||||||
|
|
||||||
self.sync_news(send_ids=[book_id], do_auto_convert=False)
|
self.sync_news(send_ids=[book_id], do_auto_convert=False)
|
||||||
|
|
||||||
def book_converted(self, job):
|
def book_converted(self, job):
|
||||||
temp_files, fmt, book_id = self.conversion_jobs.pop(job)
|
temp_files, fmt, book_id = self.conversion_jobs.pop(job)[:3]
|
||||||
try:
|
try:
|
||||||
if job.failed:
|
if job.failed:
|
||||||
self.job_exception(job)
|
self.job_exception(job)
|
||||||
|
@ -9,7 +9,7 @@ Logic for setting up conversion jobs
|
|||||||
|
|
||||||
import cPickle
|
import cPickle
|
||||||
|
|
||||||
from PyQt4.Qt import QDialog
|
from PyQt4.Qt import QDialog, QProgressDialog, QString, QTimer, SIGNAL
|
||||||
|
|
||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
from calibre.gui2 import warning_dialog, question_dialog
|
from calibre.gui2 import warning_dialog, question_dialog
|
||||||
@ -94,7 +94,7 @@ def convert_single_ebook(parent, db, book_ids, auto_conversion=False, out_format
|
|||||||
|
|
||||||
return jobs, changed, bad
|
return jobs, changed, bad
|
||||||
|
|
||||||
def convert_bulk_ebook(parent, db, book_ids, out_format=None):
|
def convert_bulk_ebook(parent, queue, db, book_ids, out_format=None, args=[]):
|
||||||
changed = False
|
changed = False
|
||||||
jobs = []
|
jobs = []
|
||||||
bad = []
|
bad = []
|
||||||
@ -112,32 +112,55 @@ def convert_bulk_ebook(parent, db, book_ids, out_format=None):
|
|||||||
user_recs = cPickle.loads(d.recommendations)
|
user_recs = cPickle.loads(d.recommendations)
|
||||||
|
|
||||||
book_ids = convert_existing(parent, db, book_ids, output_format)
|
book_ids = convert_existing(parent, db, book_ids, output_format)
|
||||||
for i, book_id in enumerate(book_ids):
|
return QueueBulk(parent, book_ids, output_format, queue, db, user_recs, args)
|
||||||
|
|
||||||
|
class QueueBulk(QProgressDialog):
|
||||||
|
|
||||||
|
def __init__(self, parent, book_ids, output_format, queue, db, user_recs, args):
|
||||||
|
QProgressDialog.__init__(self, '',
|
||||||
|
QString(), 0, len(book_ids), parent)
|
||||||
|
self.setWindowTitle(_('Queueing books for bulk conversion'))
|
||||||
|
self.book_ids, self.output_format, self.queue, self.db, self.args, self.user_recs = \
|
||||||
|
book_ids, output_format, queue, db, args, user_recs
|
||||||
|
self.parent = parent
|
||||||
|
self.i, self.bad, self.jobs, self.changed = 0, [], [], False
|
||||||
|
self.timer = QTimer(self)
|
||||||
|
self.connect(self.timer, SIGNAL('timeout()'), self.do_book)
|
||||||
|
self.timer.start()
|
||||||
|
self.exec_()
|
||||||
|
|
||||||
|
def do_book(self):
|
||||||
|
if self.i >= len(self.book_ids):
|
||||||
|
self.timer.stop()
|
||||||
|
return self.do_queue()
|
||||||
|
book_id = self.book_ids[self.i]
|
||||||
|
self.i += 1
|
||||||
|
|
||||||
temp_files = []
|
temp_files = []
|
||||||
input_format = get_input_format_for_book(db, book_id, None)[0]
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
mi, opf_file = create_opf_file(db, book_id)
|
input_format = get_input_format_for_book(self.db, book_id, None)[0]
|
||||||
in_file = db.format_abspath(book_id, input_format, True)
|
mi, opf_file = create_opf_file(self.db, book_id)
|
||||||
|
in_file = self.db.format_abspath(book_id, input_format, True)
|
||||||
|
|
||||||
out_file = PersistentTemporaryFile('.' + output_format)
|
out_file = PersistentTemporaryFile('.' + self.output_format)
|
||||||
out_file.write(output_format)
|
out_file.write(self.output_format)
|
||||||
out_file.close()
|
out_file.close()
|
||||||
temp_files = []
|
temp_files = []
|
||||||
|
|
||||||
combined_recs = GuiRecommendations()
|
combined_recs = GuiRecommendations()
|
||||||
default_recs = load_defaults('%s_input' % input_format)
|
default_recs = load_defaults('%s_input' % input_format)
|
||||||
specific_recs = load_specifics(db, book_id)
|
specific_recs = load_specifics(self.db, book_id)
|
||||||
for key in default_recs:
|
for key in default_recs:
|
||||||
combined_recs[key] = default_recs[key]
|
combined_recs[key] = default_recs[key]
|
||||||
for key in specific_recs:
|
for key in specific_recs:
|
||||||
combined_recs[key] = specific_recs[key]
|
combined_recs[key] = specific_recs[key]
|
||||||
for item in user_recs:
|
for item in self.user_recs:
|
||||||
combined_recs[item[0]] = item[1]
|
combined_recs[item[0]] = item[1]
|
||||||
save_specifics(db, book_id, combined_recs)
|
save_specifics(self.db, book_id, combined_recs)
|
||||||
lrecs = list(combined_recs.to_recommendations())
|
lrecs = list(combined_recs.to_recommendations())
|
||||||
|
|
||||||
cover_file = create_cover_file(db, book_id)
|
cover_file = create_cover_file(self.db, book_id)
|
||||||
|
|
||||||
if opf_file is not None:
|
if opf_file is not None:
|
||||||
lrecs.append(('read_metadata_from_opf', opf_file.name,
|
lrecs.append(('read_metadata_from_opf', opf_file.name,
|
||||||
@ -156,30 +179,34 @@ def convert_bulk_ebook(parent, db, book_ids, out_format=None):
|
|||||||
dtitle = unicode(mi.title)
|
dtitle = unicode(mi.title)
|
||||||
except:
|
except:
|
||||||
dtitle = repr(mi.title)
|
dtitle = repr(mi.title)
|
||||||
desc = _('Convert book %d of %d (%s)') % (i + 1, total, dtitle)
|
self.setLabelText(_('Queueing ')+dtitle)
|
||||||
|
desc = _('Convert book %d of %d (%s)') % (self.i, len(self.book_ids), dtitle)
|
||||||
|
|
||||||
args = [in_file, out_file.name, lrecs]
|
args = [in_file, out_file.name, lrecs]
|
||||||
temp_files.append(out_file)
|
temp_files.append(out_file)
|
||||||
jobs.append(('gui_convert', args, desc, output_format.upper(), book_id, temp_files))
|
self.jobs.append(('gui_convert', args, desc, self.output_format.upper(), book_id, temp_files))
|
||||||
|
|
||||||
changed = True
|
self.changed = True
|
||||||
|
self.setValue(self.i)
|
||||||
except NoSupportedInputFormats:
|
except NoSupportedInputFormats:
|
||||||
bad.append(book_id)
|
self.bad.append(book_id)
|
||||||
|
|
||||||
if bad != []:
|
def do_queue(self):
|
||||||
|
self.hide()
|
||||||
|
if self.bad != []:
|
||||||
res = []
|
res = []
|
||||||
for id in bad:
|
for id in self.bad:
|
||||||
title = db.title(id, True)
|
title = self.db.title(id, True)
|
||||||
res.append('%s'%title)
|
res.append('%s'%title)
|
||||||
|
|
||||||
msg = '%s' % '\n'.join(res)
|
msg = '%s' % '\n'.join(res)
|
||||||
warning_dialog(parent, _('Could not convert some books'),
|
warning_dialog(self.parent, _('Could not convert some books'),
|
||||||
_('Could not convert %d of %d books, because no suitable '
|
_('Could not convert %d of %d books, because no suitable '
|
||||||
'source format was found.') % (len(res), total),
|
'source format was found.') % (len(res), len(self.book_ids)),
|
||||||
msg).exec_()
|
msg).exec_()
|
||||||
|
self.parent = None
|
||||||
jobs.reverse()
|
self.jobs.reverse()
|
||||||
return jobs, changed, bad
|
self.queue(self.jobs, self.changed, self.bad, *self.args)
|
||||||
|
|
||||||
def fetch_scheduled_recipe(recipe, script):
|
def fetch_scheduled_recipe(recipe, script):
|
||||||
from calibre.gui2.dialogs.scheduler import config
|
from calibre.gui2.dialogs.scheduler import config
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.6.12\n"
|
"Project-Id-Version: calibre 0.6.12\n"
|
||||||
"POT-Creation-Date: 2009-09-11 15:00+MDT\n"
|
"POT-Creation-Date: 2009-09-13 10:26+MDT\n"
|
||||||
"PO-Revision-Date: 2009-09-11 15:00+MDT\n"
|
"PO-Revision-Date: 2009-09-13 10:26+MDT\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -29,8 +29,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:403
|
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:403
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:65
|
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:65
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:317
|
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:318
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:320
|
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:321
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1895
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1895
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1897
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1897
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24
|
||||||
@ -99,9 +99,9 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:111
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:118
|
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:118
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:81
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:99
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:106
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:108
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:126
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:539
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:539
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:548
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:548
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:765
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:765
|
||||||
@ -976,7 +976,7 @@ msgid "Normally this input plugin re-arranges all the input files into a standar
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:266
|
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:266
|
||||||
msgid "Average line length for line breaking if the HTML is from a previous partial conversion of a PDF file. Default is %default."
|
msgid "Average line length for line breaking if the HTML is from a previous partial conversion of a PDF file. Default is %default which disables this."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47
|
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47
|
||||||
@ -2001,7 +2001,7 @@ msgid "Bulk Convert"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:73
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:73
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:153
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:177
|
||||||
msgid "Options specific to the output format."
|
msgid "Options specific to the output format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2339,43 +2339,43 @@ msgstr ""
|
|||||||
msgid "&Monospaced font family:"
|
msgid "&Monospaced font family:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:23
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:145
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:145
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:169
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:169
|
||||||
msgid "Metadata"
|
msgid "Metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:25
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:43
|
||||||
msgid "Set the metadata. The output file will contain as much of this metadata as possible."
|
msgid "Set the metadata. The output file will contain as much of this metadata as possible."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:134
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:152
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:95
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:95
|
||||||
msgid "Choose cover for "
|
msgid "Choose cover for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:141
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:102
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:102
|
||||||
msgid "Cannot read"
|
msgid "Cannot read"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:142
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:160
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:103
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:103
|
||||||
msgid "You do not have permission to read the file: "
|
msgid "You do not have permission to read the file: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:150
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:168
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:157
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:175
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:111
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:111
|
||||||
msgid "Error reading file"
|
msgid "Error reading file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:112
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:112
|
||||||
msgid "<p>There was an error reading from file: <br /><b>"
|
msgid "<p>There was an error reading from file: <br /><b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:158
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:176
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:120
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:120
|
||||||
msgid " is not a valid picture"
|
msgid " is not a valid picture"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -2571,7 +2571,7 @@ msgid "RB Output"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1385
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1313
|
||||||
msgid "Choose the format to view"
|
msgid "Choose the format to view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2603,11 +2603,11 @@ msgstr ""
|
|||||||
msgid "Regex:"
|
msgid "Regex:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:139
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:163
|
||||||
msgid "Convert"
|
msgid "Convert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:164
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:188
|
||||||
msgid "Options specific to the input format."
|
msgid "Options specific to the input format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2860,7 +2860,7 @@ msgid "<p>For example, to match all h2 tags that have class=\"chapter\", set tag
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:39
|
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:39
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:129
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130
|
||||||
msgid "No details available."
|
msgid "No details available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3184,7 +3184,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:788
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:788
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:52
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -3712,18 +3712,22 @@ msgstr ""
|
|||||||
msgid "Details of job"
|
msgid "Details of job"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:41
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44
|
||||||
msgid "Active Jobs"
|
msgid "Active Jobs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:42
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45
|
||||||
msgid "&Stop selected job"
|
msgid "&Stop selected job"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:43
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:46
|
||||||
msgid "Show job &details"
|
msgid "Show job &details"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47
|
||||||
|
msgid "Stop &all jobs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133
|
||||||
msgid "Edit Meta information"
|
msgid "Edit Meta information"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -4474,11 +4478,11 @@ msgstr ""
|
|||||||
msgid "Job has already run"
|
msgid "Job has already run"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:221
|
||||||
msgid "Unavailable"
|
msgid "Unavailable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:226
|
#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:232
|
||||||
msgid " - Jobs"
|
msgid " - Jobs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4673,7 +4677,7 @@ msgid "Save to disk in a single directory"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:280
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:280
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1487
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1415
|
||||||
msgid "Save only %s format to disk"
|
msgid "Save only %s format to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4713,7 +4717,7 @@ msgid "Calibre Library"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:437
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:437
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1630
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1558
|
||||||
msgid "Choose a location for your ebook library."
|
msgid "Choose a location for your ebook library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4817,7 +4821,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1048
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1048
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1073
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1073
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1210
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1185
|
||||||
msgid "No books selected"
|
msgid "No books selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4883,162 +4887,162 @@ msgstr ""
|
|||||||
msgid " fetched."
|
msgid " fetched."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1184
|
||||||
msgid "Cannot convert"
|
msgid "Cannot convert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1379
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1307
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1398
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1326
|
||||||
msgid "No book selected"
|
msgid "No book selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1379
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1307
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1429
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1357
|
||||||
msgid "Cannot view"
|
msgid "Cannot view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325
|
||||||
msgid "Cannot open folder"
|
msgid "Cannot open folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1414
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1342
|
||||||
msgid "Multiple Books Selected"
|
msgid "Multiple Books Selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1415
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1343
|
||||||
msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?"
|
msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1430
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1358
|
||||||
msgid "%s has no available formats."
|
msgid "%s has no available formats."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1471
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1399
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1472
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1400
|
||||||
msgid "Cannot configure while there are running jobs."
|
msgid "Cannot configure while there are running jobs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1515
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1443
|
||||||
msgid "No detailed info available"
|
msgid "No detailed info available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1516
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1444
|
||||||
msgid "No detailed information is available for books on the device."
|
msgid "No detailed information is available for books on the device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1568
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1496
|
||||||
msgid "Error talking to device"
|
msgid "Error talking to device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1569
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1497
|
||||||
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1592
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1520
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1610
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1538
|
||||||
msgid "Conversion Error"
|
msgid "Conversion Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1593
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1521
|
||||||
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using third party tools."
|
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using third party tools."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1611
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1539
|
||||||
msgid "<b>Failed</b>"
|
msgid "<b>Failed</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1639
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1567
|
||||||
msgid "Invalid library location"
|
msgid "Invalid library location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1640
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1568
|
||||||
msgid "Could not access %s. Using %s as the library."
|
msgid "Could not access %s. Using %s as the library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1687
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1615
|
||||||
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1711
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1639
|
||||||
msgid "There are active jobs. Are you sure you want to quit?"
|
msgid "There are active jobs. Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1714
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1642
|
||||||
msgid ""
|
msgid ""
|
||||||
" is communicating with the device!<br>\n"
|
" is communicating with the device!<br>\n"
|
||||||
" Quitting may cause corruption on the device.<br>\n"
|
" Quitting may cause corruption on the device.<br>\n"
|
||||||
" Are you sure you want to quit?"
|
" Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1718
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1646
|
||||||
msgid "WARNING: Active jobs"
|
msgid "WARNING: Active jobs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1769
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1697
|
||||||
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1788
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1716
|
||||||
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1796
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1724
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1797
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1725
|
||||||
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1815
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1743
|
||||||
msgid "Use the library located at the specified path."
|
msgid "Use the library located at the specified path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1817
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1745
|
||||||
msgid "Start minimized to system tray."
|
msgid "Start minimized to system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1819
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1747
|
||||||
msgid "Log debugging information to console"
|
msgid "Log debugging information to console"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1821
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1749
|
||||||
msgid "Do not check for updates"
|
msgid "Do not check for updates"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1869
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1797
|
||||||
msgid "If you are sure it is not running"
|
msgid "If you are sure it is not running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1871
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1799
|
||||||
msgid "Cannot Start "
|
msgid "Cannot Start "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1872
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1800
|
||||||
msgid "%s is already running."
|
msgid "%s is already running."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1875
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1803
|
||||||
msgid "may be running in the system tray, in the"
|
msgid "may be running in the system tray, in the"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1877
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1805
|
||||||
msgid "upper right region of the screen."
|
msgid "upper right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1879
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1807
|
||||||
msgid "lower right region of the screen."
|
msgid "lower right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1882
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1810
|
||||||
msgid "try rebooting your computer."
|
msgid "try rebooting your computer."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1884
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1812
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1896
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1824
|
||||||
msgid "try deleting the file"
|
msgid "try deleting the file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5224,39 +5228,47 @@ msgstr ""
|
|||||||
msgid "Publishers"
|
msgid "Publishers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:32
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:34
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:103
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:105
|
||||||
msgid "Starting conversion of %d books"
|
msgid "Starting conversion of %d books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:62
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:64
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:153
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:183
|
||||||
msgid "Convert book %d of %d (%s)"
|
msgid "Convert book %d of %d (%s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:88
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:90
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:170
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:203
|
||||||
msgid "Could not convert some books"
|
msgid "Could not convert some books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:89
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:91
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:171
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:204
|
||||||
msgid "Could not convert %d of %d books, because no suitable source format was found."
|
msgid "Could not convert %d of %d books, because no suitable source format was found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:202
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:122
|
||||||
|
msgid "Queueing books for bulk conversion"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182
|
||||||
|
msgid "Queueing "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:236
|
||||||
msgid "You must set a username and password for %s"
|
msgid "You must set a username and password for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:207
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:241
|
||||||
msgid "Fetch news from "
|
msgid "Fetch news from "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:218
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:252
|
||||||
msgid "Convert existing"
|
msgid "Convert existing"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:219
|
#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:253
|
||||||
msgid "The following books have already been converted to %s format. Do you wish to reconvert them?"
|
msgid "The following books have already been converted to %s format. Do you wish to reconvert them?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -6235,72 +6247,72 @@ msgid ""
|
|||||||
"Start the calibre content server."
|
"Start the calibre content server."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:43
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:45
|
||||||
msgid ""
|
msgid ""
|
||||||
"%sUsage%s: %s\n"
|
"%sUsage%s: %s\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:87
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:89
|
||||||
msgid "Created by "
|
msgid "Created by "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:88
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:90
|
||||||
msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks."
|
msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:551
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:553
|
||||||
msgid "Path to the database in which books are stored"
|
msgid "Path to the database in which books are stored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:553
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:555
|
||||||
msgid "Pattern to guess metadata from filenames"
|
msgid "Pattern to guess metadata from filenames"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:555
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:557
|
||||||
msgid "Access key for isbndb.com"
|
msgid "Access key for isbndb.com"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:557
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:559
|
||||||
msgid "Default timeout for network operations (seconds)"
|
msgid "Default timeout for network operations (seconds)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:559
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:561
|
||||||
msgid "Path to directory in which your library of books is stored"
|
msgid "Path to directory in which your library of books is stored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:561
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:563
|
||||||
msgid "The language in which to display the user interface"
|
msgid "The language in which to display the user interface"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:563
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:565
|
||||||
msgid "The default output format for ebook conversions."
|
msgid "The default output format for ebook conversions."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:567
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:569
|
||||||
msgid "Ordered list of formats to prefer for input."
|
msgid "Ordered list of formats to prefer for input."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:569
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:571
|
||||||
msgid "Read metadata from files"
|
msgid "Read metadata from files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:571
|
#: /home/kovid/work/calibre/src/calibre/utils/config.py:573
|
||||||
msgid "The priority of worker processes"
|
msgid "The priority of worker processes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:42
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43
|
||||||
msgid "Waiting..."
|
msgid "Waiting..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:50
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:51
|
||||||
msgid "Stopped"
|
msgid "Stopped"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:52
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||||
msgid "Finished"
|
msgid "Finished"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:69
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70
|
||||||
msgid "Working..."
|
msgid "Working..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -6471,12 +6483,12 @@ msgid "sr-Latn-RS"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#:
|
#:
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:81
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:108
|
||||||
msgid "Skipping duplicated article: %s"
|
msgid "Skipping duplicated article: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#:
|
#:
|
||||||
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:86
|
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:113
|
||||||
msgid "Skipping filtered article: %s"
|
msgid "Skipping filtered article: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user