From 6b7d51e282bcb34665391447a1459568de0ab7c5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 7 Aug 2011 10:25:22 -0600 Subject: [PATCH 1/9] Fix regression in 0.8.13 that caused incorrect title/author for downloaded news if you turned off reading metadata from file contents in Preferences->Adding books --- src/calibre/ebooks/metadata/meta.py | 6 +----- src/calibre/library/database2.py | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py index b0c43a8182..3f3cc3e142 100644 --- a/src/calibre/ebooks/metadata/meta.py +++ b/src/calibre/ebooks/metadata/meta.py @@ -67,10 +67,6 @@ def _metadata_from_formats(formats, force_read_metadata=False, pattern=None): return mi -def is_recipe(filename): - return filename.startswith('calibre') and \ - filename.rpartition('.')[0].endswith('_recipe_out') - def get_metadata(stream, stream_type='lrf', use_libprs_metadata=False, force_read_metadata=False, pattern=None): pos = 0 @@ -106,7 +102,7 @@ def _get_metadata(stream, stream_type, use_libprs_metadata, mi = MetaInformation(None, None) name = os.path.basename(getattr(stream, 'name', '')) base = metadata_from_filename(name, pat=pattern) - if force_read_metadata or is_recipe(name) or prefs['read_file_metadata']: + if force_read_metadata or prefs['read_file_metadata']: mi = get_file_type_metadata(stream, stream_type) if base.title == os.path.splitext(name)[0] and \ base.is_null('authors') and base.is_null('isbn'): diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index fff2d2189c..3471d93332 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -3024,7 +3024,8 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): format = os.path.splitext(path)[1][1:].lower() stream = path if hasattr(path, 'read') else lopen(path, 'rb') stream.seek(0) - mi = get_metadata(stream, format, use_libprs_metadata=False) + mi = get_metadata(stream, format, use_libprs_metadata=False, + force_read_metadata=True) stream.seek(0) if mi.series_index is None: mi.series_index = self.get_next_series_num_for(mi.series) From b270e3a69f71298b2dd8c1a08b703fd7a7f6b58f Mon Sep 17 00:00:00 2001 From: John Schember Date: Sun, 7 Aug 2011 13:53:04 -0400 Subject: [PATCH 2/9] Store: Fix bug #822359, typo in open books store. --- src/calibre/gui2/store/stores/open_books_plugin.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/store/stores/open_books_plugin.py b/src/calibre/gui2/store/stores/open_books_plugin.py index 2e6c438d9d..73bfda26da 100644 --- a/src/calibre/gui2/store/stores/open_books_plugin.py +++ b/src/calibre/gui2/store/stores/open_books_plugin.py @@ -28,7 +28,7 @@ class OpenBooksStore(BasicStoreConfig, StorePlugin): if external or self.config.get('open_external', False): open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url))) else: - d = WebStoreDialog(self.gui, self.url, parent, detail_item) + d = WebStoreDialog(self.gui, url, parent, detail_item) d.setWindowTitle(self.name) d.set_tags(self.config.get('tags', '')) d.exec_() From 8408f0119f4294378e3c9d3c434f5fdbff8f3c04 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 7 Aug 2011 11:54:48 -0600 Subject: [PATCH 3/9] Fix #822359 (AttributeError:'OpenBooksStore' object has no attribute 'url' Traceback (most recent call last): File "/usr/lib/calibre/calibre/gui2/actions/store.py", line 126, in open_store store_plugin.open(self.gui) File "/usr/lib/calibre/calibre/gui2/store/stores/open_books_plugin.py", line 31, in open d = WebStoreDialog(self.gui, self.url, parent, detail_item) AttributeError: 'OpenBooksStore' object has no attribute 'url' [with fix]) --- src/calibre/gui2/store/stores/open_books_plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/store/stores/open_books_plugin.py b/src/calibre/gui2/store/stores/open_books_plugin.py index 2e6c438d9d..99b68656e9 100644 --- a/src/calibre/gui2/store/stores/open_books_plugin.py +++ b/src/calibre/gui2/store/stores/open_books_plugin.py @@ -28,7 +28,7 @@ class OpenBooksStore(BasicStoreConfig, StorePlugin): if external or self.config.get('open_external', False): open_url(QUrl(url_slash_cleaner(detail_item if detail_item else url))) else: - d = WebStoreDialog(self.gui, self.url, parent, detail_item) + d = WebStoreDialog(self.gui, url, parent, detail_item) d.setWindowTitle(self.name) d.set_tags(self.config.get('tags', '')) d.exec_() @@ -44,7 +44,7 @@ class OpenBooksStore(BasicStoreConfig, StorePlugin): for data in doc.xpath('//ul[@id="object_list"]//li'): if counter <= 0: break - + id = ''.join(data.xpath('.//div[@class="links"]/a[1]/@href')) id = id.strip() if not id: From 1c739fe9cbd102b4f0fba816fa51798293cb3053 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 8 Aug 2011 12:24:10 +0100 Subject: [PATCH 4/9] Allow integer and float fields to go to -999999. -1000000 is the value of 'undefined'. Add a template editor button to the save templates. --- src/calibre/gui2/custom_column_widgets.py | 9 ++++---- src/calibre/gui2/library/delegates.py | 4 ++-- src/calibre/gui2/preferences/save_template.py | 9 ++++++++ src/calibre/gui2/preferences/save_template.ui | 22 +++++++++++++++---- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index 836c8eaf43..9e4bd41bbd 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -87,7 +87,7 @@ class Int(Base): self.widgets = [QLabel('&'+self.col_metadata['name']+':', parent), QSpinBox(parent)] w = self.widgets[1] - w.setRange(-100, 100000000) + w.setRange(-1000000, 100000000) w.setSpecialValueText(_('Undefined')) w.setSingleStep(1) @@ -110,7 +110,7 @@ class Float(Int): self.widgets = [QLabel('&'+self.col_metadata['name']+':', parent), QDoubleSpinBox(parent)] w = self.widgets[1] - w.setRange(-100., float(100000000)) + w.setRange(-1000000., float(100000000)) w.setDecimals(2) w.setSpecialValueText(_('Undefined')) w.setSingleStep(1) @@ -300,7 +300,6 @@ class Series(Base): w = QDoubleSpinBox(parent) w.setRange(-100., float(100000000)) w.setDecimals(2) - w.setSpecialValueText(_('Undefined')) w.setSingleStep(1) self.idx_widget=w self.widgets.append(w) @@ -605,7 +604,7 @@ class BulkInt(BulkBase): def setup_ui(self, parent): self.make_widgets(parent, QSpinBox) - self.main_widget.setRange(-100, 100000000) + self.main_widget.setRange(-1000000, 100000000) self.main_widget.setSpecialValueText(_('Undefined')) self.main_widget.setSingleStep(1) @@ -627,7 +626,7 @@ class BulkFloat(BulkInt): def setup_ui(self, parent): self.make_widgets(parent, QDoubleSpinBox) - self.main_widget.setRange(-100., float(100000000)) + self.main_widget.setRange(-1000000., float(100000000)) self.main_widget.setDecimals(2) self.main_widget.setSpecialValueText(_('Undefined')) self.main_widget.setSingleStep(1) diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index a9c71e526b..c4ea05d38c 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -300,13 +300,13 @@ class CcNumberDelegate(QStyledItemDelegate): # {{{ col = m.column_map[index.column()] if m.custom_columns[col]['datatype'] == 'int': editor = QSpinBox(parent) - editor.setRange(-100, 100000000) + editor.setRange(-1000000, 100000000) editor.setSpecialValueText(_('Undefined')) editor.setSingleStep(1) else: editor = QDoubleSpinBox(parent) editor.setSpecialValueText(_('Undefined')) - editor.setRange(-100., 100000000) + editor.setRange(-1000000., 100000000) editor.setDecimals(2) return editor diff --git a/src/calibre/gui2/preferences/save_template.py b/src/calibre/gui2/preferences/save_template.py index 174c8dfa42..627c4c7fa9 100644 --- a/src/calibre/gui2/preferences/save_template.py +++ b/src/calibre/gui2/preferences/save_template.py @@ -12,6 +12,7 @@ from calibre.gui2 import error_dialog, question_dialog from calibre.gui2.preferences.save_template_ui import Ui_Form from calibre.library.save_to_disk import FORMAT_ARG_DESCS, preprocess_template from calibre.utils.formatter import validation_formatter +from calibre.gui2.dialogs.template_dialog import TemplateDialog class SaveTemplate(QWidget, Ui_Form): @@ -40,6 +41,14 @@ class SaveTemplate(QWidget, Ui_Form): self.opt_template.editTextChanged.connect(self.changed) self.opt_template.currentIndexChanged.connect(self.changed) self.option_name = name + self.open_editor.clicked.connect(self.do_open_editor) + + def do_open_editor(self): + t = TemplateDialog(self, self.opt_template.text()) + t.setWindowTitle(_('Edit template')) + if t.exec_(): + self.opt_template.set_value(t.rule[1]) + def changed(self, *args): self.changed_signal.emit() diff --git a/src/calibre/gui2/preferences/save_template.ui b/src/calibre/gui2/preferences/save_template.ui index 0d7422abcf..c516564ea1 100644 --- a/src/calibre/gui2/preferences/save_template.ui +++ b/src/calibre/gui2/preferences/save_template.ui @@ -20,7 +20,7 @@ Save &template - + By adjusting the template below, you can control what folders the files are saved in and what filenames they are given. You can use the / character to indicate sub-folders. Available metadata variables are described below. If a particular book does not have some metadata, the variable will be replaced by the empty string. @@ -30,18 +30,32 @@ - + Available variables: - + - + + + + 10 + 0 + + + + + + + + Template Editor + + From ee06aa1b3192b7bc4d55bfd9d96fbfa26636a675 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 8 Aug 2011 09:55:58 -0600 Subject: [PATCH 5/9] set correct size policy for template hitsory combobox in preferences. --- src/calibre/gui2/preferences/save_template.ui | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/calibre/gui2/preferences/save_template.ui b/src/calibre/gui2/preferences/save_template.ui index c516564ea1..98515e8377 100644 --- a/src/calibre/gui2/preferences/save_template.ui +++ b/src/calibre/gui2/preferences/save_template.ui @@ -48,6 +48,12 @@ 0 + + QComboBox::AdjustToMinimumContentsLengthWithIcon + + + 40 + From 3467ba839b371d3d0464b9b7076f502a738aa9a1 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 8 Aug 2011 17:25:27 +0100 Subject: [PATCH 6/9] Make the folder device accept all ebook extensions listed in ebooks.BOOK_EXTENSIONS. --- src/calibre/devices/folder_device/driver.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/calibre/devices/folder_device/driver.py b/src/calibre/devices/folder_device/driver.py index c08448051d..c819e71d0f 100644 --- a/src/calibre/devices/folder_device/driver.py +++ b/src/calibre/devices/folder_device/driver.py @@ -6,6 +6,7 @@ Created on 15 May 2010 import os from calibre.devices.usbms.driver import USBMS, BookList +from calibre.ebooks import BOOK_EXTENSIONS # This class is added to the standard device plugin chain, so that it can # be configured. It has invalid vendor_id etc, so it will never match a @@ -16,8 +17,8 @@ class FOLDER_DEVICE_FOR_CONFIG(USBMS): description = _('Use an arbitrary folder as a device.') author = 'John Schember/Charles Haley' supported_platforms = ['windows', 'osx', 'linux'] - FORMATS = ['epub', 'fb2', 'mobi', 'azw', 'lrf', 'tcr', 'pmlz', 'lit', - 'rtf', 'rb', 'pdf', 'oeb', 'txt', 'pdb', 'prc'] + FORMATS = BOOK_EXTENSIONS + VENDOR_ID = [0xffff] PRODUCT_ID = [0xffff] BCD = [0xffff] From c33c5cbf58f116f3e52bf2c37831c0f5e5d0da8e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 8 Aug 2011 12:47:16 -0600 Subject: [PATCH 7/9] Fix #807879 ("Series" undistinguished in singular/plural) --- src/calibre/gui2/library/models.py | 2 +- src/calibre/library/save_to_disk.py | 4 +- src/calibre/translations/calibre.pot | 712 +++++++++++++++------------ 3 files changed, 389 insertions(+), 329 deletions(-) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 0937f0bb12..4d11784aea 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -62,7 +62,7 @@ class BooksModel(QAbstractTableModel): # {{{ 'rating' : _('Rating'), 'publisher' : _("Publisher"), 'tags' : _("Tags"), - 'series' : _("Series"), + 'series' : ngettext("Series", 'Series', 1), 'last_modified' : _('Modified'), } diff --git a/src/calibre/library/save_to_disk.py b/src/calibre/library/save_to_disk.py index 2c723e0f7d..cacb607d56 100644 --- a/src/calibre/library/save_to_disk.py +++ b/src/calibre/library/save_to_disk.py @@ -296,8 +296,8 @@ def do_save_book_to_disk(id_, mi, cover, plugboards, replace_whitespace=opts.replace_whitespace, safe_format=False) except Exception, e: raise ValueError(_('Failed to calculate path for ' - 'save to disk. Template: %s\n' - 'Error: %s'%(opts.template, e))) + 'save to disk. Template: %(templ)s\n' + 'Error: %(err)s')%dict(templ=opts.template, err=e)) if opts.single_dir: components = components[-1:] if not components: diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 17adb883f0..a42f0833e7 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.8.13\n" -"POT-Creation-Date: 2011-08-05 09:47+MDT\n" -"PO-Revision-Date: 2011-08-05 09:47+MDT\n" +"POT-Creation-Date: 2011-08-08 12:45+MDT\n" +"PO-Revision-Date: 2011-08-08 12:45+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -62,8 +62,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:124 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:126 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:122 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1080 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1190 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:41 @@ -133,9 +133,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:315 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:376 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:384 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:155 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:376 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:377 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:168 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:555 @@ -176,9 +176,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:554 #: /home/kovid/work/calibre/src/calibre/library/database2.py:2006 #: /home/kovid/work/calibre/src/calibre/library/database2.py:2153 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3170 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3172 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3305 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3171 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3173 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3306 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:225 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:226 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:243 @@ -204,8 +204,8 @@ msgid "Customize" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:156 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:51 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:57 msgid "Cannot configure" msgstr "" @@ -230,8 +230,8 @@ msgid "User Interface Action" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:557 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:25 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:28 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:197 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:309 @@ -832,10 +832,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/db/cache.py:131 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:636 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:563 #: /home/kovid/work/calibre/src/calibre/library/database2.py:972 -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:758 -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:770 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:806 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:818 msgid "Yes" msgstr "" @@ -973,7 +973,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1141 #: /home/kovid/work/calibre/src/calibre/library/database2.py:330 #: /home/kovid/work/calibre/src/calibre/library/database2.py:343 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3031 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3032 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:171 msgid "News" msgstr "" @@ -1152,12 +1152,12 @@ msgstr "" msgid "Communicate with the Sigmatek eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:16 -#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:32 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:33 msgid "Use an arbitrary folder as a device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:28 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:29 #: /home/kovid/work/calibre/src/calibre/devices/interface.py:14 msgid "Device Interface" msgstr "" @@ -1290,7 +1290,7 @@ msgid "Create tags for automatic management" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:543 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:387 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:390 msgid "Not Implemented" msgstr "" @@ -2587,7 +2587,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:636 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:563 msgid "No" msgstr "" @@ -3507,7 +3507,7 @@ msgstr "" msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:492 msgid "Choose Files" msgstr "" @@ -3576,106 +3576,123 @@ msgstr "" msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:58 msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:62 msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:67 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:68 msgid "Shift+Ctrl+E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:69 msgid "Add from ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:71 msgid "Add files to selected book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:72 msgid "Shift+A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91 +msgid "No books selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:88 +msgid "Cannot add files as no books are selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:92 msgid "Are you sure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:93 #, python-format msgid "Are you sure you want to add the same files to all %d books? If the formatalready exists for a book, it will be replaced." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:99 msgid "Select book files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:170 msgid "Adding" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:171 msgid "Creating book records from ISBNs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:267 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:319 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:290 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:293 msgid "Select books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:331 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:329 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:332 msgid "The following duplicate books were found and incoming book formats were processed and merged into your Calibre database according to your automerge settings:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:351 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:352 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:370 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:397 msgid "Add to library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:132 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:103 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:183 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:391 msgid "The following books are virtual and cannot be added to the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:397 msgid "No book files found" msgstr "" @@ -3710,18 +3727,6 @@ msgstr "" msgid "User annotations generated from main library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:33 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:73 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:157 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:258 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:90 -msgid "No books selected" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:70 msgid "No books selected to fetch annotations from" msgstr "" @@ -3756,7 +3761,7 @@ msgid "Location %(dl)d • %(typ)s
" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:37 msgid "Create a catalog of the books in your calibre library" msgstr "" @@ -3960,7 +3965,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:408 #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:886 msgid "Not allowed" msgstr "" @@ -3981,25 +3986,25 @@ msgstr "" msgid "Convert books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:30 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:33 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:569 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:117 #, python-format msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:177 msgid "Empty output file, probably the conversion process crashed" msgstr "" @@ -4091,88 +4096,88 @@ msgstr "" msgid "Remove selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:95 msgid "Remove files of a specific format from selected books.." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:98 msgid "Remove all formats from selected books, except..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:101 msgid "Remove all formats from selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:104 msgid "Remove covers from selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:108 msgid "Remove matching books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:131 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:144 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:162 msgid "Choose formats not to be deleted.

Note that this will never remove all formats from a book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:188 msgid "All formats for the selected books will be deleted from your library.
The book metadata will be kept. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:208 msgid "Cannot delete books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:209 msgid "No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:219 msgid "Main memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:220 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:525 msgid "Storage Card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:221 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:518 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:527 msgid "Storage Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:226 msgid "No books to delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:227 msgid "None of the selected books are on the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:242 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:333 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:335 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:290 msgid "Some of the selected books are on the attached device. Where do you want the selected files deleted from?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:302 msgid "The selected books will be permanently deleted and the files removed from your calibre library. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:327 msgid "The selected books will be permanently deleted from your device. Are you sure?" msgstr "" @@ -4189,49 +4194,49 @@ msgid "Connect to Bambook" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:73 msgid "Start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:75 msgid "Stop Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:105 msgid "Email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:90 msgid "Email to and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:99 msgid "(delete from library)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:114 msgid "Setup email based sharing of books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:132 msgid "D" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:132 msgid "Send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:150 msgid "Connect/share" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:79 msgid "Stopping" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:80 msgid "Stopping server, this could take upto a minute, please wait..." msgstr "" @@ -4252,131 +4257,131 @@ msgstr "" msgid "Edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:30 -msgid "Merge book records" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:31 -msgid "M" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:32 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:35 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:38 msgid "Download metadata and covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:45 msgid "Merge into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:48 msgid "Merge into first selected book - keep others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:52 msgid "Merge only formats into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:57 +msgid "Merge book records" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:58 +msgid "M" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:73 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:83 msgid "Failed to download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:472 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:720 msgid "Download failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:90 #, python-format msgid "Failed to download metadata or covers for any of the %d book(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:93 msgid "Metadata download completed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:95 #, python-format msgid "Finished downloading metadata for %d book(s). Proceed with updating the metadata in your library?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:102 #, python-format msgid "Could not download metadata and/or covers for %d of the books. Click \"Show details\" to see which books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:109 msgid "Download complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:781 msgid "Download log" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:138 msgid "Some books changed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:139 msgid "The metadata for some books in your library has changed since you started the download. If you proceed, some of those changes may be overwritten. Click \"Show details\" to see the list of changed books. Do you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:156 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:221 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:261 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:262 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:265 msgid "You are about to merge more than 5 books. Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:274 #, python-format msgid "Book formats and metadata from the selected books will be added to the first selected book (%s). ISBN will not be merged.

The second and subsequently selected books will not be deleted or changed.

Please confirm you want to proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:286 #, python-format msgid "Book formats from the selected books will be merged into the first selected book (%s). Metadata in the first selected book will not be changed. Author, Title, ISBN and all other metadata will not be merged.

After merger the second and subsequently selected books, with any metadata they have will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:302 #, python-format msgid "Book formats and metadata from the selected books will be merged into the first selected book (%s). ISBN will not be merged.

After merger the second and subsequently selected books will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:471 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:472 msgid "Applying changed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:545 msgid "Some failures" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:546 msgid "Failed to apply updated metadata for some books in your library. Click \"Show Details\" to see details." msgstr "" @@ -4420,7 +4425,7 @@ msgid "Move to next highlighted match" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:13 -#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:415 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:421 msgid "N" msgstr "" @@ -4453,32 +4458,32 @@ msgstr "" msgid "Plugin Updater" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:20 msgid "Ctrl+P" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:22 msgid "Change calibre behavior" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:29 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:208 msgid "Run welcome wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:31 msgid "Get plugins to enhance calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:35 msgid "Restart in debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:53 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:58 msgid "Cannot configure before calibre is restarted." msgstr "" @@ -4503,48 +4508,48 @@ msgstr "" msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:48 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:49 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:68 #, python-format msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:53 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:71 #, python-format msgid "Save only %s format to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:90 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:93 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:101 msgid "You are trying to save files into the calibre library. This can cause corruption of your library. Save to disk is meant to export files from your calibre library elsewhere." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:132 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:133 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:142 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:141 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:142 msgid "Click the show details button to see which ones." msgstr "" @@ -4629,53 +4634,58 @@ msgstr "" msgid "Search for ebooks" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:28 +msgid "author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:28 +msgid "title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:29 +msgid "book" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:32 -msgid "Search for this author" +#, python-format +msgid "Search for this %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:33 -msgid "Search for this title" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:34 -msgid "Search for this book" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:110 msgid "Stores" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:38 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_dialog.py:18 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:285 msgid "Choose stores" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:103 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:115 msgid "Cannot search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:134 msgid "Calibre helps you find the ebooks you want by searching the websites of various commercial and public domain book sources for you." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:138 msgid "Using the integrated search you can easily find which store has the book you are looking for, at the best price. You also get DRM status and other useful information." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:142 msgid "All transactions (paid or otherwise) are handled between you and the book seller. Calibre is not part of this process and any issues related to a purchase should be directed to the website you are buying from. Be sure to double check that any books you get will work with your e-book reader, especially if the book you are buying has DRM." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:152 msgid "Show this message again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:153 msgid "About Get Books" msgstr "" @@ -4701,15 +4711,15 @@ msgstr "" msgid "No ePub available. First convert the book to ePub." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:37 msgid "V" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:37 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:48 msgid "View specific format" msgstr "" @@ -4717,53 +4727,53 @@ msgstr "" msgid "Read a random book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:55 msgid "Clear recently viewed list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:224 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:152 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:164 msgid "Format unavailable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:151 msgid "Selected books have no formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:153 #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:128 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:165 #, python-format msgid "Not all the selected books were available in the %s format. You should convert them first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:172 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:173 #, python-format 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/actions/view.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:182 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:218 msgid "This book no longer exists in your library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:225 #, python-format msgid "%s has no available formats." msgstr "" @@ -5117,7 +5127,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/saving_ui.py:67 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search_ui.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/sending_ui.py:68 @@ -6663,11 +6673,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:186 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:303 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:568 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:609 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:632 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:683 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:567 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:608 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:631 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:682 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:128 @@ -6680,23 +6689,23 @@ msgid "Undefined" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:639 msgid "star(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:130 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:641 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:640 msgid "Unrated" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:670 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:669 #, python-format msgid "Set '%s' to today" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:175 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:672 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:671 #, python-format msgid "Clear '%s'" msgstr "" @@ -6705,39 +6714,39 @@ msgstr "" msgid " index:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:367 msgid "The enumeration \"{0}\" contains an invalid value that will be set to the default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:522 msgid "Apply changes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:715 msgid "Remove series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:719 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:718 msgid "Automatically number books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:722 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:721 msgid "Force numbers to start with " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:793 msgid "The enumeration \"{0}\" contains invalid values that will not appear in the list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:838 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:837 msgid "Remove all tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:858 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:857 msgid "tags to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:865 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:864 msgid "tags to remove" msgstr "" @@ -6932,16 +6941,16 @@ msgid "You have enabled the {0} formats for your {1}. The {1} may not sup msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:148 -#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:464 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:470 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:70 msgid "Invalid template" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:149 -#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:471 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:276 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:71 #, python-format msgid "The template %s is invalid:" msgstr "" @@ -9113,7 +9122,8 @@ msgid "Open Template Editor" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:48 msgid "Edit template" msgstr "" @@ -9566,9 +9576,6 @@ msgid "Book Details" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/init.py:221 -msgid "Alt+D" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/init.py:231 msgid "Shift+Alt+D" msgstr "" @@ -9677,35 +9684,36 @@ msgstr "" msgid "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:181 -msgid "Shift+Ctrl+F" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:189 msgid "Advanced search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:184 +msgid "Shift+Ctrl+F" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:194 msgid "

Search the list of books by title, author, publisher, tags, comments, etc.

Words separated by spaces are ANDed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:200 msgid "&Go!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:206 msgid "Do Quick Search (you can also press the Enter key)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:212 msgid "Reset Quick Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:228 msgid "Copy current search text (instead of search name)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:415 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:421 msgid "Y" msgstr "" @@ -11878,34 +11886,38 @@ msgstr "" msgid "&Load plugin from file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:34 msgid "Any custom field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:35 msgid "The lookup name of any custom field (these names begin with \"#\")." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:66 msgid "Constant template" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:67 msgid "The template contains no {fields}, so all books will have the same name. Is this OK?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:57 msgid "Save &template" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:58 msgid "By adjusting the template below, you can control what folders the files are saved in and what filenames they are given. You can use the / character to indicate sub-folders. Available metadata variables are described below. If a particular book does not have some metadata, the variable will be replaced by the empty string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:59 msgid "Available variables:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:60 +msgid "Template Editor" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/preferences/saving_ui.py:68 msgid "Here you can control how calibre will save your books when you click the Save to Disk button:" msgstr "" @@ -12082,7 +12094,7 @@ msgid "Here you can control how calibre will save your books when you click the msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/server.py:70 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:431 msgid "Failed to start content server" msgstr "" @@ -12434,35 +12446,39 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:383 +msgid "Start search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:393 msgid "Enable or disable search highlighting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:445 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:448 msgid "Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:450 msgid "Choose saved search or enter name for new saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:456 msgid "Save current search under the name shown in the box. Press and hold for a pop-up options menu." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:458 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:461 msgid "Create saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:465 msgid "Delete saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:469 msgid "Manage saved searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:479 msgid "*Current search" msgstr "" @@ -13229,55 +13245,63 @@ msgstr "" msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:198 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:234 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:239 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:243 +msgid "Quit calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:256 +msgid "Clear the current search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:354 msgid "Debug mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 #, python-format msgid "You have started calibre in debug mode. After you quit calibre, the debug log will be available in the file: %s

The log will be displayed automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:557 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:573 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:580 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:589 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:596 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:630 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:626 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:633 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:630 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:698 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:705 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" @@ -14142,7 +14166,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:568 #: /home/kovid/work/calibre/src/calibre/library/caches.py:582 #: /home/kovid/work/calibre/src/calibre/library/caches.py:592 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:219 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:222 msgid "yes" msgstr "" @@ -14150,7 +14174,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:567 #: /home/kovid/work/calibre/src/calibre/library/caches.py:579 #: /home/kovid/work/calibre/src/calibre/library/caches.py:589 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:219 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:222 msgid "no" msgstr "" @@ -14980,17 +15004,17 @@ msgstr "" msgid "%(tt)sAverage rating is %(rating)3.1f" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3331 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3332 #, python-format msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3360 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3361 #, python-format msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3377 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3378 msgid "Compacting database" msgstr "" @@ -15118,8 +15142,24 @@ msgstr "" msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:382 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:415 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:125 +msgid "Save into a single directory, ignoring the template directory structure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:298 +#, python-format +msgid "" +"Failed to calculate path for save to disk. Template: %(templ)s\n" +"Error: %(err)s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:304 +#, python-format +msgid "Template evaluation resulted in no path components. Template: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:398 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:431 msgid "Requested formats not available" msgstr "" @@ -15499,7 +15539,7 @@ msgstr "" msgid "%s: unknown function" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:348 +#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:357 msgid "No such variable " msgstr "" @@ -15520,206 +15560,226 @@ msgid "strcat(a, b, ...) -- can take any number of arguments. Returns a string f msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:143 +msgid "strlen(a) -- Returns the length of the string passed as the argument" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:156 msgid "add(x, y) -- returns x + y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:154 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:167 msgid "subtract(x, y) -- returns x - y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:165 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:178 msgid "multiply(x, y) -- returns x * y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:176 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:189 msgid "divide(x, y) -- returns x / y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:188 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:201 msgid "template(x) -- evaluates x as a template. The evaluation is done in its own context, meaning that variables are not shared between the caller and the template evaluation. Because the { and } characters are special, you must use [[ for the { character and ]] for the } character; they are converted automatically. For example, template('[[title_sort]]') will evaluate the template {title_sort} and return its value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:204 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:217 msgid "eval(template) -- evaluates the template, passing the local variables (those 'assign'ed to) instead of the book metadata. This permits using the template processor to construct complex results from local variables." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:218 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:231 msgid "assign(id, val) -- assigns val to id, then returns val. id must be an identifier, not an expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:229 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:242 msgid "print(a, b, ...) -- prints the arguments to standard output. Unless you start calibre from the command line (calibre-debug -g), the output will go to a black hole." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:241 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:254 msgid "field(name) -- returns the metadata field named by name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:250 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:263 msgid "raw_field(name) -- returns the metadata field named by name without applying any formatting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:260 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:273 msgid "substr(str, start, end) -- returns the start'th through the end'th characters of str. The first character in str is the zero'th character. If end is negative, then it indicates that many characters counting from the right. If end is zero, then it indicates the last character. For example, substr('12345', 1, 0) returns '2345', and substr('12345', 1, -1) returns '234'." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:274 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:287 msgid "lookup(val, pattern, field, pattern, field, ..., else_field) -- like switch, except the arguments are field (metadata) names, not text. The value of the appropriate field will be fetched and used. Note that because composite columns are fields, you can use this function in one composite field to use the value of some other composite field. This is extremely useful when constructing variable save paths" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:289 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:302 msgid "lookup requires either 2 or an odd number of arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:302 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:315 msgid "test(val, text if not empty, text if empty) -- return `text if not empty` if the field is not empty, otherwise return `text if empty`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:315 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:328 msgid "contains(val, pattern, text if match, text if not match) -- checks if field contains matches for the regular expression `pattern`. Returns `text if match` if matches are found, otherwise it returns `text if no match`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:331 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:344 msgid "switch(val, pattern, value, pattern, value, ..., else_value) -- for each `pattern, value` pair, checks if the field matches the regular expression `pattern` and if so, returns that `value`. If no pattern matches, then else_value is returned. You can have as many `pattern, value` pairs as you want" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:339 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:352 msgid "switch requires an odd number of arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:352 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:365 +msgid "strcat_max(max, string1, prefix2, string2, ...) -- Returns a string formed by concatenating the arguments. The returned value is initialized to string1. `Prefix, string` pairs are added to the end of the value as long as the resulting string length is less than `max`. String1 is returned even if string1 is longer than max. You can pass as many `prefix, string` pairs as you wish." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:375 +msgid "strcat_max requires 2 or more arguments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:377 +msgid "strcat_max requires an even number of arguments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:381 +msgid "first argument to strcat_max must be an integer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:399 msgid "in_list(val, separator, pattern, found_val, not_found_val) -- treat val as a list of items separated by separator, comparing the pattern against each value in the list. If the pattern matches a value, return found_val, otherwise return not_found_val." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:370 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:417 msgid "str_in_list(val, separator, string, found_val, not_found_val) -- treat val as a list of items separated by separator, comparing the string against each value in the list. If the string matches a value, return found_val, otherwise return not_found_val. If the string contains separators, then it is also treated as a list and each value is checked." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:391 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:438 msgid "identifier_in_list(val, id, found_val, not_found_val) -- treat val as a list of identifiers separated by commas, comparing the string against each value in the list. An identifier has the format \"identifier:value\". The id parameter should be either \"id\" or \"id:regexp\". The first case matches if there is any identifier with that id. The second case matches if the regexp matches the identifier's value. If there is a match, return found_val, otherwise return not_found_val." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:417 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:464 msgid "re(val, pattern, replacement) -- return the field after applying the regular expression. All instances of `pattern` are replaced with `replacement`. As in all of calibre, these are python-compatible regular expressions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:429 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:476 msgid "swap_around_comma(val) -- given a value of the form \"B, A\", return \"A B\". This is most useful for converting names in LN, FN format to FN LN. If there is no comma, the function returns val unchanged" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:441 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:488 msgid "ifempty(val, text if empty) -- return val if val is not empty, otherwise return `text if empty`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:454 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:501 msgid "shorten(val, left chars, middle text, right chars) -- Return a shortened version of the field, consisting of `left chars` characters from the beginning of the field, followed by `middle text`, followed by `right chars` characters from the end of the string. `Left chars` and `right chars` must be integers. For example, assume the title of the book is `Ancient English Laws in the Times of Ivanhoe`, and you want it to fit in a space of at most 15 characters. If you use {title:shorten(9,-,5)}, the result will be `Ancient E-nhoe`. If the field's length is less than left chars + right chars + the length of `middle text`, then the field will be used intact. For example, the title `The Dome` would not be changed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:480 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:527 msgid "count(val, separator) -- interprets the value as a list of items separated by `separator`, returning the number of items in the list. Most lists use a comma as the separator, but authors uses an ampersand. Examples: {tags:count(,)}, {authors:count(&)}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:492 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:539 msgid "list_item(val, index, separator) -- interpret the value as a list of items separated by `separator`, returning the `index`th item. The first item is number zero. The last item can be returned using `list_item(-1,separator)`. If the item is not in the list, then the empty value is returned. The separator has the same meaning as in the count function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:513 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:560 msgid "select(val, key) -- interpret the value as a comma-separated list of items, with the items being \"id:value\". Find the pair with the id equal to key, and return the corresponding value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:531 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:578 msgid "formats_modtimes(date_format) -- return a comma-separated list of colon_separated items representing modification times for the formats of a book. The date_format parameter specifies how the date is to be formatted. See the date_format function for details. You can use the select function to get the mod time for a specific format. Note that format names are always uppercase, as in EPUB." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:550 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:597 msgid "formats_sizes() -- return a comma-separated list of colon_separated items representing sizes in bytes of the formats of a book. You can use the select function to get the size for a specific format. Note that format names are always uppercase, as in EPUB." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:566 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:613 msgid "human_readable(v) -- return a string representing the number v in KB, MB, GB, etc." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:580 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:627 msgid "format_number(v, template) -- format the number v using a python formatting template such as \"{0:5.2f}\" or \"{0:,d}\" or \"${0:5,.2f}\". The field_name part of the template must be a 0 (zero) (the \"{0:\" in the above examples). See the template language and python documentation for more examples. Returns the empty string if formatting fails." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:605 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:652 msgid "sublist(val, start_index, end_index, separator) -- interpret the value as a list of items separated by `separator`, returning a new list made from the `start_index` to the `end_index` item. The first item is number zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Examples using basic template mode and assuming that the tags column (which is comma-separated) contains \"A, B, C\": {tags:sublist(0,1,\\,)} returns \"A\". {tags:sublist(-1,0,\\,)} returns \"C\". {tags:sublist(0,-1,\\,)} returns \"A, B\"." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:636 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:684 msgid "subitems(val, start_index, end_index) -- This function is used to break apart lists of items such as genres. It interprets the value as a comma-separated list of items, where each item is a period-separated list. Returns a new list made by first finding all the period-separated items, then for each such item extracting the start_index` to the `end_index` components, then combining the results back together. The first component in a period-separated list has an index of zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Example using basic template mode and assuming a #genre value of \"A.B.C\": {#genre:subitems(0,1)} returns \"A\". {#genre:subitems(0,2)} returns \"A.B\". {#genre:subitems(1,0)} returns \"B.C\". Assuming a #genre value of \"A.B.C, D.E.F\", {#genre:subitems(0,1)} returns \"A, D\". {#genre:subitems(0,2)} returns \"A.B, D.E\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:674 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:722 msgid "format_date(val, format_string) -- format the value, which must be a date, using the format_string, returning a string. The formatting codes are: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. \"Mon\" to \"Sun\"). dddd : the long localized day name (e.g. \"Monday\" to \"Sunday\"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. \"Jan\" to \"Dec\"). MMMM : the long localized month name (e.g. \"January\" to \"December\"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number. iso : the date with time and timezone. Must be the only format present" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:703 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:751 msgid "uppercase(val) -- return value of the field in upper case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:712 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:760 msgid "lowercase(val) -- return value of the field in lower case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:721 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:769 msgid "titlecase(val) -- return value of the field in title case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:730 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:778 msgid "capitalize(val) -- return value of the field capitalized" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:739 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:787 msgid "booksize() -- return value of the size field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:753 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:801 msgid "ondevice() -- return Yes if ondevice is set, otherwise return the empty string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:765 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:813 msgid "has_cover() -- return Yes if the book has a cover, otherwise return the empty string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:777 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:825 msgid "first_non_empty(value, value, ...) -- returns the first value that is not empty. If all values are empty, then the empty value is returned.You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:794 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:842 msgid "and(value, value, ...) -- returns the string \"1\" if all values are not empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:811 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:859 msgid "or(value, value, ...) -- returns the string \"1\" if any value is not empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:828 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:876 msgid "not(value) -- returns the string \"1\" if the value is empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:840 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:888 msgid "list_union(list1, list2, separator) -- return a list made by merging the items in list1 and list2, removing duplicate items using a case-insensitive compare. If items differ in case, the one in list1 is used. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:865 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:913 msgid "list_difference(list1, list2, separator) -- return a list made by removing from list1 any item found in list2, using a case-insensitive compare. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:884 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:932 msgid "list_intersection(list1, list2, separator) -- return a list made by removing from list1 any item not found in list2, using a case-insensitive compare. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:903 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:951 msgid "list_sort(list, direction, separator) -- return list sorted using a case-insensitive sort. If direction is zero, the list is sorted ascending, otherwise descending. The list items are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:916 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:964 msgid "today() -- return a date string for today. This value is designed for use in format_date or days_between, but can be manipulated like any other string. The date is in ISO format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:927 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:975 msgid "days_between(date1, date2) -- return the number of days between date1 and date2. The number is positive if date1 is greater than date2, otherwise negative. If either date1 or date2 are not dates, the function returns the empty string." msgstr "" From 727e2805ff4f0f2e4959040946c305b725ab7f96 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 8 Aug 2011 12:51:00 -0600 Subject: [PATCH 8/9] ... --- Changelog.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Changelog.yaml b/Changelog.yaml index 887ac4e05d..bf3f7c907c 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -251,8 +251,8 @@ - title: Techcrunch and Pecat author: Darko Miletic - - title: Vio Mundo, IDG Now and Tojolaco - author: Diniz Bortoletto + - title: "Vio Mundo, IDG Now! and Tojolaco" + author: Diniz Bortolotto - title: Geek and Poke, Automatiseringgids IT author: DrMerry From b06e4419bce6af815ec2ff598f2aed1b11ba89c7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 8 Aug 2011 12:55:31 -0600 Subject: [PATCH 9/9] Blog Escrevinhador by Diniz Bortolotto --- recipes/escrevinhador.recipe | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 recipes/escrevinhador.recipe diff --git a/recipes/escrevinhador.recipe b/recipes/escrevinhador.recipe new file mode 100644 index 0000000000..0003b798c6 --- /dev/null +++ b/recipes/escrevinhador.recipe @@ -0,0 +1,28 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class Escrevinhador(BasicNewsRecipe): + title = 'Blog Escrevinhador' + __author__ = 'Diniz Bortolotto' + description = 'Posts do Blog Escrevinhador' + publisher = 'Rodrigo Viana' + oldest_article = 5 + max_articles_per_feed = 20 + category = 'news, politics, Brazil' + language = 'pt_BR' + publication_type = 'news and politics portal' + use_embedded_content = False + no_stylesheets = True + remove_javascript = True + + feeds = [(u'Blog Escrevinhador', u'http://www.rodrigovianna.com.br/feed')] + + reverse_article_order = True + + remove_tags_after = [dict(name='div', attrs={'class':'text'})] + + remove_tags = [ + dict(id='header'), + dict(name='p', attrs={'class':'tags'}), + dict(name='div', attrs={'class':'sociable'}) + ] +