From c395dc8be7e1a2787bbc81738576e14e799ee0a5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 6 Jan 2010 19:17:01 -0700 Subject: [PATCH 1/2] New recipe for Nature News by Krittika Goyal --- resources/recipes/freenature.recipe | 44 +++ src/calibre/ebooks/pdf/reflow.py | 65 +++- src/calibre/translations/calibre.pot | 559 ++++++++++++++------------- 3 files changed, 401 insertions(+), 267 deletions(-) create mode 100644 resources/recipes/freenature.recipe diff --git a/resources/recipes/freenature.recipe b/resources/recipes/freenature.recipe new file mode 100644 index 0000000000..c797053d0d --- /dev/null +++ b/resources/recipes/freenature.recipe @@ -0,0 +1,44 @@ +from calibre.web.feeds.news import BasicNewsRecipe +from calibre.ebooks.BeautifulSoup import BeautifulSoup +import re + +class NatureNews(BasicNewsRecipe): + title = u'Nature News' + language = 'en' + __author__ = 'Krittika Goyal' + oldest_article = 31 #days + max_articles_per_feed = 50 + #encoding = 'latin1' + + no_stylesheets = True + remove_tags_before = dict(name='h1', attrs={'class':'heading entry-title'}) + remove_tags_after = dict(name='h2', attrs={'id':'comments'}) + remove_tags = [ + #dict(name='iframe'), + #dict(name='div', attrs={'class':['pt-box-title', 'pt-box-content']}), + #dict(name='div', attrs={'id':['block-td_search_160', 'block-cam_search_160']}), + dict(name='h2', attrs={'id':'comments'}), + dict(name='ul', attrs={'class':'toolsmenu xoxo'}), + ] + + preprocess_regexps = [ + (re.compile(r'', re.DOTALL), lambda m: '') + ] + + feeds = [('Nature News', 'http://feeds.nature.com/news/rss/most_recent')] + + def get_article_url(self, article): + return article.get('id') + + #def preprocess_html(self, soup): + #story = soup.find(name='div', attrs={'id':'contentColumn'}) + #td = heading.findParent(name='td') + #td.extract() + #soup = BeautifulSoup('t') + #body = soup.find(name='body') + #body.insert(0, story) + #for x in soup.findAll(name='p', text=lambda x:x and '-->' in x): + #p = x.findParent('p') + #if p is not None: + #p.extract() + #return soup diff --git a/src/calibre/ebooks/pdf/reflow.py b/src/calibre/ebooks/pdf/reflow.py index 72ca7f0d1c..ea859f17dc 100644 --- a/src/calibre/ebooks/pdf/reflow.py +++ b/src/calibre/ebooks/pdf/reflow.py @@ -32,8 +32,31 @@ class Text(object): self.color = self.font.color self.font_family = self.font.family + text.tail = '' self.text_as_string = etree.tostring(text, method='text', encoding=unicode) + self.raw = text.text if text.text else u'' + for x in text.iterchildren(): + self.raw += etree.tostring(x, method='xml', encoding=unicode) + if x.tail: + self.raw += x.tail + self.average_character_width = self.width/len(self.text_as_string) + + def coalesce(self, other, page_number): + if self.opts.verbose > 2: + self.log.debug('Coalescing %r with %r on page %d'%(self.text_as_string, + other.text_as_string, page_number)) + self.top = min(self.top, other.top) + self.right = other.right + self.width = self.right - self.left + self.bottom = max(self.bottom, other.bottom) + self.height = self.bottom - self.top + self.font_size = max(self.font_size, other.font_size) + self.font = other.font if self.font_size == other.font_size else other.font + self.text_as_string += other.text_as_string + self.raw += other.raw + self.average_character_width = (self.average_character_width + + other.average_character_width)/2.0 class FontSizeStats(dict): @@ -110,6 +133,15 @@ class HorizontalBox(object): class Page(object): + # Fraction of a character width that two strings have to be apart, + # for them to be considered part of the same text fragment + COALESCE_FACTOR = 0.5 + + # Fraction of text height that two strings' bottoms can differ by + # for them to be considered to be part of the same text fragment + LINE_FACTOR = 0.4 + + def __init__(self, page, font_map, opts, log): self.opts, self.log = opts, log self.font_map = font_map @@ -123,6 +155,7 @@ class Page(object): for text in page.xpath('descendant::text'): self.texts.append(Text(text, self.font_map, self.opts, self.log)) + text = self.texts[-1] self.left_margin = min(text.left, self.left_margin) self.right_margin = max(text.right, self.right_margin) @@ -136,7 +169,32 @@ class Page(object): self.font_size_stats = FontSizeStats(self.font_size_stats) - self.identify_columns() + self.coalesce_fragments() + + #self.identify_columns() + + def coalesce_fragments(self): + + def find_match(frag): + for t in self.texts: + hdelta = t.left - frag.right + hoverlap = self.COALESCE_FACTOR * frag.average_character_width + if t is not frag and hdelta > -hoverlap and \ + hdelta < hoverlap and \ + abs(t.bottom - frag.bottom) < self.LINE_FACTOR*frag.height: + return t + + match_found = True + while match_found: + match_found, match = False, None + for frag in self.texts: + match = find_match(frag) + if match is not None: + match_found = True + frag.coalesce(match, self.number) + break + if match is not None: + self.texts.remove(match) def sort_into_horizontal_boxes(self, document_font_size_stats): self.horizontal_boxes = [] @@ -190,7 +248,7 @@ class PDFDocument(object): self.fonts = [] self.font_map = {} - for spec in self.root.xpath('//fonts'): + for spec in self.root.xpath('//font'): self.fonts.append(Font(spec)) self.font_map[self.fonts[-1].id] = self.fonts[-1] @@ -210,7 +268,8 @@ class PDFDocument(object): def collect_font_statistics(self): self.font_size_stats = {} for p in self.pages: - for sz, chars in p.font_size_stats: + for sz in p.font_size_stats: + chars = p.font_size_stats[sz] if sz not in self.font_size_stats: self.font_size_stats[sz] = 0 self.font_size_stats[sz] += chars diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index b99378b278..baa8f28e54 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.6.32\n" -"POT-Creation-Date: 2010-01-03 19:05+MST\n" -"PO-Revision-Date: 2010-01-03 19:05+MST\n" +"POT-Creation-Date: 2010-01-06 19:16+MST\n" +"PO-Revision-Date: 2010-01-06 19:16+MST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -15,11 +15,11 @@ msgstr "" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:42 msgid "Does absolutely nothing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:45 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 @@ -118,7 +118,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:419 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:914 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:1040 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:183 #: /home/kovid/work/calibre/src/calibre/library/cli.py:281 #: /home/kovid/work/calibre/src/calibre/library/database.py:913 #: /home/kovid/work/calibre/src/calibre/library/database2.py:703 @@ -140,19 +140,19 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:62 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:63 msgid "Base" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:149 msgid "File type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:183 msgid "Metadata reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:213 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:214 msgid "Metadata writer" msgstr "" @@ -340,15 +340,15 @@ msgstr "" msgid "Disabled plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:76 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:77 msgid "No valid plugin found in " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:262 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:263 msgid "Initialization of plugin %s failed with traceback:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:396 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:397 msgid "" " %prog options\n" "\n" @@ -356,27 +356,27 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:402 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:403 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:404 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:405 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:406 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:407 msgid "Customize plugin. Specify name of plugin and customization string separated by a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:408 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:409 msgid "List all installed plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:410 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:411 msgid "Enable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:412 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:413 msgid "Disable the named plugin" msgstr "" @@ -410,7 +410,7 @@ msgstr "" msgid "Communicate with the Cybook Opus eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:23 msgid "Communicate with the EB600 eBook reader." msgstr "" @@ -497,10 +497,10 @@ msgid "Communicate with the Sony PRS-500 eBook reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:100 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:103 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:114 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:102 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:105 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:108 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:119 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:45 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:48 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:51 @@ -514,26 +514,30 @@ msgstr "" msgid "Communicate with the Sony PRS-300/505/500 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:134 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:136 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:58 +msgid "Comma separated list of metadata fields to turn into collections on the device. Posiibilities include: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:139 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:141 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:116 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:118 msgid "Transferring books to device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:167 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:173 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:180 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:145 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:160 msgid "Removing books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:202 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:208 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:175 msgid "Sending metadata to device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:214 msgid "Communicate with the Sony PRS-600/700/900 eBook reader." msgstr "" @@ -1023,8 +1027,8 @@ msgstr "" msgid "Normally, if the input file has no cover and you don't specify one, a default cover is generated with the title, authors, etc. This option disables the generation of this cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:141 -#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:127 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:128 #: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" @@ -1588,8 +1592,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1330 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:188 msgid "Table of Contents" msgstr "" @@ -2306,12 +2310,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:570 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 @@ -2332,6 +2336,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:180 msgid "..." msgstr "" @@ -2566,8 +2571,8 @@ msgid "&Monospaced font family:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:189 msgid "Metadata" msgstr "" @@ -2797,7 +2802,7 @@ msgid "RB Output" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1522 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1544 msgid "Choose the format to view" msgstr "" @@ -3347,6 +3352,12 @@ msgstr "" msgid "plugins" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 +msgid "" +"\n" +"Customization: " +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196 msgid "Conversion" msgstr "" @@ -3403,126 +3414,126 @@ msgstr "" msgid "new email address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:475 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:477 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:821 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1195 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:478 msgid "Failed to install command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:479 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:481 msgid "Command line tools installed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:482 msgid "Command line tools installed in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:483 msgid "If you move calibre.app, you have to re-install the command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:534 msgid "No valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:535 msgid "%s is not a valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:538 msgid "Choose plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550 msgid "Plugin cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:551 msgid "The plugin: %s cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:560 msgid "Plugin not customizable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:561 msgid "Plugin: %s does not need customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:569 msgid "Customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:605 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:607 msgid "Cannot remove builtin plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:608 msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:641 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:646 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:648 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:634 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:698 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:700 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:549 msgid "Select location for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:706 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:708 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:707 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:709 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:760 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:765 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:767 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:761 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:763 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:764 msgid "
Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:768 msgid "Invalid database location.
Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:800 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:802 msgid "Checking database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:822 msgid "Failed to check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:825 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:827 msgid "Some inconsistencies found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:828 msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." msgstr "" @@ -3602,272 +3613,272 @@ msgstr "" msgid "Sending to &device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:193 msgid "Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502 msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505 msgid "Show notification when &new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506 msgid "Download &social metadata (tags/ratings/etc.) by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508 msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511 msgid "Normal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512 msgid "High" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513 msgid "Low" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514 msgid "Job &priority:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515 msgid "Preferred &output format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516 msgid "Preferred &input format order:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521 msgid "Show ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523 msgid "Search as you type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524 msgid "Automatically send downloaded &news to ebook reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525 msgid "&Delete news from library when it is automatically sent to reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 msgid "Use internal &viewer for:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 msgid "Add an email address to which to send books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 msgid "&Add email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 msgid "Make &default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 msgid "&Remove email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 msgid "calibre can send your books to you (or your reader) by email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 msgid "&Maximum number of waiting worker processes (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 msgid "&Check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 msgid "&Install command line tools" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 msgid "Open calibre &configuration directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 msgid "Limit the max. simultaneous jobs to the available CPU &cores" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 msgid "Debug &device detection" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 msgid "Server &port:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 msgid "&Username:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 msgid "&Password:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 msgid "Max. &cover size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 msgid "&Show password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 msgid "Max. &OPDS items per query:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 msgid "&Start Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 msgid "St&op Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 msgid "&Test Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 msgid "Run server &automatically on startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 msgid "View &server logs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 msgid "" "

Remember to leave calibre running as the server only runs as long as calibre is running.\n" "

Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 msgid "Enable/&Disable plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 msgid "&Customize plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 msgid "&Remove plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 msgid "Add new plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 msgid "Plugin &file:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571 msgid "&Add" msgstr "" @@ -4083,7 +4094,7 @@ msgid "Choose formats for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:956 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:978 msgid "Books" msgstr "" @@ -4887,7 +4898,7 @@ msgid "No matches for the search phrase %s were found." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:410 msgid "No matches found" msgstr "" @@ -4912,12 +4923,12 @@ msgid "Previous Page" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:182 msgid "Back" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:183 msgid "Forward" msgstr "" @@ -4926,7 +4937,7 @@ msgid "Next match" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:190 msgid "Open ebook" msgstr "" @@ -5169,6 +5180,10 @@ msgstr "" msgid "Customize shortcuts for" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:215 +msgid "Keys" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:217 msgid "Double click to change" msgstr "" @@ -5343,7 +5358,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1630 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1652 msgid "Save only %s format to disk" msgstr "" @@ -5394,7 +5409,7 @@ msgid "Calibre Library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:481 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1786 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1808 msgid "Choose a location for your ebook library." msgstr "" @@ -5402,23 +5417,23 @@ msgstr "" msgid "Browse by covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:804 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:826 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:806 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:828 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:830 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:852 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:842 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:864 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:843 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:865 msgid "" "\n" "

The database of books on the reader is corrupted. Try the following:\n" @@ -5429,281 +5444,281 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:904 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:926 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:905 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:927 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:949 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:996 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:971 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1018 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:957 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:979 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:958 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:980 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:981 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:960 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:982 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:961 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:983 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:962 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:984 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:963 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:985 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:964 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:986 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:987 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:969 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:991 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1005 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1027 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1028 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1025 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1028 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1516 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1535 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1050 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1038 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1060 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1054 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1076 msgid "Choose formats not to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1090 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1112 msgid "The selected books will be permanently deleted and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1117 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1139 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1148 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1170 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1149 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1239 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1264 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1377 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1171 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1228 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1164 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1186 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1166 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1188 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1166 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1188 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1168 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1190 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1212 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1191 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1194 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1216 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1205 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1238 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1227 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1260 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1263 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1266 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1293 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1315 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1294 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1316 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1301 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1302 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1323 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1324 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1303 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1325 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1322 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1336 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1358 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1376 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1398 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1516 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1538 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1594 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1556 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1556 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1578 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1579 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1573 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1595 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1614 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1636 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1615 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1637 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1658 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1680 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1659 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1681 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1714 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1736 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1715 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1737 msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1738 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1766 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1760 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1788 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1739 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1761 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1752 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1774 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1767 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1789 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1795 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1817 msgid "Invalid library location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1796 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1818 msgid "Could not access %s. Using %s as the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1844 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1866 msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1869 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1891 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1872 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 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:1876 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1898 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1928 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1950 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1947 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1969 msgid "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1955 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1977 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1956 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1978 msgid "%s has been updated to version %s. See the new features. Visit the download page?" msgstr "" @@ -5849,12 +5864,16 @@ msgstr "" msgid "&Keyboard shortcuts" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/dictionary.py:53 +msgid "No results found for:" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:33 msgid "Options to customize the ebook viewer" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:40 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:630 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:648 msgid "Remember last used window size" msgstr "" @@ -5903,6 +5922,10 @@ msgstr "" msgid "The standard font type" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:404 +msgid "&Lookup in dictionary" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12 msgid "Scroll to the next page" msgstr "" @@ -5951,142 +5974,150 @@ msgstr "" msgid "Scroll right" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:115 msgid "Book format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138 msgid "Go to..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:182 msgid "Position in book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:188 msgid "Go to a reference. To get reference numbers, use the reference mode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:195 msgid "Search for text in book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:259 msgid "Print Preview" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:352 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:271 +msgid "Connecting to dict.org to lookup: %s…" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:370 msgid "Choose ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:371 msgid "Ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:390 msgid "Add bookmark" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:390 msgid "Enter title for bookmark:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:411 msgid "No matches found for: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:451 msgid "Loading flow..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:487 msgid "Laying out %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:498 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:516 msgid "Manage Bookmarks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:551 msgid "Loading ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:559 msgid "DRM Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:560 msgid "

This book is protected by DRM" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:564 msgid "Could not open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:620 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:638 msgid "Options to control the ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:627 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:645 msgid "If specified, viewer window will try to come to the front when started." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:632 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:650 msgid "Print javascript alert and console messages to the console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:638 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:656 msgid "" "%prog [options] file\n" "\n" "View an ebook.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:178 msgid "Ebook Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:179 +msgid "Close dictionary" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:181 msgid "toolBar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:184 msgid "Next page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:185 msgid "Previous page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 msgid "Font size larger" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:187 msgid "Font size smaller" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:191 msgid "Find next" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:192 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 msgid "Reference Mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:195 msgid "Bookmark" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:196 msgid "Toggle full screen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:197 msgid "Print" msgstr "" @@ -6657,7 +6688,7 @@ msgid "The series" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:29 -msgid "The series number. To get leading zeros use {series_index:03n}" +msgid "The series number. To get leading zeros use {series_index:0>3s}" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:30 From 00fca2df1abce9e59157b4b7b8c641afc0093276 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 6 Jan 2010 19:19:36 -0700 Subject: [PATCH 2/2] Improved recipe for Entrepreneur Magazine --- resources/recipes/entrepeneur.recipe | 54 ++++++++++++++++++---------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/resources/recipes/entrepeneur.recipe b/resources/recipes/entrepeneur.recipe index b6bfe1f7c7..5e5ca70ff2 100644 --- a/resources/recipes/entrepeneur.recipe +++ b/resources/recipes/entrepeneur.recipe @@ -1,23 +1,19 @@ from calibre.web.feeds.news import BasicNewsRecipe import re -class EntrepeneurRecipe(BasicNewsRecipe): +class EntrepeneurMagRecipe(BasicNewsRecipe): __license__ = 'GPL v3' __author__ = 'kwetal' language = 'en' version = 1 - title = u'Entrepeneur' + title = u'Entrepeneur Magazine' publisher = u'Entrepreneur Media, Inc' category = u'Business' description = u'Online magazine on business, small business, management and economy' - oldest_article = 21 - max_articles_per_feed = 100 - use_embedded_content = False encoding = 'utf-8' - remove_empty_feeds = True no_stylesheets = True remove_javascript = True @@ -30,15 +26,7 @@ class EntrepeneurRecipe(BasicNewsRecipe): remove_attributes = ['style'] - # feeds from http://www.entrepreneur.com/feeds/index.html - feeds = [] - feeds.append((u'The Latest Headlines', u'http://feeds.feedburner.com/entrepreneur/latest')) - feeds.append((u'Starting a Business', u'http://feeds.feedburner.com/entrepreneur/startingabusiness.rss')) - feeds.append((u'Grow Your Business', u'http://feeds.feedburner.com/entrepreneur/growingyourbusiness.rss')) - feeds.append((u'Sales and Marketing', u'http://feeds.feedburner.com/entrepreneur/salesandmarketing')) - feeds.append((u'Online Business', u'http://feeds.feedburner.com/entrepreneur/ebiz')) - feeds.append((u'Franchises', u'http://feeds.feedburner.com/entrepreneur/franchises')) - #feeds.append((u'', u'')) + INDEX = 'http://www.entrepeneur.com' extra_css = ''' body{font-family:verdana,arial,helvetica,geneva,sans-serif;} @@ -52,11 +40,41 @@ class EntrepeneurRecipe(BasicNewsRecipe): margin-bottom: 0em;} ''' - def get_article_url(self, article): - return article.feedburner_origlink + conversion_options = {'comments': description, 'language': 'en', + 'publisher': publisher} + + def parse_index(self): + soup = self.index_to_soup('http://www.entrepreneur.com/magazine/entrepreneur/index.html') + answer = [] + + div = soup.find('div', attrs = {'id': 'magfeature'}) + if div: + a = div.find('a', attrs = {'class': 'headline'}) + if a: + title = self.tag_to_string(a) + url = self.INDEX + a['href'] + description = a.findNextSibling(text = True) + + articles = [{'title': title, 'date': None, 'url': url, 'description': description}] + answer.append(('Cover Story', articles)) + + for div in soup.findAll('div', attrs = {'class': 'subhead-special'}): + articles = [] + for tag in div.findNextSiblings(['a', 'div'], attrs = {'class': ['h2', 'subhead-special']}): + if tag.name == 'div' and tag['class'] == 'subhead-special': + break + if tag.name == 'a' and tag['class'] == 'h2': + title = self.tag_to_string(tag) + url = tag['href'] + description = tag.findNextSibling(text = True) + articles.append({'title': title, 'date': None, 'url': url, 'description': description}) + answer.append((self.tag_to_string(div), articles)) + + return answer + def print_version(self, url): - id = url.rpartition('/')[2].replace('article', '') + id = url.rpartition('/')[2] return 'http://www.entrepreneur.com/article/printthis/' + id