diff --git a/resources/recipes/globe_and_mail.recipe b/resources/recipes/globe_and_mail.recipe index 0ef8bd9dd8..b2a9915250 100644 --- a/resources/recipes/globe_and_mail.recipe +++ b/resources/recipes/globe_and_mail.recipe @@ -44,8 +44,9 @@ class GlobeAndMail(BasicNewsRecipe): dict(name='div', attrs={'id':'blog-header'}), dict(name='div', attrs={'id':'right-rail'}), dict(name='div', attrs={'id':'group-footer-container'}), - dict(name=['iframe']) + dict(name=['iframe', 'style']) ] + remove_attributes = ['style'] remove_tags_after = [{'id':['article-content']}, {'class':['pull','inline-img'] }, dict(name='img', attrs={'class':'inline-media-embed'}), diff --git a/src/calibre/customize/__init__.py b/src/calibre/customize/__init__.py index 5ab9ac6d1c..5f35a38e12 100644 --- a/src/calibre/customize/__init__.py +++ b/src/calibre/customize/__init__.py @@ -2,7 +2,7 @@ from __future__ import with_statement __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import atexit, os, shutil, sys, tempfile, zipfile +import os, sys, zipfile from calibre.constants import numeric_version from calibre.ptempfile import PersistentTemporaryFile @@ -226,7 +226,7 @@ class MetadataWriterPlugin(Plugin): ''' pass - + class CatalogPlugin(Plugin): ''' A plugin that implements a catalog generator. @@ -251,7 +251,7 @@ class CatalogPlugin(Plugin): #: '%default' + "'"))] cli_options = [] - + def search_sort_db(self, db, opts): @@ -262,7 +262,7 @@ class CatalogPlugin(Plugin): if opts.sort_by: # 2nd arg = ascending db.sort(opts.sort_by, True) - + return db.get_data_as_dict(ids=opts.ids) def get_output_fields(self, opts): @@ -289,29 +289,29 @@ class CatalogPlugin(Plugin): ''' If plugin is not a built-in, copy the plugin's .ui and .py files from the zip file to $TMPDIR. - Tab will be dynamically generated and added to the Catalog Options dialog in + Tab will be dynamically generated and added to the Catalog Options dialog in calibre.gui2.dialogs.catalog.py:Catalog ''' from calibre.customize.builtins import plugins as builtin_plugins from calibre.customize.ui import config from calibre.ptempfile import PersistentTemporaryDirectory - + if not type(self) in builtin_plugins and \ not self.name in config['disabled_plugins']: files_to_copy = ["%s.%s" % (self.name.lower(),ext) for ext in ["ui","py"]] resources = zipfile.ZipFile(self.plugin_path,'r') - + if self.resources_path is None: self.resources_path = PersistentTemporaryDirectory('_plugin_resources', prefix='') - + for file in files_to_copy: try: resources.extract(file, self.resources_path) except: print " customize:__init__.initialize(): %s not found in %s" % (file, os.path.basename(self.plugin_path)) continue - resources.close() - + resources.close() + def run(self, path_to_output, opts, db, ids): ''' Run the plugin. Must be implemented in subclasses. diff --git a/src/calibre/ebooks/oeb/stylizer.py b/src/calibre/ebooks/oeb/stylizer.py index 26fb4ca980..3e7cca981e 100644 --- a/src/calibre/ebooks/oeb/stylizer.py +++ b/src/calibre/ebooks/oeb/stylizer.py @@ -119,7 +119,11 @@ class Stylizer(object): basename = os.path.basename(path) cssname = os.path.splitext(basename)[0] + '.css' stylesheets = [HTML_CSS_STYLESHEET] - head = xpath(tree, '/h:html/h:head')[0] + head = xpath(tree, '/h:html/h:head') + if head: + head = head[0] + else: + head = [] parser = cssutils.CSSParser(fetcher=self._fetch_css_file, log=logging.getLogger('calibre.css')) self.font_face_rules = [] diff --git a/src/calibre/gui2/catalog/catalog_csv_xml.py b/src/calibre/gui2/catalog/catalog_csv_xml.py index f20a97ce2f..7ccb5e017e 100644 --- a/src/calibre/gui2/catalog/catalog_csv_xml.py +++ b/src/calibre/gui2/catalog/catalog_csv_xml.py @@ -9,32 +9,44 @@ __docformat__ = 'restructuredtext en' from calibre.gui2 import gprefs from calibre.gui2.catalog.catalog_csv_xml_ui import Ui_Form -from PyQt4.Qt import QDialog, QWidget, SIGNAL +from PyQt4.Qt import QWidget, QListWidgetItem -class PluginWidget(QWidget,Ui_Form): +class PluginWidget(QWidget, Ui_Form): - TITLE = _('CSV/XML Output') + TITLE = _('CSV/XML Options') HELP = _('Options specific to')+' CSV/XML '+_('output') sync_enabled = False - - def initialize(self, name): - QWidget.__init__(self) + formats = set(['csv', 'xml']) + + def __init__(self, parent=None): + QWidget.__init__(self, parent) self.setupUi(self) + from calibre.library.catalog import FIELDS + self.all_fields = [] + for x in FIELDS: + if x != 'all': + self.all_fields.append(x) + QListWidgetItem(x, self.db_fields) + + def initialize(self, name): self.name = name + fields = gprefs.get(name+'_db_fields', self.all_fields) # Restore the activated fields from last use - for x in range(self.db_fields.count()): - pref = '%s_db_fields_%s' % (self.name, self.db_fields.item(x).text()) - activated = gprefs[pref] if pref in gprefs else False - self.db_fields.item(x).setSelected(activated) + for x in range(self.db_fields.count()): + item = self.db_fields.item(x) + item.setSelected(unicode(item.text()) in fields) def options(self): # Save the currently activated fields + fields = [] for x in range(self.db_fields.count()): - pref = '%s_db_fields_%s' % (self.name, self.db_fields.item(x).text()) - gprefs[pref] = self.db_fields.item(x).isSelected() - - # Return a dictionary with current options for this widget + item = self.db_fields.item(x) + if item.isSelected(): + fields.append(unicode(item.text())) + gprefs.set(self.name+'_db_fields', fields) + + # Return a dictionary with current options for this widget if len(self.db_fields.selectedItems()): - return {'fields':[str(item.text()) for item in self.db_fields.selectedItems()]} + return {'fields':[unicode(item.text()) for item in self.db_fields.selectedItems()]} else: - return {'fields':['all']} \ No newline at end of file + return {'fields':['all']} diff --git a/src/calibre/gui2/catalog/catalog_csv_xml.ui b/src/calibre/gui2/catalog/catalog_csv_xml.ui index 76ad414539..1548a622e5 100644 --- a/src/calibre/gui2/catalog/catalog_csv_xml.ui +++ b/src/calibre/gui2/catalog/catalog_csv_xml.ui @@ -34,91 +34,6 @@ QAbstractItemView::MultiSelection - - - author_sort - - - - - authors - - - - - comments - - - - - cover - - - - - formats - - - - - id - - - - - isbn - - - - - pubdate - - - - - publisher - - - - - rating - - - - - series_index - - - - - series - - - - - size - - - - - tags - - - - - timestamp - - - - - title - - - - - uuid - - diff --git a/src/calibre/gui2/catalog/catalog_tab_template.py b/src/calibre/gui2/catalog/catalog_tab_template.py deleted file mode 100644 index 3c24f5f45f..0000000000 --- a/src/calibre/gui2/catalog/catalog_tab_template.py +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai -from __future__ import with_statement - -__license__ = 'GPL v3' -__copyright__ = '2009, Kovid Goyal ' -__docformat__ = 'restructuredtext en' - - -from import Ui_Form -from PyQt4.Qt import QDialog, QWidget - -class PluginWidget(QWidget,Ui_Form): - - TITLE = _(' Output') - HELP = _('Options specific to')+' '+_('output') - # Indicates whether this plugin wants its output synced to the connected device - sync_enabled = False - - def initialize(self): - QWidget.__init__(self) - self.setupUi(self) - - def options(self): - # Return a dictionary with options for this Widget - return {} \ No newline at end of file diff --git a/src/calibre/gui2/convert/gui_conversion.py b/src/calibre/gui2/convert/gui_conversion.py index b951244e71..07cfffbd84 100644 --- a/src/calibre/gui2/convert/gui_conversion.py +++ b/src/calibre/gui2/convert/gui_conversion.py @@ -4,14 +4,12 @@ __license__ = 'GPL 3' __copyright__ = '2009, John Schember ' __docformat__ = 'restructuredtext en' -import os from optparse import OptionParser from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.ebooks.conversion.plumber import Plumber from calibre.customize.ui import plugin_for_catalog_format from calibre.utils.logging import Log -from calibre.gui2 import choose_dir, Application def gui_convert(input, output, recommendations, notification=DummyReporter(), abort_after_input_dump=False, log=None): @@ -36,7 +34,7 @@ def gui_catalog(fmt, title, dbspec, ids, out_file_name, fmt_options, db = LibraryDatabase2(dbpath) else: # To be implemented in the future pass - + # Create a minimal OptionParser that we can append to parser = OptionParser() args = [] @@ -56,8 +54,8 @@ def gui_catalog(fmt, title, dbspec, ids, out_file_name, fmt_options, plugin = plugin_for_catalog_format(fmt) plugin.run(out_file_name, opts, db) - - + + diff --git a/src/calibre/gui2/dialogs/catalog.py b/src/calibre/gui2/dialogs/catalog.py index 8407e2c426..b53f6d3043 100644 --- a/src/calibre/gui2/dialogs/catalog.py +++ b/src/calibre/gui2/dialogs/catalog.py @@ -6,28 +6,25 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, shutil, sys, tempfile +import os, sys -from PyQt4.Qt import QDialog, QWidget +from PyQt4.Qt import QDialog from calibre.customize.ui import config from calibre.gui2.dialogs.catalog_ui import Ui_Dialog -from calibre.gui2 import gprefs, dynamic -from calibre.customize.ui import available_catalog_formats, catalog_plugins -from calibre.gui2.catalog.catalog_csv_xml import PluginWidget +from calibre.gui2 import dynamic +from calibre.customize.ui import catalog_plugins class Catalog(QDialog, Ui_Dialog): ''' Catalog Dialog builder''' - widgets = [] def __init__(self, parent, dbspec, ids): import re, cStringIO from calibre import prints as info - from calibre.gui2 import dynamic from PyQt4.uic import compileUi - + QDialog.__init__(self, parent) - + # Run the dialog setup generated from catalog.ui self.setupUi(self) self.dbspec, self.ids = dbspec, ids @@ -42,26 +39,25 @@ class Catalog(QDialog, Ui_Dialog): # GwR *** Add option tabs for built-in formats # This code models #69 in calibre/gui2/dialogs/config/__init__.py - self.fmts = [] - + self.fmts, self.widgets = [], [] + from calibre.customize.builtins import plugins as builtin_plugins - from calibre.customize import CatalogPlugin for plugin in catalog_plugins(): if plugin.name in config['disabled_plugins']: continue - + name = plugin.name.lower().replace(' ', '_') if type(plugin) in builtin_plugins: - #info("Adding widget for builtin Catalog plugin %s" % plugin.name) + #info("Adding widget for builtin Catalog plugin %s" % plugin.name) try: catalog_widget = __import__('calibre.gui2.catalog.'+name, fromlist=[1]) pw = catalog_widget.PluginWidget() pw.initialize(name) - pw.ICON = I('forward.svg') + pw.ICON = I('forward.svg') self.widgets.append(pw) - [self.fmts.append([file_type.upper(), pw.sync_enabled,pw]) for file_type in plugin.file_types] + [self.fmts.append([file_type.upper(), pw.sync_enabled,pw]) for file_type in plugin.file_types] except ImportError: info("ImportError with %s" % name) continue @@ -73,38 +69,36 @@ class Catalog(QDialog, Ui_Dialog): if os.path.exists(form) and os.path.exists(klass): #info("Adding widget for user-installed Catalog plugin %s" % plugin.name) - + # Compile the .ui form provided in plugin.zip if not os.path.exists(compiled_form): # info('\tCompiling form', form) buf = cStringIO.StringIO() compileUi(form, buf) dat = buf.getvalue() - dat = re.compile(r'QtGui.QApplication.translate\(.+?,\s+"(.+?)(? 1: + self.tabs.remove(1) + for pw in self.widgets: + if cf in pw.formats: + self.tabs.addTab(pw, pw.TITLE) + break + def format_changed(self, idx): cf = unicode(self.format.currentText()) if cf in self.sync_enabled_formats: @@ -136,6 +143,14 @@ class Catalog(QDialog, Ui_Dialog): self.sync.setDisabled(True) self.sync.setChecked(False) + @property + def fmt_options(self): + ans = {} + if self.tabs.count() > 1: + w = self.tabs.widget(1) + ans = w.options() + return ans + def accept(self): self.catalog_format = unicode(self.format.currentText()) dynamic.set('catalog_preferred_format', self.catalog_format) diff --git a/src/calibre/gui2/tools.py b/src/calibre/gui2/tools.py index b23e0b6259..7dc83baf32 100644 --- a/src/calibre/gui2/tools.py +++ b/src/calibre/gui2/tools.py @@ -238,7 +238,7 @@ def fetch_scheduled_recipe(arg): def generate_catalog(parent, dbspec, ids): from calibre.gui2.dialogs.catalog import Catalog - + # Build the Catalog dialog in gui2.dialogs.catalog d = Catalog(parent, dbspec, ids) @@ -248,22 +248,13 @@ def generate_catalog(parent, dbspec, ids): # Create the output file out = PersistentTemporaryFile(suffix='_catalog_out.'+d.catalog_format.lower()) - # Retrieve plugin options - fmt_options = {} - for x in range(d.tabs.count()): - if str(d.tabs.tabText(x)).find(str(d.catalog_format)) > -1: - for fmt in d.fmts: - if fmt[0] == d.catalog_format: - fmt_options = fmt[2].options() - # print "gui2.tools:generate_catalog(): options for %s: %s" % (fmt[0], fmt_options) - args = [ d.catalog_format, d.catalog_title, dbspec, ids, out.name, - fmt_options + d.fmt_options ] out.close() diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index ccff7ccdc8..889ad75645 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -9,7 +9,7 @@ __docformat__ = 'restructuredtext en' '''The main GUI''' -import atexit, os, shutil, sys, tempfile, textwrap, collections, time +import os, shutil, sys, textwrap, collections, time from xml.parsers.expat import ExpatError from Queue import Queue, Empty from threading import Thread @@ -1092,6 +1092,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.library_view.model().refresh_ids(ids) self.library_view.model().current_changed(self.library_view.currentIndex(), self.library_view.currentIndex()) + if ids: + self.tags_view.recount() def delete_all_but_selected_formats(self, *args): ids = self._get_selected_ids() @@ -1113,6 +1115,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.library_view.model().refresh_ids(ids) self.library_view.model().current_changed(self.library_view.currentIndex(), self.library_view.currentIndex()) + if ids: + self.tags_view.recount() def delete_covers(self, *args): @@ -1359,7 +1363,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): ############################### Generate catalog ########################### - def generate_catalog(self): + def generate_catalog(self): rows = self.library_view.selectionModel().selectedRows() if not rows or len(rows) < 2: rows = xrange(self.library_view.model().rowCount(QModelIndex())) @@ -1375,7 +1379,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): ret = generate_catalog(self, dbspec, ids) if ret is None: return - + func, args, desc, out, sync, title = ret fmt = os.path.splitext(out)[1][1:].upper() @@ -1384,7 +1388,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): description=desc) job.catalog_file_path = out job.fmt = fmt - job.catalog_sync, job.catalog_title = sync, title + job.catalog_sync, job.catalog_title = sync, title self.status_bar.showMessage(_('Generating %s catalog...')%fmt) def catalog_generated(self, job): @@ -1399,12 +1403,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.status_bar.showMessage(_('Catalog generated.'), 3000) self.sync_catalogs() if job.fmt in ['CSV','XML']: - export_dir = choose_dir(self, 'Export Catalog Directory', - 'Select destination for %s.%s' % (job.catalog_title, job.fmt.lower())) + export_dir = choose_dir(self, _('Export Catalog Directory'), + _('Select destination for %s.%s') % (job.catalog_title, job.fmt.lower())) if export_dir: destination = os.path.join(export_dir, '%s.%s' % (job.catalog_title, job.fmt.lower())) shutil.copyfile(job.catalog_file_path, destination) - + ############################### Fetch news ################################# def download_scheduled_recipe(self, arg): diff --git a/src/calibre/library/catalog.py b/src/calibre/library/catalog.py index 32f2503b2c..19e00b6488 100644 --- a/src/calibre/library/catalog.py +++ b/src/calibre/library/catalog.py @@ -2,6 +2,11 @@ import os from calibre.customize import CatalogPlugin +FIELDS = ['all', 'author_sort', 'authors', 'comments', + 'cover', 'formats', 'id', 'isbn', 'pubdate', 'publisher', 'rating', + 'series_index', 'series', 'size', 'tags', 'timestamp', 'title', + 'uuid'] + class CSV_XML(CatalogPlugin): 'CSV/XML catalog generator' @@ -22,11 +27,9 @@ class CSV_XML(CatalogPlugin): dest = 'fields', help = _('The fields to output when cataloging books in the ' 'database. Should be a comma-separated list of fields.\n' - 'Available fields: all, author_sort, authors, comments, ' - 'cover, formats, id, isbn, pubdate, publisher, rating, ' - 'series_index, series, size, tags, timestamp, title, uuid.\n' - "Default: '%default'\n" - "Applies to: CSV, XML output formats")), + 'Available fields: %s.\n' + "Default: '%%default'\n" + "Applies to: CSV, XML output formats")%', '.join(FIELDS)), Option('--sort-by', default = 'id', @@ -41,7 +44,7 @@ class CSV_XML(CatalogPlugin): log = Log() self.fmt = path_to_output.rpartition('.')[2] - + if False and opts.verbose: log("%s:run" % self.name) log(" path_to_output: %s" % path_to_output) @@ -54,7 +57,7 @@ class CSV_XML(CatalogPlugin): log(" opts:") for key in keys: log(" %s: %s" % (key, opts_dict[key])) - + # Get the sorted, filtered database as a dictionary data = self.search_sort_db(db, opts) @@ -69,7 +72,7 @@ class CSV_XML(CatalogPlugin): outfile = open(path_to_output, 'w') # Output the field headers - outfile.write('%s\n' % ','.join(fields)) + outfile.write(u'%s\n' % u','.join(fields)) # Output the entry fields for entry in data: @@ -80,15 +83,15 @@ class CSV_XML(CatalogPlugin): item = ', '.join(item) if x < len(fields) - 1: if item is not None: - outstr += '"%s",' % str(item).replace('"','""') + outstr += u'"%s",' % unicode(item).replace('"','""') else: outstr += '"",' else: if item is not None: - outstr += '"%s"\n' % str(item).replace('"','""') + outstr += u'"%s"\n' % unicode(item).replace('"','""') else: outstr += '""\n' - outfile.write(outstr) + outfile.write(outstr.encode('utf-8')) outfile.close() elif self.fmt == 'xml': diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index ddfb96704c..cf29106684 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -673,7 +673,7 @@ def command_catalog(args, dbpath): if opts.verbose: log("library.cli:command_catalog dispatching to plugin %s" % plugin.name) if opts.ids: - opts.ids = [int(id) for id in opts.ids.split(',')] + opts.ids = [int(id) for id in opts.ids.split(',')] with plugin: plugin.run(args[1], opts, get_db(dbpath, opts)) diff --git a/src/calibre/manual/develop.rst b/src/calibre/manual/develop.rst index efab5a1cac..b9cebcab3d 100644 --- a/src/calibre/manual/develop.rst +++ b/src/calibre/manual/develop.rst @@ -194,7 +194,7 @@ You can insert the following two lines of code to start an interactive python se When running from the command line, this will start an interactive python interpreter with access to all locally defined variables (variables in the local scope). The interactive prompt even has TAB completion for object properties and you can use the various python facilities for introspection, such as -:function:`dir`, :function:`type`, :function:`repr`, etc. +:func:`dir`, :func:`type`, :func:`repr`, etc. Using print statements ^^^^^^^^^^^^^^^^^^^^^^^ @@ -204,4 +204,18 @@ terminal. For example, you can start the GUI from the terminal as:: calibre-debug -g +Executing arbitrary scripts in the calibre python environment +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The :command:`calibre-debug` command provides a couple of handy switches to execute your own +code, with access to the calibre modules:: + + calibre-debug -c "some python code" + +is great for testing a little snippet of code on the command line. It works in the same way as the -c switch to the python interpreter:: + + calibre-debug -e myscript.py + +can be used to execute your own python script. It works in the same way as passing the script to the python interpreter, except +that the calibre environment is fully initialized, so you can use all the calibre code in your script. diff --git a/src/calibre/manual/images/bookmark.png b/src/calibre/manual/images/bookmark.png new file mode 100644 index 0000000000..c6671a2541 Binary files /dev/null and b/src/calibre/manual/images/bookmark.png differ diff --git a/src/calibre/manual/images/font_size.png b/src/calibre/manual/images/font_size.png new file mode 100644 index 0000000000..59ba041d83 Binary files /dev/null and b/src/calibre/manual/images/font_size.png differ diff --git a/src/calibre/manual/images/full_screen.png b/src/calibre/manual/images/full_screen.png new file mode 100644 index 0000000000..ed1e283194 Binary files /dev/null and b/src/calibre/manual/images/full_screen.png differ diff --git a/src/calibre/manual/images/nav_pos.png b/src/calibre/manual/images/nav_pos.png new file mode 100644 index 0000000000..2b99182176 Binary files /dev/null and b/src/calibre/manual/images/nav_pos.png differ diff --git a/src/calibre/manual/images/pref_button.png b/src/calibre/manual/images/pref_button.png new file mode 100644 index 0000000000..f43f2d7627 Binary files /dev/null and b/src/calibre/manual/images/pref_button.png differ diff --git a/src/calibre/manual/images/prev_next.png b/src/calibre/manual/images/prev_next.png new file mode 100644 index 0000000000..cc761704e7 Binary files /dev/null and b/src/calibre/manual/images/prev_next.png differ diff --git a/src/calibre/manual/images/ref_mode.png b/src/calibre/manual/images/ref_mode.png new file mode 100644 index 0000000000..67a75edf21 Binary files /dev/null and b/src/calibre/manual/images/ref_mode.png differ diff --git a/src/calibre/manual/images/ref_mode_button.png b/src/calibre/manual/images/ref_mode_button.png new file mode 100644 index 0000000000..efed1af26b Binary files /dev/null and b/src/calibre/manual/images/ref_mode_button.png differ diff --git a/src/calibre/manual/images/toc.png b/src/calibre/manual/images/toc.png new file mode 100644 index 0000000000..462b6b6c32 Binary files /dev/null and b/src/calibre/manual/images/toc.png differ diff --git a/src/calibre/manual/index.rst b/src/calibre/manual/index.rst index d736dbd020..827d848eb1 100644 --- a/src/calibre/manual/index.rst +++ b/src/calibre/manual/index.rst @@ -29,6 +29,7 @@ Sections gui news + viewer conversion metadata faq diff --git a/src/calibre/manual/viewer.rst b/src/calibre/manual/viewer.rst new file mode 100644 index 0000000000..70bf98412a --- /dev/null +++ b/src/calibre/manual/viewer.rst @@ -0,0 +1,105 @@ +.. include:: global.rst + +.. _gui: + +The E-book Viewer +============================= + +|app| includes a built-in E-book viewer that can view all the major e-book formats. +The viewer is highly customizable and has many advanced features. + +.. contents:: + :depth: 1 + :local: + +Starting the viewer +-------------------- + +You can view any of the books in your |app| library by selecting the book and pressing the View button. This +will open up the book in the e-book viewer. You can also launch the viewer by itself, from the Start menu in windows +or using the command :command:`ebook-viewer` in Linux and OS X (you have to install the command line tools on OS X +first by going to Preferences->Advanced). + +Navigating around an e-book +----------------------------- + +.. |pni| image:: images/prev_next.png + +.. |bookmi| image:: images/bookmark.png + +.. |toci| image:: images/toc.png + +.. |navposi| image:: images/nav_pos.png + +.. |refmi| image:: images/ref_mode_button.png + + +You can "turn pages" in a book by using the :guilabel:`Page Next` and :guilabel:`Page Previous` buttons |pni|, or by pressing +the Page Down/Page Up keys. Unlike most e-book viewers, |app| does not force you to view books in paged mode. You can +scroll by amounts less than a page by using the scroll bar or various customizable keyboard shortcuts. + +Bookmarks +^^^^^^^^^^^^ + +When you are in the middle of a book and close the viewer, it will remember where you stopped reading and return there +the next time you open the book. You can also set bookmarks in the book by using the Bookmark button |bookmi|. When viewing EPUB format +books, these bookmarks are actually saved in the EPUB file itself, so you can add bookmarks, then send the file to a friend and +when they open the file, they will be able to see your bookmarks. + +Table of Contents +^^^^^^^^^^^^^^^^^^^^ + +If the book you are reading defines a Table of Contents, you can access it by pressing the Table of Contents button |toci|. +This will bring up a list of sections in the book and you can click on any of them to jump to that portion of the book. + +Navigating by location +^^^^^^^^^^^^^^^^^^^^^^^^ + +E-books, unlike paper books have no concept of pages. Instead, +as you read through the book, you will notice that your position in the book is displayed in the upper left corner in a box +like this |navposi|. This is both your current position and the total length of the book. These numbers are independent of the screen size and font +size you are viewing the boko at, and they play a similar role to page numbers in paper books. +You can enter any number you like to go to the corresponding location in the book. + +|app| also has a very handy +reference mode. You can turn it on by clicking the Reference Mode button |refmi|. Once you do this, every time you move your +mouse over a paragraph, calibre will display a unique number made up of the section and paragraph numbers. + +.. image:: images/ref_mode.png + +You can use this number to unambiguously refer to parts of the books when discussing it with friends or referring to it +in other works. You can enter these numbers in the box marked Go to at the top of the window to go to a particular +reference location. + +If you click on links inside the e-book to take you to different parts of the book, like an endnote, you can use the back and forward buttons +in the top left corner to return to where you were. These button behave just like those in a web browser. + +Customizing the look and feel of your reading experience +------------------------------------------------------------ + +.. |fontsizei| image:: images/font_size.png + +.. |fsi| image:: images/full_screen.png + +.. |prefbi| image:: images/pref_button.png + +You can change font sizes on the fly by using the font size buttons |fontsizei|. You can also make the viewer full screen +by pressing the Full Screen button |fsi|. By clicking the Preferences button |prefbi|, you can change the default fonts used +by the viewer to ones you like as well as the default font size when the viewer starts up. + +More advanced customization can be achieved by the User Stylesheet setting. This is a stylesheet you can set that will be applied +to every book. Using it you can do things like have white text on a black background, change paragraph styles, text justification, etc. +For examples if custom stylesheets used by |app|'s users, see `the forums `_. + +Dictionary lookup +------------------- + +You can lookup the meaning of words in the current book by right clicking on a word. |app| uses the publicly available dictionary +server at ``dict.org`` to lookup words. The definition is displayed in a small box at the bottom of the screen. + +Copying text and images +------------------------- + +You can select text and images by dragging the content with your mouse and then right click to copy to the clipboard. +The copied material can be pasted into another application as plain text and images. + diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 0f34cbc615..142bb500b3 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.6.34\n" -"POT-Creation-Date: 2010-01-16 13:38+MST\n" -"PO-Revision-Date: 2010-01-16 13:38+MST\n" +"POT-Creation-Date: 2010-01-21 20:05+MST\n" +"PO-Revision-Date: 2010-01-21 20:05+MST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -15,11 +15,11 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:42 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 msgid "Does absolutely nothing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 @@ -54,8 +54,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:894 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:22 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:48 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:49 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:44 @@ -63,8 +63,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:155 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:597 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:787 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:607 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:797 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:896 @@ -95,10 +95,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:28 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:217 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:272 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 @@ -127,11 +127,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:1180 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1547 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1549 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1660 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665 #: /home/kovid/work/calibre/src/calibre/library/server.py:645 #: /home/kovid/work/calibre/src/calibre/library/server.py:717 #: /home/kovid/work/calibre/src/calibre/library/server.py:764 -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 @@ -140,23 +140,23 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:64 msgid "Base" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:150 msgid "File type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:183 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:184 msgid "Metadata reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:215 msgid "Metadata writer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:238 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:241 msgid "Catalog generator" msgstr "" @@ -410,7 +410,7 @@ msgstr "" msgid "Communicate with the Cybook Gen 3 / Opus eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:23 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 msgid "Communicate with the EB600 eBook reader." msgstr "" @@ -583,8 +583,8 @@ msgstr "" msgid "There is insufficient free space on the storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:815 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:799 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:822 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:232 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:132 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1068 @@ -1027,9 +1027,9 @@ msgstr "" msgid "Normally, if the input file has no cover and you don't specify one, a default cover is generated with the title, authors, etc. This option disables the generation of this cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:143 -#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:128 -#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:101 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:129 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" msgstr "" @@ -1443,27 +1443,27 @@ msgstr "" msgid "Set the BookID in LRF files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:148 msgid "No file specified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:159 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:163 msgid "Original metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:176 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:180 msgid "Changed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:188 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:192 msgid "OPF created in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:198 msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:196 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:200 msgid "No cover found" msgstr "" @@ -1653,30 +1653,6 @@ msgstr "" msgid "Main Text" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:53 -msgid "Options to control e-book conversion." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:60 -msgid "Character encoding for input. Default is to auto detect." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62 -msgid "Output file. Default is derived from input filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:64 -msgid "Produce more human-readable XML output." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:66 -msgid "Useful for debugging." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:71 -msgid "Usage: ebook-convert INFILE OUTFILE [OPTIONS..]" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:39 msgid "%s format books are not supported" msgstr "" @@ -1943,7 +1919,7 @@ msgstr "" msgid "Specify the character encoding of the output document. The default is cp1252." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:183 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:199 msgid "This RTF file has a feature calibre does not support. Convert it to HTML first and then try it." msgstr "" @@ -1979,116 +1955,116 @@ msgstr "" msgid "Force splitting on the max-line-length value when no space is present. Also allows max-line-length to be below the minimum" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:28 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:30 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:32 msgid "Toolbar icon size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:34 msgid "Show button labels in the toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:36 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:38 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:40 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:42 msgid "Sort tags list by popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:44 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:46 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:48 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:51 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:54 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:60 msgid "Delete books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:62 msgid "Show the cover flow in a separate window instead of in the main calibre window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:64 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:66 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:88 msgid "Maximum number of waiting worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:90 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:92 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:439 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:164 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:395 msgid "Choose Files" msgstr "" @@ -2153,23 +2129,11 @@ msgstr "" msgid "Saved" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36 -msgid "For settings that cannot be specified in this dialog, use the values saved in a previous conversion (if they exist) instead of using the defaults specified in the Preferences" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:67 -msgid "Bulk Convert" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185 -msgid "Options specific to the output format." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 -msgid "Comic Input" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16 +msgid "CSV/XML Options" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 @@ -2186,14 +2150,20 @@ msgstr "" msgid "Options specific to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 -msgid "input" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 +msgid "output" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:41 @@ -2223,6 +2193,40 @@ msgstr "" msgid "Form" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:35 +msgid "Fields to include in output:" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28 +msgid "Tab template for catalog.ui" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36 +msgid "For settings that cannot be specified in this dialog, use the values saved in a previous conversion (if they exist) instead of using the defaults specified in the Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:67 +msgid "Bulk Convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185 +msgid "Options specific to the output format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 +msgid "Comic Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 +msgid "input" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:94 msgid "&Number of Colors:" @@ -2352,17 +2356,6 @@ msgstr "" msgid "EPUB Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 -msgid "output" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:42 msgid "Do not &split on page breaks" msgstr "" @@ -2806,7 +2799,7 @@ msgid "RB Output" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1609 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1633 msgid "Choose the format to view" msgstr "" @@ -3338,32 +3331,32 @@ msgstr "" msgid "&Next" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:24 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38 msgid "My Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:262 msgid "Generate catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:68 msgid "Catalog &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 msgid "Catalog &title (existing catalog with the same title will be replaced):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 msgid "&Send catalog to device automatically" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 msgid "Catalog options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 msgid "Generate catalog for {0} books" msgstr "" @@ -3464,7 +3457,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:477 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1229 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "" @@ -3534,12 +3527,12 @@ msgid "Access log:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 msgid "Failed to start content server" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:700 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:550 msgid "Select location for books" msgstr "" @@ -4141,7 +4134,7 @@ msgid "Choose formats for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1004 msgid "Books" msgstr "" @@ -5320,11 +5313,11 @@ msgstr "" msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:274 msgid "Convert existing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:275 msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" @@ -5405,7 +5398,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1717 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1741 msgid "Save only %s format to disk" msgstr "" @@ -5438,7 +5431,7 @@ msgid "Bulk convert" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 -msgid "Create catalog of the books in your calibre library" +msgid "Create catalog of books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:376 @@ -5455,36 +5448,40 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:475 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:558 msgid "Calibre Library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:485 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1873 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1897 msgid "Choose a location for your ebook library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:523 +msgid "Calibre Quick Start Guide" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:703 msgid "Browse by covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:837 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:851 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:839 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:853 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:863 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:889 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:876 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:890 msgid "" "\n" "

The database of books on the reader is corrupted. Try the following:\n" @@ -5495,294 +5492,294 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:952 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:939 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:953 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:983 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1043 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:991 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1005 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:992 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1006 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:993 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1007 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:994 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1008 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:995 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1009 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:996 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1010 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1011 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:998 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1012 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1013 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1003 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1017 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1052 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1040 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1053 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1072 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1062 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1622 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1072 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1085 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1101 msgid "Choose formats not to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1124 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137 msgid "The selected books will be permanently deleted and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1151 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1164 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1182 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1195 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1183 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1240 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1273 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1298 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1356 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1459 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1196 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1253 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1311 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1370 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1483 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1198 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1215 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1224 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1237 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1238 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1228 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1272 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1252 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1297 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1310 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1300 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1313 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1340 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1328 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1341 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1335 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1336 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1348 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1349 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1337 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1357 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1371 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1369 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1417 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1458 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1487 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1627 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1683 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1643 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1667 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1644 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1668 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 "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1684 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1701 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1725 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1702 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1726 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1745 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1746 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1801 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1825 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1802 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1826 msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1825 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1853 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1826 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1839 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1863 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1854 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1878 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1882 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906 msgid "Invalid library location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1883 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907 msgid "Could not access %s. Using %s as the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1957 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 "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1958 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1982 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1961 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1985 msgid "" " is communicating with the device!
\n" " Quitting may cause corruption on the device.
\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1965 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1989 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2017 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2041 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2036 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2060 msgid "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2044 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2068 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2045 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2069 msgid "%s has been updated to version %s. See the new features. Visit the download page?" msgstr "" @@ -5842,89 +5839,93 @@ msgstr "" msgid "Import" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:154 msgid "Configure Ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:155 msgid "&Font options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:156 msgid "Se&rif family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:157 msgid "&Sans family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:158 msgid "&Monospace family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:159 msgid "&Default font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:157 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:159 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:168 msgid " px" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:161 msgid "Monospace &font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:163 msgid "S&tandard font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:164 msgid "Serif" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:165 msgid "Sans-serif" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:166 msgid "Monospace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:167 msgid "Remember last used &window size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:169 msgid "Maximum &view width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:170 msgid "H&yphenate (break line in the middle of large words)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:171 msgid "The default language to use for hyphenation rules. If the book does not specify a language, this will be used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:172 msgid "Default &language for hyphenation:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:173 +msgid "&Resize images larger than the viewer window (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:174 msgid "&User stylesheet" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:175 msgid "&General" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:176 msgid "Double click to change a keyboard shortcut" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:177 msgid "&Keyboard shortcuts" msgstr "" @@ -5942,7 +5943,7 @@ msgid "Remember last used window size" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:79 msgid "Set the user CSS stylesheet. This can be used to customize the look of all books." msgstr "" @@ -5950,43 +5951,47 @@ msgstr "" msgid "Maximum width of the viewer window, in pixels." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:45 -msgid "Hyphenate text" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:46 +msgid "Resize images larger than the viewer window to fit inside it" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:47 -msgid "Default language for hyphenation rules" +msgid "Hyphenate text" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:49 -msgid "Font options" +msgid "Default language for hyphenation rules" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:51 -msgid "The serif font family" +msgid "Font options" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:53 -msgid "The sans-serif font family" +msgid "The serif font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:55 -msgid "The monospaced font family" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:56 -msgid "The standard font size in px" +msgid "The sans-serif font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:57 -msgid "The monospaced font size in px" +msgid "The monospaced font family" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:58 +msgid "The standard font size in px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59 +msgid "The monospaced font size in px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:60 msgid "The standard font type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:407 msgid "&Lookup in dictionary" msgstr "" @@ -6294,7 +6299,7 @@ msgstr "" msgid "Could not move library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:624 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:625 msgid "welcome wizard" msgstr "" @@ -6519,15 +6524,15 @@ msgstr "" msgid "The maximum number of matches to return per OPDS query. This affects Stanza, WordPlayer, etc. integration." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:23 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:28 msgid "" "The fields to output when cataloging books in the database. Should be a comma-separated list of fields.\n" -"Available fields: all, author_sort, authors, comments, cover, formats, id, isbn, pubdate, publisher, rating, series_index, series, size, tags, timestamp, title, uuid.\n" -"Default: '%default'\n" +"Available fields: %s.\n" +"Default: '%%default'\n" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:34 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:37 msgid "" "Output field to sort on.\n" "Available fields: author_sort, id, rating, size, timestamp, title.\n" @@ -6731,20 +6736,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:648 msgid "" +"Comma-separated list of database IDs to catalog.\n" +"If declared, --search is ignored.\n" +"Default: all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:652 +msgid "" "Filter the results by the search query. For the format of the search query, please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:654 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:658 #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:482 msgid "Show detailed output information. Useful for debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:692 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:671 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:707 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:689 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -6761,27 +6773,27 @@ msgstr "" msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1686 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1691 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1715 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1732 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1737 msgid "Compacting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1825 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1830 msgid "Checking SQL integrity..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1862 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867 msgid "Checking for missing files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1884 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1889 msgid "Checked id" msgstr "" @@ -6909,47 +6921,47 @@ msgstr "" msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:631 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:650 msgid "Path to the database in which books are stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:633 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:652 msgid "Pattern to guess metadata from filenames" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:635 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:654 msgid "Access key for isbndb.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:637 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:656 msgid "Default timeout for network operations (seconds)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:639 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:658 msgid "Path to directory in which your library of books is stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:641 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:660 msgid "The language in which to display the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:643 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:662 msgid "The default output format for ebook conversions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:647 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:666 msgid "Ordered list of formats to prefer for input." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:649 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:668 msgid "Read metadata from files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:651 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:670 msgid "The priority of worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:653 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:672 msgid "Swap author first and last names when reading metadata" msgstr "" @@ -7026,14 +7038,18 @@ msgid "English (Singapore)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:107 -msgid "German (AT)" +msgid "English (Yemen)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:108 -msgid "Dutch (NL)" +msgid "German (AT)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:109 +msgid "Dutch (NL)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110 msgid "Dutch (BE)" msgstr "" @@ -7091,75 +7107,75 @@ msgstr "" msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:520 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:528 msgid "The \"%s\" recipe needs a username and password." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:606 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:614 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:608 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:616 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:614 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:622 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:616 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:624 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:618 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:626 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:707 msgid "Could not fetch article. Run with -vv to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:720 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:728 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:725 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:733 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:739 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:789 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:797 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:805 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:813 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:815 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:823 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:827 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:835 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:970 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:978 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1041 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1049 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1052 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1060 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1069 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1077 msgid "Fetching feed" msgstr ""