diff --git a/COPYRIGHT b/COPYRIGHT
index eb4433f96d..f6eeffc5cd 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -41,6 +41,12 @@ License: Apache 2.0
The full text of the Apache 2.0 license is available at:
http://www.apache.org/licenses/LICENSE-2.0
+Files: resources/viewer/mathjax/*
+Copyright: Unknown
+License: Apache 2.0
+ The full text of the Apache 2.0 license is available at:
+ http://www.apache.org/licenses/LICENSE-2.0
+
Files: /src/cherrypy/*
Copyright: Copyright (c) 2004-2007, CherryPy Team (team@cherrypy.org)
Copyright: Copyright (C) 2005, Tiago Cogumbreiro
@@ -396,8 +402,9 @@ License: other
Liberation Fonts
-----------------
-calibre includes a copy of the liberation fonts, available from
-https://calibre-ebook.com/downloads/liberation-fonts
+calibre includes a copy of the liberation fonts in TTF format, licensed under
+the SIL Open Font License, Version 1.1, and available from
+https://fedorahosted.org/liberation-fonts/
BSD License (for all the BSD licensed code indicated above)
-----------------------------------------------------------
diff --git a/Changelog.yaml b/Changelog.yaml
index ea99b0fc94..7ca8252a44 100644
--- a/Changelog.yaml
+++ b/Changelog.yaml
@@ -19,6 +19,53 @@
# new recipes:
# - title:
+- version: 0.8.65
+ date: 2012-08-17
+
+ new features:
+ - title: "A new wireless device driver. This allows connecting wirelessly to a device running a 'smart' calibre client"
+ description: "The wireless connection functions just as if the device was plugged into the computer by USB cable. Currently, Android devices are supported. See https://play.google.com/store/apps/details?id=com.multipie.calibreandroid"
+ type: major
+
+ - title: "MOBI Output: Add an option to control the type of MOBI file produced, to the MOBI Output conversion options. You can now generate an old MOBI6, a new KF8 or a joint MOBI6/KF8 file. By default, MOBI6 files are generated. This replaces the previous use of a tweak."
+
+ - title: "E-book viewer: Make paged mode the default. You can go back to the old flow mode by clicking the button with the yellow scroll in the top right corner of the viewer."
+
+ - title: "Driver for COBY kYROS MID7042 and Samsung Galaxy Ace S5839i"
+
+ bug fixes:
+ - title: "Update version of poppler bundled with calibre to fix reading covers from some PDF files"
+
+ - title: "Get Books: Fix clicking of results from Diesel books when there is only a single result not working"
+
+ - title: "Improve detection of system language on first run of calibre"
+ tickets: [1036354]
+
+ - title: "When finding the next series index and the last series index is a fractional number, use the next largest integer, instead of just adding 1"
+
+ - title: "Fix exception when saving a search/replace when no saved search/replace had been opened previously in the bulk search/replace dialog"
+ tickets: [1036464]
+
+ - title: "Fix restore database not restoring entries for the original_* formats"
+
+ - title: "Fix first run wizard not allowing empty email sending settings"
+ tickets: [1036358]
+
+ - title: "Do not error out when setting the cover for a book that has no folders in the library."
+ tickets: [1035935]
+
+ - title: "Conversion pipeline: Ignore unparseable values in the color attribute of font tags, instead of erroring out on them."
+ tickets: [1035633]
+
+ - title: "Catalogs: Fix regression that broke creation of catalogs while a device is connected"
+
+ - title: "Fix --with-library=/whatever not working for calibredb list"
+
+ improved recipes:
+ - Slashdot
+ - Various Canadian newspapers
+ - Business Spectator
+
- version: 0.8.64
date: 2012-08-09
diff --git a/manual/gui.rst b/manual/gui.rst
index d82db2772a..c57b49185d 100755
--- a/manual/gui.rst
+++ b/manual/gui.rst
@@ -548,7 +548,7 @@ Calibre has several keyboard shortcuts to save you time and mouse movement. Thes
- Toggle jobs list
* - :kbd:`Alt+Shift+B`
- Toggle Cover Browser
- * - :kbd:`Alt+Shift+B`
+ * - :kbd:`Alt+Shift+D`
- Toggle Book Details panel
* - :kbd:`Alt+Shift+T`
- Toggle Tag Browser
diff --git a/manual/images/lorentz.png b/manual/images/lorentz.png
new file mode 100644
index 0000000000..4b261dde38
Binary files /dev/null and b/manual/images/lorentz.png differ
diff --git a/manual/mathjax.html b/manual/mathjax.html
new file mode 100644
index 0000000000..0cf8c1f8b1
--- /dev/null
+++ b/manual/mathjax.html
@@ -0,0 +1,102 @@
+
+
+
+
+Math Test Page
+
+
+
+
+
+
+
+
+
+
Sample Equations
+
+
The Lorenz Equations
+
+
+\begin{align}
+\dot{x} & = \sigma(y-x) \label{lorenz}\\
+\dot{y} & = \rho x - y - xz \\
+\dot{z} & = -\beta z + xy
+\end{align}
+
While display equations look good for a page of samples, the
+ability to mix math and text in a paragraph is also important. This
+expression \(\sqrt{3x-1}+(1+x)^2\) is an example of an inline equation. As
+you see, equations can be used this way as well, without unduly
+disturbing the spacing between lines.
+
+
References to equations
+
+
Here is a reference to the Lorenz Equations (\ref{lorenz}). Clicking on the equation number will take you back to the equation.
+
+
+
diff --git a/manual/resources/mathjax.epub b/manual/resources/mathjax.epub
new file mode 100644
index 0000000000..09b1e45b01
Binary files /dev/null and b/manual/resources/mathjax.epub differ
diff --git a/manual/tutorials.rst b/manual/tutorials.rst
index dd41c730b0..420c1a4cbd 100755
--- a/manual/tutorials.rst
+++ b/manual/tutorials.rst
@@ -18,4 +18,5 @@ Here you will find tutorials to get you started using |app|'s more advanced feat
regexp
server
creating_plugins
+ typesetting_math
diff --git a/manual/typesetting_math.rst b/manual/typesetting_math.rst
new file mode 100644
index 0000000000..dd3d574c3a
--- /dev/null
+++ b/manual/typesetting_math.rst
@@ -0,0 +1,70 @@
+
+.. include:: global.rst
+
+.. _typesetting_math:
+
+
+Typesetting Math in ebooks
+============================
+
+The |app| ebook viewer has the ability to display math embedded in ebooks (ePub
+and HTML files). You can typeset the math directly with TeX or MathML or
+AsciiMath. The |app| viewer uses the excellent `MathJax
+`_ library to do this. This is a brief tutorial on
+creating ebooks with math in them that work well with the |app| viewer.
+
+.. note::
+ This only applies to calibre version 0.8.66 and newer
+
+A simple HTML file with mathematics
+-------------------------------------
+
+You can write mathematics inline inside a simple HTML file and the |app| viewer
+will render it into properly typeset mathematics. In the example below, we use
+TeX notation for mathematics. You will see that you can use normal TeX
+commands, with the small caveat that ampersands and less than and greater than
+signs have to be written as & < and > respectively.
+
+The first step is to tell |app| that this will contains maths. You do this by
+adding the following snippet of code to the section of the HTML file::
+
+
+
+That's it, now you can type mathematics just as you would in a .tex file. For
+example, here are Lorentz's equations::
+
+
The Lorenz Equations
+
+
+ \begin{align}
+ \dot{x} & = \sigma(y-x) \\
+ \dot{y} & = \rho x - y - xz \\
+ \dot{z} & = -\beta z + xy
+ \end{align}
+
+
+This snippet looks like the following screen shot in the |app| viewer.
+
+.. figure:: images/lorentz.png
+ :align: center
+
+ :guilabel:`The Lorentz Equations`
+
+The complete HTML file, with more equations and inline mathematics is
+reproduced below. You can convert this HTML file to EPUB in |app| to end up
+with an ebook you can distribute easily to other people.
+
+.. only:: online
+
+ Here is the generated EPUB file: `mathjax.epub <_static/mathjax.epub>`_.
+
+.. literalinclude:: mathjax.html
+ :language: html
+
+More information
+-----------------
+
+Since the |app| viewer uses the MathJax library to render mathematics, the best
+place to find out more about math in ebooks and get help is the `MathJax
+website `_.
+
diff --git a/recipes/brecha.recipe b/recipes/brecha.recipe
new file mode 100644
index 0000000000..da58710dd5
--- /dev/null
+++ b/recipes/brecha.recipe
@@ -0,0 +1,82 @@
+from __future__ import (unicode_literals, division, absolute_import,
+ print_function)
+__license__ = 'GPL v3'
+__copyright__ = '2012, Darko Miletic '
+'''
+www.brecha.com.uy
+'''
+
+import urllib
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class Brecha(BasicNewsRecipe):
+ title = 'Brecha Digital'
+ __author__ = 'Darko Miletic'
+ description = 'Brecha , Cultura ,Sociales , Separatas, Lupas, Vueltas de Montevideo y toda la infomacion que caracteriza a este semanario'
+ publisher = 'Brecha'
+ category = 'brecha, digital, prensa, uruguay, semanario, sociedad, politica, cultura'
+ oldest_article = 7
+ max_articles_per_feed = 200
+ no_stylesheets = True
+ encoding = 'utf8'
+ use_embedded_content = False
+ language = 'es_UY'
+ remove_empty_feeds = True
+ publication_type = 'magazine'
+ auto_cleanup = True
+ needs_subscription = 'optional'
+ masthead_url = 'http://www.brecha.com.uy/templates/ja_nex/themes/orange/images/logo.png'
+ extra_css = """
+ body{font-family: Arial,Helvetica,sans-serif }
+ img{margin-bottom: 0.4em; display:block}
+ """
+
+ conversion_options = {
+ 'comment' : description
+ , 'tags' : category
+ , 'publisher' : publisher
+ , 'language' : language
+ }
+
+
+ def get_browser(self):
+ br = BasicNewsRecipe.get_browser()
+ br.open('http://www.brecha.com.uy/index.php/acceder-miembros')
+ if self.username is not None and self.password is not None:
+ data = urllib.urlencode({ 'task':'login'
+ ,'view':'register'
+ ,'username':self.username
+ ,'password':self.password
+ })
+ br.open('http://www.brecha.com.uy/index.php/index.php?option=com_osemsc&controller=register',data)
+ return br
+
+ remove_tags = [
+ dict(name=['meta','link']),
+ dict(name='div', attrs={'id':'js_ja'}),
+ dict(name='ul', attrs={'class':'actions'})
+ ]
+ remove_attributes=['lang', 'border']
+
+ feeds = [
+ (u'Politica' , u'http://www.brecha.com.uy/index.php/politica-uruguaya?format=feed&type=rss'),
+ (u'Mundo' , u'http://www.brecha.com.uy/index.php/mundo?format=feed&type=rss'),
+ (u'Mapamundi', u'http://www.brecha.com.uy/index.php/mundo/mapamundi?format=feed&type=rss'),
+ (u'Cultura' , u'http://www.brecha.com.uy/index.php/cultura?format=feed&type=rss'),
+ (u'Vueltas de Montevideo', u'http://www.brecha.com.uy/index.php/cultura/vueltas-de-montevideo?format=feed&type=rss'),
+ (u'Secos y Mojados', u'http://www.brecha.com.uy/index.php/cultura/secos-y-mojados?format=feed&type=rss'),
+ (u'Literarias', u'http://www.brecha.com.uy/index.php/cultura/literarias?format=feed&type=rss'),
+ (u'Sociedad', u'http://www.brecha.com.uy/index.php/sociedad?format=feed&type=rss'),
+ (u'Especiales', u'http://www.brecha.com.uy/index.php/especiales?format=feed&type=rss'),
+ (u'Contratapa', u'http://www.brecha.com.uy/index.php/contratapa?format=feed&type=rss')
+ ]
+
+ def print_version(self, url):
+ return url + '?tmpl=component&print=1&layout=default&page='
+
+ def get_cover_url(self):
+ soup = self.index_to_soup('http://www.brecha.com.uy/index.php')
+ for image in soup.findAll('img', alt=True):
+ if image['alt'].startswith('Tapa '):
+ return 'http://www.brecha.com.uy' + urllib.quote(image['src'])
+ return None
diff --git a/recipes/business_spectator.recipe b/recipes/business_spectator.recipe
index ef58424c6c..9ed3f1f7ac 100644
--- a/recipes/business_spectator.recipe
+++ b/recipes/business_spectator.recipe
@@ -16,6 +16,7 @@ class BusinessSpectator(BasicNewsRecipe):
oldest_article = 2
max_articles_per_feed = 100
no_stylesheets = True
+ auto_cleanup = True
#delay = 1
use_embedded_content = False
encoding = 'utf8'
@@ -32,11 +33,11 @@ class BusinessSpectator(BasicNewsRecipe):
,'linearize_tables': False
}
- keep_only_tags = [dict(id='storyHeader'), dict(id='body-html')]
+ #keep_only_tags = [dict(id='storyHeader'), dict(id='body-html')]
- remove_tags = [dict(attrs={'class':'hql'})]
+ #remove_tags = [dict(attrs={'class':'hql'})]
- remove_attributes = ['width','height','style']
+ #remove_attributes = ['width','height','style']
feeds = [
('Top Stories', 'http://www.businessspectator.com.au/top-stories.rss'),
@@ -46,3 +47,4 @@ class BusinessSpectator(BasicNewsRecipe):
('Daily Dossier', 'http://www.businessspectator.com.au/bs.nsf/RSS?readform&type=kgb&cat=dossier'),
('Australia', 'http://www.businessspectator.com.au/bs.nsf/RSS?readform&type=region&cat=australia'),
]
+
diff --git a/recipes/calgary_herald.recipe b/recipes/calgary_herald.recipe
index 12134bc9a4..d1b28de9de 100644
--- a/recipes/calgary_herald.recipe
+++ b/recipes/calgary_herald.recipe
@@ -1,35 +1,314 @@
-from calibre.web.feeds.news import BasicNewsRecipe
-
-class CalgaryHerald(BasicNewsRecipe):
- title = u'Calgary Herald'
- oldest_article = 3
- max_articles_per_feed = 100
-
- feeds = [
- (u'News', u'http://rss.canada.com/get/?F233'),
- (u'Calgary', u'http://www.calgaryherald.com/scripts/sp6query.aspx?catalog=cahr&tags=keyword|calgary&output=rss?link=http%3a%2f%2fwww.calgaryherald'),
- (u'Alberta', u'http://www.calgaryherald.com/scripts/Sp6Query.aspx?catalog=CAHR&tags=Keyword|Alberta&output=rss?link=http%3A%2F%2Fwww.calgaryherald.com%2Fnews%2Falberta%2Findex.html'),
- (u'Politics', u'http://rss.canada.com/get/?F7551'),
- (u'National', u'http://rss.canada.com/get/?F7552'),
- (u'World', u'http://rss.canada.com/get/?F7553'),
- ]
- __author__ = 'rty'
- pubisher = 'Calgary Herald'
- description = 'Calgary, Alberta, Canada'
- category = 'News, Calgary, Alberta, Canada'
-
-
- remove_javascript = True
- use_embedded_content = False
- no_stylesheets = True
- language = 'en_CA'
- encoding = 'utf-8'
- conversion_options = {'linearize_tables':True}
- ##masthead_url = 'http://www.calgaryherald.com/index.html'
- keep_only_tags = [
- dict(name='div', attrs={'id':'storyheader'}),
- dict(name='div', attrs={'id':'storycontent'})
-
- ]
- remove_tags_after = {'class':"story_tool_hr"}
-
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+__license__ = 'GPL v3'
+
+'''
+www.canada.com
+'''
+import re
+from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import Tag, BeautifulStoneSoup
+
+
+class CanWestPaper(BasicNewsRecipe):
+
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
+
+
+ # un-comment the following six lines for the Vancouver Province
+## title = u'Vancouver Province'
+## url_prefix = 'http://www.theprovince.com'
+## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+## logo_url = 'vplogo.jpg'
+## fp_tag = 'CAN_TP'
+
+ # un-comment the following six lines for the Vancouver Sun
+## title = u'Vancouver Sun'
+## url_prefix = 'http://www.vancouversun.com'
+## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+## logo_url = 'vslogo.jpg'
+## fp_tag = 'CAN_VS'
+
+ # un-comment the following six lines for the Calgary Herald
+ title = u'Calgary Herald'
+ url_prefix = 'http://www.calgaryherald.com'
+ description = u'News from Calgary, AB'
+ std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+ logo_url = 'chlogo.jpg'
+ fp_tag = 'CAN_CH'
+
+ # un-comment the following six lines for the Edmonton Journal
+## title = u'Edmonton Journal'
+## url_prefix = 'http://www.edmontonjournal.com'
+## description = u'News from Edmonton, AB'
+## std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+## logo_url = 'ejlogo.jpg'
+## fp_tag = 'CAN_EJ'
+
+ # un-comment the following six lines for the Ottawa Citizen
+## title = u'Ottawa Citizen'
+## url_prefix = 'http://www.ottawacitizen.com'
+## description = u'News from Ottawa, ON'
+## std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+## logo_url = 'oclogo.jpg'
+## fp_tag = 'CAN_OC'
+
+ # un-comment the following six lines for the Montreal Gazette
+## title = u'Montreal Gazette'
+## url_prefix = 'http://www.montrealgazette.com'
+## description = u'News from Montreal, QC'
+## std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+## logo_url = 'mglogo.jpg'
+## fp_tag = 'CAN_MG'
+
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+
+ url_list = []
+ language = 'en_CA'
+ __author__ = 'Nick Redding'
+ no_stylesheets = True
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
+ extra_css = '''
+ .timestamp { font-size:xx-small; display: block; }
+ #storyheader { font-size: medium; }
+ #storyheader h1 { font-size: x-large; }
+ #storyheader h2 { font-size: small; font-style: italic; }
+ .byline { font-size:xx-small; }
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
+ remove_tags = [{'class':'comments'},
+ dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
+ dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
+ dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
+ dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
+ dict(name='div', attrs={'class':'rule_grey_solid'}),
+ dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
+
+
+ def get_cover_url(self):
+ from datetime import timedelta, date
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ daysback=1
+ try:
+ br.open(cover)
+ except:
+ while daysback<7:
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str((date.today() - timedelta(days=daysback)).day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ try:
+ br.open(cover)
+ except:
+ daysback = daysback+1
+ continue
+ break
+ if daysback==7:
+ self.log("\nCover unavailable")
+ cover = None
+ return cover
+
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
+ def fixChars(self,string):
+ # Replace lsquo (\x91)
+ fixed = re.sub("\x91","‘",string)
+ # Replace rsquo (\x92)
+ fixed = re.sub("\x92","’",fixed)
+ # Replace ldquo (\x93)
+ fixed = re.sub("\x93","“",fixed)
+ # Replace rdquo (\x94)
+ fixed = re.sub("\x94","”",fixed)
+ # Replace ndash (\x96)
+ fixed = re.sub("\x96","–",fixed)
+ # Replace mdash (\x97)
+ fixed = re.sub("\x97","—",fixed)
+ fixed = re.sub("’","’",fixed)
+ return fixed
+
+ def massageNCXText(self, description):
+ # Kindle TOC descriptions won't render certain characters
+ if description:
+ massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
+ # Replace '&' with '&'
+ massaged = re.sub("&","&", massaged)
+ return self.fixChars(massaged)
+ else:
+ return description
+
+ def populate_article_metadata(self, article, soup, first):
+ if first:
+ picdiv = soup.find('body').find('img')
+ if picdiv is not None:
+ self.add_toc_thumbnail(article,re.sub(r'links\\link\d+\\','',picdiv['src']))
+ xtitle = article.text_summary.strip()
+ if len(xtitle) == 0:
+ desc = soup.find('meta',attrs={'property':'og:description'})
+ if desc is not None:
+ article.summary = article.text_summary = desc['content']
+
+ def strip_anchors(self,soup):
+ paras = soup.findAll(True)
+ for para in paras:
+ aTags = para.findAll('a')
+ for a in aTags:
+ if a.img is None:
+ a.replaceWith(a.renderContents().decode('cp1252','replace'))
+ return soup
+
+
+ def preprocess_html(self,soup):
+ #delete empty id attributes--they screw up the TOC for unknown reasons
+ divtags = soup.findAll('div',attrs={'id':''})
+ if divtags:
+ for div in divtags:
+ del(div['id'])
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
+ return self.strip_anchors(soup)
+
+
+
+ def parse_index(self):
+
+ articles = {}
+ ans = []
+
+
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
+ ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
+ return ans
+
diff --git a/recipes/edmonton_journal.recipe b/recipes/edmonton_journal.recipe
index e0c02b7d83..d3fdbc84f3 100644
--- a/recipes/edmonton_journal.recipe
+++ b/recipes/edmonton_journal.recipe
@@ -1,105 +1,136 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-
__license__ = 'GPL v3'
'''
www.canada.com
'''
-
import re
-from calibre.web.feeds.news import BasicNewsRecipe
-from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup
+from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, Tag
class CanWestPaper(BasicNewsRecipe):
- # un-comment the following four lines for the Victoria Times Colonist
-## title = u'Victoria Times Colonist'
-## url_prefix = 'http://www.timescolonist.com'
-## description = u'News from Victoria, BC'
-## fp_tag = 'CAN_TC'
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
- # un-comment the following four lines for the Vancouver Province
+
+ # un-comment the following six lines for the Vancouver Province
## title = u'Vancouver Province'
## url_prefix = 'http://www.theprovince.com'
## description = u'News from Vancouver, BC'
-## fp_tag = 'CAN_VP'
+## std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+## logo_url = 'vplogo.jpg'
+## fp_tag = 'CAN_TP'
- # un-comment the following four lines for the Vancouver Sun
+ # un-comment the following six lines for the Vancouver Sun
## title = u'Vancouver Sun'
## url_prefix = 'http://www.vancouversun.com'
## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+## logo_url = 'vslogo.jpg'
## fp_tag = 'CAN_VS'
- # un-comment the following four lines for the Edmonton Journal
- title = u'Edmonton Journal'
- url_prefix = 'http://www.edmontonjournal.com'
- description = u'News from Edmonton, AB'
- fp_tag = 'CAN_EJ'
-
- # un-comment the following four lines for the Calgary Herald
+ # un-comment the following six lines for the Calgary Herald
## title = u'Calgary Herald'
## url_prefix = 'http://www.calgaryherald.com'
## description = u'News from Calgary, AB'
+## std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+## logo_url = 'chlogo.jpg'
## fp_tag = 'CAN_CH'
- # un-comment the following four lines for the Regina Leader-Post
-## title = u'Regina Leader-Post'
-## url_prefix = 'http://www.leaderpost.com'
-## description = u'News from Regina, SK'
-## fp_tag = ''
+ # un-comment the following six lines for the Edmonton Journal
+ title = u'Edmonton Journal'
+ url_prefix = 'http://www.edmontonjournal.com'
+ description = u'News from Edmonton, AB'
+ std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+ logo_url = 'ejlogo.jpg'
+ fp_tag = 'CAN_EJ'
- # un-comment the following four lines for the Saskatoon Star-Phoenix
-## title = u'Saskatoon Star-Phoenix'
-## url_prefix = 'http://www.thestarphoenix.com'
-## description = u'News from Saskatoon, SK'
-## fp_tag = ''
-
- # un-comment the following four lines for the Windsor Star
-## title = u'Windsor Star'
-## url_prefix = 'http://www.windsorstar.com'
-## description = u'News from Windsor, ON'
-## fp_tag = 'CAN_'
-
- # un-comment the following four lines for the Ottawa Citizen
+ # un-comment the following six lines for the Ottawa Citizen
## title = u'Ottawa Citizen'
## url_prefix = 'http://www.ottawacitizen.com'
## description = u'News from Ottawa, ON'
+## std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+## logo_url = 'oclogo.jpg'
## fp_tag = 'CAN_OC'
- # un-comment the following four lines for the Montreal Gazette
+ # un-comment the following six lines for the Montreal Gazette
## title = u'Montreal Gazette'
## url_prefix = 'http://www.montrealgazette.com'
## description = u'News from Montreal, QC'
+## std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+## logo_url = 'mglogo.jpg'
## fp_tag = 'CAN_MG'
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+ url_list = []
language = 'en_CA'
__author__ = 'Nick Redding'
no_stylesheets = True
- timefmt = ' [%b %d]'
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
extra_css = '''
.timestamp { font-size:xx-small; display: block; }
#storyheader { font-size: medium; }
#storyheader h1 { font-size: x-large; }
- #storyheader h2 { font-size: large; font-style: italic; }
+ #storyheader h2 { font-size: small; font-style: italic; }
.byline { font-size:xx-small; }
- #photocaption { font-size: small; font-style: italic }
- #photocredit { font-size: xx-small; }'''
- keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'})]
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
remove_tags = [{'class':'comments'},
dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
dict(name='div', attrs={'class':'rule_grey_solid'}),
dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
+
def get_cover_url(self):
from datetime import timedelta, date
- if self.fp_tag=='':
- return None
cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
br = BasicNewsRecipe.get_browser()
daysback=1
@@ -120,6 +151,18 @@ class CanWestPaper(BasicNewsRecipe):
cover = None
return cover
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
def fixChars(self,string):
# Replace lsquo (\x91)
fixed = re.sub("\x91","‘",string)
@@ -166,55 +209,106 @@ class CanWestPaper(BasicNewsRecipe):
a.replaceWith(a.renderContents().decode('cp1252','replace'))
return soup
- def preprocess_html(self, soup):
+
+ def preprocess_html(self,soup):
+ #delete empty id attributes--they screw up the TOC for unknown reasons
+ divtags = soup.findAll('div',attrs={'id':''})
+ if divtags:
+ for div in divtags:
+ del(div['id'])
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
return self.strip_anchors(soup)
def parse_index(self):
- soup = self.index_to_soup(self.url_prefix+'/news/todays-paper/index.html')
articles = {}
- key = 'News'
- ans = ['News']
+ ans = []
- # Find each instance of class="sectiontitle", class="featurecontent"
- for divtag in soup.findAll('div',attrs={'class' : ["section_title02","featurecontent"]}):
- #self.log(" div class = %s" % divtag['class'])
- if divtag['class'].startswith('section_title'):
- # div contains section title
- if not divtag.h3:
- continue
- key = self.tag_to_string(divtag.h3,False)
- ans.append(key)
- self.log("Section name %s" % key)
- continue
- # div contains article data
- h1tag = divtag.find('h1')
- if not h1tag:
- continue
- atag = h1tag.find('a',href=True)
- if not atag:
- continue
- url = self.url_prefix+'/news/todays-paper/'+atag['href']
- #self.log("Section %s" % key)
- #self.log("url %s" % url)
- title = self.tag_to_string(atag,False)
- #self.log("title %s" % title)
- pubdate = ''
- description = ''
- ptag = divtag.find('p');
- if ptag:
- description = self.tag_to_string(ptag,False)
- #self.log("description %s" % description)
- author = ''
- autag = divtag.find('h4')
- if autag:
- author = self.tag_to_string(autag,False)
- #self.log("author %s" % author)
- if not articles.has_key(key):
- articles[key] = []
- articles[key].append(dict(title=title,url=url,date=pubdate,description=description,author=author,content=''))
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
+
diff --git a/recipes/montreal_gazette.recipe b/recipes/montreal_gazette.recipe
index 4ebbdbc0a1..49a5089b5c 100644
--- a/recipes/montreal_gazette.recipe
+++ b/recipes/montreal_gazette.recipe
@@ -1,48 +1,314 @@
#!/usr/bin/env python
-
+# -*- coding: utf-8 -*-
__license__ = 'GPL v3'
'''
www.canada.com
'''
-
+import re
from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, Tag
class CanWestPaper(BasicNewsRecipe):
- # un-comment the following three lines for the Montreal Gazette
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
+
+
+ # un-comment the following six lines for the Vancouver Province
+## title = u'Vancouver Province'
+## url_prefix = 'http://www.theprovince.com'
+## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+## logo_url = 'vplogo.jpg'
+## fp_tag = 'CAN_TP'
+
+ # un-comment the following six lines for the Vancouver Sun
+## title = u'Vancouver Sun'
+## url_prefix = 'http://www.vancouversun.com'
+## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+## logo_url = 'vslogo.jpg'
+## fp_tag = 'CAN_VS'
+
+ # un-comment the following six lines for the Calgary Herald
+## title = u'Calgary Herald'
+## url_prefix = 'http://www.calgaryherald.com'
+## description = u'News from Calgary, AB'
+## std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+## logo_url = 'chlogo.jpg'
+## fp_tag = 'CAN_CH'
+
+ # un-comment the following six lines for the Edmonton Journal
+## title = u'Edmonton Journal'
+## url_prefix = 'http://www.edmontonjournal.com'
+## description = u'News from Edmonton, AB'
+## std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+## logo_url = 'ejlogo.jpg'
+## fp_tag = 'CAN_EJ'
+
+ # un-comment the following six lines for the Ottawa Citizen
+## title = u'Ottawa Citizen'
+## url_prefix = 'http://www.ottawacitizen.com'
+## description = u'News from Ottawa, ON'
+## std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+## logo_url = 'oclogo.jpg'
+## fp_tag = 'CAN_OC'
+
+ # un-comment the following six lines for the Montreal Gazette
title = u'Montreal Gazette'
+ url_prefix = 'http://www.montrealgazette.com'
description = u'News from Montreal, QC'
+ std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+ logo_url = 'mglogo.jpg'
+ fp_tag = 'CAN_MG'
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+ url_list = []
language = 'en_CA'
__author__ = 'Nick Redding'
no_stylesheets = True
- auto_cleanup = True
- auto_cleanup_keep = '//*[@id="imageBox"]'
- timefmt = ' [%b %d]'
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
extra_css = '''
.timestamp { font-size:xx-small; display: block; }
#storyheader { font-size: medium; }
#storyheader h1 { font-size: x-large; }
- #storyheader h2 { font-size: large; font-style: italic; }
+ #storyheader h2 { font-size: small; font-style: italic; }
.byline { font-size:xx-small; }
- #photocaption { font-size: small; font-style: italic }
- #photocredit { font-size: xx-small; }'''
-
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
+ remove_tags = [{'class':'comments'},
+ dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
+ dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
+ dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
+ dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
+ dict(name='div', attrs={'class':'rule_grey_solid'}),
+ dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
- feeds = [
-('News',
- 'http://rss.canada.com/get/?F297'),
- ('Sports',
- 'http://rss.canada.com/get/?F299'),
- ('Entertainment',
- 'http://rss.canada.com/get/?F7366'),
- ('Business',
- 'http://rss.canada.com/get/?F6939'),
-]
+ def get_cover_url(self):
+ from datetime import timedelta, date
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ daysback=1
+ try:
+ br.open(cover)
+ except:
+ while daysback<7:
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str((date.today() - timedelta(days=daysback)).day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ try:
+ br.open(cover)
+ except:
+ daysback = daysback+1
+ continue
+ break
+ if daysback==7:
+ self.log("\nCover unavailable")
+ cover = None
+ return cover
+
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
+ def fixChars(self,string):
+ # Replace lsquo (\x91)
+ fixed = re.sub("\x91","‘",string)
+ # Replace rsquo (\x92)
+ fixed = re.sub("\x92","’",fixed)
+ # Replace ldquo (\x93)
+ fixed = re.sub("\x93","“",fixed)
+ # Replace rdquo (\x94)
+ fixed = re.sub("\x94","”",fixed)
+ # Replace ndash (\x96)
+ fixed = re.sub("\x96","–",fixed)
+ # Replace mdash (\x97)
+ fixed = re.sub("\x97","—",fixed)
+ fixed = re.sub("’","’",fixed)
+ return fixed
+
+ def massageNCXText(self, description):
+ # Kindle TOC descriptions won't render certain characters
+ if description:
+ massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
+ # Replace '&' with '&'
+ massaged = re.sub("&","&", massaged)
+ return self.fixChars(massaged)
+ else:
+ return description
+
+ def populate_article_metadata(self, article, soup, first):
+ if first:
+ picdiv = soup.find('body').find('img')
+ if picdiv is not None:
+ self.add_toc_thumbnail(article,re.sub(r'links\\link\d+\\','',picdiv['src']))
+ xtitle = article.text_summary.strip()
+ if len(xtitle) == 0:
+ desc = soup.find('meta',attrs={'property':'og:description'})
+ if desc is not None:
+ article.summary = article.text_summary = desc['content']
+
+ def strip_anchors(self,soup):
+ paras = soup.findAll(True)
+ for para in paras:
+ aTags = para.findAll('a')
+ for a in aTags:
+ if a.img is None:
+ a.replaceWith(a.renderContents().decode('cp1252','replace'))
+ return soup
-
+ def preprocess_html(self,soup):
+ #delete empty id attributes--they screw up the TOC for unknown reasons
+ divtags = soup.findAll('div',attrs={'id':''})
+ if divtags:
+ for div in divtags:
+ del(div['id'])
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
+ return self.strip_anchors(soup)
+
+
+
+ def parse_index(self):
+
+ articles = {}
+ ans = []
+
+
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
+ ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
+ return ans
+
diff --git a/recipes/ottawa_citizen.recipe b/recipes/ottawa_citizen.recipe
index 32d5567d6d..0245b65231 100644
--- a/recipes/ottawa_citizen.recipe
+++ b/recipes/ottawa_citizen.recipe
@@ -1,105 +1,136 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-
__license__ = 'GPL v3'
'''
www.canada.com
'''
-
import re
-from calibre.web.feeds.news import BasicNewsRecipe
-from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup
+from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, Tag
class CanWestPaper(BasicNewsRecipe):
- # un-comment the following four lines for the Victoria Times Colonist
-## title = u'Victoria Times Colonist'
-## url_prefix = 'http://www.timescolonist.com'
-## description = u'News from Victoria, BC'
-## fp_tag = 'CAN_TC'
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
- # un-comment the following four lines for the Vancouver Province
+
+ # un-comment the following six lines for the Vancouver Province
## title = u'Vancouver Province'
## url_prefix = 'http://www.theprovince.com'
## description = u'News from Vancouver, BC'
-## fp_tag = 'CAN_VP'
+## std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+## logo_url = 'vplogo.jpg'
+## fp_tag = 'CAN_TP'
- # un-comment the following four lines for the Vancouver Sun
+ # un-comment the following six lines for the Vancouver Sun
## title = u'Vancouver Sun'
## url_prefix = 'http://www.vancouversun.com'
## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+## logo_url = 'vslogo.jpg'
## fp_tag = 'CAN_VS'
- # un-comment the following four lines for the Edmonton Journal
-## title = u'Edmonton Journal'
-## url_prefix = 'http://www.edmontonjournal.com'
-## description = u'News from Edmonton, AB'
-## fp_tag = 'CAN_EJ'
-
- # un-comment the following four lines for the Calgary Herald
+ # un-comment the following six lines for the Calgary Herald
## title = u'Calgary Herald'
## url_prefix = 'http://www.calgaryherald.com'
## description = u'News from Calgary, AB'
+## std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+## logo_url = 'chlogo.jpg'
## fp_tag = 'CAN_CH'
- # un-comment the following four lines for the Regina Leader-Post
-## title = u'Regina Leader-Post'
-## url_prefix = 'http://www.leaderpost.com'
-## description = u'News from Regina, SK'
-## fp_tag = ''
+ # un-comment the following six lines for the Edmonton Journal
+## title = u'Edmonton Journal'
+## url_prefix = 'http://www.edmontonjournal.com'
+## description = u'News from Edmonton, AB'
+## std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+## logo_url = 'ejlogo.jpg'
+## fp_tag = 'CAN_EJ'
- # un-comment the following four lines for the Saskatoon Star-Phoenix
-## title = u'Saskatoon Star-Phoenix'
-## url_prefix = 'http://www.thestarphoenix.com'
-## description = u'News from Saskatoon, SK'
-## fp_tag = ''
-
- # un-comment the following four lines for the Windsor Star
-## title = u'Windsor Star'
-## url_prefix = 'http://www.windsorstar.com'
-## description = u'News from Windsor, ON'
-## fp_tag = 'CAN_'
-
- # un-comment the following four lines for the Ottawa Citizen
+ # un-comment the following six lines for the Ottawa Citizen
title = u'Ottawa Citizen'
url_prefix = 'http://www.ottawacitizen.com'
description = u'News from Ottawa, ON'
+ std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+ logo_url = 'oclogo.jpg'
fp_tag = 'CAN_OC'
- # un-comment the following four lines for the Montreal Gazette
+ # un-comment the following six lines for the Montreal Gazette
## title = u'Montreal Gazette'
## url_prefix = 'http://www.montrealgazette.com'
## description = u'News from Montreal, QC'
+## std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+## logo_url = 'mglogo.jpg'
## fp_tag = 'CAN_MG'
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+ url_list = []
language = 'en_CA'
__author__ = 'Nick Redding'
no_stylesheets = True
- timefmt = ' [%b %d]'
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
extra_css = '''
.timestamp { font-size:xx-small; display: block; }
#storyheader { font-size: medium; }
#storyheader h1 { font-size: x-large; }
- #storyheader h2 { font-size: large; font-style: italic; }
+ #storyheader h2 { font-size: small; font-style: italic; }
.byline { font-size:xx-small; }
- #photocaption { font-size: small; font-style: italic }
- #photocredit { font-size: xx-small; }'''
- keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'})]
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
remove_tags = [{'class':'comments'},
dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
dict(name='div', attrs={'class':'rule_grey_solid'}),
dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
+
def get_cover_url(self):
from datetime import timedelta, date
- if self.fp_tag=='':
- return None
cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
br = BasicNewsRecipe.get_browser()
daysback=1
@@ -120,6 +151,18 @@ class CanWestPaper(BasicNewsRecipe):
cover = None
return cover
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
def fixChars(self,string):
# Replace lsquo (\x91)
fixed = re.sub("\x91","‘",string)
@@ -166,55 +209,106 @@ class CanWestPaper(BasicNewsRecipe):
a.replaceWith(a.renderContents().decode('cp1252','replace'))
return soup
- def preprocess_html(self, soup):
+
+ def preprocess_html(self,soup):
+ #delete empty id attributes--they screw up the TOC for unknown reasons
+ divtags = soup.findAll('div',attrs={'id':''})
+ if divtags:
+ for div in divtags:
+ del(div['id'])
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
return self.strip_anchors(soup)
def parse_index(self):
- soup = self.index_to_soup(self.url_prefix+'/news/todays-paper/index.html')
articles = {}
- key = 'News'
- ans = ['News']
+ ans = []
- # Find each instance of class="sectiontitle", class="featurecontent"
- for divtag in soup.findAll('div',attrs={'class' : ["section_title02","featurecontent"]}):
- #self.log(" div class = %s" % divtag['class'])
- if divtag['class'].startswith('section_title'):
- # div contains section title
- if not divtag.h3:
- continue
- key = self.tag_to_string(divtag.h3,False)
- ans.append(key)
- self.log("Section name %s" % key)
- continue
- # div contains article data
- h1tag = divtag.find('h1')
- if not h1tag:
- continue
- atag = h1tag.find('a',href=True)
- if not atag:
- continue
- url = self.url_prefix+'/news/todays-paper/'+atag['href']
- #self.log("Section %s" % key)
- #self.log("url %s" % url)
- title = self.tag_to_string(atag,False)
- #self.log("title %s" % title)
- pubdate = ''
- description = ''
- ptag = divtag.find('p');
- if ptag:
- description = self.tag_to_string(ptag,False)
- #self.log("description %s" % description)
- author = ''
- autag = divtag.find('h4')
- if autag:
- author = self.tag_to_string(autag,False)
- #self.log("author %s" % author)
- if not articles.has_key(key):
- articles[key] = []
- articles[key].append(dict(title=title,url=url,date=pubdate,description=description,author=author,content=''))
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
+
diff --git a/recipes/slashdot.recipe b/recipes/slashdot.recipe
index b10700a749..577582ee70 100644
--- a/recipes/slashdot.recipe
+++ b/recipes/slashdot.recipe
@@ -19,23 +19,12 @@ class Slashdot(BasicNewsRecipe):
__author__ = 'floweros edited by Huan T'
no_stylesheets = True
+ use_embedded_content = False
keep_only_tags = [
- dict(name='div',attrs={'id':'article'}),
- dict(name='div',attrs={'class':['postBody' 'details']}),
- dict(name='footer',attrs={'class':['clearfix meta article-foot']}),
- dict(name='article',attrs={'class':['fhitem fhitem-story article usermode thumbs grid_24']}),
- dict(name='dl',attrs={'class':'relatedPosts'}),
- dict(name='h2',attrs={'class':'story'}),
- dict(name='span',attrs={'class':'comments'}),
- ]
-
-
- remove_tags = [
- dict(name='aside',attrs={'id':'slashboxes'}),
- dict(name='div',attrs={'class':'paginate'}),
- dict(name='section',attrs={'id':'comments'}),
- dict(name='span',attrs={'class':'topic'}),
- ]
+ dict(name='div',attrs={'class':'story'}),
+ dict(name='div',attrs={'class':'body'}),
+ dict(name='ul',attrs={'id':'commentlisting'}),
+ ]
feeds = [
(u'Slashdot',
diff --git a/recipes/vancouver_provice.recipe b/recipes/vancouver_provice.recipe
index 9375670c59..690daefbc2 100644
--- a/recipes/vancouver_provice.recipe
+++ b/recipes/vancouver_provice.recipe
@@ -1,136 +1,314 @@
#!/usr/bin/env python
-
+# -*- coding: utf-8 -*-
__license__ = 'GPL v3'
'''
www.canada.com
'''
-
+import re
from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, Tag
class CanWestPaper(BasicNewsRecipe):
- # un-comment the following three lines for the Vancouver Province
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
+
+
+ # un-comment the following six lines for the Vancouver Province
title = u'Vancouver Province'
url_prefix = 'http://www.theprovince.com'
description = u'News from Vancouver, BC'
+ std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+ logo_url = 'vplogo.jpg'
+ fp_tag = 'CAN_TP'
- # un-comment the following three lines for the Vancouver Sun
- #title = u'Vancouver Sun'
- #url_prefix = 'http://www.vancouversun.com'
- #description = u'News from Vancouver, BC'
+ # un-comment the following six lines for the Vancouver Sun
+## title = u'Vancouver Sun'
+## url_prefix = 'http://www.vancouversun.com'
+## description = u'News from Vancouver, BC'
+## std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+## logo_url = 'vslogo.jpg'
+## fp_tag = 'CAN_VS'
- # un-comment the following three lines for the Edmonton Journal
- #title = u'Edmonton Journal'
- #url_prefix = 'http://www.edmontonjournal.com'
- #description = u'News from Edmonton, AB'
+ # un-comment the following six lines for the Calgary Herald
+## title = u'Calgary Herald'
+## url_prefix = 'http://www.calgaryherald.com'
+## description = u'News from Calgary, AB'
+## std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+## logo_url = 'chlogo.jpg'
+## fp_tag = 'CAN_CH'
- # un-comment the following three lines for the Calgary Herald
- #title = u'Calgary Herald'
- #url_prefix = 'http://www.calgaryherald.com'
- #description = u'News from Calgary, AB'
+ # un-comment the following six lines for the Edmonton Journal
+## title = u'Edmonton Journal'
+## url_prefix = 'http://www.edmontonjournal.com'
+## description = u'News from Edmonton, AB'
+## std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+## logo_url = 'ejlogo.jpg'
+## fp_tag = 'CAN_EJ'
- # un-comment the following three lines for the Regina Leader-Post
- #title = u'Regina Leader-Post'
- #url_prefix = 'http://www.leaderpost.com'
- #description = u'News from Regina, SK'
+ # un-comment the following six lines for the Ottawa Citizen
+## title = u'Ottawa Citizen'
+## url_prefix = 'http://www.ottawacitizen.com'
+## description = u'News from Ottawa, ON'
+## std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+## logo_url = 'oclogo.jpg'
+## fp_tag = 'CAN_OC'
- # un-comment the following three lines for the Saskatoon Star-Phoenix
- #title = u'Saskatoon Star-Phoenix'
- #url_prefix = 'http://www.thestarphoenix.com'
- #description = u'News from Saskatoon, SK'
-
- # un-comment the following three lines for the Windsor Star
- #title = u'Windsor Star'
- #url_prefix = 'http://www.windsorstar.com'
- #description = u'News from Windsor, ON'
-
- # un-comment the following three lines for the Ottawa Citizen
- #title = u'Ottawa Citizen'
- #url_prefix = 'http://www.ottawacitizen.com'
- #description = u'News from Ottawa, ON'
-
- # un-comment the following three lines for the Montreal Gazette
- #title = u'Montreal Gazette'
- #url_prefix = 'http://www.montrealgazette.com'
- #description = u'News from Montreal, QC'
+ # un-comment the following six lines for the Montreal Gazette
+## title = u'Montreal Gazette'
+## url_prefix = 'http://www.montrealgazette.com'
+## description = u'News from Montreal, QC'
+## std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+## logo_url = 'mglogo.jpg'
+## fp_tag = 'CAN_MG'
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+ url_list = []
language = 'en_CA'
__author__ = 'Nick Redding'
no_stylesheets = True
- timefmt = ' [%b %d]'
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
extra_css = '''
.timestamp { font-size:xx-small; display: block; }
#storyheader { font-size: medium; }
#storyheader h1 { font-size: x-large; }
- #storyheader h2 { font-size: large; font-style: italic; }
+ #storyheader h2 { font-size: small; font-style: italic; }
.byline { font-size:xx-small; }
- #photocaption { font-size: small; font-style: italic }
- #photocredit { font-size: xx-small; }'''
- keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'})]
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
remove_tags = [{'class':'comments'},
dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
dict(name='div', attrs={'class':'rule_grey_solid'}),
dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
+
+ def get_cover_url(self):
+ from datetime import timedelta, date
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ daysback=1
+ try:
+ br.open(cover)
+ except:
+ while daysback<7:
+ cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str((date.today() - timedelta(days=daysback)).day)+'/lg/'+self.fp_tag+'.jpg'
+ br = BasicNewsRecipe.get_browser()
+ try:
+ br.open(cover)
+ except:
+ daysback = daysback+1
+ continue
+ break
+ if daysback==7:
+ self.log("\nCover unavailable")
+ cover = None
+ return cover
+
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
+ def fixChars(self,string):
+ # Replace lsquo (\x91)
+ fixed = re.sub("\x91","‘",string)
+ # Replace rsquo (\x92)
+ fixed = re.sub("\x92","’",fixed)
+ # Replace ldquo (\x93)
+ fixed = re.sub("\x93","“",fixed)
+ # Replace rdquo (\x94)
+ fixed = re.sub("\x94","”",fixed)
+ # Replace ndash (\x96)
+ fixed = re.sub("\x96","–",fixed)
+ # Replace mdash (\x97)
+ fixed = re.sub("\x97","—",fixed)
+ fixed = re.sub("’","’",fixed)
+ return fixed
+
+ def massageNCXText(self, description):
+ # Kindle TOC descriptions won't render certain characters
+ if description:
+ massaged = unicode(BeautifulStoneSoup(description, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
+ # Replace '&' with '&'
+ massaged = re.sub("&","&", massaged)
+ return self.fixChars(massaged)
+ else:
+ return description
+
+ def populate_article_metadata(self, article, soup, first):
+ if first:
+ picdiv = soup.find('body').find('img')
+ if picdiv is not None:
+ self.add_toc_thumbnail(article,re.sub(r'links\\link\d+\\','',picdiv['src']))
+ xtitle = article.text_summary.strip()
+ if len(xtitle) == 0:
+ desc = soup.find('meta',attrs={'property':'og:description'})
+ if desc is not None:
+ article.summary = article.text_summary = desc['content']
+
+ def strip_anchors(self,soup):
+ paras = soup.findAll(True)
+ for para in paras:
+ aTags = para.findAll('a')
+ for a in aTags:
+ if a.img is None:
+ a.replaceWith(a.renderContents().decode('cp1252','replace'))
+ return soup
+
+
def preprocess_html(self,soup):
- #delete iempty id attributes--they screw up the TOC for unknow reasons
+ #delete empty id attributes--they screw up the TOC for unknown reasons
divtags = soup.findAll('div',attrs={'id':''})
if divtags:
for div in divtags:
del(div['id'])
- return soup
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
+ return self.strip_anchors(soup)
+
def parse_index(self):
- soup = self.index_to_soup(self.url_prefix+'/news/todays-paper/index.html')
articles = {}
- key = 'News'
- ans = ['News']
+ ans = []
- # Find each instance of class="sectiontitle", class="featurecontent"
- for divtag in soup.findAll('div',attrs={'class' : ["section_title02","featurecontent"]}):
- #self.log(" div class = %s" % divtag['class'])
- if divtag['class'].startswith('section_title'):
- # div contains section title
- if not divtag.h3:
- continue
- key = self.tag_to_string(divtag.h3,False)
- ans.append(key)
- self.log("Section name %s" % key)
- continue
- # div contains article data
- h1tag = divtag.find('h1')
- if not h1tag:
- continue
- atag = h1tag.find('a',href=True)
- if not atag:
- continue
- url = self.url_prefix+'/news/todays-paper/'+atag['href']
- #self.log("Section %s" % key)
- #self.log("url %s" % url)
- title = self.tag_to_string(atag,False)
- #self.log("title %s" % title)
- pubdate = ''
- description = ''
- ptag = divtag.find('p');
- if ptag:
- description = self.tag_to_string(ptag,False)
- #self.log("description %s" % description)
- author = ''
- autag = divtag.find('h4')
- if autag:
- author = self.tag_to_string(autag,False)
- #self.log("author %s" % author)
- if not articles.has_key(key):
- articles[key] = []
- articles[key].append(dict(title=title,url=url,date=pubdate,description=description,author=author,content=''))
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
+
diff --git a/recipes/vancouver_sun.recipe b/recipes/vancouver_sun.recipe
index 98926e4ad8..1cfacb9639 100644
--- a/recipes/vancouver_sun.recipe
+++ b/recipes/vancouver_sun.recipe
@@ -1,105 +1,136 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-
__license__ = 'GPL v3'
'''
www.canada.com
'''
-
import re
-from calibre.web.feeds.news import BasicNewsRecipe
-from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup
+from calibre.web.feeds.recipes import BasicNewsRecipe
+from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, Tag
class CanWestPaper(BasicNewsRecipe):
- # un-comment the following four lines for the Victoria Times Colonist
-## title = u'Victoria Times Colonist'
-## url_prefix = 'http://www.timescolonist.com'
-## description = u'News from Victoria, BC'
-## fp_tag = 'CAN_TC'
+ postmedia_index_pages = [
+ (u'Headlines',u'/index.html'),
+ (u'Ottawa & Area',u'/news/ottawa/index.html'),
+ (u'Vancouver',u'/news/vancouver/index.html'),
+ (u'Calgary',u'/news/calgary/index.html'),
+ (u'Edmonton',u'/news/edmonton/index.html'),
+ (u'Montreal',u'/news/montreal/index.html'),
+ (u'Fraser Valley',u'/news/fraser-valley/index.html'),
+ (u'British Columbia',u'/news/bc/index.html'),
+ (u'Alberta',u'/news/alberta/index.html'),
+ (u'Canada',u'/news/canada/index.html'),
+ (u'National',u'/news/national/index.html'),
+ (u'Politics',u'/news/politics/index.html'),
+ (u'Insight',u'/news/insight/index.html'),
+ (u'Special Reports',u'/news/specialreports/index.html'),
+ (u'Gangs',u'/news/gangs/index.html'),
+ (u'Education',u'/news/education/index.html'),
+ (u'Health',u'/news/health/index.html'),
+ (u'Environment',u'/news/environment/index.html'),
+ (u'World',u'/news/world/index.html'),
+ (u'Police Blotter',u'/news/crime-and-justice/index.html'),
+ (u'Crime',u'/news/blotter/index.html'),
+ (u'Around Town',u'/news/topic.html?t=keyword&q=Around+Town'),
+ (u'Diplomatica',u'/news/diplomatica/index.html'),
+ (u'Opinion',u'/opinion/index.html'),
+ (u'Columnists',u'/columnists/index.html'),
+ (u'Editorials',u'/opinion/editorials/index.html'),
+ (u'Letters',u'/opinion/letters/index.html'),
+ (u'Business',u'/business/index.html'),
+ (u'Sports',u'/sports/index.html'),
+ (u'Arts',u'/entertainment/index.html'),
+ (u'Life',u'/life/index.html'),
+ (u'Technology',u'/technology/index.html'),
+ (u'Travel',u'/travel/index.html'),
+ (u'Health',u'/health/index.html')
+ ]
- # un-comment the following four lines for the Vancouver Province
+
+ # un-comment the following six lines for the Vancouver Province
## title = u'Vancouver Province'
## url_prefix = 'http://www.theprovince.com'
## description = u'News from Vancouver, BC'
-## fp_tag = 'CAN_VP'
+## std_logo_url = 'http://www.theprovince.com/images/logo_theprovince.jpg'
+## logo_url = 'vplogo.jpg'
+## fp_tag = 'CAN_TP'
- # un-comment the following four lines for the Vancouver Sun
+ # un-comment the following six lines for the Vancouver Sun
title = u'Vancouver Sun'
url_prefix = 'http://www.vancouversun.com'
description = u'News from Vancouver, BC'
+ std_logo_url = 'http://www.vancouversun.com/images/logo_vancouversun.jpg'
+ logo_url = 'vslogo.jpg'
fp_tag = 'CAN_VS'
- # un-comment the following four lines for the Edmonton Journal
-## title = u'Edmonton Journal'
-## url_prefix = 'http://www.edmontonjournal.com'
-## description = u'News from Edmonton, AB'
-## fp_tag = 'CAN_EJ'
-
- # un-comment the following four lines for the Calgary Herald
+ # un-comment the following six lines for the Calgary Herald
## title = u'Calgary Herald'
## url_prefix = 'http://www.calgaryherald.com'
## description = u'News from Calgary, AB'
+## std_logo_url = 'http://www.calgaryherald.com/images/logo_calgaryherald.jpg'
+## logo_url = 'chlogo.jpg'
## fp_tag = 'CAN_CH'
- # un-comment the following four lines for the Regina Leader-Post
-## title = u'Regina Leader-Post'
-## url_prefix = 'http://www.leaderpost.com'
-## description = u'News from Regina, SK'
-## fp_tag = ''
+ # un-comment the following six lines for the Edmonton Journal
+## title = u'Edmonton Journal'
+## url_prefix = 'http://www.edmontonjournal.com'
+## description = u'News from Edmonton, AB'
+## std_logo_url = 'http://www.edmontonjournal.com/images/logo_edmontonjournal.jpg'
+## logo_url = 'ejlogo.jpg'
+## fp_tag = 'CAN_EJ'
- # un-comment the following four lines for the Saskatoon Star-Phoenix
-## title = u'Saskatoon Star-Phoenix'
-## url_prefix = 'http://www.thestarphoenix.com'
-## description = u'News from Saskatoon, SK'
-## fp_tag = ''
-
- # un-comment the following four lines for the Windsor Star
-## title = u'Windsor Star'
-## url_prefix = 'http://www.windsorstar.com'
-## description = u'News from Windsor, ON'
-## fp_tag = 'CAN_'
-
- # un-comment the following four lines for the Ottawa Citizen
+ # un-comment the following six lines for the Ottawa Citizen
## title = u'Ottawa Citizen'
## url_prefix = 'http://www.ottawacitizen.com'
## description = u'News from Ottawa, ON'
+## std_logo_url = 'http://www.ottawacitizen.com/images/logo_ottawacitizen.jpg'
+## logo_url = 'oclogo.jpg'
## fp_tag = 'CAN_OC'
- # un-comment the following four lines for the Montreal Gazette
+ # un-comment the following six lines for the Montreal Gazette
## title = u'Montreal Gazette'
## url_prefix = 'http://www.montrealgazette.com'
## description = u'News from Montreal, QC'
+## std_logo_url = 'http://www.montrealgazette.com/images/logo_montrealgazette.jpg'
+## logo_url = 'mglogo.jpg'
## fp_tag = 'CAN_MG'
+ Kindle_Fire=False
+ masthead_url = std_logo_url
+ url_list = []
language = 'en_CA'
__author__ = 'Nick Redding'
no_stylesheets = True
- timefmt = ' [%b %d]'
+ timefmt = ' [%b %d]'
+ encoding = 'utf-8'
extra_css = '''
.timestamp { font-size:xx-small; display: block; }
#storyheader { font-size: medium; }
#storyheader h1 { font-size: x-large; }
- #storyheader h2 { font-size: large; font-style: italic; }
+ #storyheader h2 { font-size: small; font-style: italic; }
.byline { font-size:xx-small; }
- #photocaption { font-size: small; font-style: italic }
- #photocredit { font-size: xx-small; }'''
- keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'})]
+ #photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ .photocaption { font-size: xx-small; font-style: italic; font-weight: normal; }
+ #photocredit { font-size: xx-small; font-weight: normal; }'''
+
+ keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'}),dict(name='div', attrs={'id':'storyphoto'})]
+
remove_tags = [{'class':'comments'},
dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
+ dict(name='h2', attrs={'id':'photocredit'}),
dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
dict(name='div', attrs={'class':'rule_grey_solid'}),
dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
+
def get_cover_url(self):
from datetime import timedelta, date
- if self.fp_tag=='':
- return None
cover = 'http://webmedia.newseum.org/newseum-multimedia/dfp/jpg'+str(date.today().day)+'/lg/'+self.fp_tag+'.jpg'
br = BasicNewsRecipe.get_browser()
daysback=1
@@ -120,6 +151,18 @@ class CanWestPaper(BasicNewsRecipe):
cover = None
return cover
+ def prepare_masthead_image(self, path_to_image, out_path):
+ if self.Kindle_Fire:
+ from calibre.utils.magick import Image, create_canvas
+ img = Image()
+ img.open(path_to_image)
+ width, height = img.size
+ img2 = create_canvas(width, height)
+ img2.compose(img)
+ img2.save(out_path)
+ else:
+ BasicNewsRecipe.prepare_masthead_image(self, path_to_image, out_path)
+
def fixChars(self,string):
# Replace lsquo (\x91)
fixed = re.sub("\x91","‘",string)
@@ -166,55 +209,106 @@ class CanWestPaper(BasicNewsRecipe):
a.replaceWith(a.renderContents().decode('cp1252','replace'))
return soup
- def preprocess_html(self, soup):
+
+ def preprocess_html(self,soup):
+ #delete empty id attributes--they screw up the TOC for unknown reasons
+ divtags = soup.findAll('div',attrs={'id':''})
+ if divtags:
+ for div in divtags:
+ del(div['id'])
+
+ pgall = soup.find('div',attrs={'id':'storyphoto'})
+ if pgall is not None: # photo gallery perhaps
+ if (soup.find('div',attrs={'id':'storycontent'}) is None):
+ allpics = Tag(soup,'div')
+ first_img = pgall.find('div','storyimage')
+ if first_img is not None:
+ first_img.extract()
+ tlist = pgall.find('div',attrs={'id':'relatedthumbs'})
+ if tlist is not None:
+ for atag in tlist.findAll('a'):
+ img = Tag(soup,'img')
+ srcpre, sep, srcpost = atag.img['src'].partition('?')
+ img['src'] = srcpre
+ pdesc = Tag(soup,'p')
+ pdesc.insert(0,atag.img['alt'])
+ pdesc['class']='photocaption'
+ div = Tag(soup,'div')
+ div.insert(0,pdesc)
+ div.insert(0,img)
+ allpics.append(div)
+ pgall.replaceWith(allpics)
+
+ for pg in soup.findAll('div',attrs={'id':'storyphoto'}):
+ pg.extract()
return self.strip_anchors(soup)
def parse_index(self):
- soup = self.index_to_soup(self.url_prefix+'/news/todays-paper/index.html')
articles = {}
- key = 'News'
- ans = ['News']
+ ans = []
- # Find each instance of class="sectiontitle", class="featurecontent"
- for divtag in soup.findAll('div',attrs={'class' : ["section_title02","featurecontent"]}):
- #self.log(" div class = %s" % divtag['class'])
- if divtag['class'].startswith('section_title'):
- # div contains section title
- if not divtag.h3:
- continue
- key = self.tag_to_string(divtag.h3,False)
- ans.append(key)
- self.log("Section name %s" % key)
- continue
- # div contains article data
- h1tag = divtag.find('h1')
- if not h1tag:
- continue
- atag = h1tag.find('a',href=True)
- if not atag:
- continue
- url = self.url_prefix+'/news/todays-paper/'+atag['href']
- #self.log("Section %s" % key)
- #self.log("url %s" % url)
- title = self.tag_to_string(atag,False)
- #self.log("title %s" % title)
- pubdate = ''
- description = ''
- ptag = divtag.find('p');
- if ptag:
- description = self.tag_to_string(ptag,False)
- #self.log("description %s" % description)
- author = ''
- autag = divtag.find('h4')
- if autag:
- author = self.tag_to_string(autag,False)
- #self.log("author %s" % author)
- if not articles.has_key(key):
- articles[key] = []
- articles[key].append(dict(title=title,url=url,date=pubdate,description=description,author=author,content=''))
+ def handle_article(adiv,key):
+ h1tag = adiv.h1
+ if h1tag is not None:
+ atag = h1tag.a
+ if atag is not None:
+ url = atag['href']
+ if atag['href'].startswith('http'):
+ return
+ elif atag['href'].startswith('/'):
+ url = self.url_prefix+atag['href']
+ else:
+ url = self.url_prefix+'/'+atag['href']
+ if url in self.url_list:
+ return
+ self.url_list.append(url)
+ title = self.tag_to_string(atag,False)
+ if 'VIDEO' in title.upper():
+ return
+ if 'GALLERY' in title.upper():
+ return
+ if 'PHOTOS' in title.upper():
+ return
+ dtag = adiv.find('div','content')
+ description=''
+ print("URL "+url)
+ print("TITLE "+title)
+ if dtag is not None:
+ stag = dtag.span
+ if stag is not None:
+ if stag['class'] != 'timestamp':
+ description = self.tag_to_string(stag,False)
+ else:
+ description = self.tag_to_string(dtag,False)
+ print("DESCRIPTION: "+description)
+ if not articles.has_key(key):
+ articles[key] = []
+ articles[key].append(dict(title=title,url=url,date='',description=description,author='',content=''))
+
+ def parse_web_index(key, keyurl):
+ try:
+ soup = self.index_to_soup(self.url_prefix+keyurl)
+ except:
+ return
+ ans.append(key)
+ mainsoup = soup.find('div','bodywrapper')
+ footer = mainsoup.find(attrs={'id':'footerfeature'})
+ if footer is not None:
+ footer.extract()
+ print("Section: "+key)
+ for wdiv in mainsoup.findAll('div',attrs={'id':re.compile('^HorizontalFeatureSlider_1_Story')}):
+ handle_article(wdiv,key)
+ wdiv.extract()
+ for wdiv in mainsoup.findAll(attrs={'id':['featurewidget','textfeature','textlinks_timestamp']}):
+ for adiv in wdiv.findAll('div','featurecontent'):
+ handle_article(adiv,key)
+
+ for (k,url) in self.postmedia_index_pages:
+ parse_web_index(k,url)
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
return ans
+
diff --git a/resources/compiled_coffeescript.zip b/resources/compiled_coffeescript.zip
index 43781bf748..cae1c6c63e 100644
Binary files a/resources/compiled_coffeescript.zip and b/resources/compiled_coffeescript.zip differ
diff --git a/resources/fonts/liberation/LiberationMono-Bold.ttf b/resources/fonts/liberation/LiberationMono-Bold.ttf
index 11b3f56fb4..8ee867bbe4 100644
Binary files a/resources/fonts/liberation/LiberationMono-Bold.ttf and b/resources/fonts/liberation/LiberationMono-Bold.ttf differ
diff --git a/resources/fonts/liberation/LiberationMono-BoldItalic.ttf b/resources/fonts/liberation/LiberationMono-BoldItalic.ttf
index 3e81a59651..edbcb2bb74 100644
Binary files a/resources/fonts/liberation/LiberationMono-BoldItalic.ttf and b/resources/fonts/liberation/LiberationMono-BoldItalic.ttf differ
diff --git a/resources/fonts/liberation/LiberationMono-Italic.ttf b/resources/fonts/liberation/LiberationMono-Italic.ttf
index 8ee00830e4..cfcab289a2 100644
Binary files a/resources/fonts/liberation/LiberationMono-Italic.ttf and b/resources/fonts/liberation/LiberationMono-Italic.ttf differ
diff --git a/resources/fonts/liberation/LiberationMono-Regular.ttf b/resources/fonts/liberation/LiberationMono-Regular.ttf
index 47da91c66e..481f7ef8e1 100644
Binary files a/resources/fonts/liberation/LiberationMono-Regular.ttf and b/resources/fonts/liberation/LiberationMono-Regular.ttf differ
diff --git a/resources/fonts/liberation/LiberationSans-Bold.ttf b/resources/fonts/liberation/LiberationSans-Bold.ttf
index ee978ce029..ab135f0e6e 100644
Binary files a/resources/fonts/liberation/LiberationSans-Bold.ttf and b/resources/fonts/liberation/LiberationSans-Bold.ttf differ
diff --git a/resources/fonts/liberation/LiberationSans-BoldItalic.ttf b/resources/fonts/liberation/LiberationSans-BoldItalic.ttf
index 10002b8763..48a3577e67 100644
Binary files a/resources/fonts/liberation/LiberationSans-BoldItalic.ttf and b/resources/fonts/liberation/LiberationSans-BoldItalic.ttf differ
diff --git a/resources/fonts/liberation/LiberationSans-Italic.ttf b/resources/fonts/liberation/LiberationSans-Italic.ttf
index 1d287ee9f6..8124753cec 100644
Binary files a/resources/fonts/liberation/LiberationSans-Italic.ttf and b/resources/fonts/liberation/LiberationSans-Italic.ttf differ
diff --git a/resources/fonts/liberation/LiberationSans-Regular.ttf b/resources/fonts/liberation/LiberationSans-Regular.ttf
index d31cf3174b..a1c556ef66 100644
Binary files a/resources/fonts/liberation/LiberationSans-Regular.ttf and b/resources/fonts/liberation/LiberationSans-Regular.ttf differ
diff --git a/resources/fonts/liberation/LiberationSerif-Bold.ttf b/resources/fonts/liberation/LiberationSerif-Bold.ttf
index fa525f13e5..5f067fdfbf 100644
Binary files a/resources/fonts/liberation/LiberationSerif-Bold.ttf and b/resources/fonts/liberation/LiberationSerif-Bold.ttf differ
diff --git a/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf b/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf
index 84a9cb4f78..21775ab588 100644
Binary files a/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf and b/resources/fonts/liberation/LiberationSerif-BoldItalic.ttf differ
diff --git a/resources/fonts/liberation/LiberationSerif-Italic.ttf b/resources/fonts/liberation/LiberationSerif-Italic.ttf
index 1e7d7fc773..0b6b5f1bba 100644
Binary files a/resources/fonts/liberation/LiberationSerif-Italic.ttf and b/resources/fonts/liberation/LiberationSerif-Italic.ttf differ
diff --git a/resources/fonts/liberation/LiberationSerif-Regular.ttf b/resources/fonts/liberation/LiberationSerif-Regular.ttf
index d934d218b1..b263423035 100644
Binary files a/resources/fonts/liberation/LiberationSerif-Regular.ttf and b/resources/fonts/liberation/LiberationSerif-Regular.ttf differ
diff --git a/resources/mime.types b/resources/mime.types
index a2a67c38f9..afc5e9b849 100644
--- a/resources/mime.types
+++ b/resources/mime.types
@@ -822,7 +822,6 @@ application/x-lzh lzh
application/x-lzx lzx
application/x-maker book fb fbdoc fm frame frm maker
application/x-mif mif
-application/x-mobipocket-ebook mobi prc
application/x-ms-application application
application/x-ms-wmd wmd
application/x-ms-wmz wmz
@@ -1371,11 +1370,11 @@ application/x-sony-bbeb lrf lrx
application/adobe-page-template+xml xpgt
application/x-font-opentype otf
application/x-font-truetype ttf
-application/x-mobipocket-ebook mobi prc azw
+application/x-mobipocket-ebook mobi prc
+application/vnd.amazon.ebook azw3 azw azw2 azw4
application/x-cbz cbz
application/x-cbr cbr
application/x-cb7 cb7
application/x-koboreader-ebook kobo
image/wmf wmf
application/ereader pdb
-
diff --git a/resources/viewer/mathjax/MathJax.js b/resources/viewer/mathjax/MathJax.js
new file mode 100644
index 0000000000..1763eb6098
--- /dev/null
+++ b/resources/viewer/mathjax/MathJax.js
@@ -0,0 +1,2436 @@
+/*************************************************************
+ *
+ * MathJax.js
+ *
+ * The main support code for the MathJax Hub, including the
+ * Ajax, Callback, Messaging, and Object-Oriented Programming
+ * libraries, as well as the base Jax classes, and startup
+ * processing code.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2009-2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+if (document.getElementById && document.childNodes && document.createElement) {
+
+if (!window.MathJax) {window.MathJax= {}}
+if (!MathJax.Hub) { // skip if already loaded
+
+MathJax.version = "2.0";
+MathJax.fileversion = "2.0";
+
+/**********************************************************/
+
+(function (BASENAME) {
+ var BASE = window[BASENAME];
+ if (!BASE) {BASE = window[BASENAME] = {}}
+
+ var PROTO = []; // a static object used to indicate when a prototype is being created
+ var OBJECT = function (def) {
+ var obj = def.constructor; if (!obj) {obj = new Function("")}
+ for (var id in def) {if (id !== 'constructor' && def.hasOwnProperty(id)) {obj[id] = def[id]}}
+ return obj;
+ };
+ var CONSTRUCTOR = function () {
+ return new Function ("return arguments.callee.Init.call(this,arguments)");
+ };
+ //
+ // Test for Safari 2.x bug (can't replace prototype for result of new Function()).
+ // (We don't use this version for everyone since it is a closure and we don't need that).
+ //
+ var BUGTEST = CONSTRUCTOR(); BUGTEST.prototype = {bug_test: 1};
+ if (!BUGTEST.prototype.bug_test) {
+ CONSTRUCTOR = function () {
+ return function () {return arguments.callee.Init.call(this,arguments)};
+ };
+ };
+
+ BASE.Object = OBJECT({
+ constructor: CONSTRUCTOR(),
+
+ Subclass: function (def,classdef) {
+ var obj = CONSTRUCTOR();
+ obj.SUPER = this; obj.Init = this.Init;
+ obj.Subclass = this.Subclass; obj.Augment = this.Augment;
+ obj.protoFunction = this.protoFunction;
+ obj.can = this.can; obj.has = this.has; obj.isa = this.isa;
+ obj.prototype = new this(PROTO);
+ obj.prototype.constructor = obj; // the real constructor
+ obj.Augment(def,classdef);
+ return obj;
+ },
+
+ Init: function (args) {
+ var obj = this;
+ if (args.length === 1 && args[0] === PROTO) {return obj}
+ if (!(obj instanceof args.callee)) {obj = new args.callee(PROTO)}
+ return obj.Init.apply(obj,args) || obj;
+ },
+
+ Augment: function (def,classdef) {
+ var id;
+ if (def != null) {
+ for (id in def) {if (def.hasOwnProperty(id)) {this.protoFunction(id,def[id])}}
+ // MSIE doesn't list toString even if it is not native so handle it separately
+ if (def.toString !== this.prototype.toString && def.toString !== {}.toString)
+ {this.protoFunction('toString',def.toString)}
+ }
+ if (classdef != null) {
+ for (id in classdef) {if (classdef.hasOwnProperty(id)) {this[id] = classdef[id]}}
+ }
+ return this;
+ },
+
+ protoFunction: function (id,def) {
+ this.prototype[id] = def;
+ if (typeof def === "function") {def.SUPER = this.SUPER.prototype}
+ },
+
+ prototype: {
+ Init: function () {},
+ SUPER: function (fn) {return fn.callee.SUPER},
+ can: function (method) {return typeof(this[method]) === "function"},
+ has: function (property) {return typeof(this[property]) !== "undefined"},
+ isa: function (obj) {return (obj instanceof Object) && (this instanceof obj)}
+ },
+
+ can: function (method) {return this.prototype.can.call(this,method)},
+ has: function (property) {return this.prototype.has.call(this,property)},
+ isa: function (obj) {
+ var constructor = this;
+ while (constructor) {
+ if (constructor === obj) {return true} else {constructor = constructor.SUPER}
+ }
+ return false;
+ },
+
+
+ SimpleSUPER: OBJECT({
+ constructor: function (def) {return this.SimpleSUPER.define(def)},
+
+ define: function (src) {
+ var dst = {};
+ if (src != null) {
+ for (var id in src) {if (src.hasOwnProperty(id)) {dst[id] = this.wrap(id,src[id])}}
+ // MSIE doesn't list toString even if it is not native so handle it separately
+ if (src.toString !== this.prototype.toString && src.toString !== {}.toString)
+ {dst.toString = this.wrap('toString',src.toString)}
+ }
+ return dst;
+ },
+
+ wrap: function (id,f) {
+ if (typeof(f) === 'function' && f.toString().match(/\.\s*SUPER\s*\(/)) {
+ var fn = new Function(this.wrapper);
+ fn.label = id; fn.original = f; f = fn;
+ fn.toString = this.stringify;
+ }
+ return f;
+ },
+
+ wrapper: function () {
+ var fn = arguments.callee;
+ this.SUPER = fn.SUPER[fn.label];
+ try {var result = fn.original.apply(this,arguments)}
+ catch (err) {delete this.SUPER; throw err}
+ delete this.SUPER;
+ return result;
+ }.toString().replace(/^\s*function\s*\(\)\s*\{\s*/i,"").replace(/\s*\}\s*$/i,""),
+
+ toString: function () {
+ return this.original.toString.apply(this.original,arguments);
+ }
+ })
+ });
+
+})("MathJax");
+
+/**********************************************************/
+
+/*
+ * Create a callback function from various forms of data:
+ *
+ * MathJax.Callback(fn) -- callback to a function
+ *
+ * MathJax.Callback([fn]) -- callback to function
+ * MathJax.Callback([fn,data...])
+ * -- callback to function with given data as arguments
+ * MathJax.Callback([object,fn])
+ * -- call fn with object as "this"
+ * MathJax.Callback([object,fn,data...])
+ * -- call fn with object as "this" and data as arguments
+ * MathJax.Callback(["method",object])
+ * -- call method of object wth object as "this"
+ * MathJax.Callback(["method",object,data...])
+ * -- as above, but with data as arguments to method
+ *
+ * MathJax.Callback({hook: fn, data: [...], object: this})
+ * -- give function, data, and object to act as "this" explicitly
+ *
+ * MathJax.Callback("code") -- callback that compiles and executes a string
+ *
+ * MathJax.Callback([...],i)
+ * -- use slice of array starting at i and interpret
+ * result as above. (Used for passing "arguments" array
+ * and trimming initial arguments, if any.)
+ */
+
+/*
+ * MathJax.Callback.After([...],cb1,cb2,...)
+ * -- make a callback that isn't called until all the other
+ * ones are called first. I.e., wait for a union of
+ * callbacks to occur before making the given callback.
+ */
+
+/*
+ * MathJax.Callback.Queue([callback,...])
+ * -- make a synchronized queue of commands that process
+ * sequentially, waiting for those that return uncalled
+ * callbacks.
+ */
+
+/*
+ * MathJax.Callback.Signal(name)
+ * -- finds or creates a names signal, to which listeners
+ * can be attached and are signaled by messages posted
+ * to the signal. Responses can be asynchronous.
+ */
+
+(function (BASENAME) {
+ var BASE = window[BASENAME];
+ if (!BASE) {BASE = window[BASENAME] = {}}
+ //
+ // Create a callback from an associative array
+ //
+ var CALLBACK = function (data) {
+ var cb = new Function("return arguments.callee.execute.apply(arguments.callee,arguments)");
+ for (var id in CALLBACK.prototype) {
+ if (CALLBACK.prototype.hasOwnProperty(id)) {
+ if (typeof(data[id]) !== 'undefined') {cb[id] = data[id]}
+ else {cb[id] = CALLBACK.prototype[id]}
+ }
+ }
+ cb.toString = CALLBACK.prototype.toString;
+ return cb;
+ };
+ CALLBACK.prototype = {
+ isCallback: true,
+ hook: function () {},
+ data: [],
+ object: window,
+ execute: function () {
+ if (!this.called || this.autoReset) {
+ this.called = !this.autoReset;
+ return this.hook.apply(this.object,this.data.concat([].slice.call(arguments,0)));
+ }
+ },
+ reset: function () {delete this.called},
+ toString: function () {return this.hook.toString.apply(this.hook,arguments)}
+ };
+ var ISCALLBACK = function (f) {
+ return (typeof(f) === "function" && f.isCallback);
+ }
+ //
+ // Evaluate a string in global context
+ //
+ var EVAL = function (code) {return eval.call(window,code)}
+ EVAL("var __TeSt_VaR__ = 1"); // check if it works in global context
+ if (window.__TeSt_VaR__) {
+ try { delete window.__TeSt_VaR__; } // NOTE IE9 throws when in IE7 mode
+ catch (error) { window.__TeSt_VaR__ = null; }
+ } else {
+ if (window.execScript) {
+ // IE
+ EVAL = function (code) {
+ BASE.__code = code;
+ code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";
+ window.execScript(code);
+ var result = BASE.__result; delete BASE.__result; delete BASE.__code;
+ if (result instanceof Error) {throw result}
+ return result;
+ }
+ } else {
+ // Safari2
+ EVAL = function (code) {
+ BASE.__code = code;
+ code = "try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";
+ var head = (document.getElementsByTagName("head"))[0]; if (!head) {head = document.body}
+ var script = document.createElement("script");
+ script.appendChild(document.createTextNode(code));
+ head.appendChild(script); head.removeChild(script);
+ var result = BASE.__result; delete BASE.__result; delete BASE.__code;
+ if (result instanceof Error) {throw result}
+ return result;
+ }
+ }
+ }
+ //
+ // Create a callback from various types of data
+ //
+ var USING = function (args,i) {
+ if (arguments.length > 1) {
+ if (arguments.length === 2 && !(typeof arguments[0] === 'function') &&
+ arguments[0] instanceof Object && typeof arguments[1] === 'number')
+ {args = [].slice.call(args,i)}
+ else {args = [].slice.call(arguments,0)}
+ }
+ if (args instanceof Array && args.length === 1) {args = args[0]}
+ if (typeof args === 'function') {
+ if (args.execute === CALLBACK.prototype.execute) {return args}
+ return CALLBACK({hook: args});
+ } else if (args instanceof Array) {
+ if (typeof(args[0]) === 'string' && args[1] instanceof Object &&
+ typeof args[1][args[0]] === 'function') {
+ return CALLBACK({hook: args[1][args[0]], object: args[1], data: args.slice(2)});
+ } else if (typeof args[0] === 'function') {
+ return CALLBACK({hook: args[0], data: args.slice(1)});
+ } else if (typeof args[1] === 'function') {
+ return CALLBACK({hook: args[1], object: args[0], data: args.slice(2)});
+ }
+ } else if (typeof(args) === 'string') {
+ return CALLBACK({hook: EVAL, data: [args]});
+ } else if (args instanceof Object) {
+ return CALLBACK(args);
+ } else if (typeof(args) === 'undefined') {
+ return CALLBACK({});
+ }
+ throw Error("Can't make callback from given data");
+ };
+
+ //
+ // Wait for a given time to elapse and then perform the callback
+ //
+ var DELAY = function (time,callback) {
+ callback = USING(callback);
+ callback.timeout = setTimeout(callback,time);
+ return callback;
+ };
+
+ //
+ // Callback used by AFTER, QUEUE, and SIGNAL to check if calls have completed
+ //
+ var WAITFOR = function (callback,signal) {
+ callback = USING(callback);
+ if (!callback.called) {WAITSIGNAL(callback,signal); signal.pending++}
+ };
+ var WAITEXECUTE = function () {
+ var signals = this.signal; delete this.signal;
+ this.execute = this.oldExecute; delete this.oldExecute;
+ var result = this.execute.apply(this,arguments);
+ if (ISCALLBACK(result) && !result.called) {WAITSIGNAL(result,signals)} else {
+ for (var i = 0, m = signals.length; i < m; i++) {
+ signals[i].pending--;
+ if (signals[i].pending <= 0) {signals[i].call()}
+ }
+ }
+ };
+ var WAITSIGNAL = function (callback,signals) {
+ if (!(signals instanceof Array)) {signals = [signals]}
+ if (!callback.signal) {
+ callback.oldExecute = callback.execute;
+ callback.execute = WAITEXECUTE;
+ callback.signal = signals;
+ } else if (signals.length === 1) {callback.signal.push(signals[0])}
+ else {callback.signal = callback.signal.concat(signals)}
+ };
+
+ //
+ // Create a callback that is called when a collection of other callbacks have
+ // all been executed. If the callback gets called immediately (i.e., the
+ // others are all already called), check if it returns another callback
+ // and return that instead.
+ //
+ var AFTER = function (callback) {
+ callback = USING(callback);
+ callback.pending = 0;
+ for (var i = 1, m = arguments.length; i < m; i++)
+ {if (arguments[i]) {WAITFOR(arguments[i],callback)}}
+ if (callback.pending === 0) {
+ var result = callback();
+ if (ISCALLBACK(result)) {callback = result}
+ }
+ return callback;
+ };
+
+ //
+ // An array of prioritized hooks that are executed sequentially
+ // with a given set of data.
+ //
+ var HOOKS = MathJax.Object.Subclass({
+ //
+ // Initialize the array and the auto-reset status
+ //
+ Init: function (reset) {
+ this.hooks = [];
+ this.reset = reset;
+ },
+ //
+ // Add a callback to the list, in priority order (default priority is 10)
+ //
+ Add: function (hook,priority) {
+ if (priority == null) {priority = 10}
+ if (!ISCALLBACK(hook)) {hook = USING(hook)}
+ hook.priority = priority;
+ var i = this.hooks.length;
+ while (i > 0 && priority < this.hooks[i-1].priority) {i--}
+ this.hooks.splice(i,0,hook);
+ return hook;
+ },
+ Remove: function (hook) {
+ for (var i = 0, m = this.hooks.length; i < m; i++) {
+ if (this.hooks[i] === hook) {this.hooks.splice(i,1); return}
+ }
+ },
+ //
+ // Execute the list of callbacks, resetting them if requested.
+ // If any return callbacks, return a callback that will be
+ // executed when they all have completed.
+ //
+ Execute: function () {
+ var callbacks = [{}];
+ for (var i = 0, m = this.hooks.length; i < m; i++) {
+ if (this.reset) {this.hooks[i].reset()}
+ var result = this.hooks[i].apply(window,arguments);
+ if (ISCALLBACK(result) && !result.called) {callbacks.push(result)}
+ }
+ if (callbacks.length === 1) {return null}
+ if (callbacks.length === 2) {return callbacks[1]}
+ return AFTER.apply({},callbacks);
+ }
+ });
+
+ //
+ // Run an array of callbacks passing them the given data.
+ // (Legacy function, since this has been replaced by the HOOKS object).
+ //
+ var EXECUTEHOOKS = function (hooks,data,reset) {
+ if (!hooks) {return null}
+ if (!(hooks instanceof Array)) {hooks = [hooks]}
+ if (!(data instanceof Array)) {data = (data == null ? [] : [data])}
+ var handler = HOOKS(reset);
+ for (var i = 0, m = hooks.length; i < m; i++) {handler.Add(hooks[i])}
+ return handler.Execute.apply(handler,data);
+ };
+
+ //
+ // Command queue that performs commands in order, waiting when
+ // necessary for commands to complete asynchronousely
+ //
+ var QUEUE = BASE.Object.Subclass({
+ //
+ // Create the queue and push any commands that are specified
+ //
+ Init: function () {
+ this.pending = 0; this.running = 0;
+ this.queue = [];
+ this.Push.apply(this,arguments);
+ },
+ //
+ // Add commands to the queue and run them. Adding a callback object
+ // (rather than a callback specification) queues a wait for that callback.
+ // Return the final callback for synchronization purposes.
+ //
+ Push: function () {
+ var callback;
+ for (var i = 0, m = arguments.length; i < m; i++) {
+ callback = USING(arguments[i]);
+ if (callback === arguments[i] && !callback.called)
+ {callback = USING(["wait",this,callback])}
+ this.queue.push(callback);
+ }
+ if (!this.running && !this.pending) {this.Process()}
+ return callback;
+ },
+ //
+ // Process the command queue if we aren't waiting on another command
+ //
+ Process: function (queue) {
+ while (!this.running && !this.pending && this.queue.length) {
+ var callback = this.queue[0];
+ queue = this.queue.slice(1); this.queue = [];
+ this.Suspend(); var result = callback(); this.Resume();
+ if (queue.length) {this.queue = queue.concat(this.queue)}
+ if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)}
+ }
+ },
+ //
+ // Suspend/Resume command processing on this queue
+ //
+ Suspend: function () {this.running++},
+ Resume: function () {if (this.running) {this.running--}},
+ //
+ // Used by WAITFOR to restart the queue when an action completes
+ //
+ call: function () {this.Process.apply(this,arguments)},
+ wait: function (callback) {return callback}
+ });
+
+ //
+ // Create a named signal that listeners can attach to, to be signaled by
+ // postings made to the signal. Posts are queued if they occur while one
+ // is already in process.
+ //
+ var SIGNAL = QUEUE.Subclass({
+ Init: function (name) {
+ QUEUE.prototype.Init.call(this);
+ this.name = name;
+ this.posted = []; // the messages posted so far
+ this.listeners = HOOKS(true); // those with interest in this signal
+ },
+ //
+ // Post a message to the signal listeners, with callback for when complete
+ //
+ Post: function (message,callback,forget) {
+ callback = USING(callback);
+ if (this.posting || this.pending) {
+ this.Push(["Post",this,message,callback,forget]);
+ } else {
+ this.callback = callback; callback.reset();
+ if (!forget) {this.posted.push(message)}
+ this.Suspend(); this.posting = true;
+ var result = this.listeners.Execute(message);
+ if (ISCALLBACK(result) && !result.called) {WAITFOR(result,this)}
+ this.Resume(); delete this.posting;
+ if (!this.pending) {this.call()}
+ }
+ return callback;
+ },
+ //
+ // Clear the post history (so new listeners won't get old messages)
+ //
+ Clear: function (callback) {
+ callback = USING(callback);
+ if (this.posting || this.pending) {
+ callback = this.Push(["Clear",this,callback]);
+ } else {
+ this.posted = [];
+ callback();
+ }
+ return callback;
+ },
+ //
+ // Call the callback (all replies are in) and process the command queue
+ //
+ call: function () {this.callback(this); this.Process()},
+
+ //
+ // A listener calls this to register intrest in the signal (so it will be called
+ // when posts occur). If ignorePast is true, it will not be sent the post history.
+ //
+ Interest: function (callback,ignorePast,priority) {
+ callback = USING(callback);
+ this.listeners.Add(callback,priority);
+ if (!ignorePast) {
+ for (var i = 0, m = this.posted.length; i < m; i++) {
+ callback.reset();
+ var result = callback(this.posted[i]);
+ if (ISCALLBACK(result) && i === this.posted.length-1) {WAITFOR(result,this)}
+ }
+ }
+ return callback;
+ },
+ //
+ // A listener calls this to remove itself from a signal
+ //
+ NoInterest: function (callback) {
+ this.listeners.Remove(callback);
+ },
+
+ //
+ // Hook a callback to a particular message on this signal
+ //
+ MessageHook: function (msg,callback,priority) {
+ callback = USING(callback);
+ if (!this.hooks) {this.hooks = {}; this.Interest(["ExecuteHooks",this])}
+ if (!this.hooks[msg]) {this.hooks[msg] = HOOKS(true)}
+ this.hooks[msg].Add(callback,priority);
+ for (var i = 0, m = this.posted.length; i < m; i++)
+ {if (this.posted[i] == msg) {callback.reset(); callback(this.posted[i])}}
+ return callback;
+ },
+ //
+ // Execute the message hooks for the given message
+ //
+ ExecuteHooks: function (msg,more) {
+ var type = ((msg instanceof Array) ? msg[0] : msg);
+ if (!this.hooks[type]) {return null}
+ return this.hooks[type].Execute(msg);
+ }
+
+ },{
+ signals: {}, // the named signals
+ find: function (name) {
+ if (!SIGNAL.signals[name]) {SIGNAL.signals[name] = new SIGNAL(name)}
+ return SIGNAL.signals[name];
+ }
+ });
+
+ //
+ // The main entry-points
+ //
+ BASE.Callback = BASE.CallBack = USING;
+ BASE.Callback.Delay = DELAY;
+ BASE.Callback.After = AFTER;
+ BASE.Callback.Queue = QUEUE;
+ BASE.Callback.Signal = SIGNAL.find;
+ BASE.Callback.Hooks = HOOKS;
+ BASE.Callback.ExecuteHooks = EXECUTEHOOKS;
+})("MathJax");
+
+
+/**********************************************************/
+
+(function (BASENAME) {
+ var BASE = window[BASENAME];
+ if (!BASE) {BASE = window[BASENAME] = {}}
+
+ var isSafari2 = (navigator.vendor === "Apple Computer, Inc." &&
+ typeof navigator.vendorSub === "undefined");
+ var sheets = 0; // used by Safari2
+
+ //
+ // Update sheets count and look up the head object
+ //
+ var HEAD = function (head) {
+ if (document.styleSheets && document.styleSheets.length > sheets)
+ {sheets = document.styleSheets.length}
+ if (!head) {
+ head = (document.getElementsByTagName("head"))[0];
+ if (!head) {head = document.body}
+ }
+ return head;
+ };
+
+ //
+ // Remove scripts that are completed so they don't clutter up the HEAD.
+ // This runs via setTimeout since IE7 can't remove the script while it is running.
+ //
+ var SCRIPTS = []; // stores scripts to be removed after a delay
+ var REMOVESCRIPTS = function () {
+ for (var i = 0, m = SCRIPTS.length; i < m; i++) {BASE.Ajax.head.removeChild(SCRIPTS[i])}
+ SCRIPTS = [];
+ };
+
+ BASE.Ajax = {
+ loaded: {}, // files already loaded
+ loading: {}, // files currently in process of loading
+ loadHooks: {}, // hooks to call when files are loaded
+ timeout: 15*1000, // timeout for loading of files (15 seconds)
+ styleDelay: 1, // delay to use before styles are available
+ config: {root: ""}, // URL of root directory to load from
+
+ STATUS: {
+ OK: 1, // file is loading or did load OK
+ ERROR: -1 // file timed out during load
+ },
+
+ rootPattern: new RegExp("^\\["+BASENAME+"\\]"),
+
+ //
+ // Return a complete URL to a file (replacing the root pattern)
+ //
+ fileURL: function (file) {return file.replace(this.rootPattern,this.config.root)},
+
+ //
+ // Load a file if it hasn't been already.
+ // Make sure the file URL is "safe"?
+ //
+ Require: function (file,callback) {
+ callback = BASE.Callback(callback); var type;
+ if (file instanceof Object) {for (var i in file) {}; type = i.toUpperCase(); file = file[i]}
+ else {type = file.split(/\./).pop().toUpperCase()}
+ file = this.fileURL(file);
+ // FIXME: check that URL is OK
+ if (this.loaded[file]) {
+ callback(this.loaded[file]);
+ } else {
+ var FILE = {}; FILE[type] = file;
+ this.Load(FILE,callback);
+ }
+ return callback;
+ },
+
+ //
+ // Load a file regardless of where it is and whether it has
+ // already been loaded.
+ //
+ Load: function (file,callback) {
+ callback = BASE.Callback(callback); var type;
+ if (file instanceof Object) {for (var i in file) {}; type = i.toUpperCase(); file = file[i]}
+ else {type = file.split(/\./).pop().toUpperCase()}
+ file = this.fileURL(file);
+ if (this.loading[file]) {
+ this.addHook(file,callback);
+ } else {
+ this.head = HEAD(this.head);
+ if (this.loader[type]) {this.loader[type].call(this,file,callback)}
+ else {throw Error("Can't load files of type "+type)}
+ }
+ return callback;
+ },
+
+ //
+ // Register a load hook for a particular file (it will be called when
+ // loadComplete() is called for that file)
+ //
+ LoadHook: function (file,callback,priority) {
+ callback = BASE.Callback(callback);
+ if (file instanceof Object) {for (var i in file) {file = file[i]}}
+ file = this.fileURL(file);
+ if (this.loaded[file]) {callback(this.loaded[file])}
+ else {this.addHook(file,callback,priority)}
+ return callback;
+ },
+ addHook: function (file,callback,priority) {
+ if (!this.loadHooks[file]) {this.loadHooks[file] = MathJax.Callback.Hooks()}
+ this.loadHooks[file].Add(callback,priority);
+ },
+
+ //
+ // Used when files are combined in a preloading configuration file
+ //
+ Preloading: function () {
+ for (var i = 0, m = arguments.length; i < m; i++) {
+ var file = this.fileURL(arguments[i]);
+ if (!this.loading[file]) {this.loading[file] = {preloaded: true}}
+ }
+ },
+
+ //
+ // Code used to load the various types of files
+ // (JS for JavaScript, CSS for style sheets)
+ //
+ loader: {
+ //
+ // Create a SCRIPT tag to load the file
+ //
+ JS: function (file,callback) {
+ var script = document.createElement("script");
+ var timeout = BASE.Callback(["loadTimeout",this,file]);
+ this.loading[file] = {
+ callback: callback,
+ message: BASE.Message.File(file),
+ timeout: setTimeout(timeout,this.timeout),
+ status: this.STATUS.OK,
+ script: script
+ };
+ script.onerror = timeout; // doesn't work in IE and no apparent substitute
+ script.type = "text/javascript";
+ script.src = file;
+ this.head.appendChild(script);
+ },
+ //
+ // Create a LINK tag to load the style sheet
+ //
+ CSS: function (file,callback) {
+ var link = document.createElement("link");
+ link.rel = "stylesheet"; link.type = "text/css"; link.href = file;
+ this.loading[file] = {
+ callback: callback,
+ message: BASE.Message.File(file),
+ status: this.STATUS.OK
+ };
+ this.head.appendChild(link);
+ this.timer.create.call(this,[this.timer.file,file],link);
+ }
+ },
+
+ //
+ // Timing code for checking when style sheets are available.
+ //
+ timer: {
+ //
+ // Create the timing callback and start the timing loop.
+ // We use a delay because some browsers need it to allow the styles
+ // to be processed.
+ //
+ create: function (callback,node) {
+ callback = BASE.Callback(callback);
+ if (node.nodeName === "STYLE" && node.styleSheet &&
+ typeof(node.styleSheet.cssText) !== 'undefined') {
+ callback(this.STATUS.OK); // MSIE processes style immediately, but doesn't set its styleSheet!
+ } else if (window.chrome && typeof(window.sessionStorage) !== "undefined" &&
+ node.nodeName === "STYLE") {
+ callback(this.STATUS.OK); // Same for Chrome 5 (beta), Grrr.
+ } else if (isSafari2) {
+ this.timer.start(this,[this.timer.checkSafari2,sheets++,callback],this.styleDelay);
+ } else {
+ this.timer.start(this,[this.timer.checkLength,node,callback],this.styleDelay);
+ }
+ return callback;
+ },
+ //
+ // Start the timer for the given callback checker
+ //
+ start: function (AJAX,check,delay,timeout) {
+ check = BASE.Callback(check);
+ check.execute = this.execute; check.time = this.time;
+ check.STATUS = AJAX.STATUS; check.timeout = timeout || AJAX.timeout;
+ check.delay = check.total = 0;
+ if (delay) {setTimeout(check,delay)} else {check()}
+ },
+ //
+ // Increment the time total, increase the delay
+ // and test if we are past the timeout time.
+ //
+ time: function (callback) {
+ this.total += this.delay;
+ this.delay = Math.floor(this.delay * 1.05 + 5);
+ if (this.total >= this.timeout) {callback(this.STATUS.ERROR); return 1}
+ return 0;
+ },
+ //
+ // For JS file loads, call the proper routine according to status
+ //
+ file: function (file,status) {
+ if (status < 0) {BASE.Ajax.loadTimeout(file)} else {BASE.Ajax.loadComplete(file)}
+ },
+ //
+ // Call the hook with the required data
+ //
+ execute: function () {this.hook.call(this.object,this,this.data[0],this.data[1])},
+ //
+ // Safari2 doesn't set the link's stylesheet, so we need to look in the
+ // document.styleSheets array for the new sheet when it is created
+ //
+ checkSafari2: function (check,length,callback) {
+ if (check.time(callback)) return;
+ if (document.styleSheets.length > length &&
+ document.styleSheets[length].cssRules &&
+ document.styleSheets[length].cssRules.length)
+ {callback(check.STATUS.OK)} else {setTimeout(check,check.delay)}
+ },
+ //
+ // Look for the stylesheets rules and check when they are defined
+ // and no longer of length zero. (This assumes there actually ARE
+ // some rules in the stylesheet.)
+ //
+ checkLength: function (check,node,callback) {
+ if (check.time(callback)) return;
+ var isStyle = 0; var sheet = (node.sheet || node.styleSheet);
+ try {if ((sheet.cssRules||sheet.rules||[]).length > 0) {isStyle = 1}} catch(err) {
+ if (err.message.match(/protected variable|restricted URI/)) {isStyle = 1}
+ else if (err.message.match(/Security error/)) {
+ // Firefox3 gives "Security error" for missing files, so
+ // can't distinguish that from OK files on remote servers.
+ // or OK files in different directory from local files.
+ isStyle = 1; // just say it is OK (can't really tell)
+ }
+ }
+ if (isStyle) {
+ // Opera 9.6 requires this setTimeout
+ setTimeout(BASE.Callback([callback,check.STATUS.OK]),0);
+ } else {
+ setTimeout(check,check.delay);
+ }
+ }
+ },
+
+ //
+ // JavaScript code must call this when they are completely initialized
+ // (this allows them to perform asynchronous actions before indicating
+ // that they are complete).
+ //
+ loadComplete: function (file) {
+ file = this.fileURL(file);
+ var loading = this.loading[file];
+ if (loading && !loading.preloaded) {
+ BASE.Message.Clear(loading.message);
+ clearTimeout(loading.timeout);
+ if (loading.script) {
+ if (SCRIPTS.length === 0) {setTimeout(REMOVESCRIPTS,0)}
+ SCRIPTS.push(loading.script);
+ }
+ this.loaded[file] = loading.status; delete this.loading[file];
+ this.addHook(file,loading.callback);
+ } else {
+ if (loading) {delete this.loading[file]}
+ this.loaded[file] = this.STATUS.OK;
+ loading = {status: this.STATUS.OK}
+ }
+ if (!this.loadHooks[file]) {return null}
+ return this.loadHooks[file].Execute(loading.status);
+ },
+
+ //
+ // If a file fails to load within the timeout period (or the onerror handler
+ // is called), this routine runs to signal the error condition.
+ //
+ loadTimeout: function (file) {
+ if (this.loading[file].timeout) {clearTimeout(this.loading[file].timeout)}
+ this.loading[file].status = this.STATUS.ERROR;
+ this.loadError(file);
+ this.loadComplete(file);
+ },
+
+ //
+ // The default error hook for file load failures
+ //
+ loadError: function (file) {
+ BASE.Message.Set("File failed to load: "+file,null,2000);
+ BASE.Hub.signal.Post(["file load error",file]);
+ },
+
+ //
+ // Defines a style sheet from a hash of style declarations (key:value pairs
+ // where the key is the style selector and the value is a hash of CSS attributes
+ // and values).
+ //
+ Styles: function (styles,callback) {
+ var styleString = this.StyleString(styles);
+ if (styleString === "") {
+ callback = BASE.Callback(callback);
+ callback();
+ } else {
+ var style = document.createElement("style"); style.type = "text/css";
+ this.head = HEAD(this.head);
+ this.head.appendChild(style);
+ if (style.styleSheet && typeof(style.styleSheet.cssText) !== 'undefined') {
+ style.styleSheet.cssText = styleString;
+ } else {
+ style.appendChild(document.createTextNode(styleString));
+ }
+ callback = this.timer.create.call(this,callback,style);
+ }
+ return callback;
+ },
+
+ //
+ // Create a stylesheet string from a style declaration object
+ //
+ StyleString: function (styles) {
+ if (typeof(styles) === 'string') {return styles}
+ var string = "", id, style;
+ for (id in styles) {if (styles.hasOwnProperty(id)) {
+ if (typeof styles[id] === 'string') {
+ string += id + " {"+styles[id]+"}\n";
+ } else if (styles[id] instanceof Array) {
+ for (var i = 0; i < styles[id].length; i++) {
+ style = {}; style[id] = styles[id][i];
+ string += this.StyleString(style);
+ }
+ } else if (id.substr(0,6) === '@media') {
+ string += id + " {"+this.StyleString(styles[id])+"}\n";
+ } else if (styles[id] != null) {
+ style = [];
+ for (var name in styles[id]) {if (styles[id].hasOwnProperty(name)) {
+ if (styles[id][name] != null)
+ {style[style.length] = name + ': ' + styles[id][name]}
+ }}
+ string += id +" {"+style.join('; ')+"}\n";
+ }
+ }}
+ return string;
+ }
+ };
+
+})("MathJax");
+
+/**********************************************************/
+
+MathJax.HTML = {
+ //
+ // Create an HTML element with given attributes and content.
+ // The def parameter is an (optional) object containing key:value pairs
+ // of the attributes and their values, and contents is an (optional)
+ // array of strings to be inserted as text, or arrays of the form
+ // [type,def,contents] that describes an HTML element to be inserted
+ // into the current element. Thus the contents can describe a complete
+ // HTML snippet of arbitrary complexity. E.g.:
+ //
+ // MathJax.HTML.Element("span",{id:"mySpan",style{"font-style":"italic"}},[
+ // "(See the ",["a",{href:"http://www.mathjax.org"},["MathJax home page"]],
+ // " for more details.)"]);
+ //
+ Element: function (type,def,contents) {
+ var obj = document.createElement(type);
+ if (def) {
+ if (def.style) {
+ var style = def.style; def.style = {};
+ for (var id in style) {if (style.hasOwnProperty(id))
+ {def.style[id.replace(/-([a-z])/g,this.ucMatch)] = style[id]}}
+ }
+ MathJax.Hub.Insert(obj,def);
+ }
+ if (contents) {
+ for (var i = 0; i < contents.length; i++) {
+ if (contents[i] instanceof Array) {
+ obj.appendChild(this.Element(contents[i][0],contents[i][1],contents[i][2]));
+ } else {
+ obj.appendChild(document.createTextNode(contents[i]));
+ }
+ }
+ }
+ return obj;
+ },
+ ucMatch: function (match,c) {return c.toUpperCase()},
+ addElement: function (span,type,def,contents) {return span.appendChild(this.Element(type,def,contents))},
+ TextNode: function (text) {return document.createTextNode(text)},
+ addText: function (span,text) {return span.appendChild(this.TextNode(text))},
+
+ //
+ // Set and get the text of a script
+ //
+ setScript: function (script,text) {
+ if (this.setScriptBug) {script.text = text} else {
+ while (script.firstChild) {script.removeChild(script.firstChild)}
+ this.addText(script,text);
+ }
+ },
+ getScript: function (script) {
+ var text = (script.text === "" ? script.innerHTML : script.text);
+ return text.replace(/^\s+/,"").replace(/\s+$/,"");
+ },
+
+ //
+ // Manage cookies
+ //
+ Cookie: {
+ prefix: "mjx",
+ expires: 365,
+
+ //
+ // Save an object as a named cookie
+ //
+ Set: function (name,def) {
+ var keys = [];
+ if (def) {
+ for (var id in def) {if (def.hasOwnProperty(id)) {
+ keys.push(id+":"+def[id].toString().replace(/&/g,"&&"));
+ }}
+ }
+ var cookie = this.prefix+"."+name+"="+escape(keys.join('&;'));
+ if (this.expires) {
+ var time = new Date(); time.setDate(time.getDate() + this.expires);
+ cookie += '; expires='+time.toGMTString();
+ }
+ document.cookie = cookie+"; path=/";
+ },
+
+ //
+ // Get the contents of a named cookie and incorporate
+ // it into the given object (or return a fresh one)
+ //
+ Get: function (name,obj) {
+ if (!obj) {obj = {}}
+ var pattern = new RegExp("(?:^|;\\s*)"+this.prefix+"\\."+name+"=([^;]*)(?:;|$)");
+ var match = pattern.exec(document.cookie);
+ if (match && match[1] !== "") {
+ var keys = unescape(match[1]).split('&;');
+ for (var i = 0, m = keys.length; i < m; i++) {
+ match = keys[i].match(/([^:]+):(.*)/);
+ var value = match[2].replace(/&&/g,'&');
+ if (value === "true") {value = true} else if (value === "false") {value = false}
+ else if (value.match(/^-?(\d+(\.\d+)?|\.\d+)$/)) {value = parseFloat(value)}
+ obj[match[1]] = value;
+ }
+ }
+ return obj;
+ }
+ }
+
+};
+
+
+/**********************************************************/
+
+MathJax.Message = {
+ ready: false, // used to tell when the styles are available
+ log: [{}], current: null,
+ textNodeBug: (navigator.vendor === "Apple Computer, Inc." &&
+ typeof navigator.vendorSub === "undefined") ||
+ (window.hasOwnProperty && window.hasOwnProperty("konqueror")), // Konqueror displays some gibberish with text.nodeValue = "..."
+
+ styles: {
+ "#MathJax_Message": {
+ position: "fixed", left: "1px", bottom: "2px",
+ 'background-color': "#E6E6E6", border: "1px solid #959595",
+ margin: "0px", padding: "2px 8px",
+ 'z-index': "102", color: "black", 'font-size': "80%",
+ width: "auto", 'white-space': "nowrap"
+ },
+
+ "#MathJax_MSIE_Frame": {
+ position: "absolute",
+ top:0, left: 0, width: "0px", 'z-index': 101,
+ border: "0px", margin: "0px", padding: "0px"
+ }
+ },
+
+ browsers: {
+ MSIE: function (browser) {
+ MathJax.Hub.config.styles["#MathJax_Message"].position = "absolute";
+ MathJax.Message.quirks = (document.compatMode === "BackCompat");
+ },
+ Chrome: function (browser) {
+ MathJax.Hub.config.styles["#MathJax_Message"].bottom = "1.5em";
+ MathJax.Hub.config.styles["#MathJax_Message"].left = "1em";
+ }
+ },
+
+ Init: function (styles) {
+ if (styles) {this.ready = true}
+ if (!document.body || !this.ready) {return false}
+ //
+ // ASCIIMathML replaces the entire page with a copy of itself (@#!#%@!!)
+ // so check that this.div is still part of the page, otherwise look up
+ // the copy and use that.
+ //
+ if (this.div && this.div.parentNode == null) {
+ this.div = document.getElementById("MathJax_Message");
+ if (this.div) {this.text = this.div.firstChild}
+ }
+ if (!this.div) {
+ var frame = document.body;
+ if (MathJax.Hub.Browser.isMSIE) {
+ frame = this.frame = this.addDiv(document.body); frame.removeAttribute("id");
+ frame.style.position = "absolute";
+ frame.style.border = frame.style.margin = frame.style.padding = "0px";
+ frame.style.zIndex = "101"; frame.style.height = "0px";
+ frame = this.addDiv(frame);
+ frame.id = "MathJax_MSIE_Frame";
+ window.attachEvent("onscroll",this.MoveFrame);
+ window.attachEvent("onresize",this.MoveFrame);
+ this.MoveFrame();
+ }
+ this.div = this.addDiv(frame); this.div.style.display = "none";
+ this.text = this.div.appendChild(document.createTextNode(""));
+ }
+ return true;
+ },
+
+ addDiv: function (parent) {
+ var div = document.createElement("div");
+ div.id = "MathJax_Message";
+ if (parent.firstChild) {parent.insertBefore(div,parent.firstChild)}
+ else {parent.appendChild(div)}
+ return div;
+ },
+
+ MoveFrame: function () {
+ var body = (MathJax.Message.quirks ? document.body : document.documentElement);
+ var frame = MathJax.Message.frame;
+ frame.style.left = body.scrollLeft + 'px';
+ frame.style.top = body.scrollTop + 'px';
+ frame.style.width = body.clientWidth + 'px';
+ frame = frame.firstChild;
+ frame.style.height = body.clientHeight + 'px';
+ },
+
+ filterText: function (text,n) {
+ if (MathJax.Hub.config.messageStyle === "simple") {
+ if (text.match(/^Loading /)) {
+ if (!this.loading) {this.loading = "Loading "}
+ text = this.loading; this.loading += ".";
+ } else if (text.match(/^Processing /)) {
+ if (!this.processing) {this.processing = "Processing "}
+ text = this.processing; this.processing += ".";
+ } else if (text.match(/^Typesetting /)) {
+ if (!this.typesetting) {this.typesetting = "Typesetting "}
+ text = this.typesetting; this.typesetting += ".";
+ }
+ }
+ return text;
+ },
+
+ Set: function (text,n,clearDelay) {
+ if (this.timer) {clearTimeout(this.timer); delete this.timeout}
+ if (n == null) {n = this.log.length; this.log[n] = {}}
+ this.log[n].text = text; this.log[n].filteredText = text = this.filterText(text,n);
+ if (typeof(this.log[n].next) === "undefined") {
+ this.log[n].next = this.current;
+ if (this.current != null) {this.log[this.current].prev = n}
+ this.current = n;
+ }
+ if (this.current === n && MathJax.Hub.config.messageStyle !== "none") {
+ if (this.Init()) {
+ if (this.textNodeBug) {this.div.innerHTML = text} else {this.text.nodeValue = text}
+ this.div.style.display = "";
+ if (this.status) {window.status = ""; delete this.status}
+ } else {
+ window.status = text;
+ this.status = true;
+ }
+ }
+ if (clearDelay) {setTimeout(MathJax.Callback(["Clear",this,n]),clearDelay)}
+ else if (clearDelay == 0) {this.Clear(n,0)}
+ return n;
+ },
+
+ Clear: function (n,delay) {
+ if (this.log[n].prev != null) {this.log[this.log[n].prev].next = this.log[n].next}
+ if (this.log[n].next != null) {this.log[this.log[n].next].prev = this.log[n].prev}
+ if (this.current === n) {
+ this.current = this.log[n].next;
+ if (this.text) {
+ if (this.div.parentNode == null) {this.Init()} // see ASCIIMathML comments above
+ if (this.current == null) {
+ if (this.timer) {clearTimeout(this.timer); delete this.timer}
+ if (delay == null) {delay = 600}
+ if (delay === 0) {this.Remove()}
+ else {this.timer = setTimeout(MathJax.Callback(["Remove",this]),delay)}
+ } else if (MathJax.Hub.config.messageStyle !== "none") {
+ if (this.textNodeBug) {this.div.innerHTML = this.log[this.current].filteredText}
+ else {this.text.nodeValue = this.log[this.current].filteredText}
+ }
+ if (this.status) {window.status = ""; delete this.status}
+ } else if (this.status) {
+ window.status = (this.current == null ? "" : this.log[this.current].text);
+ }
+ }
+ delete this.log[n].next; delete this.log[n].prev;
+ delete this.log[n].filteredText;
+ },
+
+ Remove: function () {
+ // FIXME: do a fade out or something else interesting?
+ this.text.nodeValue = "";
+ this.div.style.display = "none";
+ },
+
+ File: function (file) {
+ var root = MathJax.Ajax.config.root;
+ if (file.substr(0,root.length) === root) {file = "[MathJax]"+file.substr(root.length)}
+ return this.Set("Loading "+file);
+ },
+
+ Log: function () {
+ var strings = [];
+ for (var i = 1, m = this.log.length; i < m; i++) {strings[i] = this.log[i].text}
+ return strings.join("\n");
+ }
+
+};
+
+/**********************************************************/
+
+MathJax.Hub = {
+ config: {
+ root: "",
+ config: [], // list of configuration files to load
+ styleSheets: [], // list of CSS files to load
+ styles: { // styles to generate in-line
+ ".MathJax_Preview": {color: "#888"}
+ },
+ jax: [], // list of input and output jax to load
+ extensions: [], // list of extensions to load
+ preJax: null, // pattern to remove from before math script tag
+ postJax: null, // pattern to remove from after math script tag
+ displayAlign: 'center', // how to align displayed equations (left, center, right)
+ displayIndent: '0', // indentation for displayed equations (when not centered)
+ preRemoveClass: 'MathJax_Preview', // class of objects to remove preceeding math script
+ showProcessingMessages: true, // display "Processing math: nn%" messages or not
+ messageStyle: "normal", // set to "none" or "simple" (for "Loading..." and "Processing...")
+ delayStartupUntil: "none", // set to "onload" to delay setup until the onload handler runs
+ // set to "configured" to delay startup until MathJax.Hub.Configured() is called
+ // set to a Callback to wait for before continuing with the startup
+ skipStartupTypeset: false, // set to true to skip PreProcess and Process during startup
+ "v1.0-compatible": true, // set to false to prevent message about configuration change
+ elements: [], // array of elements to process when none is given explicitly
+ positionToHash: true, // after initial typeset pass, position to #hash location?
+
+ showMathMenu: true, // attach math context menu to typeset math?
+ showMathMenuMSIE: true, // separtely determine if MSIE should have math menu
+ // (since the code for that is a bit delicate)
+
+ menuSettings: {
+ zoom: "None", // when to do MathZoom
+ CTRL: false, // require CTRL for MathZoom?
+ ALT: false, // require Alt or Option?
+ CMD: false, // require CMD?
+ Shift: false, // require Shift?
+ discoverable: false, // make math menu discoverable on hover?
+ zscale: "200%", // the scaling factor for MathZoom
+ renderer: "", // set when Jax are loaded
+ font: "Auto", // what font HTML-CSS should use
+ context: "MathJax", // or "Browser" for pass-through to browser menu
+ mpContext: false, // true means pass menu events to MathPlayer in IE
+ mpMouse: false, // true means pass mouse events to MathPlayer in IE
+ texHints: true // include class names for TeXAtom elements
+ },
+
+ errorSettings: {
+ message: ["[Math Processing Error]"], // HTML snippet structure for message to use
+ style: {color: "#CC0000", "font-style":"italic"} // style for message
+ }
+ },
+
+ preProcessors: MathJax.Callback.Hooks(true), // list of callbacks for preprocessing (initialized by extensions)
+ inputJax: {}, // mime-type mapped to input jax (by registration)
+ outputJax: {order:{}}, // mime-type mapped to output jax list (by registration)
+
+ processUpdateTime: 250, // time between screen updates when processing math (milliseconds)
+ processUpdateDelay: 10, // pause between screen updates to allow other processing (milliseconds)
+
+ signal: MathJax.Callback.Signal("Hub"), // Signal used for Hub events
+
+ Config: function (def) {
+ this.Insert(this.config,def);
+ if (this.config.Augment) {this.Augment(this.config.Augment)}
+ },
+ CombineConfig: function (name,def) {
+ var config = this.config, id, parent; name = name.split(/\./);
+ for (var i = 0, m = name.length; i < m; i++) {
+ id = name[i]; if (!config[id]) {config[id] = {}}
+ parent = config; config = config[id];
+ }
+ parent[id] = config = this.Insert(def,config);
+ return config;
+ },
+
+ Register: {
+ PreProcessor: function () {MathJax.Hub.preProcessors.Add.apply(MathJax.Hub.preProcessors,arguments)},
+ MessageHook: function () {return MathJax.Hub.signal.MessageHook.apply(MathJax.Hub.signal,arguments)},
+ StartupHook: function () {return MathJax.Hub.Startup.signal.MessageHook.apply(MathJax.Hub.Startup.signal,arguments)},
+ LoadHook: function () {return MathJax.Ajax.LoadHook.apply(MathJax.Ajax,arguments)}
+ },
+
+ getAllJax: function (element) {
+ var jax = [], scripts = this.elementScripts(element);
+ for (var i = 0, m = scripts.length; i < m; i++) {
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax)
+ {jax.push(scripts[i].MathJax.elementJax)}
+ }
+ return jax;
+ },
+
+ getJaxByType: function (type,element) {
+ var jax = [], scripts = this.elementScripts(element);
+ for (var i = 0, m = scripts.length; i < m; i++) {
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax &&
+ scripts[i].MathJax.elementJax.mimeType === type)
+ {jax.push(scripts[i].MathJax.elementJax)}
+ }
+ return jax;
+ },
+
+ getJaxByInputType: function (type,element) {
+ var jax = [], scripts = this.elementScripts(element);
+ for (var i = 0, m = scripts.length; i < m; i++) {
+ if (scripts[i].MathJax && scripts[i].MathJax.elementJax &&
+ scripts[i].type && scripts[i].type.replace(/ *;(.|\s)*/,"") === type)
+ {jax.push(scripts[i].MathJax.elementJax)}
+ }
+ return jax;
+ },
+
+ getJaxFor: function (element) {
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
+ if (element && element.MathJax) {return element.MathJax.elementJax}
+ if (element && element.isMathJax) {
+ while (element && !element.jaxID) {element = element.parentNode}
+ if (element) {return MathJax.OutputJax[element.jaxID].getJaxFromMath(element)}
+ }
+ return null;
+ },
+
+ isJax: function (element) {
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
+ if (element && element.isMathJax) {return 1}
+ if (element && element.tagName != null && element.tagName.toLowerCase() === 'script') {
+ if (element.MathJax)
+ {return (element.MathJax.state === MathJax.ElementJax.STATE.PROCESSED ? 1 : -1)}
+ if (element.type && this.inputJax[element.type.replace(/ *;(.|\s)*/,"")]) {return -1}
+ }
+ return 0;
+ },
+
+ setRenderer: function (renderer,type) {
+ if (!renderer) return;
+ if (!MathJax.OutputJax[renderer]) {
+ this.config.menuSettings.renderer = "";
+ var file = "[MathJax]/jax/output/"+renderer+"/config.js";
+ return MathJax.Ajax.Require(file,["setRenderer",this,renderer,type]);
+ } else {
+ this.config.menuSettings.renderer = renderer;
+ if (type == null) {type = "jax/mml"}
+ var jax = this.outputJax;
+ if (jax[type] && jax[type].length) {
+ if (renderer !== jax[type][0].id) {
+ jax[type].unshift(MathJax.OutputJax[renderer]);
+ return this.signal.Post(["Renderer Selected",renderer]);
+ }
+ }
+ return null;
+ }
+ },
+
+ Queue: function () {
+ return this.queue.Push.apply(this.queue,arguments);
+ },
+
+ Typeset: function (element,callback) {
+ if (!MathJax.isReady) return null;
+ var ec = this.elementCallback(element,callback);
+ var queue = MathJax.Callback.Queue();
+ for (var i = 0, m = ec.elements.length; i < m; i++) {
+ if (ec.elements[i]) {
+ queue.Push(
+ ["PreProcess",this,ec.elements[i]],
+ ["Process",this,ec.elements[i]]
+ );
+ }
+ }
+ return queue.Push(ec.callback);
+ },
+
+ PreProcess: function (element,callback) {
+ var ec = this.elementCallback(element,callback);
+ var queue = MathJax.Callback.Queue();
+ for (var i = 0, m = ec.elements.length; i < m; i++) {
+ if (ec.elements[i]) {
+ queue.Push(
+ ["Post",this.signal,["Begin PreProcess",ec.elements[i]]],
+ (arguments.callee.disabled? {} : ["Execute",this.preProcessors,ec.elements[i]]),
+ ["Post",this.signal,["End PreProcess",ec.elements[i]]]
+ );
+ }
+ }
+ return queue.Push(ec.callback);
+ },
+
+ Process: function (element,callback) {return this.takeAction("Process",element,callback)},
+ Update: function (element,callback) {return this.takeAction("Update",element,callback)},
+ Reprocess: function (element,callback) {return this.takeAction("Reprocess",element,callback)},
+ Rerender: function (element,callback) {return this.takeAction("Rerender",element,callback)},
+
+ takeAction: function (action,element,callback) {
+ var ec = this.elementCallback(element,callback);
+ var queue = MathJax.Callback.Queue(["Clear",this.signal]);
+ for (var i = 0, m = ec.elements.length; i < m; i++) {
+ if (ec.elements[i]) {
+ var state = {
+ scripts: [], // filled in by prepareScripts
+ start: new Date().getTime(), // timer for processing messages
+ i: 0, j: 0, // current script, current jax
+ jax: {}, // scripts grouped by output jax
+ jaxIDs: [] // id's of jax used
+ };
+ queue.Push(
+ ["Post",this.signal,["Begin "+action,ec.elements[i]]],
+ ["Post",this.signal,["Begin Math",ec.elements[i],action]],
+ ["prepareScripts",this,action,ec.elements[i],state],
+ ["Post",this.signal,["Begin Math Input",ec.elements[i],action]],
+ ["processInput",this,state],
+ ["Post",this.signal,["End Math Input",ec.elements[i],action]],
+ ["prepareOutput",this,state,"preProcess"],
+ ["Post",this.signal,["Begin Math Output",ec.elements[i],action]],
+ ["processOutput",this,state],
+ ["Post",this.signal,["End Math Output",ec.elements[i],action]],
+ ["prepareOutput",this,state,"postProcess"],
+ ["Post",this.signal,["End Math",ec.elements[i],action]],
+ ["Post",this.signal,["End "+action,ec.elements[i]]]
+ );
+ }
+ }
+ return queue.Push(ec.callback);
+ },
+
+ scriptAction: {
+ Process: function (script) {},
+ Update: function (script) {
+ var jax = script.MathJax.elementJax;
+ if (jax && jax.needsUpdate()) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE}
+ else {script.MathJax.state = jax.STATE.PROCESSED}
+ },
+ Reprocess: function (script) {
+ var jax = script.MathJax.elementJax;
+ if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.UPDATE}
+ },
+ Rerender: function (script) {
+ var jax = script.MathJax.elementJax;
+ if (jax) {jax.Remove(true); script.MathJax.state = jax.STATE.OUTPUT}
+ }
+ },
+
+ prepareScripts: function (action,element,state) {
+ if (arguments.callee.disabled) return;
+ var scripts = this.elementScripts(element);
+ var STATE = MathJax.ElementJax.STATE;
+ for (var i = 0, m = scripts.length; i < m; i++) {
+ var script = scripts[i];
+ if (script.type && this.inputJax[script.type.replace(/ *;(.|\n)*/,"")]) {
+ if (script.MathJax) {
+ if (script.MathJax.elementJax && script.MathJax.elementJax.hover) {
+ MathJax.Extension.MathEvents.Hover.ClearHover(script.MathJax.elementJax);
+ }
+ if (script.MathJax.state !== STATE.PENDING) {this.scriptAction[action](script)}
+ }
+ if (!script.MathJax) {script.MathJax = {state: STATE.PENDING}}
+ if (script.MathJax.state !== STATE.PROCESSED) {state.scripts.push(script)}
+ }
+ }
+ },
+
+ checkScriptSiblings: function (script) {
+ if (script.MathJax.checked) return;
+ var config = this.config, pre = script.previousSibling;
+ if (pre && pre.nodeName === "#text") {
+ var preJax,postJax, post = script.nextSibling;
+ if (post && post.nodeName !== "#text") {post = null}
+ if (config.preJax) {
+ if (typeof(config.preJax) === "string") {config.preJax = new RegExp(config.preJax+"$")}
+ preJax = pre.nodeValue.match(config.preJax);
+ }
+ if (config.postJax && post) {
+ if (typeof(config.postJax) === "string") {config.postJax = new RegExp("^"+config.postJax)}
+ postJax = post.nodeValue.match(config.postJax);
+ }
+ if (preJax && (!config.postJax || postJax)) {
+ pre.nodeValue = pre.nodeValue.replace
+ (config.preJax,(preJax.length > 1? preJax[1] : ""));
+ pre = null;
+ }
+ if (postJax && (!config.preJax || preJax)) {
+ post.nodeValue = post.nodeValue.replace
+ (config.postJax,(postJax.length > 1? postJax[1] : ""));
+ }
+ if (pre && !pre.nodeValue.match(/\S/)) {pre = pre.previousSibling}
+ }
+ if (config.preRemoveClass && pre && pre.className === config.preRemoveClass)
+ {script.MathJax.preview = pre}
+ script.MathJax.checked = 1;
+ },
+
+ processInput: function (state) {
+ var jax, STATE = MathJax.ElementJax.STATE;
+ var script, prev, m = state.scripts.length;
+ try {
+ //
+ // Loop through the scripts
+ //
+ while (state.i < m) {
+ script = state.scripts[state.i]; if (!script) {state.i++; continue}
+ //
+ // Remove previous error marker, if any
+ //
+ prev = script.previousSibling;
+ if (prev && prev.className === "MathJax_Error") {prev.parentNode.removeChild(prev)}
+ //
+ // Check if already processed or needs processing
+ //
+ if (!script.MathJax || script.MathJax.state === STATE.PROCESSED) {state.i++; continue};
+ if (!script.MathJax.elementJax || script.MathJax.state === STATE.UPDATE) {
+ this.checkScriptSiblings(script); // remove preJax/postJax etc.
+ var type = script.type.replace(/ *;(.|\s)*/,""); // the input jax type
+ jax = this.inputJax[type].Process(script,state); // run the input jax
+ if (typeof jax === 'function') { // if a callback was returned
+ if (jax.called) continue; // go back and call Process() again
+ this.RestartAfter(jax); // wait for the callback
+ }
+ jax.Attach(script,this.inputJax[type].id); // register the jax on the script
+ this.saveScript(jax,state,script,STATE); // add script to state
+ } else if (script.MathJax.state === STATE.OUTPUT) {
+ this.saveScript(script.MathJax.elementJax,state,script,STATE); // add script to state
+ }
+ //
+ // Go on to the next script, and check if we need to update the processing message
+ //
+ state.i++; var now = new Date().getTime();
+ if (now - state.start > this.processUpdateTime && state.i < state.scripts.length)
+ {state.start = now; this.RestartAfter(MathJax.Callback.Delay(1))}
+ }
+ } catch (err) {return this.processError(err,state,"Input")}
+ //
+ // Put up final message, reset the state and return
+ //
+ if (state.scripts.length && this.config.showProcessingMessages)
+ {MathJax.Message.Set("Processing math: 100%",0)}
+ state.start = new Date().getTime(); state.i = state.j = 0;
+ return null;
+ },
+ saveScript: function (jax,state,script,STATE) {
+ //
+ // Check that output jax exists
+ //
+ if (!this.outputJax[jax.mimeType]) {
+ script.MathJax.state = STATE.UPDATE;
+ throw Error("No output jax registered for "+jax.mimeType);
+ }
+ //
+ // Record the output jax
+ // and put this script in the queue for that jax
+ //
+ jax.outputJax = this.outputJax[jax.mimeType][0].id;
+ if (!state.jax[jax.outputJax]) {
+ if (state.jaxIDs.length === 0) {
+ // use original array until we know there are more (rather than two copies)
+ state.jax[jax.outputJax] = state.scripts;
+ } else {
+ if (state.jaxIDs.length === 1) // get the script so far for the existing jax
+ {state.jax[state.jaxIDs[0]] = state.scripts.slice(0,state.i)}
+ state.jax[jax.outputJax] = []; // start a new array for the new jax
+ }
+ state.jaxIDs.push(jax.outputJax); // save the ID of the jax
+ }
+ if (state.jaxIDs.length > 1) {state.jax[jax.outputJax].push(script)}
+ //
+ // Mark script as needing output
+ //
+ script.MathJax.state = STATE.OUTPUT;
+ },
+
+ //
+ // Pre- and post-process scripts by jax
+ // (to get scaling factors, hide/show output, and so on)
+ // Since this can cause the jax to load, we need to trap restarts
+ //
+ prepareOutput: function (state,method) {
+ while (state.j < state.jaxIDs.length) {
+ var id = state.jaxIDs[state.j], JAX = MathJax.OutputJax[id];
+ if (JAX[method]) {
+ try {
+ var result = JAX[method](state);
+ if (typeof result === 'function') {
+ if (result.called) continue; // go back and try again
+ this.RestartAfter(result);
+ }
+ } catch (err) {
+ if (!err.restart) {
+ MathJax.Message.Set("Error preparing "+id+" output ("+method+")",null,600);
+ MathJax.Hub.lastPrepError = err;
+ state.j++;
+ }
+ return MathJax.Callback.After(["prepareOutput",this,state,method],err.restart);
+ }
+ }
+ state.j++;
+ }
+ return null;
+ },
+
+ processOutput: function (state) {
+ var result, STATE = MathJax.ElementJax.STATE, script, m = state.scripts.length;
+ try {
+ //
+ // Loop through the scripts
+ //
+ while (state.i < m) {
+ //
+ // Check that there is an element jax
+ //
+ script = state.scripts[state.i]; if (!script || !script.MathJax) {state.i++; continue}
+ var jax = script.MathJax.elementJax; if (!jax) {state.i++; continue}
+ //
+ // Call the output Jax's Process method (which will be its Translate()
+ // method once loaded). Mark it as complete and remove the preview.
+ //
+ result = MathJax.OutputJax[jax.outputJax].Process(script,state);
+ script.MathJax.state = STATE.PROCESSED; state.i++;
+ if (script.MathJax.preview) {script.MathJax.preview.innerHTML = ""}
+ //
+ // Signal that new math is available
+ //
+ this.signal.Post(["New Math",jax.inputID]); // FIXME: wait for this? (i.e., restart if returns uncalled callback)
+ //
+ // Update the processing message, if needed
+ //
+ var now = new Date().getTime();
+ if (now - state.start > this.processUpdateTime && state.i < state.scripts.length)
+ {state.start = now; this.RestartAfter(MathJax.Callback.Delay(this.processUpdateDelay))}
+ }
+ } catch (err) {return this.processError(err,state,"Output")}
+ //
+ // Put up the typesetting-complete message
+ //
+ if (state.scripts.length && this.config.showProcessingMessages) {
+ MathJax.Message.Set("Typesetting math: 100%",0);
+ MathJax.Message.Clear(0);
+ }
+ state.i = state.j = 0;
+ return null;
+ },
+
+ processMessage: function (state,type) {
+ var m = Math.floor(state.i/(state.scripts.length)*100);
+ var message = (type === "Output" ? "Typesetting" : "Processing");
+ if (this.config.showProcessingMessages) {MathJax.Message.Set(message+" math: "+m+"%",0)}
+ },
+
+ processError: function (err,state,type) {
+ if (!err.restart) {
+ if (!this.config.errorSettings.message) {throw err}
+ this.formatError(state.scripts[state.i],err); state.i++;
+ }
+ this.processMessage(state,type);
+ return MathJax.Callback.After(["process"+type,this,state],err.restart);
+ },
+
+ formatError: function (script,err) {
+ var error = MathJax.HTML.Element("span",{className:"MathJax_Error"},this.config.errorSettings.message);
+ error.jaxID = "Error";
+ if (MathJax.Extension.MathEvents) {
+ error.oncontextmenu = MathJax.Extension.MathEvents.Event.Menu;
+ error.onmousedown = MathJax.Extension.MathEvents.Event.Mousedown;
+ } else {
+ MathJax.Ajax.Require("[MathJax]/extensions/MathEvents.js",function () {
+ error.oncontextmenu = MathJax.Extension.MathEvents.Event.Menu;
+ error.onmousedown = MathJax.Extension.MathEvents.Event.Mousedown;
+ });
+ }
+ script.parentNode.insertBefore(error,script);
+ if (script.MathJax.preview) {script.MathJax.preview.innerHTML = ""}
+ this.lastError = err;
+ },
+
+ RestartAfter: function (callback) {
+ throw this.Insert(Error("restart"),{restart: MathJax.Callback(callback)});
+ },
+
+ elementCallback: function (element,callback) {
+ if (callback == null && (element instanceof Array || typeof element === 'function'))
+ {try {MathJax.Callback(element); callback = element; element = null} catch(e) {}}
+ if (element == null) {element = this.config.elements || []}
+ if (!(element instanceof Array)) {element = [element]}
+ element = [].concat(element); // make a copy so the original isn't changed
+ for (var i = 0, m = element.length; i < m; i++)
+ {if (typeof(element[i]) === 'string') {element[i] = document.getElementById(element[i])}}
+ if (element.length == 0) {element.push(document.body)}
+ if (!callback) {callback = {}}
+ return {elements: element, callback: callback};
+ },
+
+ elementScripts: function (element) {
+ if (typeof(element) === 'string') {element = document.getElementById(element)}
+ if (element == null) {element = document.body}
+ if (element.tagName != null && element.tagName.toLowerCase() === "script") {return [element]}
+ return element.getElementsByTagName("script");
+ },
+
+ Insert: function (dst,src) {
+ for (var id in src) {if (src.hasOwnProperty(id)) {
+ // allow for concatenation of arrays?
+ if (typeof src[id] === 'object' && !(src[id] instanceof Array) &&
+ (typeof dst[id] === 'object' || typeof dst[id] === 'function')) {
+ this.Insert(dst[id],src[id]);
+ } else {
+ dst[id] = src[id];
+ }
+ }}
+ return dst;
+ }
+};
+MathJax.Hub.Insert(MathJax.Hub.config.styles,MathJax.Message.styles);
+MathJax.Hub.Insert(MathJax.Hub.config.styles,{".MathJax_Error":MathJax.Hub.config.errorSettings.style});
+
+//
+// Storage area for extensions and preprocessors
+//
+MathJax.Extension = {};
+
+//
+// Hub Startup code
+//
+MathJax.Hub.Configured = MathJax.Callback({}); // called when configuration is complete
+MathJax.Hub.Startup = {
+ script: "", // the startup script from the SCRIPT call that loads MathJax.js
+ queue: MathJax.Callback.Queue(), // Queue used for startup actions
+ signal: MathJax.Callback.Signal("Startup"), // Signal used for startup events
+ params: {},
+
+ //
+ // Load the configuration files
+ //
+ Config: function () {
+ this.queue.Push(["Post",this.signal,"Begin Config"]);
+ //
+ // Check for user cookie configuration
+ //
+ var user = MathJax.HTML.Cookie.Get("user");
+ if (user.URL || user.Config) {
+ if (confirm(
+ "MathJax has found a user-configuration cookie that includes code to be run. " +
+ "Do you want to run it?\n\n"+
+ "(You should press Cancel unless you set up the cookie yourself.)"
+ )) {
+ if (user.URL) {this.queue.Push(["Require",MathJax.Ajax,user.URL])}
+ if (user.Config) {this.queue.Push(new Function(user.Config))}
+ } else {MathJax.HTML.Cookie.Set("user",{})}
+ }
+ //
+ // Run the config files, if any are given in the parameter list
+ //
+ if (this.params.config) {
+ var files = this.params.config.split(/,/);
+ for (var i = 0, m = files.length; i < m; i++) {
+ if (!files[i].match(/\.js$/)) {files[i] += ".js"}
+ this.queue.Push(["Require",MathJax.Ajax,this.URL("config",files[i])]);
+ }
+ }
+ //
+ // Run the deprecated configuration script, if any (ignoring return value)
+ // Wait for the startup delay signal
+ // Run the mathjax-config blocks
+ // Handle the default configuration (v1.0 compatible)
+ // Load the files in the configuration's config array
+ //
+ if (this.script.match(/\S/)) {this.queue.Push(this.script+";\n1;")}
+ this.queue.Push(
+ ["ConfigDelay",this],
+ ["ConfigBlocks",this],
+ ["ConfigDefault",this],
+ [function (THIS) {return THIS.loadArray(MathJax.Hub.config.config,"config",null,true)},this],
+ ["Post",this.signal,"End Config"]
+ );
+ },
+ //
+ // Return the delay callback
+ //
+ ConfigDelay: function () {
+ var delay = this.params.delayStartupUntil || MathJax.Hub.config.delayStartupUntil;
+ if (delay === "onload") {return this.onload}
+ if (delay === "configured") {return MathJax.Hub.Configured}
+ return delay;
+ },
+ //
+ // Run the scipts of type=text/x-mathajx-config
+ //
+ ConfigBlocks: function () {
+ var scripts = document.getElementsByTagName("script");
+ var last = null, queue = MathJax.Callback.Queue();
+ for (var i = 0, m = scripts.length; i < m; i++) {
+ var type = String(scripts[i].type).replace(/ /g,"");
+ if (type.match(/^text\/x-mathjax-config(;.*)?$/) && !type.match(/;executed=true/)) {
+ scripts[i].type += ";executed=true";
+ last = queue.Push(scripts[i].innerHTML+";\n1;");
+ }
+ }
+ return last;
+ },
+ //
+ // Check for v1.0 no-configuration and put up a warning message.
+ //
+ ConfigDefault: function () {
+ var CONFIG = MathJax.Hub.config;
+ if (CONFIG["v1.0-compatible"] && (CONFIG.jax||[]).length === 0 &&
+ !this.params.config && (CONFIG.config||[]).length === 0)
+ {return MathJax.Ajax.Require(this.URL("extensions","v1.0-warning.js"))}
+ },
+
+ //
+ // Read cookie and set up menu defaults
+ // (adjust the jax to accommodate renderer preferences)
+ //
+ Cookie: function () {
+ return this.queue.Push(
+ ["Post",this.signal,"Begin Cookie"],
+ ["Get",MathJax.HTML.Cookie,"menu",MathJax.Hub.config.menuSettings],
+ [function (config) {
+ var renderer = config.menuSettings.renderer, jax = config.jax;
+ if (renderer) {
+ var name = "output/"+renderer; jax.sort();
+ for (var i = 0, m = jax.length; i < m; i++) {
+ if (jax[i].substr(0,7) === "output/") break;
+ }
+ if (i == m-1) {jax.pop()} else {
+ while (i < m) {if (jax[i] === name) {jax.splice(i,1); break}; i++}
+ }
+ jax.unshift(name);
+ }
+ },MathJax.Hub.config],
+ ["Post",this.signal,"End Cookie"]
+ );
+ },
+ //
+ // Setup stylesheets and extra styles
+ //
+ Styles: function () {
+ return this.queue.Push(
+ ["Post",this.signal,"Begin Styles"],
+ ["loadArray",this,MathJax.Hub.config.styleSheets,"config"],
+ ["Styles",MathJax.Ajax,MathJax.Hub.config.styles],
+ ["Post",this.signal,"End Styles"]
+ );
+ },
+ //
+ // Load the input and output jax
+ //
+ Jax: function () {
+ var config = MathJax.Hub.config, jax = MathJax.Hub.outputJax;
+ // Save the order of the output jax since they are loading asynchronously
+ for (var i = 0, m = config.jax.length, k = 0; i < m; i++) {
+ if (config.jax[i].substr(0,7) === "output/")
+ {jax.order[config.jax[i].substr(7)] = k; k++}
+ }
+ var queue = MathJax.Callback.Queue();
+ return queue.Push(
+ ["Post",this.signal,"Begin Jax"],
+ ["loadArray",this,config.jax,"jax","config.js"],
+ ["Post",this.signal,"End Jax"]
+ );
+ },
+ //
+ // Load the extensions
+ //
+ Extensions: function () {
+ var queue = MathJax.Callback.Queue();
+ return queue.Push(
+ ["Post",this.signal,"Begin Extensions"],
+ ["loadArray",this,MathJax.Hub.config.extensions,"extensions"],
+ ["Post",this.signal,"End Extensions"]
+ );
+ },
+
+ //
+ // Initialize the Message system
+ //
+ Message: function () {
+ MathJax.Message.Init(true);
+ },
+
+ //
+ // Set the math menu renderer, if it isn't already
+ // (this must come after the jax are loaded)
+ //
+ Menu: function () {
+ var menu = MathJax.Hub.config.menuSettings, jax = MathJax.Hub.outputJax, registered;
+ for (var id in jax) {if (jax.hasOwnProperty(id)) {
+ if (jax[id].length) {registered = jax[id]; break}
+ }}
+ if (registered && registered.length) {
+ if (menu.renderer && menu.renderer !== registered[0].id)
+ {registered.unshift(MathJax.OutputJax[menu.renderer])}
+ menu.renderer = registered[0].id;
+ }
+ },
+
+ //
+ // Set the location to the designated hash position
+ //
+ Hash: function () {
+ if (MathJax.Hub.config.positionToHash && document.location.hash)
+ {setTimeout("document.location = document.location.hash",1)}
+ },
+
+ //
+ // Load the Menu and Zoom code, if it hasn't already been loaded.
+ // This is called after the initial typeset, so should no longer be
+ // competing with other page loads, but will make these available
+ // if needed later on.
+ //
+ MenuZoom: function () {
+ if (!MathJax.Extension.MathMenu) {
+ setTimeout(
+ MathJax.Callback(["Require",MathJax.Ajax,"[MathJax]/extensions/MathMenu.js",{}]),
+ 1000
+ );
+ }
+ if (!MathJax.Extension.MathZoom) {
+ setTimeout(
+ MathJax.Callback(["Require",MathJax.Ajax,"[MathJax]/extensions/MathZoom.js",{}]),
+ 2000
+ );
+ }
+ },
+
+ //
+ // Setup the onload callback
+ //
+ onLoad: function (when) {
+ var onload = this.onload =
+ MathJax.Callback(function () {MathJax.Hub.Startup.signal.Post("onLoad")});
+ if (document.body && document.readyState && document.readyState !== "loading") {return [onload]}
+ if (window.addEventListener) {
+ window.addEventListener("load",onload,false);
+ if (!this.params.noDOMContentEvent)
+ {window.addEventListener("DOMContentLoaded",onload,false)}
+ }
+ else if (window.attachEvent) {window.attachEvent("onload",onload)}
+ else {window.onload = onload}
+ return onload;
+ },
+
+ //
+ // Perform the initial typesetting (or skip if configuration says to)
+ //
+ Typeset: function (element,callback) {
+ if (MathJax.Hub.config.skipStartupTypeset) {return function () {}}
+ return this.queue.Push(
+ ["Post",this.signal,"Begin Typeset"],
+ ["Typeset",MathJax.Hub,element,callback],
+ ["Post",this.signal,"End Typeset"]
+ );
+ },
+
+ //
+ // Create a URL in the MathJax hierarchy
+ //
+ URL: function (dir,name) {
+ if (!name.match(/^([a-z]+:\/\/|\[|\/)/)) {name = "[MathJax]/"+dir+"/"+name}
+ return name;
+ },
+
+ //
+ // Load an array of files, waiting for all of them
+ // to be loaded before going on
+ //
+ loadArray: function (files,dir,name,synchronous) {
+ if (files) {
+ if (!(files instanceof Array)) {files = [files]}
+ if (files.length) {
+ var queue = MathJax.Callback.Queue(), callback = {}, file;
+ for (var i = 0, m = files.length; i < m; i++) {
+ file = this.URL(dir,files[i]);
+ if (name) {file += "/" + name}
+ if (synchronous) {queue.Push(["Require",MathJax.Ajax,file,callback])}
+ else {queue.Push(MathJax.Ajax.Require(file,callback))}
+ }
+ return queue.Push({}); // wait for everything to finish
+ }
+ }
+ return null;
+ }
+
+};
+
+
+/**********************************************************/
+
+(function (BASENAME) {
+ var BASE = window[BASENAME], ROOT = "["+BASENAME+"]";
+ var HUB = BASE.Hub, AJAX = BASE.Ajax, CALLBACK = BASE.Callback;
+
+ var JAX = MathJax.Object.Subclass({
+ JAXFILE: "jax.js",
+ require: null, // array of files to load before jax.js is complete
+ config: {},
+ //
+ // Make a subclass and return an instance of it.
+ // (FIXME: should we replace config with a copy of the constructor's
+ // config? Otherwise all subclasses share the same config structure.)
+ //
+ Init: function (def,cdef) {
+ if (arguments.length === 0) {return this}
+ return (this.constructor.Subclass(def,cdef))();
+ },
+ //
+ // Augment by merging with class definition (not replacing)
+ //
+ Augment: function (def,cdef) {
+ var cObject = this.constructor, ndef = {};
+ if (def != null) {
+ for (var id in def) {if (def.hasOwnProperty(id)) {
+ if (typeof def[id] === "function")
+ {cObject.protoFunction(id,def[id])} else {ndef[id] = def[id]}
+ }}
+ // MSIE doesn't list toString even if it is not native so handle it separately
+ if (def.toString !== cObject.prototype.toString && def.toString !== {}.toString)
+ {cObject.protoFunction('toString',def.toString)}
+ }
+ HUB.Insert(cObject.prototype,ndef);
+ cObject.Augment(null,cdef);
+ return this;
+ },
+ Translate: function (script,state) {
+ throw Error(this.directory+"/"+this.JAXFILE+" failed to define the Translate() method");
+ },
+ Register: function (mimetype) {},
+ Config: function () {
+ this.config = HUB.CombineConfig(this.id,this.config);
+ if (this.config.Augment) {this.Augment(this.config.Augment)}
+ },
+ Startup: function () {},
+ loadComplete: function (file) {
+ if (file === "config.js") {
+ return AJAX.loadComplete(this.directory+"/"+file);
+ } else {
+ var queue = CALLBACK.Queue();
+ queue.Push(
+ HUB.Register.StartupHook("End Config",{}), // wait until config complete
+ ["Post",HUB.Startup.signal,this.id+" Jax Config"],
+ ["Config",this],
+ ["Post",HUB.Startup.signal,this.id+" Jax Require"],
+ // Config may set the required and extensions array,
+ // so use functions to delay making the reference until needed
+ [function (THIS) {return MathJax.Hub.Startup.loadArray(THIS.require,this.directory)},this],
+ [function (config,id) {return MathJax.Hub.Startup.loadArray(config.extensions,"extensions/"+id)},this.config||{},this.id],
+ ["Post",HUB.Startup.signal,this.id+" Jax Startup"],
+ ["Startup",this],
+ ["Post",HUB.Startup.signal,this.id+" Jax Ready"]
+ );
+ if (this.copyTranslate) {
+ queue.Push(
+ [function (THIS) {
+ THIS.preProcess = THIS.preTranslate;
+ THIS.Process = THIS.Translate;
+ THIS.postProcess = THIS.postTranslate;
+ },this.constructor.prototype]
+ );
+ }
+ return queue.Push(["loadComplete",AJAX,this.directory+"/"+file]);
+ }
+ }
+ },{
+ id: "Jax",
+ version: "2.0",
+ directory: ROOT+"/jax",
+ extensionDir: ROOT+"/extensions"
+ });
+
+ /***********************************/
+
+ BASE.InputJax = JAX.Subclass({
+ elementJax: "mml", // the element jax to load for this input jax
+ copyTranslate: true,
+ Process: function (script,state) {
+ var queue = CALLBACK.Queue(), file;
+ // Load any needed element jax
+ var jax = this.elementJax; if (!(jax instanceof Array)) {jax = [jax]}
+ for (var i = 0, m = jax.length; i < m; i++) {
+ file = BASE.ElementJax.directory+"/"+jax[i]+"/"+this.JAXFILE;
+ if (!this.require) {this.require = []}
+ else if (!(this.require instanceof Array)) {this.require = [this.require]};
+ this.require.push(file); // so Startup will wait for it to be loaded
+ queue.Push(AJAX.Require(file));
+ }
+ // Load the input jax
+ file = this.directory+"/"+this.JAXFILE;
+ var load = queue.Push(AJAX.Require(file));
+ if (!load.called) {
+ this.constructor.prototype.Process = function () {
+ if (!load.called) {return load}
+ throw Error(file+" failed to load properly");
+ }
+ }
+ // Load the associated output jax
+ jax = HUB.outputJax["jax/"+jax[0]];
+ if (jax) {queue.Push(AJAX.Require(jax[0].directory+"/"+this.JAXFILE))}
+ return queue.Push({});
+ },
+ needsUpdate: function (jax) {
+ var script = jax.SourceElement();
+ return (jax.originalText !== BASE.HTML.getScript(script));
+ },
+ Register: function (mimetype) {
+ if (!HUB.inputJax) {HUB.inputJax = {}}
+ HUB.inputJax[mimetype] = this;
+ }
+ },{
+ id: "InputJax",
+ version: "2.0",
+ directory: JAX.directory+"/input",
+ extensionDir: JAX.extensionDir
+ });
+
+ /***********************************/
+
+ BASE.OutputJax = JAX.Subclass({
+ copyTranslate: true,
+ preProcess: function (state) {
+ var load, file = this.directory+"/"+this.JAXFILE;
+ this.constructor.prototype.preProcess = function (state) {
+ if (!load.called) {return load}
+ throw Error(file+" failed to load properly");
+ }
+ load = AJAX.Require(file);
+ return load;
+ },
+ Register: function (mimetype) {
+ var jax = HUB.outputJax;
+ if (!jax[mimetype]) {jax[mimetype] = []}
+ // If the output jax is earlier in the original configuration list, put it first here
+ if (jax[mimetype].length && (this.id === HUB.config.menuSettings.renderer ||
+ (jax.order[this.id]||0) < (jax.order[jax[mimetype][0].id]||0)))
+ {jax[mimetype].unshift(this)} else {jax[mimetype].push(this)}
+ // Make sure the element jax is loaded before Startup is called
+ if (!this.require) {this.require = []}
+ else if (!(this.require instanceof Array)) {this.require = [this.require]};
+ this.require.push(BASE.ElementJax.directory+"/"+(mimetype.split(/\//)[1])+"/"+this.JAXFILE);
+ },
+ Remove: function (jax) {}
+ },{
+ id: "OutputJax",
+ version: "2.0",
+ directory: JAX.directory+"/output",
+ extensionDir: JAX.extensionDir,
+ fontDir: ROOT+(BASE.isPacked?"":"/..")+"/fonts",
+ imageDir: ROOT+(BASE.isPacked?"":"/..")+"/images"
+ });
+
+ /***********************************/
+
+ BASE.ElementJax = JAX.Subclass({
+ // make a subclass, not an instance
+ Init: function (def,cdef) {return this.constructor.Subclass(def,cdef)},
+
+ inputJax: null,
+ outputJax: null,
+ inputID: null,
+ originalText: "",
+ mimeType: "",
+
+ Text: function (text,callback) {
+ var script = this.SourceElement();
+ BASE.HTML.setScript(script,text);
+ script.MathJax.state = this.STATE.UPDATE;
+ return HUB.Update(script,callback);
+ },
+ Reprocess: function (callback) {
+ var script = this.SourceElement();
+ script.MathJax.state = this.STATE.UPDATE;
+ return HUB.Reprocess(script,callback);
+ },
+ Update: function (callback) {return this.Rerender(callback)},
+ Rerender: function (callback) {
+ var script = this.SourceElement();
+ script.MathJax.state = this.STATE.OUTPUT;
+ return HUB.Process(script,callback);
+ },
+ Remove: function (keep) {
+ if (this.hover) {this.hover.clear(this)}
+ BASE.OutputJax[this.outputJax].Remove(this);
+ if (!keep) {
+ HUB.signal.Post(["Remove Math",this.inputID]); // wait for this to finish?
+ this.Detach();
+ }
+ },
+ needsUpdate: function () {
+ return BASE.InputJax[this.inputJax].needsUpdate(this);
+ },
+
+ SourceElement: function () {return document.getElementById(this.inputID)},
+
+ Attach: function (script,inputJax) {
+ var jax = script.MathJax.elementJax;
+ if (script.MathJax.state === this.STATE.UPDATE) {
+ jax.Clone(this);
+ } else {
+ jax = script.MathJax.elementJax = this;
+ if (script.id) {this.inputID = script.id}
+ else {script.id = this.inputID = BASE.ElementJax.GetID(); this.newID = 1}
+ }
+ jax.originalText = BASE.HTML.getScript(script);
+ jax.inputJax = inputJax;
+ if (jax.root) {jax.root.inputID = jax.inputID}
+ return jax;
+ },
+ Detach: function () {
+ var script = this.SourceElement(); if (!script) return;
+ try {delete script.MathJax} catch(err) {script.MathJax = null}
+ if (this.newID) {script.id = ""}
+ },
+ Clone: function (jax) {
+ var id;
+ for (id in this) {
+ if (!this.hasOwnProperty(id)) continue;
+ if (typeof(jax[id]) === 'undefined' && id !== 'newID') {delete this[id]}
+ }
+ for (id in jax) {
+ if (!jax.hasOwnProperty(id)) continue;
+ if (typeof(this[id]) === 'undefined' || (this[id] !== jax[id] && id !== 'inputID'))
+ {this[id] = jax[id]}
+ }
+ }
+ },{
+ id: "ElementJax",
+ version: "2.0",
+ directory: JAX.directory+"/element",
+ extensionDir: JAX.extensionDir,
+ ID: 0, // jax counter (for IDs)
+ STATE: {
+ PENDING: 1, // script is identified as math but not yet processed
+ PROCESSED: 2, // script has been processed
+ UPDATE: 3, // elementJax should be updated
+ OUTPUT: 4 // output should be updated (input is OK)
+ },
+
+ GetID: function () {this.ID++; return "MathJax-Element-"+this.ID},
+ Subclass: function () {
+ var obj = JAX.Subclass.apply(this,arguments);
+ obj.loadComplete = this.prototype.loadComplete;
+ return obj;
+ }
+ });
+ BASE.ElementJax.prototype.STATE = BASE.ElementJax.STATE;
+
+ //
+ // Some "Fake" jax used to allow menu access for "Math Processing Error" messages
+ //
+ BASE.OutputJax.Error = {
+ id: "Error", version: "2.0", config: {},
+ ContextMenu: function () {return BASE.Extension.MathEvents.Event.ContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)},
+ Mousedown: function () {return BASE.Extension.MathEvents.Event.AltContextMenu.apply(BASE.Extension.MathEvents.Event,arguments)},
+ getJaxFromMath: function () {return {inputJax:"Error", outputJax:"Error", originalText:"Math Processing Error"}}
+ };
+ BASE.InputJax.Error = {
+ id: "Error", version: "2.0", config: {},
+ sourceMenuTitle: "Error Message"
+ };
+
+})("MathJax");
+
+/**********************************************************/
+
+(function (BASENAME) {
+ var BASE = window[BASENAME];
+ if (!BASE) {BASE = window[BASENAME] = {}}
+
+ var HUB = BASE.Hub; var STARTUP = HUB.Startup; var CONFIG = HUB.config;
+ var HEAD = document.getElementsByTagName("head")[0];
+ if (!HEAD) {HEAD = document.childNodes[0]};
+ var scripts = (document.documentElement || document).getElementsByTagName("script");
+ var namePattern = new RegExp("(^|/)"+BASENAME+"\\.js(\\?.*)?$");
+ for (var i = scripts.length-1; i >= 0; i--) {
+ if (scripts[i].src.match(namePattern)) {
+ STARTUP.script = scripts[i].innerHTML;
+ if (RegExp.$2) {
+ var params = RegExp.$2.substr(1).split(/\&/);
+ for (var j = 0, m = params.length; j < m; j++) {
+ var KV = params[j].match(/(.*)=(.*)/);
+ if (KV) {STARTUP.params[unescape(KV[1])] = unescape(KV[2])}
+ }
+ }
+ CONFIG.root = scripts[i].src.replace(/(^|\/)[^\/]*(\?.*)?$/,'');
+ break;
+ }
+ }
+ BASE.Ajax.config = CONFIG;
+
+ var BROWSERS = {
+ isMac: (navigator.platform.substr(0,3) === "Mac"),
+ isPC: (navigator.platform.substr(0,3) === "Win"),
+ isMSIE: (window.ActiveXObject != null && window.clipboardData != null),
+ isFirefox: (window.netscape != null && document.ATTRIBUTE_NODE != null && !window.opera),
+ isSafari: (navigator.userAgent.match(/ (Apple)?WebKit\//) != null &&
+ (!window.chrome || window.chrome.loadTimes == null)),
+ isChrome: (window.chrome != null && window.chrome.loadTimes != null),
+ isOpera: (window.opera != null && window.opera.version != null),
+ isKonqueror: (window.hasOwnProperty && window.hasOwnProperty("konqueror") && navigator.vendor == "KDE"),
+ versionAtLeast: function (v) {
+ var bv = (this.version).split('.'); v = (new String(v)).split('.');
+ for (var i = 0, m = v.length; i < m; i++)
+ {if (bv[i] != v[i]) {return parseInt(bv[i]||"0") >= parseInt(v[i])}}
+ return true;
+ },
+ Select: function (choices) {
+ var browser = choices[HUB.Browser];
+ if (browser) {return browser(HUB.Browser)}
+ return null;
+ }
+ };
+
+ var AGENT = navigator.userAgent
+ .replace(/^Mozilla\/(\d+\.)+\d+ /,"") // remove initial Mozilla, which is never right
+ .replace(/[a-z][-a-z0-9._: ]+\/\d+[^ ]*-[^ ]*\.([a-z][a-z])?\d+ /i,"") // remove linux version
+ .replace(/Gentoo |Ubuntu\/(\d+\.)*\d+ (\([^)]*\) )?/,""); // special case for these
+
+ HUB.Browser = HUB.Insert(HUB.Insert(new String("Unknown"),{version: "0.0"}),BROWSERS);
+ for (var browser in BROWSERS) {if (BROWSERS.hasOwnProperty(browser)) {
+ if (BROWSERS[browser] && browser.substr(0,2) === "is") {
+ browser = browser.slice(2);
+ if (browser === "Mac" || browser === "PC") continue;
+ HUB.Browser = HUB.Insert(new String(browser),BROWSERS);
+ var VERSION = new RegExp(
+ ".*(Version)/((?:\\d+\\.)+\\d+)|" + // for Safari and Opera10
+ ".*("+browser+")"+(browser == "MSIE" ? " " : "/")+"((?:\\d+\\.)*\\d+)|"+ // for one of the main browser
+ "(?:^|\\(| )([a-z][-a-z0-9._: ]+|(?:Apple)?WebKit)/((?:\\d+\\.)+\\d+)"); // for unrecognized browser
+ var MATCH = VERSION.exec(AGENT) || ["","","","unknown","0.0"];
+ HUB.Browser.name = (MATCH[1] == "Version" ? browser : (MATCH[3] || MATCH[5]));
+ HUB.Browser.version = MATCH[2] || MATCH[4] || MATCH[6];
+ break;
+ }
+ }};
+
+ //
+ // Initial browser-specific info (e.g., touch up version or name)
+ //
+ HUB.Browser.Select({
+ Safari: function (browser) {
+ var v = parseInt((String(browser.version).split("."))[0]);
+ if (v > 85) {browser.webkit = browser.version}
+ if (v >= 534) {browser.version = "5.1"}
+ else if (v >= 533) {browser.version = "5.0"}
+ else if (v >= 526) {browser.version = "4.0"}
+ else if (v >= 525) {browser.version = "3.1"}
+ else if (v > 500) {browser.version = "3.0"}
+ else if (v > 400) {browser.version = "2.0"}
+ else if (v > 85) {browser.version = "1.0"}
+ browser.isMobile = (navigator.appVersion.match(/Mobile/i) != null);
+ browser.noContextMenu = browser.isMobile;
+ },
+ Firefox: function (browser) {
+ if ((browser.version === "0.0" || navigator.userAgent.match(/Firefox/) == null) &&
+ navigator.product === "Gecko") {
+ var rv = navigator.userAgent.match(/[\/ ]rv:(\d+\.\d.*?)[\) ]/);
+ if (rv) {browser.version = rv[1]}
+ else {
+ var date = (navigator.buildID||navigator.productSub||"0").substr(0,8);
+ if (date >= "20111220") {browser.version = "9.0"}
+ else if (date >= "20111120") {browser.version = "8.0"}
+ else if (date >= "20110927") {browser.version = "7.0"}
+ else if (date >= "20110816") {browser.version = "6.0"}
+ else if (date >= "20110621") {browser.version = "5.0"}
+ else if (date >= "20110320") {browser.version = "4.0"}
+ else if (date >= "20100121") {browser.version = "3.6"}
+ else if (date >= "20090630") {browser.version = "3.5"}
+ else if (date >= "20080617") {browser.version = "3.0"}
+ else if (date >= "20061024") {browser.version = "2.0"}
+ }
+ }
+ browser.isMobile = (navigator.appVersion.match(/Android/i) != null ||
+ navigator.userAgent.match(/ Fennec\//) != null);
+ },
+ Opera: function (browser) {browser.version = opera.version()},
+ MSIE: function (browser) {
+ browser.isIE9 = !!(document.documentMode && (window.performance || window.msPerformance));
+ MathJax.HTML.setScriptBug = !browser.isIE9 || document.documentMode < 9;
+ var MathPlayer = false;
+ try {new ActiveXObject("MathPlayer.Factory.1"); MathPlayer = true} catch(err) {}
+ if (MathPlayer && !STARTUP.params.NoMathPlayer) {
+ var mathplayer = document.createElement("object");
+ mathplayer.id = "mathplayer"; mathplayer.classid = "clsid:32F66A20-7614-11D4-BD11-00104BD3F987";
+ document.getElementsByTagName("head")[0].appendChild(mathplayer);
+ document.namespaces.add("m","http://www.w3.org/1998/Math/MathML");
+ browser.hasMathPlayer = true;
+ if (document.readyState && (document.readyState === "loading" ||
+ document.readyState === "interactive")) {
+ document.write('');
+ browser.mpImported = true;
+ }
+ }
+ }
+ });
+ HUB.Browser.Select(MathJax.Message.browsers);
+
+ HUB.queue = BASE.Callback.Queue();
+ HUB.queue.Push(
+ ["Post",STARTUP.signal,"Begin"],
+ ["Config",STARTUP],
+ ["Cookie",STARTUP],
+ ["Styles",STARTUP],
+ ["Message",STARTUP],
+ function () {
+ // Do Jax and Extensions in parallel, but wait for them all to complete
+ var queue = BASE.Callback.Queue(
+ STARTUP.Jax(),
+ STARTUP.Extensions()
+ );
+ return queue.Push({});
+ },
+ ["Menu",STARTUP],
+ STARTUP.onLoad(),
+ function () {MathJax.isReady = true}, // indicates that MathJax is ready to process math
+ ["Typeset",STARTUP],
+ ["Hash",STARTUP],
+ ["MenuZoom",STARTUP],
+ ["Post",STARTUP.signal,"End"]
+ );
+
+})("MathJax");
+
+}}
+
+/**********************************************************/
diff --git a/resources/viewer/mathjax/extensions/FontWarnings.js b/resources/viewer/mathjax/extensions/FontWarnings.js
new file mode 100644
index 0000000000..02e1a5814b
--- /dev/null
+++ b/resources/viewer/mathjax/extensions/FontWarnings.js
@@ -0,0 +1,286 @@
+/*************************************************************
+ *
+ * MathJax/extensions/FontWarnings.js
+ *
+ * Implements a font warning message window that appears when
+ * the image fonts, no fonts, or web fonts are used, informing
+ * the user where to download the fonts, or to update to a more
+ * modern browser. The window will fade out automatically after
+ * a time, and the user can dismiss it by a close box.
+ *
+ * To include font warning messages, add "FontWarnings.js" to the
+ * extensions array in your MathJax configuration.
+ *
+ * You can customize the warning messages in a number of ways. Use the
+ * FontWarnings section of the configuration to specify any of the items
+ * shown in the CONFIG variable below. These include
+ *
+ * messageStyle the style to apply to the warning box that is
+ * displayed when MathJax uses one of its fallback
+ * methods.
+ *
+ * removeAfter the amount of time to show the warning message (in ms)
+ * fadeoutTime how long the message should take to fade out
+ * fadeoutSteps how many separate steps to use during the fade out
+ * (set to 0 to use no fadeout and simply remove the window)
+ *
+ * Messages stores the descriptions of the messages to use for the
+ * various warnings (webFonts, imageFonts, and noFonts).
+ * These are arrays of strings to be inserted into the window,
+ * or identifiers within brackets, which refer to the HTML
+ * snippets in the HTML section described below. To disable a
+ * specific message, set its value to null (see example below).
+ *
+ * HTML stores snippets of HTML descriptions for various
+ * common parts of the error messages. These include
+ * the closeBox, the message about web fonts being available
+ * in modern browser, and messages about downloadable fonts.
+ * The STIX and TeX font messages are used when only one
+ * of these is in the availableFonts list. The data for these
+ * are arrays of either strings to include or a description of
+ * an HTML item enclosed in square brackets. That description
+ * has (up to) three parts: the name of the tag to be included,
+ * a list (enclosed in braces) of attributes and their values
+ * to be set on the tag (optional), and an array of the contents
+ * of the tag (optional). See the definitions below for examples.
+ *
+ * For example,
+ *
+ * MathJax.Hub.Config({
+ * ...
+ * extensions: ["FontWarnings.js"],
+ * FontWarnings: {
+ * removeAfter: 20*1000, // 20 seconds
+ * messageStyle: {
+ * border: "2px solid black",
+ * padding: "2em"
+ * },
+ * Message: {
+ * webFont: null // no webfont messages (only image and no fonts)
+ * }
+ * }
+ * });
+ *
+ * would extend the time the message is displayed from 12 seconds to 20,
+ * and changes the border to a solid black one, with 2em of padding
+ * rather than the default of 1em.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2010-2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (HUB,HTML) {
+ var VERSION = "2.0";
+
+ var CONFIG = HUB.CombineConfig("FontWarnings",{
+ //
+ // The CSS for the message window
+ //
+ messageStyle: {
+ position:"fixed", bottom:"4em", left:"3em", width:"40em",
+ border: "3px solid #880000", "background-color": "#E0E0E0", color: "black",
+ padding: "1em", "font-size":"small", "white-space":"normal",
+
+ "border-radius": ".75em", // Opera 10.5 and IE9
+ "-webkit-border-radius": ".75em", // Safari and Chrome
+ "-moz-border-radius": ".75em", // Firefox
+ "-khtml-border-radius": ".75em", // Konqueror
+
+ "box-shadow": "4px 4px 10px #AAAAAA", // Opera 10.5 and IE9
+ "-webkit-box-shadow": "4px 4px 10px #AAAAAA", // Safari 3 and Chrome
+ "-moz-box-shadow": "4px 4px 10px #AAAAAA", // Forefox 3.5
+ "-khtml-box-shadow": "4px 4px 10px #AAAAAA", // Konqueror
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=3, OffY=3, Color='gray', Positive='true')" // IE
+ },
+
+ //
+ // The messages for the various situations
+ //
+ Message: {
+ webFont: [
+ ["closeBox"],
+ "MathJax is using web-based fonts to display the mathematics ",
+ "on this page. These take time to download, so the page would ",
+ "render faster if you installed math fonts directly in your ",
+ "system's font folder.",
+ ["fonts"]
+ ],
+
+ imageFonts: [
+ ["closeBox"],
+ "MathJax is using its image fonts rather than local or web-based fonts. ",
+ "This will render slower than usual, and the mathematics may not print ",
+ "at the full resolution of your printer.",
+ ["fonts"],
+ ["webfonts"]
+ ],
+
+ noFonts: [
+ ["closeBox"],
+ "MathJax is unable to locate a font to use to display ",
+ "its mathematics, and image fonts are not available, so it ",
+ "is falling back on generic unicode characters in hopes that ",
+ "your browser will be able to display them. Some characters ",
+ "may not show up properly, or possibly not at all.",
+ ["fonts"],
+ ["webfonts"]
+ ]
+ },
+
+ //
+ // HTML objects that can be referred to in the message definitions
+ //
+ HTML: {
+ //
+ // The definition of the close box
+ //
+ closeBox: [[
+ "div",{
+ style: {
+ position:"absolute", overflow:"hidden", top:".1em", right:".1em",
+ border: "1px outset", width:"1em", height:"1em",
+ "text-align": "center", cursor: "pointer",
+ "background-color": "#EEEEEE", color:"#606060",
+
+ "border-radius": ".5em", // Opera 10.5
+ "-webkit-border-radius": ".5em", // Safari and Chrome
+ "-moz-border-radius": ".5em", // Firefox
+ "-khtml-border-radius": ".5em" // Konqueror
+ },
+ onclick: function () {
+ if (DATA.div && DATA.fade === 0)
+ {if (DATA.timer) {clearTimeout(DATA.timer)}; DATA.div.style.display = "none"}
+ }
+ },
+ [["span",{style:{position:"relative", bottom:".2em"}},["x"]]]
+ ]],
+
+ webfonts: [
+ ["p"],
+ "Most modern browsers allow for fonts to be downloaded over the web. ",
+ "Updating to a more recent version of your browser (or changing browsers) ",
+ "could improve the quality of the mathematics on this page."
+ ],
+
+ fonts: [
+ ["p"],
+ "MathJax can use either the ",
+ ["a",{href:"http://www.stixfonts.org/",target:"_blank"},"STIX fonts"],
+ " or the ",
+ ["a",{href:"http://www.mathjax.org/help-v2/fonts/",target:"_blank"},["MathJax TeX fonts"]],
+ ". Download and install either one to improve your MathJax experience."
+ ],
+
+ STIXfonts: [
+ ["p"],
+ "This page is designed to use the ",
+ ["a",{href:"http://www.stixfonts.org/",target:"_blank"},"STIX fonts"],
+ ". Download and install those fonts to improve your MathJax experience."
+ ],
+
+ TeXfonts: [
+ ["p"],
+ "This page is designed to use the ",
+ ["a",{href:"http://www.mathjax.org/help-v2/fonts/",target:"_blank"},["MathJax TeX fonts"]],
+ ". Download and install those fonts to improve your MathJax experience."
+ ]
+
+ },
+
+ removeAfter: 12*1000, // time to show message (in ms)
+ fadeoutSteps: 10, // fade-out steps
+ fadeoutTime: 1.5*1000 // fadeout over this amount of time (in ms)
+
+ });
+ if (MathJax.Hub.Browser.isIE9 && document.documentMode >= 9)
+ {delete CONFIG.messageStyle.filter}
+
+ //
+ // Data for the window
+ //
+ var DATA = {
+ div: null, // the message window, when displayed
+ fade: 0 // number of fade-out steps so far
+ };
+
+ //
+ // Create the message window and start the fade-out timer
+ //
+ var CREATEMESSAGE = function (data) {
+ if (DATA.div) return;
+ var HTMLCSS = MathJax.OutputJax["HTML-CSS"], frame = document.body;
+ if (HUB.Browser.isMSIE) {
+ if (CONFIG.messageStyle.position === "fixed") {
+ MathJax.Message.Init(); // make sure MathJax_MSIE_frame exists
+ frame = document.getElementById("MathJax_MSIE_Frame");
+ CONFIG.messageStyle.position = "absolute";
+ }
+ } else {delete CONFIG.messageStyle.filter}
+ CONFIG.messageStyle.maxWidth = (document.body.clientWidth-75) + "px";
+ var i = 0; while (i < data.length) {
+ if (data[i] instanceof Array && CONFIG.HTML[data[i][0]])
+ {data.splice.apply(data,[i,1].concat(CONFIG.HTML[data[i][0]]))} else {i++}
+ }
+ DATA.div = HTMLCSS.addElement(frame,"div",{id:"MathJax_FontWarning",style:CONFIG.messageStyle},data);
+ if (CONFIG.removeAfter) {
+ HUB.Register.StartupHook("End",function ()
+ {DATA.timer = setTimeout(FADEOUT,CONFIG.removeAfter)});
+ }
+ HTML.Cookie.Set("fontWarn",{warned:true});
+ };
+
+ //
+ // Set the opacity based on the number of steps taken so far
+ // and remove the window when it gets to 0
+ //
+ var FADEOUT = function () {
+ DATA.fade++; if (DATA.timer) {delete DATA.timer}
+ if (DATA.fade < CONFIG.fadeoutSteps) {
+ var opacity = 1 - DATA.fade/CONFIG.fadeoutSteps;
+ DATA.div.style.opacity = opacity;
+ DATA.div.style.filter = "alpha(opacity="+Math.floor(100*opacity)+")";
+ setTimeout(FADEOUT,CONFIG.fadeoutTime/CONFIG.fadeoutSteps);
+ } else {
+ DATA.div.style.display = "none";
+ }
+ };
+
+ //
+ // Check that we haven't already issued a warning
+ //
+ if (!HTML.Cookie.Get("fontWarn").warned) {
+ //
+ // Hook into the Startup signal and look for font warning messages.
+ // When one comes, issue the correct message.
+ //
+ HUB.Startup.signal.Interest(function (message) {
+ if (message.match(/HTML-CSS Jax - /) && !DATA.div) {
+ var HTMLCSS = MathJax.OutputJax["HTML-CSS"], FONTS = HTMLCSS.config.availableFonts, MSG;
+ var localFonts = (FONTS && FONTS.length);
+ if (!localFonts) {CONFIG.HTML.fonts = [""]}
+ else if (FONTS.length === 1) {CONFIG.HTML.fonts = CONFIG.HTML[FONTS[0]+"fonts"]}
+ if (HTMLCSS.allowWebFonts) {CONFIG.HTML.webfonts = [""]}
+ if (message.match(/- Web-Font/)) {if (localFonts) {MSG = "webFont"}}
+ else if (message.match(/- using image fonts/)) {MSG = "imageFonts"}
+ else if (message.match(/- no valid font/)) {MSG = "noFonts"}
+ if (MSG && CONFIG.Message[MSG]) {CREATEMESSAGE(CONFIG.Message[MSG])}
+ }
+ });
+ }
+
+})(MathJax.Hub,MathJax.HTML);
+
+MathJax.Ajax.loadComplete("[MathJax]/extensions/FontWarnings.js");
diff --git a/resources/viewer/mathjax/extensions/MathEvents.js b/resources/viewer/mathjax/extensions/MathEvents.js
new file mode 100644
index 0000000000..fd17e4c070
--- /dev/null
+++ b/resources/viewer/mathjax/extensions/MathEvents.js
@@ -0,0 +1,531 @@
+/*************************************************************
+ *
+ * MathJax/extensions/MathEvents.js
+ *
+ * Implements the event handlers needed by the output jax to perform
+ * menu, hover, and other events.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2011-2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (HUB,HTML,AJAX,CALLBACK,OUTPUT,INPUT) {
+ var VERSION = "2.0";
+
+ var EXTENSION = MathJax.Extension;
+ var ME = EXTENSION.MathEvents = {version: VERSION};
+
+ var SETTINGS = HUB.config.menuSettings;
+
+ var CONFIG = {
+ hover: 500, // time required to be considered a hover
+ frame: {
+ x: 3.5, y: 5, // frame padding and
+ bwidth: 1, // frame border width (in pixels)
+ bcolor: "#A6D", // frame border color
+ hwidth: "15px", // haze width
+ hcolor: "#83A" // haze color
+ },
+ button: {
+ x: -4, y: -3, // menu button offsets
+ wx: -2, // button offset for full-width equations
+ src: AJAX.fileURL(OUTPUT.imageDir+"/MenuArrow-15.png") // button image
+ },
+ fadeinInc: .2, // increment for fade-in
+ fadeoutInc: .05, // increment for fade-out
+ fadeDelay: 50, // delay between fade-in or fade-out steps
+ fadeoutStart: 400, // delay before fade-out after mouseout
+ fadeoutDelay: 15*1000, // delay before automatic fade-out
+
+ styles: {
+ ".MathJax_Hover_Frame": {
+ "border-radius": ".25em", // Opera 10.5 and IE9
+ "-webkit-border-radius": ".25em", // Safari and Chrome
+ "-moz-border-radius": ".25em", // Firefox
+ "-khtml-border-radius": ".25em", // Konqueror
+
+ "box-shadow": "0px 0px 15px #83A", // Opera 10.5 and IE9
+ "-webkit-box-shadow": "0px 0px 15px #83A", // Safari and Chrome
+ "-moz-box-shadow": "0px 0px 15px #83A", // Forefox
+ "-khtml-box-shadow": "0px 0px 15px #83A", // Konqueror
+
+ border: "1px solid #A6D ! important",
+ display: "inline-block", position:"absolute"
+ },
+
+ ".MathJax_Hover_Arrow": {
+ position:"absolute",
+ width:"15px", height:"11px",
+ cursor:"pointer"
+ }
+ }
+ };
+
+
+ //
+ // Common event-handling code
+ //
+ var EVENT = ME.Event = {
+
+ LEFTBUTTON: 0, // the event.button value for left button
+ RIGHTBUTTON: 2, // the event.button value for right button
+ MENUKEY: "altKey", // the event value for alternate context menu
+
+ Mousedown: function (event) {return EVENT.Handler(event,"Mousedown",this)},
+ Mouseup: function (event) {return EVENT.Handler(event,"Mouseup",this)},
+ Mousemove: function (event) {return EVENT.Handler(event,"Mousemove",this)},
+ Mouseover: function (event) {return EVENT.Handler(event,"Mouseover",this)},
+ Mouseout: function (event) {return EVENT.Handler(event,"Mouseout",this)},
+ Click: function (event) {return EVENT.Handler(event,"Click",this)},
+ DblClick: function (event) {return EVENT.Handler(event,"DblClick",this)},
+ Menu: function (event) {return EVENT.Handler(event,"ContextMenu",this)},
+
+ //
+ // Call the output jax's event handler or the zoom handler
+ //
+ Handler: function (event,type,math) {
+ if (AJAX.loadingMathMenu) {return EVENT.False(event)}
+ var jax = OUTPUT[math.jaxID];
+ if (!event) {event = window.event}
+ event.isContextMenu = (type === "ContextMenu");
+ if (jax[type]) {return jax[type](event,math)}
+ if (EXTENSION.MathZoom) {return EXTENSION.MathZoom.HandleEvent(event,type,math)}
+ },
+
+ //
+ // Try to cancel the event in every way we can
+ //
+ False: function (event) {
+ if (!event) {event = window.event}
+ if (event) {
+ if (event.preventDefault) {event.preventDefault()}
+ if (event.stopPropagation) {event.stopPropagation()}
+ event.cancelBubble = true;
+ event.returnValue = false;
+ }
+ return false;
+ },
+
+ //
+ // Load the contextual menu code, if needed, and post the menu
+ //
+ ContextMenu: function (event,math,force) {
+ //
+ // Check if we are showing menus
+ //
+ var JAX = OUTPUT[math.jaxID], jax = JAX.getJaxFromMath(math);
+ var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
+ if (!show || (SETTINGS.context !== "MathJax" && !force)) return;
+
+ //
+ // Remove selections, remove hover fades
+ //
+ if (ME.msieEventBug) {event = window.event || event}
+ EVENT.ClearSelection(); HOVER.ClearHoverTimer();
+ if (jax.hover) {
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove); delete jax.hover.remove}
+ jax.hover.nofade = true;
+ }
+
+ //
+ // If the menu code is loaded, post the menu
+ // Otherwse lad the menu code and try again
+ //
+ var MENU = MathJax.Menu;
+ if (MENU) {
+ MENU.jax = jax;
+ var source = MENU.menu.Find("Show Math As").menu;
+ source.items[1].name = (INPUT[jax.inputJax].sourceMenuTitle||"Original Form");
+ source.items[0].hidden = (jax.inputJax === "Error"); // hide MathML choice for error messages
+ var MathPlayer = MENU.menu.Find("Math Settings","MathPlayer");
+ MathPlayer.hidden = !(jax.outputJax === "NativeMML" && HUB.Browser.hasMathPlayer);
+ return MENU.menu.Post(event);
+ } else {
+ if (!AJAX.loadingMathMenu) {
+ AJAX.loadingMathMenu = true;
+ var ev = {
+ pageX:event.pageX, pageY:event.pageY,
+ clientX:event.clientX, clientY:event.clientY
+ };
+ CALLBACK.Queue(
+ AJAX.Require("[MathJax]/extensions/MathMenu.js"),
+ function () {delete AJAX.loadingMathMenu; if (!MathJax.Menu) {MathJax.Menu = {}}},
+ ["ContextMenu",this,ev,math,force] // call this function again
+ );
+ }
+ return EVENT.False(event);
+ }
+ },
+
+ //
+ // Mousedown handler for alternate means of accessing menu
+ //
+ AltContextMenu: function (event,math) {
+ var JAX = OUTPUT[math.jaxID];
+ var show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
+ if (show) {
+ show = (JAX.config.showMathMenuMSIE != null ? JAX : HUB).config.showMathMenuMSIE;
+ if (SETTINGS.context === "MathJax" && !SETTINGS.mpContext && show) {
+ if (!ME.noContextMenuBug || event.button !== EVENT.RIGHTBUTTON) return;
+ } else {
+ if (!event[EVENT.MENUKEY] || event.button !== EVENT.LEFTBUTTON) return;
+ }
+ return JAX.ContextMenu(event,math,true);
+ }
+ },
+
+ ClearSelection: function () {
+ if (ME.safariContextMenuBug) {setTimeout("window.getSelection().empty()",0)}
+ if (document.selection) {setTimeout("document.selection.empty()",0)}
+ },
+
+ getBBox: function (span) {
+ span.appendChild(ME.topImg);
+ var h = ME.topImg.offsetTop, d = span.offsetHeight-h, w = span.offsetWidth;
+ span.removeChild(ME.topImg);
+ return {w:w, h:h, d:d};
+ }
+
+ };
+
+ //
+ // Handle hover "discoverability"
+ //
+ var HOVER = ME.Hover = {
+
+ //
+ // Check if we are moving from a non-MathJax element to a MathJax one
+ // and either start fading in again (if it is fading out) or start the
+ // timer for the hover
+ //
+ Mouseover: function (event,math) {
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
+ var from = event.fromElement || event.relatedTarget,
+ to = event.toElement || event.target;
+ if (from && to && (from.isMathJax != to.isMathJax ||
+ HUB.getJaxFor(from) !== HUB.getJaxFor(to))) {
+ var jax = this.getJaxFromMath(math);
+ if (jax.hover) {HOVER.ReHover(jax)} else {HOVER.HoverTimer(jax,math)}
+ return EVENT.False(event);
+ }
+ }
+ },
+ //
+ // Check if we are moving from a MathJax element to a non-MathJax one
+ // and either start fading out, or clear the timer if we haven't
+ // hovered yet
+ //
+ Mouseout: function (event,math) {
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
+ var from = event.fromElement || event.relatedTarget,
+ to = event.toElement || event.target;
+ if (from && to && (from.isMathJax != to.isMathJax ||
+ HUB.getJaxFor(from) !== HUB.getJaxFor(to))) {
+ var jax = this.getJaxFromMath(math);
+ if (jax.hover) {HOVER.UnHover(jax)} else {HOVER.ClearHoverTimer()}
+ return EVENT.False(event);
+ }
+ }
+ },
+ //
+ // Restart hover timer if the mouse moves
+ //
+ Mousemove: function (event,math) {
+ if (SETTINGS.discoverable || SETTINGS.zoom === "Hover") {
+ var jax = this.getJaxFromMath(math); if (jax.hover) return;
+ if (HOVER.lastX == event.clientX && HOVER.lastY == event.clientY) return;
+ HOVER.lastX = event.clientX; HOVER.lastY = event.clientY;
+ HOVER.HoverTimer(jax,math);
+ return EVENT.False(event);
+ }
+ },
+
+ //
+ // Clear the old timer and start a new one
+ //
+ HoverTimer: function (jax,math) {
+ this.ClearHoverTimer();
+ this.hoverTimer = setTimeout(CALLBACK(["Hover",this,jax,math]),CONFIG.hover);
+ },
+ ClearHoverTimer: function () {
+ if (this.hoverTimer) {clearTimeout(this.hoverTimer); delete this.hoverTimer}
+ },
+
+ //
+ // Handle putting up the hover frame
+ //
+ Hover: function (jax,math) {
+ //
+ // Check if Zoom handles the hover event
+ //
+ if (EXTENSION.MathZoom && EXTENSION.MathZoom.Hover({},math)) return;
+ //
+ // Get the hover data
+ //
+ var JAX = OUTPUT[jax.outputJax],
+ span = JAX.getHoverSpan(jax,math),
+ bbox = JAX.getHoverBBox(jax,span,math),
+ show = (JAX.config.showMathMenu != null ? JAX : HUB).config.showMathMenu;
+ var dx = CONFIG.frame.x, dy = CONFIG.frame.y, dd = CONFIG.frame.bwidth; // frame size
+ if (ME.msieBorderWidthBug) {dd = 0}
+ jax.hover = {opacity:0, id:jax.inputID+"-Hover"};
+ //
+ // The frame and menu button
+ //
+ var frame = HTML.Element("span",{
+ id:jax.hover.id, isMathJax: true,
+ style:{display:"inline-block", width:0, height:0, position:"relative"}
+ },[["span",{
+ className:"MathJax_Hover_Frame", isMathJax: true,
+ style:{
+ display:"inline-block", position:"absolute",
+ top:this.Px(-bbox.h-dy-dd-(bbox.y||0)), left:this.Px(-dx-dd+(bbox.x||0)),
+ width:this.Px(bbox.w+2*dx), height:this.Px(bbox.h+bbox.d+2*dy),
+ opacity:0, filter:"alpha(opacity=0)"
+ }}
+ ]]
+ );
+ var button = HTML.Element("span",{
+ isMathJax: true, id:jax.hover.id+"Menu",
+ style:{display:"inline-block", "z-index": 1, width:0, height:0, position:"relative"}
+ },[["img",{
+ className: "MathJax_Hover_Arrow", isMathJax: true, math: math,
+ src: CONFIG.button.src, onclick: this.HoverMenu, jax:JAX.id,
+ style: {
+ left:this.Px(bbox.w+dx+dd+(bbox.x||0)+CONFIG.button.x),
+ top:this.Px(-bbox.h-dy-dd-(bbox.y||0)-CONFIG.button.y),
+ opacity:0, filter:"alpha(opacity=0)"
+ }
+ }]]
+ );
+ if (bbox.width) {
+ frame.style.width = button.style.width = bbox.width;
+ frame.style.marginRight = button.style.marginRight = "-"+bbox.width;
+ frame.firstChild.style.width = bbox.width;
+ button.firstChild.style.left = "";
+ button.firstChild.style.right = this.Px(CONFIG.button.wx);
+ }
+ //
+ // Add the frame and button
+ //
+ span.parentNode.insertBefore(frame,span);
+ if (show) {span.parentNode.insertBefore(button,span)}
+ if (span.style) {span.style.position = "relative"} // so math is on top of hover frame
+ //
+ // Start the hover fade-in
+ //
+ this.ReHover(jax);
+ },
+ //
+ // Restart the hover fade in and fade-out timers
+ //
+ ReHover: function (jax) {
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
+ jax.hover.remove = setTimeout(CALLBACK(["UnHover",this,jax]),CONFIG.fadeoutDelay);
+ this.HoverFadeTimer(jax,CONFIG.fadeinInc);
+ },
+ //
+ // Start the fade-out
+ //
+ UnHover: function (jax) {
+ if (!jax.hover.nofade) {this.HoverFadeTimer(jax,-CONFIG.fadeoutInc,CONFIG.fadeoutStart)}
+ },
+ //
+ // Handle the fade-in and fade-out
+ //
+ HoverFade: function (jax) {
+ delete jax.hover.timer;
+ jax.hover.opacity = Math.max(0,Math.min(1,jax.hover.opacity + jax.hover.inc));
+ jax.hover.opacity = Math.floor(1000*jax.hover.opacity)/1000;
+ var frame = document.getElementById(jax.hover.id),
+ button = document.getElementById(jax.hover.id+"Menu");
+ frame.firstChild.style.opacity = jax.hover.opacity;
+ frame.firstChild.style.filter = "alpha(opacity="+Math.floor(100*jax.hover.opacity)+")";
+ if (button) {
+ button.firstChild.style.opacity = jax.hover.opacity;
+ button.firstChild.style.filter = frame.style.filter;
+ }
+ if (jax.hover.opacity === 1) {return}
+ if (jax.hover.opacity > 0) {this.HoverFadeTimer(jax,jax.hover.inc); return}
+ frame.parentNode.removeChild(frame);
+ if (button) {button.parentNode.removeChild(button)}
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
+ delete jax.hover;
+ },
+ //
+ // Set the fade to in or out (via inc) and start the timer, if needed
+ //
+ HoverFadeTimer: function (jax,inc,delay) {
+ jax.hover.inc = inc;
+ if (!jax.hover.timer) {
+ jax.hover.timer = setTimeout(CALLBACK(["HoverFade",this,jax]),(delay||CONFIG.fadeDelay));
+ }
+ },
+
+ //
+ // Handle a click on the menu button
+ //
+ HoverMenu: function (event) {
+ if (!event) {event = window.event}
+ return OUTPUT[this.jax].ContextMenu(event,this.math,true);
+ },
+
+ //
+ // Clear all hover timers
+ //
+ ClearHover: function (jax) {
+ if (jax.hover.remove) {clearTimeout(jax.hover.remove)}
+ if (jax.hover.timer) {clearTimeout(jax.hover.timer)}
+ HOVER.ClearHoverTimer();
+ delete jax.hover;
+ },
+
+ //
+ // Make a measurement in pixels
+ //
+ Px: function (m) {
+ if (Math.abs(m) < .006) {return "0px"}
+ return m.toFixed(2).replace(/\.?0+$/,"") + "px";
+ },
+
+ //
+ // Preload images so they show up with the menu
+ //
+ getImages: function () {
+ var menu = new Image();
+ menu.src = CONFIG.button.src;
+ }
+
+ };
+
+ //
+ // Handle touch events.
+ //
+ // Use double-tap-and-hold as a replacement for context menu event.
+ // Use double-tap as a replacement for double click.
+ //
+ var TOUCH = ME.Touch = {
+
+ last: 0, // time of last tap event
+ delay: 500, // delay time for double-click
+
+ //
+ // Check if this is a double-tap, and if so, start the timer
+ // for the double-tap and hold (to trigger the contextual menu)
+ //
+ start: function (event) {
+ var now = new Date().getTime();
+ var dblTap = (now - TOUCH.last < TOUCH.delay);
+ TOUCH.last = now;
+ if (dblTap) {
+ TOUCH.timeout = setTimeout(TOUCH.menu,TOUCH.delay,event,this);
+ event.preventDefault();
+ }
+ },
+
+ //
+ // Check if there is a timeout pending, i.e., we have a
+ // double-tap and were waiting to see if it is held long
+ // enough for the menu. Since we got the end before the
+ // timeout, it is a double-click, not a double-tap-and-hold.
+ // Prevent the default action and issue a double click.
+ //
+ end: function (event) {
+ if (TOUCH.timeout) {
+ clearTimeout(TOUCH.timeout);
+ delete TOUCH.timeout; TOUCH.last = 0;
+ event.preventDefault();
+ return EVENT.Handler((event.touches[0]||event.touch),"DblClick",this);
+ }
+ },
+
+ //
+ // If the timeout passes without an end event, we issue
+ // the contextual menu event.
+ //
+ menu: function (event,math) {
+ delete TOUCH.timeout; TOUCH.last = 0;
+ return EVENT.Handler((event.touches[0]||event.touch),"ContextMenu",math);
+ }
+
+ };
+
+ //
+ // Mobile screens are small, so use larger version of arrow
+ //
+ if (HUB.Browser.isMobile) {
+ var arrow = CONFIG.styles[".MathJax_Hover_Arrow"];
+ arrow.width = "25px"; arrow.height = "18px";
+ CONFIG.button.x = -6;
+ }
+
+ //
+ // Set up browser-specific values
+ //
+ HUB.Browser.Select({
+ MSIE: function (browser) {
+ var mode = (document.documentMode || 0);
+ var isIE8 = browser.versionAtLeast("8.0");
+ ME.msieBorderWidthBug = (document.compatMode === "BackCompat"); // borders are inside offsetWidth/Height
+ ME.msieEventBug = browser.isIE9; // must get event from window even though event is passed
+ ME.msieAlignBug = (!isIE8 || mode < 8); // inline-block spans don't rest on baseline
+ if (mode < 9) {EVENT.LEFTBUTTON = 1} // IE < 9 has wrong event.button values
+ },
+ Safari: function (browser) {
+ ME.safariContextMenuBug = true; // selection can be started by contextmenu event
+ },
+ Opera: function (browser) {
+ ME.operaPositionBug = true; // position is wrong unless border is used
+ },
+ Konqueror: function (browser) {
+ ME.noContextMenuBug = true; // doesn't produce contextmenu event
+ }
+ });
+
+ //
+ // Used in measuring zoom and hover positions
+ //
+ ME.topImg = (ME.msieAlignBug ?
+ HTML.Element("img",{style:{width:0,height:0,position:"relative"},src:"about:blank"}) :
+ HTML.Element("span",{style:{width:0,height:0,display:"inline-block"}})
+ );
+ if (ME.operaPositionBug) {ME.topImg.style.border="1px solid"}
+
+ //
+ // Get configuration from user
+ //
+ ME.config = CONFIG = HUB.CombineConfig("MathEvents",CONFIG);
+ var SETFRAME = function () {
+ var haze = CONFIG.styles[".MathJax_Hover_Frame"];
+ haze.border = CONFIG.frame.bwidth+"px solid "+CONFIG.frame.bcolor+" ! important";
+ haze["box-shadow"] = haze["-webkit-box-shadow"] =
+ haze["-moz-box-shadow"] = haze["-khtml-box-shadow"] =
+ "0px 0px "+CONFIG.frame.hwidth+" "+CONFIG.frame.hcolor;
+ };
+
+ //
+ // Queue the events needed for startup
+ //
+ CALLBACK.Queue(
+ HUB.Register.StartupHook("End Config",{}), // wait until config is complete
+ [SETFRAME],
+ ["getImages",HOVER],
+ ["Styles",AJAX,CONFIG.styles],
+ ["Post",HUB.Startup.signal,"MathEvents Ready"],
+ ["loadComplete",AJAX,"[MathJax]/extensions/MathEvents.js"]
+ );
+
+})(MathJax.Hub,MathJax.HTML,MathJax.Ajax,MathJax.Callback,MathJax.OutputJax,MathJax.InputJax);
diff --git a/resources/viewer/mathjax/extensions/MathMenu.js b/resources/viewer/mathjax/extensions/MathMenu.js
new file mode 100644
index 0000000000..d0273543b0
--- /dev/null
+++ b/resources/viewer/mathjax/extensions/MathMenu.js
@@ -0,0 +1,1025 @@
+/*************************************************************
+ *
+ * MathJax/extensions/MathMenu.js
+ *
+ * Implements a right-mouse (or CTRL-click) menu over mathematics
+ * elements that gives the user the ability to copy the source,
+ * change the math size, and zoom settings.
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Copyright (c) 2010-2012 Design Science, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (HUB,HTML,AJAX,CALLBACK,OUTPUT) {
+ var VERSION = "2.0";
+
+ var SIGNAL = MathJax.Callback.Signal("menu") // signal for menu events
+
+ MathJax.Extension.MathMenu = {
+ version: VERSION,
+ signal: SIGNAL
+ };
+
+ var isPC = HUB.Browser.isPC, isMSIE = HUB.Browser.isMSIE, isIE9 = ((document.documentMode||0) > 8);
+ var ROUND = (isPC ? null : "5px");
+
+ var CONFIG = HUB.CombineConfig("MathMenu",{
+ delay: 150, // the delay for submenus
+ helpURL: "http://www.mathjax.org/help-v2/user/", // the URL for the "MathJax Help" menu
+ closeImg: AJAX.fileURL(OUTPUT.imageDir+"/CloseX-31.png"), // image for close "X" for mobiles
+
+ showRenderer: true, // show the "Math Renderer" menu?
+ showMathPlayer: true, // show the "MathPlayer" menu?
+ showFontMenu: false, // show the "Font Preference" menu?
+ showContext: false, // show the "Context Menu" menu?
+ showDiscoverable: false, // show the "Discoverable" menu?
+
+ windowSettings: { // for source window
+ status: "no", toolbar: "no", locationbar: "no", menubar: "no",
+ directories: "no", personalbar: "no", resizable: "yes", scrollbars: "yes",
+ width: 100, height: 50
+ },
+
+ styles: {
+ "#MathJax_About": {
+ position:"fixed", left:"50%", width:"auto", "text-align":"center",
+ border:"3px outset", padding:"1em 2em", "background-color":"#DDDDDD", color:"black",
+ cursor: "default", "font-family":"message-box", "font-size":"120%",
+ "font-style":"normal", "text-indent":0, "text-transform":"none",
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
+ "word-wrap":"normal", "white-space":"nowrap", "float":"none", "z-index":201,
+
+ "border-radius": "15px", // Opera 10.5 and IE9
+ "-webkit-border-radius": "15px", // Safari and Chrome
+ "-moz-border-radius": "15px", // Firefox
+ "-khtml-border-radius": "15px", // Konqueror
+
+ "box-shadow":"0px 10px 20px #808080", // Opera 10.5 and IE9
+ "-webkit-box-shadow":"0px 10px 20px #808080", // Safari 3 and Chrome
+ "-moz-box-shadow":"0px 10px 20px #808080", // Forefox 3.5
+ "-khtml-box-shadow":"0px 10px 20px #808080", // Konqueror
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
+ },
+
+ ".MathJax_Menu": {
+ position:"absolute", "background-color":"white", color:"black",
+ width:"auto", padding:(isPC ? "2px" : "5px 0px"),
+ border:"1px solid #CCCCCC", margin:0, cursor:"default",
+ font: "menu", "text-align":"left", "text-indent":0, "text-transform":"none",
+ "line-height":"normal", "letter-spacing":"normal", "word-spacing":"normal",
+ "word-wrap":"normal", "white-space":"nowrap", "float":"none", "z-index":201,
+
+ "border-radius": ROUND, // Opera 10.5 and IE9
+ "-webkit-border-radius": ROUND, // Safari and Chrome
+ "-moz-border-radius": ROUND, // Firefox
+ "-khtml-border-radius": ROUND, // Konqueror
+
+ "box-shadow":"0px 10px 20px #808080", // Opera 10.5 and IE9
+ "-webkit-box-shadow":"0px 10px 20px #808080", // Safari 3 and Chrome
+ "-moz-box-shadow":"0px 10px 20px #808080", // Forefox 3.5
+ "-khtml-box-shadow":"0px 10px 20px #808080", // Konqueror
+ filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color='gray', Positive='true')" // IE
+ },
+
+ ".MathJax_MenuItem": {
+ padding: (isPC ? "2px 2em" : "1px 2em"),
+ background:"transparent"
+ },
+
+ ".MathJax_MenuTitle": {
+ "background-color":"#CCCCCC",
+ margin: (isPC ? "-1px -1px 1px -1px" : "-5px 0 0 0"),
+ "text-align":"center", "font-style":"italic", "font-size":"80%", color:"#444444",
+ padding:"2px 0", overflow:"hidden"
+ },
+
+ ".MathJax_MenuArrow": {
+ position:"absolute", right:".5em", color:"#666666",
+ "font-family": (isMSIE ? "'Arial unicode MS'" : null)
+ },
+ ".MathJax_MenuActive .MathJax_MenuArrow": {color:"white"},
+
+ ".MathJax_MenuCheck": {
+ position:"absolute", left:".7em",
+ "font-family": (isMSIE ? "'Arial unicode MS'" : null)
+ },
+
+ ".MathJax_MenuRadioCheck": {
+ position:"absolute", left: (isPC ? "1em" : ".7em")
+ },
+
+ ".MathJax_MenuLabel": {
+ padding: (isPC ? "2px 2em 4px 1.33em" : "1px 2em 3px 1.33em"),
+ "font-style":"italic"
+ },
+
+ ".MathJax_MenuRule": {
+ "border-top": (isPC ? "1px solid #CCCCCC" : "1px solid #DDDDDD"),
+ margin: (isPC ? "4px 1px 0px" : "4px 3px")
+ },
+
+ ".MathJax_MenuDisabled": {
+ color:"GrayText"
+ },
+
+ ".MathJax_MenuActive": {
+ "background-color": (isPC ? "Highlight" : "#606872"),
+ color: (isPC ? "HighlightText" : "white")
+ },
+
+ ".MathJax_Menu_Close": {
+ position:"absolute",
+ width: "31px", height: "31px",
+ top:"-15px", left:"-15px"
+ }
+ }
+ });
+
+ var FALSE, HOVER;
+ HUB.Register.StartupHook("MathEvents Ready",function () {
+ FALSE = MathJax.Extension.MathEvents.Event.False;
+ HOVER = MathJax.Extension.MathEvents.Hover;
+ });
+
+ /*************************************************************/
+ /*
+ * The main menu class
+ */
+ var MENU = MathJax.Menu = MathJax.Object.Subclass({
+ version: VERSION,
+ items: [],
+ posted: false,
+ title: null,
+ margin: 5,
+
+ Init: function (def) {this.items = [].slice.call(arguments,0)},
+ With: function (def) {if (def) {HUB.Insert(this,def)}; return this},
+
+ /*
+ * Display the menu
+ */
+ Post: function (event,parent) {
+ if (!event) {event = window.event};
+ var title = (!this.title ? null : [["div",{className: "MathJax_MenuTitle"},[this.title]]]);
+ var div = document.getElementById("MathJax_MenuFrame");
+ if (!div) {
+ div = MENU.Background(this);
+ delete ITEM.lastItem; delete ITEM.lastMenu;
+ delete MENU.skipUp;
+ SIGNAL.Post(["post",MENU.jax]);
+ }
+ var menu = HTML.addElement(div,"div",{
+ onmouseup: MENU.Mouseup, ondblclick: FALSE,
+ ondragstart: FALSE, onselectstart: FALSE, oncontextmenu: FALSE,
+ menuItem: this, className: "MathJax_Menu"
+ },title);
+
+ for (var i = 0, m = this.items.length; i < m; i++) {this.items[i].Create(menu)}
+ if (MENU.isMobile) {
+ HTML.addElement(menu,"span",{
+ className: "MathJax_Menu_Close", menu: parent,
+ ontouchstart: MENU.Close, ontouchend: FALSE, onmousedown: MENU.Close, onmouseup: FALSE
+ },[["img",{src: CONFIG.closeImg, style:{width:"100%",height:"100%"}}]]);
+ }
+ this.posted = true;
+
+ menu.style.width = (menu.offsetWidth+2) + "px";
+ var x = event.pageX, y = event.pageY;
+ if (!x && !y) {
+ x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
+ y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
+ }
+ if (!parent) {
+ if (x + menu.offsetWidth > document.body.offsetWidth - this.margin)
+ {x = document.body.offsetWidth - menu.offsetWidth - this.margin}
+ if (MENU.isMobile) {x = Math.max(5,x-Math.floor(menu.offsetWidth/2)); y -= 20}
+ MENU.skipUp = event.isContextMenu;
+ } else {
+ var side = "left", mw = parent.offsetWidth;
+ x = (MENU.isMobile ? 30 : mw - 2); y = 0;
+ while (parent && parent !== div) {
+ x += parent.offsetLeft; y += parent.offsetTop;
+ parent = parent.parentNode;
+ }
+ if (x + menu.offsetWidth > document.body.offsetWidth - this.margin && !MENU.isMobile)
+ {side = "right"; x = Math.max(this.margin,x - mw - menu.offsetWidth + 6)}
+ if (!isPC) {
+ // in case these ever get implemented
+ menu.style["borderRadiusTop"+side] = 0; // Opera 10.5
+ menu.style["WebkitBorderRadiusTop"+side] = 0; // Safari and Chrome
+ menu.style["MozBorderRadiusTop"+side] = 0; // Firefox
+ menu.style["KhtmlBorderRadiusTop"+side] = 0; // Konqueror
+ }
+ }
+
+ menu.style.left = x+"px"; menu.style.top = y+"px";
+
+ if (document.selection && document.selection.empty) {document.selection.empty()}
+ return FALSE(event);
+ },
+
+ /*
+ * Remove the menu from the screen
+ */
+ Remove: function (event,menu) {
+ SIGNAL.Post(["unpost",MENU.jax]);
+ var div = document.getElementById("MathJax_MenuFrame");
+ if (div) {
+ div.parentNode.removeChild(div);
+ if (this.msieFixedPositionBug) {detachEvent("onresize",MENU.Resize)}
+ }
+ if (MENU.jax.hover) {
+ delete MENU.jax.hover.nofade;
+ HOVER.UnHover(MENU.jax);
+ }
+ return FALSE(event);
+ },
+
+ /*
+ * Find a named item in a menu (or submenu).
+ * A list of names means descend into submenus.
+ */
+ Find: function (name) {
+ var names = [].slice.call(arguments,1);
+ for (var i = 0, m = this.items.length; i < m; i++) {
+ if (this.items[i].name === name) {
+ if (names.length) {
+ if (!this.items[i].menu) {return null}
+ return this.items[i].menu.Find.apply(this.items[i].menu,names);
+ }
+ return this.items[i];
+ }
+ }
+ return null;
+ },
+
+ /*
+ * Find the index of a menu item (so we can insert before or after it)
+ */
+ IndexOf: function (name) {
+ for (var i = 0, m = this.items.length; i < m; i++)
+ {if (this.items[i].name === name) {return i}}
+ return null;
+ }
+
+ },{
+
+ config: CONFIG,
+
+ div: null, // the DOM elements for the menu and submenus
+
+ Close: function (event)
+ {return MENU.Event(event,this.menu||this.parentNode,(this.menu?"Touchend":"Remove"))},
+ Remove: function (event) {return MENU.Event(event,this,"Remove")},
+ Mouseover: function (event) {return MENU.Event(event,this,"Mouseover")},
+ Mouseout: function (event) {return MENU.Event(event,this,"Mouseout")},
+ Mousedown: function (event) {return MENU.Event(event,this,"Mousedown")},
+ Mouseup: function (event) {return MENU.Event(event,this,"Mouseup")},
+ Touchstart: function (event) {return MENU.Event(event,this,"Touchstart")},
+ Touchend: function (event) {return MENU.Event(event,this,"Touchend")},
+ Event: function (event,menu,type,force) {
+ if (MENU.skipMouseover && type === "Mouseover" && !force) {return FALSE(event)}
+ if (MENU.skipUp) {
+ if (type.match(/Mouseup|Touchend/)) {delete MENU.skipUp; return FALSE(event)}
+ if (type === "Touchstart" ||
+ (type === "Mousedown" && !MENU.skipMousedown)) {delete MENU.skipUp}
+ }
+ if (!event) {event = window.event}
+ var item = menu.menuItem;
+ if (item && item[type]) {return item[type](event,menu)}
+ return null;
+ },
+
+ /*
+ * Style for the background DIV
+ */
+ BGSTYLE: {
+ position:"absolute", left:0, top:0, "z-index":200,
+ width:"100%", height:"100%", border:0, padding:0, margin:0
+ },
+
+ Background: function (menu) {
+ var div = HTML.addElement(document.body,"div",{style:this.BGSTYLE, id:"MathJax_MenuFrame"},
+ [["div",{style: this.BGSTYLE, menuItem: menu, onmousedown: this.Remove}]]);
+ var bg = div.firstChild;
+ if (menu.msieBackgroundBug) {
+ // MSIE doesn't allow transparent background to be hit boxes, so
+ // fake it using opacity with solid background color
+ bg.style.backgroundColor = "white"; bg.style.filter = "alpha(opacity=0)";
+ }
+ if (menu.msieFixedPositionBug) {
+ // MSIE can't do fixed position, so use a full-sized background
+ // and an onresize handler to update it (stupid, but necessary)
+ div.width = div.height = 0; this.Resize();
+ attachEvent("onresize",this.Resize);
+ } else {
+ // otherwise, use a fixed position DIV to cover the viewport
+ bg.style.position = "fixed";
+ }
+ return div;
+ },
+ Resize: function () {setTimeout(MENU.SetWH,0)},
+ SetWH: function () {
+ var bg = document.getElementById("MathJax_MenuFrame");
+ if (bg) {
+ bg = bg.firstChild;
+ bg.style.width = bg.style.height = "1px"; // so scrollWidth/Height will be right below
+ bg.style.width = document.body.scrollWidth + "px";
+ bg.style.height = document.body.scrollHeight + "px";
+ }
+ },
+
+ saveCookie: function () {HTML.Cookie.Set("menu",this.cookie)},
+ getCookie: function () {this.cookie = HTML.Cookie.Get("menu")},
+
+ //
+ // Preload images so they show up with the menu
+ //
+ getImages: function () {
+ if (MENU.isMobile) {var close = new Image(); close.src = CONFIG.closeImg}
+ }
+
+ });
+
+ /*************************************************************/
+ /*
+ * The menu item root subclass
+ */
+ var ITEM = MENU.ITEM = MathJax.Object.Subclass({
+ name: "", // the menu item's label
+
+ Create: function (menu) {
+ if (!this.hidden) {
+ var def = {
+ onmouseover: MENU.Mouseover, onmouseout: MENU.Mouseout,
+ onmouseup: MENU.Mouseup, onmousedown: MENU.Mousedown,
+ ondragstart: FALSE, onselectstart: FALSE, onselectend: FALSE,
+ ontouchstart: MENU.Touchstart, ontouchend: MENU.Touchend,
+ className: "MathJax_MenuItem", menuItem: this
+ };
+ if (this.disabled) {def.className += " MathJax_MenuDisabled"}
+ HTML.addElement(menu,"div",def,this.Label(def,menu));
+ }
+ },
+
+ Mouseover: function (event,menu) {
+ if (!this.disabled) {this.Activate(menu)}
+ if (!this.menu || !this.menu.posted) {
+ var menus = document.getElementById("MathJax_MenuFrame").childNodes,
+ items = menu.parentNode.childNodes;
+ for (var i = 0, m = items.length; i < m; i++) {
+ var item = items[i].menuItem;
+ if (item && item.menu && item.menu.posted) {item.Deactivate(items[i])}
+ }
+ m = menus.length-1;
+ while (m >= 0 && menu.parentNode.menuItem !== menus[m].menuItem) {
+ menus[m].menuItem.posted = false;
+ menus[m].parentNode.removeChild(menus[m]);
+ m--;
+ }
+ if (this.Timer && !MENU.isMobile) {this.Timer(event,menu)}
+ }
+ },
+ Mouseout: function (event,menu) {
+ if (!this.menu || !this.menu.posted) {this.Deactivate(menu)}
+ if (this.timer) {clearTimeout(this.timer); delete this.timer}
+ },
+ Mouseup: function (event,menu) {return this.Remove(event,menu)},
+
+ Touchstart: function (event,menu) {return this.TouchEvent(event,menu,"Mousedown")},
+ Touchend: function (event,menu) {return this.TouchEvent(event,menu,"Mouseup")},
+ TouchEvent: function (event,menu,type) {
+ if (this !== ITEM.lastItem) {
+ if (ITEM.lastMenu) {MENU.Event(event,ITEM.lastMenu,"Mouseout")}
+ MENU.Event(event,menu,"Mouseover",true);
+ ITEM.lastItem = this; ITEM.lastMenu = menu;
+ }
+ if (this.nativeTouch) {return null}
+ MENU.Event(event,menu,type);
+ return false;
+ },
+
+ Remove: function (event,menu) {
+ menu = menu.parentNode.menuItem;
+ return menu.Remove(event,menu);
+ },
+
+ Activate: function (menu) {this.Deactivate(menu); menu.className += " MathJax_MenuActive"},
+ Deactivate: function (menu) {menu.className = menu.className.replace(/ MathJax_MenuActive/,"")},
+
+ With: function (def) {if (def) {HUB.Insert(this,def)}; return this}
+ });
+
+ /*************************************************************/
+ /*
+ * A menu item that performs a command when selected
+ */
+ MENU.ITEM.COMMAND = MENU.ITEM.Subclass({
+ action: function () {},
+
+ Init: function (name,action,def) {
+ this.name = name; this.action = action;
+ this.With(def);
+ },
+
+ Label: function (def,menu) {return [this.name]},
+ Mouseup: function (event,menu) {
+ if (!this.disabled) {
+ this.Remove(event,menu);
+ SIGNAL.Post(["command",this]);
+ this.action.call(this,event);
+ }
+ return FALSE(event);
+ }
+ });
+
+ /*************************************************************/
+ /*
+ * A menu item that posts a submenu
+ */
+ MENU.ITEM.SUBMENU = MENU.ITEM.Subclass({
+ menu: null, // the submenu
+ marker: (isPC && !HUB.Browser.isSafari ? "\u25B6" : "\u25B8"), // the menu arrow
+
+ Init: function (name,def) {
+ this.name = name; var i = 1;
+ if (!(def instanceof MENU.ITEM)) {this.With(def), i++}
+ this.menu = MENU.apply(MENU,[].slice.call(arguments,i));
+ },
+ Label: function (def,menu) {
+ this.menu.posted = false;
+ return [this.name+" ",["span",{className:"MathJax_MenuArrow"},[this.marker]]];
+ },
+ Timer: function (event,menu) {
+ if (this.timer) {clearTimeout(this.timer)}
+ event = {clientX: event.clientX, clientY: event.clientY}; // MSIE can't pass the event below
+ this.timer = setTimeout(CALLBACK(["Mouseup",this,event,menu]),CONFIG.delay);
+ },
+ Touchend: function (event,menu) {
+ var forceout = this.menu.posted;
+ var result = this.SUPER(arguments).Touchend.apply(this,arguments);
+ if (forceout) {this.Deactivate(menu); delete ITEM.lastItem; delete ITEM.lastMenu}
+ return result;
+ },
+ Mouseup: function (event,menu) {
+ if (!this.disabled) {
+ if (!this.menu.posted) {
+ if (this.timer) {clearTimeout(this.timer); delete this.timer}
+ this.menu.Post(event,menu);
+ } else {
+ var menus = document.getElementById("MathJax_MenuFrame").childNodes,
+ m = menus.length-1;
+ while (m >= 0) {
+ var child = menus[m];
+ child.menuItem.posted = false;
+ child.parentNode.removeChild(child);
+ if (child.menuItem === this.menu) {break};
+ m--;
+ }
+ }
+ }
+ return FALSE(event);
+ }
+ });
+
+ /*************************************************************/
+ /*
+ * A menu item that is one of several radio buttons
+ */
+ MENU.ITEM.RADIO = MENU.ITEM.Subclass({
+ variable: null, // the variable name
+ marker: (isPC ? "\u25CF" : "\u2713"), // the checkmark
+
+ Init: function (name,variable,def) {
+ this.name = name; this.variable = variable; this.With(def);
+ if (this.value == null) {this.value = this.name}
+ },
+ Label: function (def,menu) {
+ var span = {className:"MathJax_MenuRadioCheck"};
+ if (CONFIG.settings[this.variable] !== this.value) {span = {style:{display:"none"}}}
+ return [["span",span,[this.marker]]," "+this.name];
+ },
+ Mouseup: function (event,menu) {
+ if (!this.disabled) {
+ var child = menu.parentNode.childNodes;
+ for (var i = 0, m = child.length; i < m; i++) {
+ var item = child[i].menuItem;
+ if (item && item.variable === this.variable)
+ {child[i].firstChild.style.display = "none"}
+ }
+ menu.firstChild.display = "";
+ CONFIG.settings[this.variable] = this.value;
+ MENU.cookie[this.variable] = CONFIG.settings[this.variable]; MENU.saveCookie();
+ SIGNAL.Post(["radio button",this]);
+ }
+ this.Remove(event,menu);
+ if (this.action && !this.disabled) {this.action.call(MENU,this)}
+ return FALSE(event);
+ }
+ });
+
+ /*************************************************************/
+ /*
+ * A menu item that is checkable
+ */
+ MENU.ITEM.CHECKBOX = MENU.ITEM.Subclass({
+ variable: null, // the variable name
+ marker: "\u2713", // the checkmark
+
+ Init: function (name,variable,def) {
+ this.name = name; this.variable = variable; this.With(def);
+ },
+ Label: function (def,menu) {
+ var span = {className:"MathJax_MenuCheck"};
+ if (!CONFIG.settings[this.variable]) {span = {style:{display:"none"}}}
+ return [["span",span,[this.marker]]," "+this.name];
+ },
+ Mouseup: function (event,menu) {
+ if (!this.disabled) {
+ menu.firstChild.display = (CONFIG.settings[this.variable] ? "none" : "");
+ CONFIG.settings[this.variable] = !CONFIG.settings[this.variable];
+ MENU.cookie[this.variable] = CONFIG.settings[this.variable]; MENU.saveCookie();
+ SIGNAL.Post(["checkbox",this]);
+ }
+ this.Remove(event,menu);
+ if (this.action && !this.disabled) {this.action.call(MENU,this)}
+ return FALSE(event);
+ }
+ });
+
+ /*************************************************************/
+ /*
+ * A menu item that is a label
+ */
+ MENU.ITEM.LABEL = MENU.ITEM.Subclass({
+ Init: function (name,def) {this.name = name; this.With(def)},
+ Label: function (def,menu) {
+ delete def.onmouseover, delete def.onmouseout; delete def.onmousedown;
+ def.className += " MathJax_MenuLabel";
+ return [this.name];
+ }
+ });
+
+ /*************************************************************/
+ /*
+ * A rule in a menu
+ */
+ MENU.ITEM.RULE = MENU.ITEM.Subclass({
+ Label: function (def,menu) {
+ delete def.onmouseover, delete def.onmouseout; delete def.onmousedown;
+ def.className += " MathJax_MenuRule";
+ return null;
+ }
+ });
+
+ /*************************************************************/
+ /*************************************************************/
+
+ /*
+ * Handle the ABOUT box
+ */
+ MENU.About = function () {
+ var HTMLCSS = OUTPUT["HTML-CSS"] || {fontInUse: ""};
+ var local = (HTMLCSS.webFonts ? "" : "local "), web = (HTMLCSS.webFonts ? " web" : "");
+ var font = (HTMLCSS.imgFonts ? "Image" : local+HTMLCSS.fontInUse+web) + " fonts";
+ if (font === "local fonts" && OUTPUT.SVG) {font = "web SVG fonts"}
+ var jax = ["MathJax.js v"+MathJax.fileversion,["br"]];
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}]);
+ MENU.About.GetJax(jax,MathJax.InputJax,"Input Jax");
+ MENU.About.GetJax(jax,MathJax.OutputJax,"Output Jax");
+ MENU.About.GetJax(jax,MathJax.ElementJax,"Element Jax");
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}]);
+ MENU.About.GetJax(jax,MathJax.Extension,"Extension",true);
+ jax.push(["div",{style:{"border-top":"groove 2px",margin:".25em 0"}}],["center",{},[
+ HUB.Browser + " v"+HUB.Browser.version +
+ (HTMLCSS.webFonts && !HTMLCSS.imgFonts ? " \u2014 "+HTMLCSS.allowWebFonts+" fonts" : "")
+ ]]);
+ MENU.About.div = MENU.Background(MENU.About);
+ var about = HTML.addElement(MENU.About.div,"div",{
+ id: "MathJax_About", onclick: MENU.About.Remove
+ },[
+ ["b",{style:{fontSize:"120%"}},["MathJax"]]," v"+MathJax.version,["br"],
+ "using "+font,["br"],["br"],
+ ["span",{style:{
+ display:"inline-block", "text-align":"left", "font-size":"80%",
+ "max-height":"20em", overflow:"auto",
+ "background-color":"#E4E4E4", padding:".4em .6em", border:"1px inset"
+ }},jax],["br"],["br"],
+ ["a",{href:"http://www.mathjax.org/"},["www.mathjax.org"]]
+ ]);
+ var doc = (document.documentElement||{});
+ var H = window.innerHeight || doc.clientHeight || doc.scrollHeight || 0;
+ if (MENU.prototype.msieAboutBug) {
+ about.style.width = "20em"; about.style.position = "absolute";
+ about.style.left = Math.floor((document.documentElement.scrollWidth - about.offsetWidth)/2)+"px";
+ about.style.top = (Math.floor((H-about.offsetHeight)/3)+document.body.scrollTop)+"px";
+ } else {
+ about.style.marginLeft = Math.floor(-about.offsetWidth/2)+"px";
+ about.style.top = Math.floor((H-about.offsetHeight)/3)+"px";
+ }
+ };
+ MENU.About.Remove = function (event) {
+ if (MENU.About.div) {document.body.removeChild(MENU.About.div); delete MENU.About.div}
+ };
+ MENU.About.GetJax = function (jax,JAX,type,noTypeCheck) {
+ var info = [];
+ for (var id in JAX) {if (JAX.hasOwnProperty(id) && JAX[id]) {
+ if ((noTypeCheck && JAX[id].version) || (JAX[id].isa && JAX[id].isa(JAX)))
+ {info.push((JAX[id].id||id)+" "+type+" v"+JAX[id].version)}
+ }}
+ info.sort();
+ for (var i = 0, m = info.length; i < m; i++) {jax.push(info[i],["br"])}
+ return jax;
+ };
+
+
+ /*
+ * Handle the MathJax HELP menu
+ */
+ MENU.Help = function () {
+ window.open(CONFIG.helpURL,"MathJaxHelp");
+ };
+
+ /*
+ * Handle showing of element's source
+ */
+ MENU.ShowSource = function (event) {
+ if (!event) {event = window.event}
+ var EVENT = {screenX:event.screenX, screenY:event.screenY};
+ if (!MENU.jax) return;
+ if (this.format === "MathML") {
+ var MML = MathJax.ElementJax.mml;
+ if (MML && typeof(MML.mbase.prototype.toMathML) !== "undefined") {
+ // toMathML() can call MathJax.Hub.RestartAfter, so trap errors and check
+ try {MENU.ShowSource.Text(MENU.jax.root.toMathML(),event)} catch (err) {
+ if (!err.restart) {throw err}
+ CALLBACK.After([this,MENU.ShowSource,EVENT]);
+ }
+ } else if (!AJAX.loadingToMathML) {
+ AJAX.loadingToMathML = true;
+ MENU.ShowSource.Window(event); // WeBKit needs to open window on click event
+ CALLBACK.Queue(
+ AJAX.Require("[MathJax]/extensions/toMathML.js"),
+ function () {
+ delete AJAX.loadingToMathML;
+ if (!MML.mbase.prototype.toMathML) {MML.mbase.prototype.toMathML = function () {}}
+ },
+ [this,MENU.ShowSource,EVENT] // call this function again
+ );
+ return;
+ }
+ } else {
+ if (MENU.jax.originalText == null) {alert("No original form available"); return}
+ MENU.ShowSource.Text(MENU.jax.originalText,event);
+ }
+ };
+ MENU.ShowSource.Window = function (event) {
+ if (!MENU.ShowSource.w) {
+ var def = [], DEF = CONFIG.windowSettings;
+ for (var id in DEF) {if (DEF.hasOwnProperty(id)) {def.push(id+"="+DEF[id])}}
+ MENU.ShowSource.w = window.open("","_blank",def.join(","));
+ }
+ return MENU.ShowSource.w;
+ };
+ MENU.ShowSource.Text = function (text,event) {
+ var w = MENU.ShowSource.Window(event);
+ text = text.replace(/^\s*/,"").replace(/\s*$/,"");
+ text = text.replace(/&/g,"&").replace(//g,">");
+ if (MENU.isMobile) {
+ w.document.open();
+ w.document.write("MathJax Equation Source");
+ w.document.write("
'%(titles,))
d.exec_()
+ elif isinstance(job.exception, WrongDestinationError):
+ error_dialog(self, _('Incorrect destination'),
+ unicode(job.exception), show=True)
else:
self.device_job_exception(job)
return
diff --git a/src/calibre/gui2/store/opensearch_store.py b/src/calibre/gui2/store/opensearch_store.py
index a66418aa77..5bd58d6ed0 100644
--- a/src/calibre/gui2/store/opensearch_store.py
+++ b/src/calibre/gui2/store/opensearch_store.py
@@ -6,14 +6,13 @@ __license__ = 'GPL 3'
__copyright__ = '2011, John Schember '
__docformat__ = 'restructuredtext en'
-import mimetypes
from contextlib import closing
from lxml import etree
from PyQt4.Qt import QUrl
-from calibre import browser
+from calibre import (browser, guess_extension)
from calibre.gui2 import open_url
from calibre.gui2.store import StorePlugin
from calibre.gui2.store.search_result import SearchResult
@@ -29,7 +28,7 @@ class OpenSearchOPDSStore(StorePlugin):
def open(self, parent=None, detail_item=None, external=False):
if not hasattr(self, 'web_url'):
return
-
+
if external or self.config.get('open_external', False):
open_url(QUrl(detail_item if detail_item else self.web_url))
else:
@@ -52,7 +51,7 @@ class OpenSearchOPDSStore(StorePlugin):
oquery.searchTerms = query
oquery.count = max_results
url = oquery.url()
-
+
counter = max_results
br = browser()
with closing(br.open(url, timeout=timeout)) as f:
@@ -60,18 +59,18 @@ class OpenSearchOPDSStore(StorePlugin):
for data in doc.xpath('//*[local-name() = "entry"]'):
if counter <= 0:
break
-
+
counter -= 1
-
+
s = SearchResult()
-
+
s.detail_item = ''.join(data.xpath('./*[local-name() = "id"]/text()')).strip()
for link in data.xpath('./*[local-name() = "link"]'):
rel = link.get('rel')
href = link.get('href')
type = link.get('type')
-
+
if rel and href and type:
if 'http://opds-spec.org/thumbnail' in rel:
s.cover_url = href
@@ -81,15 +80,15 @@ class OpenSearchOPDSStore(StorePlugin):
s.detail_item = href
elif 'http://opds-spec.org/acquisition' in rel:
if type:
- ext = mimetypes.guess_extension(type)
+ ext = guess_extension(type)
if ext:
ext = ext[1:].upper().strip()
s.downloads[ext] = href
s.formats = ', '.join(s.downloads.keys()).strip()
-
+
s.title = ' '.join(data.xpath('./*[local-name() = "title"]//text()')).strip()
s.author = ', '.join(data.xpath('./*[local-name() = "author"]//*[local-name() = "name"]//text()')).strip()
-
+
price_e = data.xpath('.//*[local-name() = "price"][1]')
if price_e:
price_e = price_e[0]
@@ -97,6 +96,6 @@ class OpenSearchOPDSStore(StorePlugin):
price = ''.join(price_e.xpath('.//text()')).strip()
s.price = currency_code + ' ' + price
s.price = s.price.strip()
-
+
yield s
diff --git a/src/calibre/gui2/store/stores/diesel_ebooks_plugin.py b/src/calibre/gui2/store/stores/diesel_ebooks_plugin.py
index 49dcad020c..309ee98e4c 100644
--- a/src/calibre/gui2/store/stores/diesel_ebooks_plugin.py
+++ b/src/calibre/gui2/store/stores/diesel_ebooks_plugin.py
@@ -34,7 +34,10 @@ class DieselEbooksStore(BasicStoreConfig, StorePlugin):
detail_url = None
if detail_item:
- detail_url = detail_item + aff_id
+ if '?' in detail_item:
+ detail_url = detail_item + aff_id.replace('?', '&')
+ else:
+ detail_url = detail_item + aff_id
url = url + aff_id
if external or self.config.get('open_external', False):
@@ -52,9 +55,11 @@ class DieselEbooksStore(BasicStoreConfig, StorePlugin):
counter = max_results
with closing(br.open(url, timeout=timeout)) as f:
+ book_url = f.geturl()
doc = html.fromstring(f.read())
if doc.xpath('not(boolean(//select[contains(@id, "selection")]))'):
+ # This is the page for an individual book
id = ''.join(doc.xpath('//div[@class="price_fat"]//a/@href'))
mo = re.search('(?<=id=).+?(?=&)', id)
if not mo:
@@ -79,7 +84,7 @@ class DieselEbooksStore(BasicStoreConfig, StorePlugin):
s.title = title.strip()
s.author = author.strip()
s.price = price.strip()
- s.detail_item = id.strip()
+ s.detail_item = book_url
s.formats = formats
s.drm = drm
diff --git a/src/calibre/gui2/store/stores/ebooksgratuits_plugin.py b/src/calibre/gui2/store/stores/ebooksgratuits_plugin.py
new file mode 100644
index 0000000000..add4bb2d40
--- /dev/null
+++ b/src/calibre/gui2/store/stores/ebooksgratuits_plugin.py
@@ -0,0 +1,29 @@
+
+# -*- coding: utf-8 -*-
+from __future__ import (unicode_literals, division, absolute_import, print_function)
+
+__license__ = 'GPL 3'
+__copyright__ = '2012, Florent FAYOLLE '
+__docformat__ = 'restructuredtext en'
+
+from calibre.gui2.store.basic_config import BasicStoreConfig
+from calibre.gui2.store.opensearch_store import OpenSearchOPDSStore
+from calibre.gui2.store.search_result import SearchResult
+from calibre.utils.filenames import ascii_text
+
+class EbooksGratuitsStore(BasicStoreConfig, OpenSearchOPDSStore):
+
+ open_search_url = 'http://www.ebooksgratuits.com/opds/opensearch.xml'
+ web_url = 'http://www.ebooksgratuits.com/'
+
+ def strip_accents(self, s):
+ return ascii_text(s)
+
+ def search(self, query, max_results=10, timeout=60):
+ query = self.strip_accents(unicode(query))
+ for s in OpenSearchOPDSStore.search(self, query, max_results, timeout):
+ if s.downloads:
+ s.drm = SearchResult.DRM_UNLOCKED
+ s.price = '$0.00'
+ yield s
+
diff --git a/src/calibre/gui2/store/stores/legimi_plugin.py b/src/calibre/gui2/store/stores/legimi_plugin.py
index 58afc012fe..4b4197fd68 100644
--- a/src/calibre/gui2/store/stores/legimi_plugin.py
+++ b/src/calibre/gui2/store/stores/legimi_plugin.py
@@ -25,11 +25,12 @@ class LegimiStore(BasicStoreConfig, StorePlugin):
def open(self, parent=None, detail_item=None, external=False):
- url = 'http://www.legimi.com/pl/ebooks/?price=any'
+ plain_url = 'http://www.legimi.com/pl/ebooks/?price=any'
+ url = 'https://ssl.afiliant.com/affskrypt,,2f9de2,,11483,,,?u=(' + plain_url + ')'
detail_url = None
if detail_item:
- detail_url = detail_item
+ detail_url = 'https://ssl.afiliant.com/affskrypt,,2f9de2,,11483,,,?u=(' + detail_item + ')'
if external or self.config.get('open_external', False):
open_url(QUrl(url_slash_cleaner(detail_url if detail_url else url)))
diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py
index eb5680b7b9..6096216b3e 100644
--- a/src/calibre/gui2/viewer/documentview.py
+++ b/src/calibre/gui2/viewer/documentview.py
@@ -17,13 +17,14 @@ from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings
from calibre.gui2.viewer.flip import SlideFlip
from calibre.gui2.shortcuts import Shortcuts
from calibre import prints
+from calibre.customize.ui import all_viewer_plugins
from calibre.gui2.viewer.keys import SHORTCUTS
from calibre.gui2.viewer.javascript import JavaScriptLoader
from calibre.gui2.viewer.position import PagePosition
from calibre.gui2.viewer.config import config, ConfigDialog
from calibre.gui2.viewer.image_popup import ImagePopup
from calibre.ebooks.oeb.display.webview import load_html
-from calibre.constants import isxp
+from calibre.constants import isxp, iswindows
# }}}
def load_builtin_fonts():
@@ -90,6 +91,9 @@ class Document(QWebPage): # {{{
# Fonts
load_builtin_fonts()
+ self.all_viewer_plugins = tuple(all_viewer_plugins())
+ for pl in self.all_viewer_plugins:
+ pl.load_fonts()
self.set_font_settings()
# Security
@@ -169,8 +173,16 @@ class Document(QWebPage): # {{{
if self.loaded_javascript:
return
self.loaded_javascript = True
- self.loaded_lang = self.js_loader(self.mainFrame().evaluateJavaScript,
- self.current_language, self.hyphenate_default_lang)
+ evaljs = self.mainFrame().evaluateJavaScript
+ self.loaded_lang = self.js_loader(evaljs, self.current_language,
+ self.hyphenate_default_lang)
+ mjpath = P(u'viewer/mathjax').replace(os.sep, '/')
+ if iswindows:
+ mjpath = u'/' + mjpath
+ self.javascript(u'window.mathjax.base = %s'%(json.dumps(mjpath,
+ ensure_ascii=False)))
+ for pl in self.all_viewer_plugins:
+ pl.load_javascript(evaljs)
@pyqtSignature("")
def animated_scroll_done(self):
@@ -207,6 +219,10 @@ class Document(QWebPage): # {{{
if self.in_paged_mode:
self.switch_to_paged_mode()
self.read_anchor_positions(use_cache=False)
+ evaljs = self.mainFrame().evaluateJavaScript
+ for pl in self.all_viewer_plugins:
+ pl.run_javascript(evaljs)
+ self.javascript('window.mathjax.check_for_math()')
self.first_load = False
def colors(self):
@@ -264,6 +280,7 @@ class Document(QWebPage): # {{{
if self.in_paged_mode:
self.setPreferredContentsSize(QSize())
self.switch_to_paged_mode(onresize=True)
+ self.javascript('window.mathjax.after_resize()')
def switch_to_fullscreen_mode(self):
self.in_fullscreen_mode = True
diff --git a/src/calibre/gui2/viewer/javascript.py b/src/calibre/gui2/viewer/javascript.py
index 67404cb0c6..179139d082 100644
--- a/src/calibre/gui2/viewer/javascript.py
+++ b/src/calibre/gui2/viewer/javascript.py
@@ -33,11 +33,12 @@ class JavaScriptLoader(object):
'paged':'ebooks.oeb.display.paged',
'utils':'ebooks.oeb.display.utils',
'fs':'ebooks.oeb.display.full_screen',
+ 'math': 'ebooks.oeb.display.mathjax',
}
ORDER = ('jquery', 'jquery_scrollTo', 'bookmarks', 'referencing', 'images',
'hyphenation', 'hyphenator', 'utils', 'cfi', 'indexing', 'paged',
- 'fs')
+ 'fs', 'math')
def __init__(self, dynamic_coffeescript=False):
diff --git a/src/calibre/gui2/viewer/main.ui b/src/calibre/gui2/viewer/main.ui
index 2d442fa223..fe0fa62a79 100644
--- a/src/calibre/gui2/viewer/main.ui
+++ b/src/calibre/gui2/viewer/main.ui
@@ -24,6 +24,9 @@
Qt::Horizontal
+
+ false
+
diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py
index 576db914f0..31d9cb0928 100644
--- a/src/calibre/gui2/wizard/__init__.py
+++ b/src/calibre/gui2/wizard/__init__.py
@@ -675,8 +675,9 @@ class LibraryPage(QWizardPage, LibraryUI):
self.language.blockSignals(True)
self.language.clear()
from calibre.utils.localization import (available_translations,
- get_language, get_lang)
+ get_language, get_lang, get_lc_messages_path)
lang = get_lang()
+ lang = get_lc_messages_path(lang) if lang else lang
if lang is None or lang not in available_translations():
lang = 'en'
def get_esc_lang(l):
diff --git a/src/calibre/library/catalogs/epub_mobi.py b/src/calibre/library/catalogs/epub_mobi.py
index 28d77c66a5..25385e556c 100644
--- a/src/calibre/library/catalogs/epub_mobi.py
+++ b/src/calibre/library/catalogs/epub_mobi.py
@@ -341,7 +341,8 @@ class EPUB_MOBI(CatalogPlugin):
recommendations.append(('comments', '', OptionRecommendation.HIGH))
# >>> Use to debug generated catalog code before conversion <<<
- #setattr(opts,'debug_pipeline',os.path.expanduser("~/Desktop/Catalog debug"))
+ if False:
+ setattr(opts,'debug_pipeline',os.path.expanduser("~/Desktop/Catalog debug"))
dp = getattr(opts, 'debug_pipeline', None)
if dp is not None:
diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py
index 603ab487e9..a8cee7e1c9 100644
--- a/src/calibre/library/catalogs/epub_mobi_builder.py
+++ b/src/calibre/library/catalogs/epub_mobi_builder.py
@@ -2411,7 +2411,7 @@ Author '{0}':
current_series = ""
for idx, book in enumerate(title_list):
sort_title = self.generateSortTitle(book['series'])
- sort_title_equivalent = self.establish_equivalencies([sort_title])[0]
+ self.establish_equivalencies([sort_title])[0]
if self.letter_or_symbol(sort_equivalents[idx]) != current_letter:
# Save the old list
@@ -3879,7 +3879,7 @@ Author '{0}':
def open_archive(mode='r'):
try:
- return ZipFile(self.__archive_path, mode=mode)
+ return ZipFile(self.__archive_path, mode=mode, allowZip64=True)
except:
# Happens on windows if the file is opened by another
# process
diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py
index f3e0510750..7969a0e032 100644
--- a/src/calibre/library/database2.py
+++ b/src/calibre/library/database2.py
@@ -11,7 +11,7 @@ import os, sys, shutil, cStringIO, glob, time, functools, traceback, re, \
from collections import defaultdict
import threading, random
from itertools import repeat
-from math import ceil
+from math import ceil, floor
from calibre import prints, force_unicode
from calibre.ebooks.metadata import (title_sort, author_to_author_sort,
@@ -2089,7 +2089,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
return 1.0
series_indices = [x[0] for x in series_indices]
if tweaks['series_index_auto_increment'] == 'next':
- return series_indices[-1] + 1
+ return floor(series_indices[-1]) + 1
if tweaks['series_index_auto_increment'] == 'first_free':
for i in range(1, 10000):
if i not in series_indices:
diff --git a/src/calibre/library/server/base.py b/src/calibre/library/server/base.py
index d912165734..3554268c3b 100644
--- a/src/calibre/library/server/base.py
+++ b/src/calibre/library/server/base.py
@@ -78,7 +78,10 @@ class BonJour(SimplePlugin): # {{{
SimplePlugin.__init__(self, engine)
self.port = port
self.prefix = prefix
- self.mdns_services = [
+
+ @property
+ def mdns_services(self):
+ return [
('Books in calibre', '_stanza._tcp', self.port,
{'path':self.prefix+'/stanza'}),
('Books in calibre', '_calibre._tcp', self.port,
diff --git a/src/calibre/translations/af.po b/src/calibre/translations/af.po
index 44c7e4271f..6ab4b3a2b9 100644
--- a/src/calibre/translations/af.po
+++ b/src/calibre/translations/af.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
-"PO-Revision-Date: 2012-04-22 20:27+0000\n"
-"Last-Translator: Gideon Wentink \n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
+"PO-Revision-Date: 2012-08-14 16:03+0000\n"
+"Last-Translator: Albé Theunissen \n"
"Language-Team: Afrikaans \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:48+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-15 04:39+0000\n"
+"X-Generator: Launchpad (build 15801)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Doen absolute niks"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -372,7 +372,7 @@ msgstr "Wys gou ’n lys van verwante boeke"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:817
msgid "Export books from your calibre library to the hard disk"
-msgstr ""
+msgstr "Dra boeke uit jou calibre biblioteek oor na die hardeskyf"
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:822
msgid "Show book details in a separate popup"
@@ -702,7 +702,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -713,62 +713,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Hierdie profiel is bedoel vir die SONY PRS 300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Hierdie profiel is bedoel vir die SONY PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Hierdie profiel is bedoel vir die Microsoft Reader."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Hierdie profiel is bedoel vir die Mobipocket-boeke."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Hierdie profiel is bedoel vir die Hanlin V3 en sy klone."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Hierdie profiel is bedoel vir die Hanlin V5 en sy klone."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Hierdie profiel is bedoel vir die Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Hierdie profiel is bedoel vir die Cybook Opus."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Hierdie profiel is bedoel vir die Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Hierdie profiel is bedoel vir die Irex Illiad."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Hierdie profiel is bedoel vir die IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Hierdie profiel is bedoel vir die IRex Digital Reader 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Hierdie profiel is bedoel vir die B&N Nook."
@@ -783,25 +783,25 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
"Bedoel vir die iPad en soortgelyke toestelle met ’n resolusie van 768x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
"Bedoel vir die iPad 3 en soortgelyke toestelle met ’n resolusie van 1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
"Bedoel vir generiese tablettoestelle, grootte van beelde word nie aangepas "
"nie"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
@@ -809,27 +809,27 @@ msgstr ""
"Bedoel vir die Samsung Galaxy en soortgelyke tablettoestelle met ’n "
"resolusie van 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Hierdie profiel is bedoel vir die Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Hierdie profiel is bedoel vir die SONY PRS-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Geskik vir gebruik met enige e-ink-toestel"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr "Geskik vir gebruik met enige grootskerm e-ink-toestel"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Hierdie profiel is bedoel vir die 5-duim JetBook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -837,23 +837,23 @@ msgstr ""
"Hierdie profiel is bedoel vir die SONY PRS-reeks. Die 500/505/700 ens. in "
"landskapmodus. Meestal bruikbaar vir strokiesprente."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Hierdie profiel is bedoel vir die Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Hierdie profiel is bedoel vir die Amazon Kindle Fire."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Hierdie profiel is bedoel vir die B&N Nooke Color."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Hierdie profiel is bedoel vir die Sanda Bambook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -931,8 +931,8 @@ msgstr "Skakel die genoemde inprop af"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr "Pad na biblioteek te lank. Moet minder as %d karakters wees."
@@ -941,26 +941,26 @@ msgstr "Pad na biblioteek te lank. Moet minder as %d karakters wees."
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Ja"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Hoof"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Kaart A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Kaart B"
@@ -979,17 +979,17 @@ msgstr "Ontfoutlogboek"
msgid "Communicate with Android phones."
msgstr "Kommunikeer met Android-fone"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Kommunikeer met S60-fone"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Kommunikeer met WebOS-tablette."
@@ -1132,28 +1132,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Nuus"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalogus"
@@ -1216,8 +1214,8 @@ msgstr "Kry lys van boeke op toestel…"
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1227,8 +1225,8 @@ msgstr "Dra boeke na toestel oor…"
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1250,8 +1248,8 @@ msgstr "Verwyder boeke van toestel…"
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1732,6 +1730,14 @@ msgstr "Kommunikeer met die COBY"
msgid "Communicate with the Ex124G"
msgstr "Kommunikeer met die Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Kommunikeer met die Nokia 770 internettablet."
@@ -1773,21 +1779,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Alles volgens titel"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Alles volgens outeur"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1880,92 +1890,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "Kommunikeer met die Samsung SNE eBoek-leser."
@@ -3763,7 +3749,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3943,7 +3929,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4097,70 +4083,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4778,7 +4764,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5038,7 +5024,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5180,6 +5166,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5288,14 +5275,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6134,7 +6121,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6272,6 +6259,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6419,7 +6407,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6443,7 +6431,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6462,7 +6450,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6566,164 +6554,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8426,216 +8388,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9146,7 +9113,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9161,13 +9128,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9295,12 +9262,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11105,7 +11072,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -12001,12 +11968,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12987,159 +12954,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13148,7 +13122,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13158,49 +13132,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13607,17 +13581,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15617,42 +15608,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16539,43 +16530,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17261,24 +17277,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17298,15 +17314,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17407,118 +17423,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17526,35 +17539,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17564,15 +17571,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17583,20 +17590,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17687,7 +17694,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17955,7 +17962,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17966,30 +17973,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -18001,17 +18008,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -18020,20 +18027,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18043,15 +18050,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18064,40 +18071,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18111,13 +18118,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18125,34 +18132,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18167,18 +18174,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18186,33 +18193,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18235,31 +18242,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18513,7 +18520,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/ar.po b/src/calibre/translations/ar.po
index 3a9f8b36d8..1b0b332bf3 100644
--- a/src/calibre/translations/ar.po
+++ b/src/calibre/translations/ar.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: iso_639_3\n"
"Report-Msgid-Bugs-To: https://bugs.launchpad.net/calibre\n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-05-24 09:38+0000\n"
"Last-Translator: abbas \n"
"Language-Team: awadh alghaamdi \n"
@@ -17,8 +17,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n % 100 >= "
"3 && n % 100 <= 10 ? 3 : n % 100 >= 11 && n % 100 <= 99 ? 4 : 5;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:49+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:26+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
"X-Poedit-Country: SAUDI ARABIA\n"
"Language: ar\n"
"X-Poedit-Language: Arabic\n"
@@ -68,8 +68,8 @@ msgstr "لا يفعل شيئًا"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -157,7 +157,7 @@ msgstr "لا يفعل شيئًا"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -200,8 +200,8 @@ msgstr "لا يفعل شيئًا"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -227,15 +227,15 @@ msgstr "لا يفعل شيئًا"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -767,7 +767,7 @@ msgstr ""
"وثيقة الإدخال."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -779,62 +779,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "ملف التعريف هذا مُعد لجهاز سوني PRS 300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "ملف التعريف هذا مُعد لجهاز سوني PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "ملف التعريف هذا مُعد لقارئ ميكروسوفت."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "ملف التعريف هذا مُعد لكتب Mobipocket."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "ملف التعريف هذا مُعد لـ Hanlin V3 ونُسَخَه."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "ملف التعريف هذا يستخدم مع Hanlin V5 وأمثاله."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "ملف التعريف هذا يستخدم مع Cybook G3"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "ملف التعريف هذا يستخدم مع Cybook Opus ."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "ملف التعريف هذا يستخدم مع Amazon Kindle ."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "ملف التعريف هذا يستخدم مع Irex Illiad ."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "ملف التعريف هذا يستخدم مع IRex Digital Reader 1000 ."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "يهدف هذا الملف للقارئ الرقمية آيركس 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "ملف التعريف هذا يستخدم مع B&N Nook ."
@@ -851,48 +851,48 @@ msgstr ""
"ملف التعريف هذا يحاول تقديم افتراضات عاقلة و مفيدة إذا كنت ترغب في إصدار "
"وثيقة للقراءة في جهاز الكمبيوتر أو على مجموعة من الأجهزة."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr "المقصود لأجهزة مماثلة وباد مع قرار من 768x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr "موجه لآيباد 3 والأجهزة المماثلة التي تستخدم جودة 1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr "المقصود لأجهزة الكمبيوتر اللوحي عامة ، لا يوجد تغيير حجم الصور"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
"المقصود لغالاكسي سامسونج وأجهزة الكمبيوتر اللوحي مماثلة مع قرار من 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "نسخ النص ويهدف هذا الملف للقارئ كوبو."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "ملف التعريف هذا يستخدم مع سوني PRS-300 ."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "مناسبة للاستخدام مع أي جهاز إلكتروني للحبر"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr "مناسبة للاستخدام مع أي جهاز للحبر مع شاشه كبيره"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "ملف التعريف هذا يستخدم مع الخمسة بوصة JetBook ."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -900,23 +900,23 @@ msgstr ""
"ملف التعريف هذا يستخدم مع سوني خط إنتاج PRS . الـ500/505/700 الخ ، في وضع "
"أفقي.غالباً مفيد للكاريكاتيرات."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "ملف التعريف هذا يستخدم مع Amazon Kindle DX"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "هذا الملف موجه لكيندل فاير التابع لأمازون"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "ويهدف هذا الملف للون الزواية B & N."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "ويهدف هذا الملف لBambook ساندا."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -996,8 +996,8 @@ msgstr "تعطيل الملحق المسمى"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr "الطريق إلى المكتبة وقتا طويلا. يجب أن يكون أقل %d من أحرف"
@@ -1006,26 +1006,26 @@ msgstr "الطريق إلى المكتبة وقتا طويلا. يجب أن يك
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "نعم"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "الصفحة الرئيسية"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "بلكبيبي"
@@ -1044,7 +1044,7 @@ msgstr "تصحيح السجل"
msgid "Communicate with Android phones."
msgstr "التواصل مع هواتف أندرويد ."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1052,11 +1052,11 @@ msgstr ""
"مفصولة بفواصل قائمة الدلائل إلى إرسال البريد إلى الكتب على الجهاز. وسيتم "
"استخدام أول واحد موجود"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "تواصل معا هواتف S60."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "يتصل مع المتصفحات اللوحية التي تستخدم نظام .WebOS"
@@ -1205,28 +1205,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "الأخبار"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "الفهرس"
@@ -1292,8 +1290,8 @@ msgstr "يجري إحصاء قائمة كتب من الجهاز..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1303,8 +1301,8 @@ msgstr "يجري تحويل الكتب إلى الجهاز..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1326,8 +1324,8 @@ msgstr "يجري حذف الكتب من الجهاز..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1814,6 +1812,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "التواصل مع نوكيا 770"
@@ -1855,15 +1861,18 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "كل حسب العنوان"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "جميع البلاغ"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
@@ -1872,6 +1881,7 @@ msgstr ""
"الجهاز . و تشمل الاحتمالات التالية: "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1977,92 +1987,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr "يجري إحصاء معلومات الجهاز..."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "الإتصال مع جهاز قارئ الكتب الالكترونية Samsung SNE ."
@@ -3989,7 +3975,7 @@ msgstr "كلا"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "العنوان"
@@ -4182,7 +4168,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4337,70 +4323,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "المحتويات"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "صقحة العنوان"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "الفهرس"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "المسرد"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "شكر وتقدير"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "ببليوغرافيا"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "بيانات الطبع"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "حقوق المؤلف"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "الإهداء"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "كتابة منقوشة"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "افتتاحية"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "قائمة الرسوم"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr "قائمة الجداول"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "الملاحظات"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "افتتاحية"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "النصّ الرئيسي"
@@ -5022,7 +5008,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5282,7 +5268,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5425,6 +5411,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5536,14 +5523,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6387,7 +6374,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6525,6 +6512,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6672,7 +6660,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6696,7 +6684,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6715,7 +6703,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6819,164 +6807,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8681,216 +8643,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr "تتوافر أي تفاصيل."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr "احصل على معلومات الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr "احصل على قائمة الكتب على الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr "ارسل الميتاداتا إلى الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr "رفع %d كتاب إلى الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr "حذف كتب من الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr "تنزيل الكتب من الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr "عرض كتاب على الجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr "إرسال وحذف من المكتبة"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "خطأ"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr "خطأ في الاتصال بالجهاز"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "الجهاز: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr " تم كشفه."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9401,7 +9368,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "تاريخ"
@@ -9416,13 +9383,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9550,12 +9517,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11367,7 +11334,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -12263,12 +12230,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "الصفحة التالية"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "الصفحة السابقة"
@@ -13258,159 +13225,166 @@ msgstr "استخدم المستعرض& الداخلي في:"
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13419,7 +13393,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13429,49 +13403,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13889,17 +13863,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15900,42 +15891,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "بحوث"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "ابحث عن اسم مكرر"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16786,43 +16777,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "القسم التالي"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "القسم السابق"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17508,24 +17524,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17545,15 +17561,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17654,118 +17670,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17773,35 +17786,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17811,15 +17818,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17837,20 +17844,20 @@ msgstr ""
"حدد كل الكتب التي كتبها '{0}\"، وتطبيق تصحيح قيمة الكاتب ترتيب الفوقية في "
"الحوار تحرير ، ثم إعادة إنشاء الكتالوج.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17944,7 +17951,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -18212,7 +18219,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -18223,30 +18230,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -18258,17 +18265,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -18277,20 +18284,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr "إظهار التفاصيل لكل عمود."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18300,15 +18307,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18321,40 +18328,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18368,13 +18375,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18382,34 +18389,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr "غير معروف تقرير الاختيار"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18424,18 +18431,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18443,33 +18450,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18492,31 +18499,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18770,7 +18777,7 @@ msgstr "جميع الكتب"
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr "الأجد"
diff --git a/src/calibre/translations/ast.po b/src/calibre/translations/ast.po
index b70bdbf4cc..0e05d11e60 100644
--- a/src/calibre/translations/ast.po
+++ b/src/calibre/translations/ast.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2011-09-26 16:28+0000\n"
"Last-Translator: Xandru \n"
"Language-Team: Asturian \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:49+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:27+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Nun fai nada"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -706,7 +706,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -716,62 +716,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr ""
@@ -786,69 +786,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -924,8 +924,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -934,26 +934,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -972,17 +972,17 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1110,28 +1110,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr ""
@@ -1192,8 +1190,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1203,8 +1201,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1226,8 +1224,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1704,6 +1702,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1745,21 +1751,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1852,92 +1862,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3732,7 +3718,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3912,7 +3898,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4066,70 +4052,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4747,7 +4733,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5007,7 +4993,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5149,6 +5135,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5257,14 +5244,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6103,7 +6090,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6241,6 +6228,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6388,7 +6376,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6412,7 +6400,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6431,7 +6419,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6535,164 +6523,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8395,216 +8357,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9115,7 +9082,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9130,13 +9097,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9264,12 +9231,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11074,7 +11041,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11970,12 +11937,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12956,159 +12923,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13117,7 +13091,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13127,49 +13101,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13576,17 +13550,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15586,42 +15577,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16508,43 +16499,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17230,24 +17246,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17267,15 +17283,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17376,118 +17392,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17495,35 +17508,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17533,15 +17540,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17552,20 +17559,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17656,7 +17663,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17924,7 +17931,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17935,30 +17942,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17970,17 +17977,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17989,20 +17996,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18012,15 +18019,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18033,40 +18040,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18080,13 +18087,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18094,34 +18101,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18136,18 +18143,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18155,33 +18162,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18204,31 +18211,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18482,7 +18489,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/az.po b/src/calibre/translations/az.po
index 57815a110c..213b412de9 100644
--- a/src/calibre/translations/az.po
+++ b/src/calibre/translations/az.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-08-07 14:00+0000\n"
"Last-Translator: Emin Mastizadeh \n"
"Language-Team: Azerbaijani \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-08 04:36+0000\n"
-"X-Generator: Launchpad (build 15757)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:27+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Heç bir şey etmir"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -704,7 +704,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -714,62 +714,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Bu profil Cybook G3 üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Bu profil Cybook Opus üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Bu profil Amazon Kindle üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Bu profil Irex Illiad üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Bu profil IRex Digital Reader 1000 üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Bu profil IRex Digital Reader 8000 üçün nəzərdə tutulmuşdur"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Bu profil B&N Nook üçün nəzərdə tutulmuşdur"
@@ -784,69 +784,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr "İpad və 768x1024 ekranlı oxşar qurğular üçün nəzərdə tutulan profil."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -922,8 +922,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -932,26 +932,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -970,17 +970,17 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1108,28 +1108,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr ""
@@ -1190,8 +1188,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1201,8 +1199,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1224,8 +1222,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1702,6 +1700,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1743,21 +1749,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1850,92 +1860,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3730,7 +3716,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3910,7 +3896,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4064,70 +4050,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4745,7 +4731,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5005,7 +4991,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5147,6 +5133,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5255,14 +5242,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6101,7 +6088,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6239,6 +6226,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6386,7 +6374,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6410,7 +6398,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6429,7 +6417,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6533,164 +6521,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8393,216 +8355,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9113,7 +9080,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9128,13 +9095,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9262,12 +9229,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11072,7 +11039,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11968,12 +11935,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12954,159 +12921,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13115,7 +13089,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13125,49 +13099,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13574,17 +13548,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15584,42 +15575,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16506,43 +16497,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17228,24 +17244,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17265,15 +17281,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17374,118 +17390,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17493,35 +17506,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17531,15 +17538,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17550,20 +17557,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17654,7 +17661,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17922,7 +17929,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17933,30 +17940,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17968,17 +17975,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17987,20 +17994,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18010,15 +18017,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18031,40 +18038,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18078,13 +18085,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18092,34 +18099,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18134,18 +18141,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18153,33 +18160,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18202,31 +18209,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18480,7 +18487,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po
index f2054cc56d..573ae08b40 100644
--- a/src/calibre/translations/bg.po
+++ b/src/calibre/translations/bg.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre 0.4.51\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2011-09-18 08:58+0000\n"
"Last-Translator: Nelly Hoang \n"
"Language-Team: bg\n"
@@ -14,8 +14,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:50+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:28+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
"Generated-By: pygettext.py 1.5\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
@@ -26,8 +26,8 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Не прави абсолютно нищо"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -736,7 +736,7 @@ msgstr ""
"знаеш нищо за входящия документ."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -747,62 +747,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Този профил е предназначен за SONY PRS 300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Този профил е предназначен за SONY PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Този профил е предназначен за Microsoft Reader."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Този профил е предназначен за Mobipocket книги"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Този профил е предназначен за Hanlin V3"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Този профил е предназначен за Hanlin V5"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Този профил е предназначен за Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Този профил е предназначен за Cybook Opus."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Този профил е предназначен за Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Този профил е предназначен за Irex Illiad."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Този профил е предназначен за IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Този профил е предназначен за IRex Digital Reader 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Този профил е предназначен за B&N Nook."
@@ -820,52 +820,52 @@ msgstr ""
"се опитваш да създадеш документ, който ще бъде използван от компютър или "
"друго устройство."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
"Предназначен(и) за iPad и подобни устройства с резолюция от 768x1024 px"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
"Предназначен(и) за стандартни таблетни устройства, не преоразмерява "
"изображения"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
"Предназначен за Samsung Galaxy и подобни таблети с резолюция 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Този профил е предназначен за Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Този профил е предназначен за SONY PRS-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Подходящ за употреба с всевъзможни е-мастилени устройства"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
"Подходящ за употреба с всевъзможни е-мастилени устройства с голям екран"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Този профил е предназначен за 5-inch JetBook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -873,23 +873,23 @@ msgstr ""
"Този профил е предназначен за SONY PRS линия продукти. Модел 500/505/700 и "
"т.н., landscape формат. Основно използван за комикси."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Този профил е предназначен за Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Този профил е предназначен за B&N Nook Color."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Този профил е предназначен за Sanda Bambook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -970,8 +970,8 @@ msgstr "Деактивиране на избраната добавка"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -980,26 +980,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Да"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -1018,7 +1018,7 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr "Комуникирай с Android устройства"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1026,11 +1026,11 @@ msgstr ""
"Списък с деректориите за изпращане на електронни книги на устройството, "
"разделен със запетайки. Ще бъде използван първият съществуващ."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Комуникирай със S60 устройства"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Сподели с WebOS таблети"
@@ -1170,28 +1170,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Новини"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Каталог"
@@ -1252,8 +1250,8 @@ msgstr "Взимане на списък с книги от устройство
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1263,8 +1261,8 @@ msgstr "Прехвърляне на книги към устройството..
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1286,8 +1284,8 @@ msgstr "Премахване на книги от устройството..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1764,6 +1762,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1805,21 +1811,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr "Коментарите са премахнати, тъй като SONY четеца се затруднява с тях"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Всички по заглавие"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Всички по автор"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1923,92 +1933,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3808,7 +3794,7 @@ msgstr "Не"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Заглавие"
@@ -3988,7 +3974,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4142,70 +4128,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Съдържание"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "Заглавна страница"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "Индекс"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "Речник"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "Благодарности"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "Библиография"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "Послеслов"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "Авторски права"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "Посвещение"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "Епиграф"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "Предисловие"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "Списък на Илюстрации"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "Бележки"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "Предговор"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "Основен текст"
@@ -4823,7 +4809,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5083,7 +5069,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5225,6 +5211,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5333,14 +5320,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6179,7 +6166,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr "Няма книги"
@@ -6317,6 +6304,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6464,7 +6452,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6488,7 +6476,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6507,7 +6495,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6611,164 +6599,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr "CSV/XML опции"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8471,216 +8433,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "Грешка"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr "Няма подходящи формати"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "Устройство: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr "Няма устройство"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr "Няма карта"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr "Няма място на устройството"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9191,7 +9158,7 @@ msgstr "Местоположение"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "Дата"
@@ -9206,13 +9173,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9340,12 +9307,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11150,7 +11117,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -12046,12 +12013,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "Следваща страница"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "Предишна страница"
@@ -13032,159 +12999,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13193,7 +13167,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13203,49 +13177,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13652,17 +13626,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15664,42 +15655,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16586,43 +16577,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17308,24 +17324,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17345,15 +17361,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17454,118 +17470,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17573,35 +17586,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17611,15 +17618,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17630,20 +17637,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17734,7 +17741,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -18002,7 +18009,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -18013,30 +18020,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -18048,17 +18055,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -18067,20 +18074,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18090,15 +18097,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18111,40 +18118,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18158,13 +18165,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18172,34 +18179,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18214,18 +18221,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18233,33 +18240,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18282,31 +18289,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18560,7 +18567,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/bn.po b/src/calibre/translations/bn.po
index 2fa1e8f300..5b2945a351 100644
--- a/src/calibre/translations/bn.po
+++ b/src/calibre/translations/bn.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-04-12 14:19+0000\n"
"Last-Translator: Kazi Shahnoor Ashraf \n"
"Language-Team: Bengali \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:49+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:27+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "আসলে কিছুই করে না"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -700,7 +700,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -710,62 +710,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr ""
@@ -780,69 +780,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -918,8 +918,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -928,26 +928,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -966,17 +966,17 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1104,28 +1104,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr ""
@@ -1186,8 +1184,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1197,8 +1195,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1220,8 +1218,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1698,6 +1696,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1739,21 +1745,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1846,92 +1856,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3726,7 +3712,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3906,7 +3892,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4060,70 +4046,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4741,7 +4727,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5001,7 +4987,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5143,6 +5129,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5251,14 +5238,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6097,7 +6084,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6235,6 +6222,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6382,7 +6370,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6406,7 +6394,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6425,7 +6413,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6529,164 +6517,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8389,216 +8351,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9109,7 +9076,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9124,13 +9091,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9258,12 +9225,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11068,7 +11035,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11964,12 +11931,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12950,159 +12917,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13111,7 +13085,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13121,49 +13095,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13570,17 +13544,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15580,42 +15571,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16502,43 +16493,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17224,24 +17240,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17261,15 +17277,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17370,118 +17386,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17489,35 +17502,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17527,15 +17534,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17546,20 +17553,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17650,7 +17657,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17918,7 +17925,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17929,30 +17936,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17964,17 +17971,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17983,20 +17990,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18006,15 +18013,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18027,40 +18034,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18074,13 +18081,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18088,34 +18095,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18130,18 +18137,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18149,33 +18156,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18198,31 +18205,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18476,7 +18483,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/br.po b/src/calibre/translations/br.po
index b773dcefe4..af33280593 100644
--- a/src/calibre/translations/br.po
+++ b/src/calibre/translations/br.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2011-08-13 04:22+0000\n"
"Last-Translator: Denis \n"
"Language-Team: Breton \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:50+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:28+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Ne ra netra da vat"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -703,7 +703,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -713,62 +713,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr ""
@@ -783,69 +783,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -921,8 +921,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -931,26 +931,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -969,17 +969,17 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1107,28 +1107,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Keleier"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalog"
@@ -1189,8 +1187,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1200,8 +1198,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1223,8 +1221,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1701,6 +1699,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1742,21 +1748,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1849,92 +1859,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3732,7 +3718,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3912,7 +3898,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4066,70 +4052,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4747,7 +4733,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5007,7 +4993,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5149,6 +5135,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5257,14 +5244,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6103,7 +6090,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6241,6 +6228,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6388,7 +6376,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6412,7 +6400,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6431,7 +6419,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6535,164 +6523,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8395,216 +8357,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9115,7 +9082,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9130,13 +9097,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9264,12 +9231,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11074,7 +11041,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11970,12 +11937,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12956,159 +12923,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13117,7 +13091,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13127,49 +13101,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13576,17 +13550,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15586,42 +15577,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16508,43 +16499,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17230,24 +17246,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17267,15 +17283,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17376,118 +17392,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17495,35 +17508,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17533,15 +17540,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17552,20 +17559,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17656,7 +17663,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17924,7 +17931,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17935,30 +17942,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17970,17 +17977,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17989,20 +17996,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18012,15 +18019,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18033,40 +18040,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18080,13 +18087,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18094,34 +18101,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18136,18 +18143,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18155,33 +18162,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18204,31 +18211,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18482,7 +18489,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/bs.po b/src/calibre/translations/bs.po
index 14ea40ccd0..8a21529952 100644
--- a/src/calibre/translations/bs.po
+++ b/src/calibre/translations/bs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-01-02 13:31+0000\n"
"Last-Translator: Kenan Dervišević \n"
"Language-Team: Bosnian \n"
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:50+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:28+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -27,8 +27,8 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -116,7 +116,7 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -159,8 +159,8 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -186,15 +186,15 @@ msgstr "Ne radi apsolutno ništa"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -706,7 +706,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -716,62 +716,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr ""
@@ -786,69 +786,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -924,8 +924,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -934,26 +934,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr ""
@@ -972,17 +972,17 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1110,28 +1110,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Vijesti"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalog"
@@ -1192,8 +1190,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1203,8 +1201,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1226,8 +1224,8 @@ msgstr "Uklanjam knjige sa uređaja..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1704,6 +1702,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1745,21 +1751,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1852,92 +1862,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3732,7 +3718,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Naslov"
@@ -3912,7 +3898,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4066,70 +4052,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Sadržaj"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4748,7 +4734,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5008,7 +4994,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5150,6 +5136,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5258,14 +5245,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6104,7 +6091,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6242,6 +6229,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6389,7 +6377,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6413,7 +6401,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6432,7 +6420,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6536,164 +6524,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8396,216 +8358,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9116,7 +9083,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9131,13 +9098,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9265,12 +9232,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11075,7 +11042,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11971,12 +11938,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12957,159 +12924,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13118,7 +13092,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13128,49 +13102,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13577,17 +13551,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15589,44 +15580,44 @@ msgstr "%p%"
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "Pretrage"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr "Preimenuj korisničku kategoriju"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
"Ne možete koristiti tačke u imenu prilikom preimenovanja korisničke "
"kategorije"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr "Ime %s već postoji"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "Duplo ime pretrage"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr "Sačuvano ime pretrage %s već postoji."
@@ -16513,43 +16504,68 @@ msgstr ""
msgid "No results found for:"
msgstr "Nema rezultata za:"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr "Pog&ledaj u rječniku"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr "Traži &sljedeće pojavljivanje"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr "Idi na..."
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "Sljedeća sekcija"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "Prethodna sekcija"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr "Početak dokumenta"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr "Kraj dokumenta"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr "Početak sekcije"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr "Kraj sekcije"
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr "Pomjeri se na sljedeću stranicu"
@@ -17235,24 +17251,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17272,15 +17288,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17381,118 +17397,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17500,35 +17513,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17538,15 +17545,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17557,20 +17564,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr "Nema dostupnih knjiga koje bi se mogle dodati u katalog"
@@ -17661,7 +17668,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17929,7 +17936,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17940,30 +17947,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17975,17 +17982,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17994,20 +18001,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18017,15 +18024,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18038,40 +18045,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18085,13 +18092,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18099,34 +18106,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18141,18 +18148,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18160,33 +18167,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18209,31 +18216,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18487,7 +18494,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po
index 30863d70a4..e78991256a 100644
--- a/src/calibre/translations/ca.po
+++ b/src/calibre/translations/ca.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ca\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-07-23 10:57+0000\n"
"Last-Translator: jmontane \n"
"Language-Team: \n"
@@ -18,8 +18,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:50+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:28+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -29,8 +29,8 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -118,7 +118,7 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -161,8 +161,8 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -188,15 +188,15 @@ msgstr "No fa res"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -743,7 +743,7 @@ msgstr ""
"sabeu res del document d'entrada."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -754,62 +754,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Aquest perfil és adient per al SONY PRS-300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Aquest perfil és adient per al SONY PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Aquest perfil és adient per al Microsoft Reader."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Aquest perfil és adient per a llibres Mobipocket."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Aquest perfil és adient per al Hanlin V3 i els seus clons."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Aquest perfil és adient per al Hanlin V5 i els seus clons."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Aquest perfil és adient per al Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Aquest perfil és adient per al Cybook Opus"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Aquest perfil és adient per a l'Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Aquest perfil és adient per a l'Irex Illiad"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Aquest perfil és adient per a l'IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Aquest perfil és adient per a l'IRex Digital Reader 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Aquest perfil és adient per al B&N Nook."
@@ -827,23 +827,23 @@ msgstr ""
"si voleu generar un document que es pugui llegir en un PC o en un conjunt "
"ampli de dispositius diferents."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
"Adient per a l'iPAD i dispositius similars amb una resolució de 768x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
"Pensat per a l'iPad 3 i dispositius similars amb una resolució de 1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr "Adient per a tauletes tàctils genèriques, no redimensiona imatges"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
@@ -851,30 +851,30 @@ msgstr ""
"Adient per al Samsung Galaxy i tauletes tàctils similars amb una resolució "
"de 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Aquest perfil és adient per al Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Aquest perfil és adient per al SONY PRS-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr ""
"Adequat per utilitzar-lo amb qualsevol dispositiu de tinta electrònica"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
"Adequat per utilitzar-lo amb qualsevol dispositiu de tinta electrònica de "
"pantalla gran"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Aquest perfil és adient per al 5-inch JetBook"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -882,23 +882,23 @@ msgstr ""
"Aquest perfil és adient per a la línia PRS de SONY. Models 500/505/700... en "
"mode apaïsat. Sobretot és útil per als còmics."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Aquest perfil és adient per a l'Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Aquest perfil és adient per a l'Amazon Kindle Fire."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Aquest perfil és adient per al B&N Nook Color."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Aquest perfil és adient per al Sanda Bambook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -986,8 +986,8 @@ msgstr "Inhabilita el connector anomenat"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -997,26 +997,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Sí"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Inici"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Targeta A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Targeta B"
@@ -1038,7 +1038,7 @@ msgstr "Registre de depuració"
msgid "Communicate with Android phones."
msgstr "Comunica't amb telèfons Android"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1046,11 +1046,11 @@ msgstr ""
"Llista de carpetes del dispositiu separades per comes on s'enviaran els "
"llibres. Es farà servir la primera que ja existeixi al dispositiu."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Comunica't amb telèfons S60."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Comunica't amb tauletes tàctils WebOS."
@@ -1214,28 +1214,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Notícies"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Catàleg"
@@ -1304,8 +1302,8 @@ msgstr "S'està aconseguint la llista de llibres del dispositiu..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1315,8 +1313,8 @@ msgstr "S'està transferint llibres al dispositiu..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1338,8 +1336,8 @@ msgstr "S'estan suprimint els llibres del dispositiu..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1864,6 +1862,14 @@ msgstr "Comunica't amb el COBY"
msgid "Communicate with the Ex124G"
msgstr "Comunica't amb l'Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Comunica't amb una tauleta tàctil d'internet Nokia 770."
@@ -1905,15 +1911,18 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr "S'ha suprimit els comentaris perquè el lector SONY hi té problemes"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Tots per títol"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Tots per autor"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
@@ -1922,6 +1931,7 @@ msgstr ""
"col·leccions al dispositiu. Possibilitats: "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -2044,92 +2054,68 @@ msgstr ""
"amb múltiples autors. Deixeu-la inhabilitada si utilitzeu quadres de "
"connexions de metadades."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr "Obté informació del dispositiu..."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "Comunica't amb un lector Samsung SNE."
@@ -4412,7 +4398,7 @@ msgstr "No"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Títol"
@@ -4618,7 +4604,7 @@ msgstr ""
"amb ISBN des de LibraryThing.com\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4796,70 +4782,70 @@ msgid "No details available"
msgstr "No es disposa de detalls"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Índex"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "Pàgina del títol"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "Índex"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "Glossari"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "Agraïments"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "Bibliografia"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "Colofó"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "Drets d'autor"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "Dedicatòria"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "Epígraf"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "Prefaci"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "Índex d'il·lustracions"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr "Índex de taules"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "Anotacions"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "Pròleg"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "Text principal"
@@ -5563,7 +5549,7 @@ msgid "Merging user annotations into database"
msgstr "S'estan incorporant les anotacions de l'usuari a la base de dades"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr "Obté les anotacions (experimental)"
@@ -5842,7 +5828,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5998,6 +5984,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -6116,14 +6103,14 @@ msgid "Main memory"
msgstr "Memòria principal"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr "Targeta de memòria A"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr "Targeta de memòria B"
@@ -7053,7 +7040,7 @@ msgid "The specified directory could not be processed."
msgstr "La carpeta que s'ha indicat no es pot processar."
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr "Cap llibre"
@@ -7208,6 +7195,7 @@ msgstr ""
"los a la biblioteca del calibre"
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -7359,7 +7347,7 @@ msgstr "Opcions de BibTeX"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -7383,7 +7371,7 @@ msgstr "Opcions específiques per"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -7402,7 +7390,7 @@ msgstr "sortida"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -7513,177 +7501,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr "Opcions de CSV/XML"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr "Opcions dels llibres"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
-msgstr "Seccions que s'inclouran al catàleg."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr "Seccions incloses"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr "Llibres per &gènere"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr "&Afegits recentment"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr "&Descripcions"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr "Llibres per &sèrie"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr "Llibres per &títol"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr "Llibres per autor"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-"
Patró per defecte \n"
-"\\[.+\\]\n"
-"exclou etiquetes del tipus [tag], \n"
-"per exemple, [Projecte Gutenberg]"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr "Gèneres exclosos"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr "Etiquetes que s'&exclouran"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-"Els llibres que coincideixin amb algun patró no s'inclouran al catàleg que "
-"es generi. "
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr "Llibres exclosos"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-"
Llista separada per comes d'etiquetes que s'exclouran.\n"
-"Per defecte: ~,catàleg"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
-msgstr "&Columna/valor"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr "Columna que conté criteris d'exclusió addicionals"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr "Patró d'exclusió"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-"Es mostraran els llibres que coincideixen amb una marca de verificació"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr "Lectura de llibres"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr "Columna que conté l'estat «llegit»"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr "Patró de «llibre llegit»"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr "Altres opcions"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
-msgstr "Etiqueta de «desitjat»"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
-msgstr "Es mostraran els llibres etiquetats com a «desitjats» amb una X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr "Amplada de la minia&tura"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr "Mida suggerida per a les miniatures de les portades a «Descripció»"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr " polsada"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
-msgstr "Nota de la &descripció"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-"Columna personalitzada origen de la nota que s'inclourà a la zona de "
-"l'encapçalament de la descripció"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr "&Fusiona amb comentaris"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-"Contingut addicional que es fusionarà als comentaris en generar el catàleg"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
-msgstr "Fusiona els continguts addicionals abans dels comentaris"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr "A&bans"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
-msgstr "Fusiona els continguts addicionals després dels comentaris"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr "&Després"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-"Separa els comentaris i el contingut addicional amb una barra horitzontal"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr "&Separador"
@@ -9490,135 +9439,140 @@ msgstr "etiquetes que s'afegiran"
msgid "tags to remove"
msgstr "etiquetes que se suprimiran"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr "No hi ha detalls disponibles"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr "El dispositiu ja no està connectat"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr "Depura la detecció de dispositius"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr "Aconsegueix informació del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr "Aconsegueix la llista de llibres del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr "Aconsegueix anotacions del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr "Envia les metadades al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr "Envia les col·leccions al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr "Carrega %d llibres al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr "Suprimeix llibres del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr "Baixa llibres del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr "Visualitza un llibre del dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr "Configura l'acció d'enviar al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr "Envia a la memòria principal"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr "Envia a la targeta de memòria A"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr "Envia a la targeta de memòria B"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr "Memòria principal"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr "Envia un format concret a"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr "Envia i suprimeix de la biblioteca"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr "Expulsa el dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "Error"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr "Error a la comunicació amb el dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr "No hi ha formats adequats"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr "Selecciona la carpeta que s'obrirà com a dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr "Tasques en execució"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
"No es pot configurar el dispositiu mentres hi ha tasques del dispositiu "
"executant-se."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr "Configura %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr "Desconnecta el dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr "Desconnecteu i torneu a connectar %s per aplicar els canvis."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr "Hi ha hagut un error en comunicar-se amb el dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
@@ -9626,76 +9580,76 @@ msgstr ""
"Hi ha hagut un error temporal en la comunicació amb el dispositiu. "
"Desconnecteu i torneu a connectar el dispositiu o torneu a arrencar."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "Dispositiu: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr " detectat"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr "seleccionat per enviar"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr "No hi ha cap dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr "No hi ha cap dispositiu connectat"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr "%(num)i de %(total)i llibres"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr "0 de %i llibres"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr "Tria el format que s'enviarà al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr "No s'ha pogut enviar: no hi ha cap dispositiu connectat"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr "Sense targeta"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr "No s'ha pogut enviar: el dispositiu no té targeta de memòria"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
"S'ha de convertir automàticament aquests llibres abans de carregar-los al "
"dispositiu?"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr "S'estan enviant els catàlegs al dispositiu."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr "S'estan enviant les notícies al dispositiu."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr "S'estan enviant els llibres al dispositiu."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
@@ -9704,11 +9658,11 @@ msgstr ""
"un format adequat. Convertiu primer el(s) llibre(s) a un format compatible "
"amb el vostre dispositiu."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr "No hi ha espai al dispositiu"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr "
No es pot desar llibres al dispositiu perquè no hi ha prou espai "
@@ -10351,7 +10305,7 @@ msgstr "Ubicació"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "Data"
@@ -10366,13 +10320,13 @@ msgstr "%(curr)s (era %(initial)s)"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr "L'element està en blanc"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr "No es pot deixar un element en blanc. En tot cas l'heu d'esborrar."
@@ -10509,12 +10463,12 @@ msgid "Copy to author"
msgstr "Copia a autor"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr "El nom de l'autor no és vàlid"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr "Els noms d'autor no poden contenir caràcters &."
@@ -12509,7 +12463,7 @@ msgid "The template box cannot be empty"
msgstr "El quadre de la plantilla no pot estar buit"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr "Estableix el color de la columna:"
@@ -13444,12 +13398,12 @@ msgid "LRF Viewer toolbar"
msgstr "Barra d'eines del visor de LRF"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "Pàgina següent"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "Pàgina anterior"
@@ -14573,87 +14527,87 @@ msgstr "Fes servir el &visor intern per a:"
msgid "Reset all disabled &confirmation dialogs"
msgstr "Reinicia tots els diàlegs de &confirmació que s'hagin desactivat"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr "és cert"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr "és fals"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr "no està definit"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr "té identificador"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr "no té identificador"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr "és igual a"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr "és menor que"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr "és major que"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr "té"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr "no té"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr "té el patró"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr "no té el patró"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr "està establert"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr "no està establert"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr "és"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr "no és"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr "coincideix amb el patró"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr "no coincideix amb el patró"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr "Si la columna ___ ___"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
@@ -14661,76 +14615,83 @@ msgstr ""
"Introduïu un tipus d'identificador o un tipus d'identificador i un valor en "
"la forma «identificador:valor»"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
msgid "Enter a number"
msgstr "Introduïu un nombre"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
msgid "Enter a date in the format YYYY-MM-DD"
msgstr "Introduïu una data en el format AAAA-MM-DD"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
msgid "Enter a string."
msgstr "Introduïu una cadena"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
msgid "Enter a regular expression"
msgstr "Introduïu una expressió regular"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr "Podeu fer coincidir múltiples valors si els separeu amb %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr "Crea/edita una regla de pintat de columna"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr "Crea una regla de pintat omplint els quadres de més avall"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr "a"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr "Només si es compleixen les condicions següents:"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr "Afegeix una altra condició"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
"Es pot inhabilitar una condició deixant en blanc tots els seus quadres"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr "Text d'exemple"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr "Condició no vàlida"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr "Una de les condicions per a aquesta regla no és vàlida: %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr "No hi ha condicions"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
"Per a aquesta regla s'ha d'especificar almenys una condició que no estigui "
"buida"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -14743,7 +14704,7 @@ msgstr ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
"
Si la columna %(col)s%(action)s el valor: %(val)s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
@@ -14776,36 +14737,36 @@ msgstr ""
"«Afegeix una regla» més avall per començar.
Podeu canviar una regla "
"existent fent-hi doble clic."
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr "Afegeix una regla"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr "Suprimeix una regla"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr "Mou la regla seleccionada amunt"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr "Mou la regla seleccionada avall"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr "Afegeix una regla avançada"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr "No s'ha seleccionat cap regla"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr "No s'ha seleccionat cap regla per a %s."
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr "supressió"
@@ -15280,18 +15241,35 @@ msgstr ""
msgid "Colors"
msgstr "Colors"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
-msgstr "S'està aconseguint la informació de depuració"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr "&Copia al porta-retalls"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
-msgstr "Depura la detecció de dispositius"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
+msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
msgid "Getting device information"
@@ -17642,48 +17620,48 @@ msgstr "%p%"
msgid "The grouped search term name is \"{0}\""
msgstr "El nom del terme de cerca agrupada és «{0}»"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
"El canvi dels autors de diversos llibres pot trigar una estona. N'esteu "
"segur?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
"El canvi de les metadadades de tots aquests llibres pot trigar una estona. "
"N'esteu segur?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "Cerques"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr "Canvia el nom a la categoria d'usuari"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
"No es pot utilitzar punts al nom quan s'està canviant el nom de categories "
"d'usuari"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr "El nom %s ja s'està utilitzant"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "El nom de la cerca està duplicat"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr "El nom de cerca %s ja existeix."
@@ -18644,43 +18622,68 @@ msgstr ""
msgid "No results found for:"
msgstr "No hi ha resultats per a:"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr "&Cerca al diccionari"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr "&Cerca la coincidència següent"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr "Vés a..."
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "Propera secció"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "Secció anterior"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr "Inici del document"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr "Final del document"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr "Inici de la secció"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr "Final de la secció"
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr "Desplaçar-se a la pàgina següent"
@@ -19450,24 +19453,24 @@ msgstr ""
"complert del servidor o l'adreça IP de l'ordinador on s'executa el calibre."
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr "activat"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr "sí"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr "no"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr "desactivat"
@@ -19487,15 +19490,15 @@ msgstr "aquest mes"
msgid "daysago"
msgstr "fa dies"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr "buit"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr "en blanc"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr "Consulta booleana no vàlida «{0}»"
@@ -19645,168 +19648,115 @@ msgstr ""
"Per defecte: «%default»\n"
"S'aplica als formats de sortida CSV, XML"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Títol del catàleg generat. Es farà servir com a títol a les metadades.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Desa la sortida de les diferents fases del canal de la conversió a la "
-"carpeta que s'indica. Això és útil si no esteu segurs de la fase de la "
-"conversió en què es produeix l'errada.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub, MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-"camp:patró que especifica el camp personalitzat i els continguts que "
-"indiquen que s'ha d'excloure un llibre.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePuB i MOBI"
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Expressió regular que descriu les etiquetes que no es consideraran gèneres.\n"
-"Per defecte: «%default» exclou les etiquetes entre claudàtors, per exemple "
-"[etiqueta]\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-"Llista separada per comes d'etiquetes que indiquen que el llibre s'ha "
-"d'excloure de la sortida. Per exemple: «salta» coincideix amb «salta aquest "
-"llibre» i «Salta els que siguin com aquest». Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Autors» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub, MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Descripcions» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub, MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Gènere» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Títols» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Sèrie» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inclou la secció «Afegits recentment» al catàleg.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Camp personalitzat amb el text de la nota que s'inserirà a la capçalera de "
-"la descripció.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-":[before|after]:[True|False] que especifica:\n"
-" Camp personalitzat amb les notes que es fusionaran amb "
-"els comentaris\n"
-" [before|after] La posició de les notes respecte els comentaris\n"
-" [True|False] Insereix una línia horitzontal entre les notes i els "
-"comentaris\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -19814,51 +19764,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Especifica el perfil de sortida. A vegades cal un perfil de sortida per "
-"optimitzar el catàleg per al dispositiu. Per exemple, «kindle» o «kindle_dx» "
-"creat un índex estructurat amb seccions i articles.\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-"camp:patró que indica que el llibre s'ha llegit.\n"
-"Per defecte: «%default%»\n"
-"S'aplica als formats de sortida ePub, MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-"Mida suggerida en polzades per a les portades del catàleg.\n"
-"Interval: 1.0-2.0\n"
-"Per defecte: «%default»\n"
-"S'aplica als formats de sortida ePub i MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-"Etiqueta que fa que el llibre es mostri com a element de la llista de "
-"desitjos.\n"
-"Per defecte: «%default»\n"
-"S'aplica a formats de sortida ePub, MOBI"
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -19870,15 +19798,15 @@ msgstr ""
msgid "Symbols"
msgstr "Símbols"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr "No hi ha cap gènere habilitat al catàleg.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr "No es disposa de cap llibre per catalogar"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -19896,7 +19824,7 @@ msgstr ""
"Seleccioneu tots el llibre de «{0}», apliqueu un ordre per autor correcte\n"
"al quadre d'edició de metadades i aleshores torneu a generar el catàleg.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -19906,7 +19834,7 @@ msgstr ""
"Autor «{0}»:\n"
"«{1}» <> «{2}»\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
@@ -19914,7 +19842,7 @@ msgstr ""
"No s'ha trobar cap llibre per catalogar.\n"
"Comproveu els criteris d'exclusió de llibres a les opcions de llibre.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr "No es disposa de cap llibre per incloure al catàleg."
@@ -20021,7 +19949,7 @@ msgstr ""
"defecte no es filtra."
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -20351,7 +20279,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr "Heu d'indicar etiqueta, nom i tipus de dades"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -20370,7 +20298,7 @@ msgstr ""
"genera.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
@@ -20380,7 +20308,7 @@ msgstr ""
"Si es declara, s'ignora --search.\n"
"Per defecte: totes"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
@@ -20390,16 +20318,16 @@ msgstr ""
"documentació del tema al Manual de l'usuari.\n"
"Per defecte: sense filtre"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr "Mostra informació de sortida detallada. Útil per a depurar"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr "Error: Heu d'indicar un fitxer de sortida del catàleg"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -20420,7 +20348,7 @@ msgstr ""
" l'ordre custom_columns.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
@@ -20428,11 +20356,11 @@ msgstr ""
"Si la columna conté múltiples valors, afegeix els valors que s'indiquen als "
"que ja hi ha, en lloc de substituir-los."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr "Error: Heu d'indicar un nom de camp, ID i valor"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -20447,20 +20375,20 @@ msgstr ""
"etiquetes de columna i les IDs.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr "Mostra els detalls de cada columna."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr "Perdreu totes les dades de la columna %r. N'esteu segur (s/n)? "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr "s"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -20477,15 +20405,15 @@ msgstr ""
" les columnes disponibles amb l'ordre custom_columns.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr "No demanis confirmació"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr "Error: Heu d'indicar una etiqueta per a la columna"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -20507,40 +20435,40 @@ msgstr ""
" es sobreescriurà.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr "Error: Heu d'indicar una acció (add/remove/list)"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr "Nom:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr "Cadena de cerca:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr "Error: Heu d'indicar un nom i una cadena de cerca"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr "s'ha afegit"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr "Error: Heu d'indicar un nom"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr "s'ha suprimit"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr "Error: No es reconeix l'acció %s, ha de ser una de «add/remove/list»"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -20554,7 +20482,7 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
@@ -20562,7 +20490,7 @@ msgstr ""
"Normalment aquesta ordre només actua en llibres que tenen fitxers OPF "
"obsolets. Aquesta opció fa que actuï en tots els llibres."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -20574,12 +20502,12 @@ msgstr ""
"Fes algunes comprovacions al sistema de fitxers que hi ha en una biblioteca. "
"Els resultats són {0}\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr "Sortida CSV"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
@@ -20587,7 +20515,7 @@ msgstr ""
"Llista d'informes separats per comes.\n"
"Per defecte: tots"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
@@ -20595,7 +20523,7 @@ msgstr ""
"Llista de les extensions que s'ignoraran separada per comes.\n"
"Per defecte: totes"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
@@ -20603,11 +20531,11 @@ msgstr ""
"Llista de noms que s'ignoraran separats per comes.\n"
"Per defecte: tots"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr "Informe de comprovació desconegut"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -20637,19 +20565,19 @@ msgstr ""
"OPF.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
"Fes la recuperació. L'ordre no s'executa si no s'especifica aquesta opció."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr "Heu d'introduir l'opció %s per fer una recuperació"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -20662,7 +20590,7 @@ msgstr ""
"La\n"
"informació equival al que es mostra a la subfinestra d'etiquetes.\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
@@ -20670,7 +20598,7 @@ msgstr ""
"Genera només la sortida del nombre d'elements en una categoria en lloc del "
"recompte per element a cada categoria"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
@@ -20678,7 +20606,7 @@ msgstr ""
"El caràcter que es posarà al voltant del valor de la categoria en mode CSV. "
"Per defecte són les cometes (\")."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
@@ -20686,17 +20614,17 @@ msgstr ""
"Llista separada per comes dels noms de la categoria de cerca.\n"
"Per defecte: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
"La cadena que es farà servir per separar els camps en mode CSV. Per defecte "
"és una coma."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr "ELEMENTS DE LES CATEGORIES"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -20730,32 +20658,32 @@ msgstr ""
"L'etiqueta només pot contenir lletres minúscules, nombres i guions baixos, i "
"ha de començar amb una lletra"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr "%(tt)sLa valoració mitjana és %(rating)3.1f"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr "s'ha restaurat la preferència "
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr "s'està creant una columna personalitzada "
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
"
S'està migrant la base de dades antiga a la biblioteca de %s
"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr "S'està copiant %s"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr "S'està compactant la base de dades"
@@ -21056,7 +20984,7 @@ msgstr "Tots els llibres"
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr "El més recent"
diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot
index 9f2b982ee9..c8978082cd 100644
--- a/src/calibre/translations/calibre.pot
+++ b/src/calibre/translations/calibre.pot
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: calibre 0.8.64\n"
-"POT-Creation-Date: 2012-08-10 11:27+IST\n"
-"PO-Revision-Date: 2012-08-10 11:27+IST\n"
+"Project-Id-Version: calibre 0.8.65\n"
+"POT-Creation-Date: 2012-08-17 09:50+IST\n"
+"PO-Revision-Date: 2012-08-17 09:50+IST\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@@ -24,8 +24,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:346
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -36,8 +36,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:661
-#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:464
-#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:465
+#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:468
+#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:469
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:497
#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:57
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/chm_input.py:109
@@ -162,7 +162,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:821
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:822
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:380
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:191
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:206
@@ -175,7 +175,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:245
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:256
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:387
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:397
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:174
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:178
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:204
@@ -186,19 +186,19 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2180
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2334
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2758
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3405
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3407
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3544
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:160
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:163
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:79
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:164
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:188
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:66
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:88
@@ -890,19 +890,19 @@ msgid "Yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1208
msgid "Main"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1210
msgid "Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1212
msgid "Card B"
msgstr ""
@@ -923,11 +923,11 @@ msgstr ""
msgid "Comma separated list of directories to send e-books to on the device. The first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:285
msgid "Communicate with S60 phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:304
msgid "Communicate with WebOS tablets."
msgstr ""
@@ -1031,28 +1031,28 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:103
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
-#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
-#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
+#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773
+#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:244
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:250
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:284
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1061
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1067
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1102
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1199
#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3262
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3236
msgid "Catalog"
msgstr ""
@@ -1109,8 +1109,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:807
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1120,8 +1120,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:818
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:829
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1143,8 +1143,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:849
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:855
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1577,6 +1577,10 @@ msgstr ""
msgid "Communicate with MTP devices"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/windows/driver.py:43
+msgid "The Windows Portable Devices service is not available on your computer. You may need to install Windows Media Player 11 or newer and/or restart your computer"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr ""
@@ -1618,23 +1622,23 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "All by title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "All by author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:132
msgid "Comma separated list of metadata fields to turn into collections on the device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:135
#, python-format
msgid ". Two special collections are available: %(abt)s:%(abtv)s and %(aba)s:%(abav)s. Add these values to the list to enable them. The collections will be given the name provided after the \":\" character."
msgstr ""
@@ -1703,60 +1707,69 @@ msgstr ""
msgid "Set this option if you want the author on the Sony to appear the same way the T1 sets it. This means it will only show the first author for books with multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:57
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "If checked, use the port number in the \"Port\" box, otherwise the driver will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
-msgid "Port"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:127
+msgid "Port number: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid "Enter the port number the driver is to use if the \"fixed port\" box is checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:129
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:130
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:140
+msgid "Enable the no-activity timeout"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:141
+#, python-format
+msgid "If this box is checked, calibre will automatically disconnect if a connected device does nothing for %d minutes. Unchecking this box disables this timeout, so calibre will never automatically disconnect."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:563
#, python-format
msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:671
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
@@ -1801,56 +1814,57 @@ msgstr ""
msgid "Communicate with the Wexler reader."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:286
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:287
#, python-format
msgid "Unable to detect the %s disk drive. Try rebooting."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:467
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:468
#, python-format
msgid "Unable to detect the %s mount point. Try rebooting."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:535
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:536
#, python-format
msgid "Unable to detect the %s disk drive."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:613
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:614
#, python-format
msgid "Unable to detect the %s disk drive. Either the device has already been ejected, or your kernel is exporting a deprecated version of SYSFS."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:622
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:623
#, python-format
msgid "Unable to mount main memory (Error code: %d)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:673
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:674
#, python-format
msgid "The main memory of %s is read only. This usually happens because of file system errors."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:808
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:809
msgid "Unable to mount the device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:979
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:981
-msgid "The reader has no storage card in this slot."
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:987
+#, python-format
+msgid "The reader has no storage card %s. You may have changed the default send to device action. Right click on the send to device button and reset the default action to be \"Send to main memory\"."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:983
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:992
#, python-format
msgid "Selected slot: %s is not supported."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1012
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1021
msgid "There is insufficient free space in main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1014
-#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1016
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1023
+#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1025
msgid "There is insufficient free space on the storage card"
msgstr ""
@@ -2299,23 +2313,23 @@ msgid "Comic"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:45
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:262
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:270
msgid "When present, use author sort field as author."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:49
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:266
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:274
msgid "Don't add Table of Contents to the book. Useful if the book has its own table of contents."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:52
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:269
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:277
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:57
msgid "Title for any generated in-line table of contents."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:56
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:273
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:281
msgid "Disable compression of the file contents."
msgstr ""
@@ -2328,17 +2342,17 @@ msgid "Ignore margins in the input document. If False, then the MOBI output plug
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:69
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:277
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:285
msgid "When adding the Table of Contents to the book, add it at the start of the book instead of the end. Not recommended."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:73
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:281
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:289
msgid "Extract the contents of the MOBI file to the specified directory. If the directory already exists, it will be deleted."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:78
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:286
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:294
msgid "Enable sharing of book content via Facebook etc. on the Kindle. WARNING: Using this feature means that the book will not auto sync its last read position on multiple devices. Complain to Amazon."
msgstr ""
@@ -2346,7 +2360,11 @@ msgstr ""
msgid "By default calibre converts all images to JPEG format in the output MOBI file. This is for maximum compatibility as some older MOBI viewers have problems with other image formats. This option tells calibre not to do this. Useful if your document contains lots of GIF/PNG images that become very large when converted to JPEG."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:127
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:93
+msgid "By default calibre generates MOBI files that contain the old MOBI 6 format. This format is compatible with all devices. However, by changing this setting, you can tell calibre to generate MOBI files that contain both MOBI 6 and the new KF8 format, or only the new KF8 format. KF8 has more features than MOBI 6, but only works with newer Kindles."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/mobi_output.py:136
#: /home/kovid/work/calibre/src/calibre/ebooks/epub/periodical.py:125
msgid "All articles"
msgstr ""
@@ -3202,7 +3220,7 @@ msgid "Producer"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:936
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245
msgid "Comments"
@@ -3226,6 +3244,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:524
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1741
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140
msgid "Series"
msgid_plural "Series"
@@ -3348,7 +3368,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:958
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
msgstr ""
@@ -4382,7 +4402,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1004
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:366
@@ -4516,7 +4536,6 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5664,7 +5683,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -5688,7 +5707,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -5721,7 +5740,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:188
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:158
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:36
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:47
@@ -5811,10 +5830,72 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
msgid "E-book options"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:125
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:686
+msgid "any date"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:125
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:684
+msgid "any value"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:127
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:682
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:684
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:686
+msgid "unspecified"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:530
+#, python-format
+msgid "Are you sure you want to delete '%s'?"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:532
+#, python-format
+msgid "Are you sure you want to delete rules #%d-%d?"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:533
+msgid "Delete Rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:682
+msgid "False"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:682
+msgid "True"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:707
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:798
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90
+#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257
+msgid "Name"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:708
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:800
+msgid "Field"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:709
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:801
+msgid "Value"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:799
+msgid "Prefix"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
msgid "Enabled sections will be included in the generated catalog."
msgstr ""
@@ -6116,17 +6197,17 @@ msgid "Use author &sort for author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:54
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:81
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:77
msgid "&Title for Table of Contents:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:55
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:77
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:86
msgid "Enable sharing of book content via Facebook, etc. WARNING: Disables last read syncing"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:56
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:76
msgid "Do not add Table of Contents to book"
msgstr ""
@@ -6804,22 +6885,26 @@ msgstr ""
msgid "MOBI Output"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:75
-msgid "Kindle options"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:76
-msgid "Personal Doc tag:"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:79
msgid "Ignore &margins"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:84
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:81
msgid "Do not convert all images to &JPEG (may result in images not working in older viewers)"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:83
+msgid "Kindle options"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:84
+msgid "MOBI file &type:"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:85
+msgid "Personal Doc tag:"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35
msgid "Page Setup"
msgstr ""
@@ -7773,6 +7858,10 @@ msgstr ""
msgid "
Cannot upload books to device there is no more free space available "
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1454
+msgid "Incorrect destination"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:140
msgid "Unknown formats"
msgstr ""
@@ -8031,13 +8120,6 @@ msgstr ""
msgid "(fixable)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:90
-#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:257
-msgid "Name"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:342
msgid "Path from library"
msgstr ""
@@ -8256,13 +8338,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:930
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -8385,12 +8467,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:980
msgid "Author names cannot contain & characters."
msgstr ""
@@ -8509,7 +8591,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:335
#: /home/kovid/work/calibre/src/calibre/gui2/proceed.py:79
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:596
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595
msgid "Copied"
msgstr ""
@@ -8542,7 +8624,7 @@ msgid "Standard metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:62
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:918
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:928
msgid "Custom metadata"
msgstr ""
@@ -8605,58 +8687,58 @@ msgstr ""
msgid "In regular expression mode, the search text is an arbitrary python-compatible regular expression. The replacement text can contain backreferences to parenthesized expressions in the pattern. The search is not anchored, and can match and replace multiple times on the same string. The modification functions (lower-case etc) are applied to the matched text, not to the field as a whole. The destination box specifies the field where the result after matching and replacement is to be assigned. You can replace the text in the field, or prepend or append the matched text. See this reference for more information on python's regular expressions, and in particular the 'sub' function."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:554
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:555
msgid "S/R TEMPLATE ERROR"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:702
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:703
msgid "You must specify a destination when source is a composite field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:708
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:709
msgid "You must specify a destination identifier type"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:932
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933
msgid "Search/replace invalid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:933
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:934
#, python-format
msgid "Search pattern is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:989
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990
#, python-format
msgid ""
"Applying changes to %d books.\n"
"Phase {0} {1}%%."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1019
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:614
msgid "Delete saved search/replace"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1020
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1021
msgid "The selected saved search/replace will be deleted. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1040
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1045
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1050
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1056
msgid "Save search/replace"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1041
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1047
msgid "Search/replace name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1046
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1052
msgid "You must provide a name."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1057
msgid "That saved search/replace already exists and will be overwritten. Are you sure?"
msgstr ""
@@ -8838,13 +8920,13 @@ msgid "Set from &ebook file(s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:559
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:724
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:569
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:734
msgid "&Basic metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:609
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:566
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:576
msgid "&Custom metadata"
msgstr ""
@@ -9336,6 +9418,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:520
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1088
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113
msgid "Authors"
msgstr ""
@@ -10835,7 +10919,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:876
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:271
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:438
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:320
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:448
msgid "Permission denied"
msgstr ""
@@ -11140,7 +11225,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:272
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:439
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:321
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:449
#, python-format
msgid "Could not open %s. Is it being used by another program?"
msgstr ""
@@ -11490,54 +11576,54 @@ msgstr ""
msgid " [%(num)d of %(tot)d]"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:323
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:330
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:333
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:340
msgid "Could not read cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:324
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:334
#, python-format
msgid "Could not read cover from %s format"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:341
#, python-format
msgid "The cover in the %s format is invalid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:506
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:516
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:521
#, python-format
msgid "Save changes and edit the metadata of %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:609
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:812
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:822
msgid "Change cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:667
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:677
msgid "Co&mments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:707
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:853
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:717
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:863
msgid "&Metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:712
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:722
msgid "&Cover and formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:782
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:792
msgid "C&ustom metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:793
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:803
msgid "&Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:869
msgid "Basic metadata"
msgstr ""
@@ -14276,40 +14362,40 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:766
msgid "Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:771
msgid "Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:858
#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:936
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:956
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:965
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:985
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -15526,30 +15612,30 @@ msgstr ""
msgid "Toggle"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:509
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:508
#, python-format
msgid "Choose your e-book device. If your device is not in the list, choose a \"%s\" device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:570
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:569
msgid "Moving library..."
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:585
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:586
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:587
msgid "Failed to move library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:641
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:640
msgid "Invalid database"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:642
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:641
#, python-format
msgid "
An invalid library already exists at %(loc)s, delete it before trying to move the existing library. Error: %(err)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:653
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:652
msgid "Could not move library"
msgstr ""
@@ -16132,6 +16218,29 @@ msgstr ""
msgid "No books available to catalog"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:522
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:964
+msgid "Titles"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:526
+msgid "Genres"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:528
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1443
+msgid "Recently Added"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:530
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1536
+msgid "Recently Read"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:532
+msgid "Descriptions"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
@@ -16149,16 +16258,37 @@ msgid ""
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:817
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:819
msgid "No books available to include in catalog"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2443
+#, python-format
+msgid "Series beginning with %s"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2550
+#, python-format
+msgid "Titles beginning with %s"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2647
+#, python-format
+msgid "Authors beginning with '%s'"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3555
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:3559
+msgid "by "
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/library/check_library.py:26
msgid "Invalid titles"
msgstr ""
@@ -16746,17 +16876,17 @@ msgstr ""
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3570
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3599
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3616
msgid "Compacting database"
msgstr ""
@@ -17611,219 +17741,219 @@ msgstr ""
msgid "Working..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:115
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:139
msgid "Brazilian Portuguese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:116
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:140
msgid "English (UK)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:141
msgid "Simplified Chinese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:118
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:142
msgid "Chinese (HK)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:119
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:143
msgid "Traditional Chinese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:120
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:144
msgid "English"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:121
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:145
msgid "English (Argentina)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:122
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:146
msgid "English (Australia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:123
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:147
msgid "English (Japan)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:124
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:148
msgid "English (Germany)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:125
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:149
msgid "English (Bulgaria)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:126
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:150
msgid "English (Egypt)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:127
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:151
msgid "English (New Zealand)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:128
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:152
msgid "English (Canada)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:129
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:153
msgid "English (Greece)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:130
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:154
msgid "English (India)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:131
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:155
msgid "English (Nepal)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:132
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:156
msgid "English (Thailand)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:133
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:157
msgid "English (Turkey)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:134
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:158
msgid "English (Cyprus)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:135
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:159
msgid "English (Czech Republic)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:136
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:160
msgid "English (Philippines)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:137
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:161
msgid "English (Pakistan)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:138
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:162
msgid "English (Croatia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:139
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:163
msgid "English (Hong Kong)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:140
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:164
msgid "English (Indonesia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:141
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:165
msgid "English (Israel)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:142
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:166
msgid "English (Russia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:143
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:167
msgid "English (Singapore)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:144
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:168
msgid "English (Yemen)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:145
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:169
msgid "English (Ireland)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:146
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:170
msgid "English (China)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:147
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:171
msgid "English (South Africa)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:148
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:172
msgid "Spanish (Paraguay)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:149
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:173
msgid "Spanish (Uruguay)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:150
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:174
msgid "Spanish (Argentina)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:151
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:175
msgid "Spanish (Mexico)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:152
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:176
msgid "Spanish (Cuba)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:153
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:177
msgid "Spanish (Chile)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:154
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:178
msgid "Spanish (Ecuador)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:155
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:179
msgid "Spanish (Honduras)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:156
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:180
msgid "Spanish (Venezuela)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:157
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:181
msgid "Spanish (Bolivia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:158
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:182
msgid "Spanish (Nicaragua)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:159
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:183
msgid "Spanish (Colombia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:160
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:184
msgid "German (AT)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:161
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:185
msgid "French (BE)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:162
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:186
msgid "Dutch (NL)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:163
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:187
msgid "Dutch (BE)"
msgstr ""
#. NOTE: Ante Meridian (i.e. like 10:00 AM)
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:171
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:195
msgid "AM"
msgstr ""
#. NOTE: Post Meridian (i.e. like 10:00 PM)
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:173
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:197
msgid "PM"
msgstr ""
#. NOTE: Ante Meridian (i.e. like 10:00 am)
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:175
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:199
msgid "am"
msgstr ""
#. NOTE: Post Meridian (i.e. like 10:00 pm)
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:177
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:201
msgid "pm"
msgstr ""
diff --git a/src/calibre/translations/cs.po b/src/calibre/translations/cs.po
index 7810cc9c95..51502338b8 100644
--- a/src/calibre/translations/cs.po
+++ b/src/calibre/translations/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-07-31 12:00+0000\n"
"Last-Translator: Štěpán Krb \n"
"Language-Team: Czech \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:51+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:29+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Nedělá vůbec nic"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -727,7 +727,7 @@ msgstr ""
"pokud nevíte nic o vstupním dokumentu."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -738,62 +738,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Tento profil je určený pro SONY PSR 300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Tento profil je určený pro SONY PSR-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Tento profil je určený pro Microsoft Reader."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Tento profil je určený pro knihy Mobipocket."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Tento profil je určený pro Hanlin V3 a jeho klony."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Tento profil je určený pro Hanlin V5 a jeho klony."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Tento profil je určený pro Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Tento profil je určený pro Cybook Opus."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Tento profil je určený pro Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Tento profil je určený pro Irex Illiad."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Tento profil je určený pro IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Tento profil je určený pro IRex Digital Reader 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Tento profil je určený pro B&N Nook."
@@ -811,21 +811,21 @@ msgstr ""
"pokud chcete vytvořit dokument určený ke čtení na počítači nebo na řadě "
"zařízení."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr "Určeno pro iPad a podobná zařízení s rozlišením 768x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr "Určený pro iPad 3 a podobné zařízení s rozliením 1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr "Určeno pro tablety, nemění velikost obrázků"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
@@ -833,29 +833,29 @@ msgstr ""
"Určeno pro Samsung Galaxy a podobná zařízení typu tablet s rozlišením "
"600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Tento profil je určený pro Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Tento profil je určený pro SONY PSR-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Vhodné pro použití s jakýmkoliv zařízením s elektronickým inkoustem"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
"Vhodné pro použití s jakýmkoliv velkoformátovým zařízením s elektronickým "
"inkoustem"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Tento profil je určený pro 5\" JetBook"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -863,23 +863,23 @@ msgstr ""
"Tento profil je určený pro řadu SONY PRS. Modely 500/505/700 atd., pro čtení "
"na šířku. Užitečné především pro čtení komiksu."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Tento profil je určený pro Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Tento profil je určen pro Amazon Kindle Fire."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Tento profil je určený pro B&N Nook Color."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Tento profil je určený pro Sanda Bambook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr "Tento profil je určen pro zařízení řady PocketBook Pro 900."
@@ -963,8 +963,8 @@ msgstr "Zakázat uvedený modul"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr "Cesta ke složce knihovny je moc dlouhá. Musí mít méně než %d znaků."
@@ -973,26 +973,26 @@ msgstr "Cesta ke složce knihovny je moc dlouhá. Musí mít méně než %d znak
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Ano"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Hlavní"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Karta A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Karta B"
@@ -1013,7 +1013,7 @@ msgstr "Protokol ladění"
msgid "Communicate with Android phones."
msgstr "Komunikace s telefony Android."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1021,11 +1021,11 @@ msgstr ""
"Seznam adresářů oddělený čárkami k odeslání elektronických knih do zařízení. "
"Bude použit první nalezený."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Komunikovat s telefony S60."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Spojeno s tablety s WebOS"
@@ -1178,28 +1178,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Zprávy"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalog"
@@ -1267,8 +1265,8 @@ msgstr "Získávání seznam knih v zařízení..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1278,8 +1276,8 @@ msgstr "Přenos knih do zařízení..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1301,8 +1299,8 @@ msgstr "Odebírání knih ze zařízení..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1799,6 +1797,14 @@ msgstr "Spojeno s COBY"
msgid "Communicate with the Ex124G"
msgstr "Komunikace s Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Komunikace s tabletem Nokia 770."
@@ -1840,15 +1846,18 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr "Komentáře byly odebrány, protože způsobují zamrznutí čtečky SONY."
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Vše podle názvu"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Vše podle autora"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
@@ -1857,6 +1866,7 @@ msgstr ""
"zařízeni. Možnosti zahrnují: "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1970,92 +1980,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr "Zjistit informace o zařízení..."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "Komunikace se čtečkou Samsung SNE."
@@ -4157,7 +4143,7 @@ msgstr "Ne"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Název"
@@ -4363,7 +4349,7 @@ msgstr ""
"LibraryThing.com\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4530,70 +4516,70 @@ msgid "No details available"
msgstr "Žádné detaily nejsou k dispozici"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Obsah"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "Titulní stránka"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "Rejstřík"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "Slovník pojmů"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "Pděkování"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "Bibliografie"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "Tiráž"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "Autorská práva"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "Věnování"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "Doslov"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "Předmluva"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "Seznam Ilustrací"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr "Seznam tabulek"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "Poznámky"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "Úvod"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "Hlavní text"
@@ -5276,7 +5262,7 @@ msgid "Merging user annotations into database"
msgstr "Sloučení uživatelských anotací (komentářů) do databáze"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr "Stáhnout anotace (experimentální)"
@@ -5549,7 +5535,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5697,6 +5683,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5813,14 +5800,14 @@ msgid "Main memory"
msgstr "Hlavní paměť"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr "Paměťová karta A"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr "Paměťová karta B"
@@ -6699,7 +6686,7 @@ msgid "The specified directory could not be processed."
msgstr "Zadaný adresář nebylo možné zpracovat."
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr "Žádné knihy"
@@ -6851,6 +6838,7 @@ msgstr ""
"knihovny"
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -7000,7 +6988,7 @@ msgstr "BibTeX volby"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -7024,7 +7012,7 @@ msgstr "Možnosti specifické pro"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -7043,7 +7031,7 @@ msgstr "výstup"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -7147,164 +7135,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr "CSV/XML volby"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr "E-book volby"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr "Zahrnuté sekce"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr "Knihy podle &žánru"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr "Nedávno &přidané"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr "&Popisy"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr "Knihy podle &série"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr "Knihy podle &titulu"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr "Knihy podle autora"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr "Vynechané žánry"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr "Tagy k &vynechání"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr "Vynechané knihy"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
-msgstr "&Sloupec/hodnota"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr "Vynechaný vzor"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr "Číst knihy"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr "Knihy obsahující status 'čtené'"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr "Další volby"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr " palec"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
-msgstr "&Popisná poznámka"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr "&Spojit s komentáři"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr "&Před"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr "&Po"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr "&Oddělovač"
@@ -9043,207 +9005,212 @@ msgstr "tagy k přidání"
msgid "tags to remove"
msgstr "tagy k odstranění"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr "Nejsou dostupné žádné detaily."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr "Zařízení už není připojené"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr "Ladit detekci zařízení"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr "Získat informace o zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr "Získat seznam knih v zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr "Získat anotace ze zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr "Odeslat metadata do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr "Odestat kolekci do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr "Odeslat %d knih do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr "Smazat knihy ze zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr "Převzít knihy ze zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr "Zobrazit knihu v zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr "Nastavit výchozí nastavení pro odeslání do čtečky"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr "Odeslat do hlavní paměti"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr "Odeslat na pamětovou kartu A"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr "Odeslat na pamětovou kartu B"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr "Hlavní paměť"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr "Poslat specifický formát"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr "Odeslat a smazat z knihovny"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr "Odpojit zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "Chyba"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr "Cyba komunikace se zařízením"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr "Žádné vhodné formáty"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr "Označit složku a otevřít jako zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr "Běžící úlohy"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr "Konfigurovat %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr "Odpojit zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr "Chyba komunikace se zařízením"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "Zařízení: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr " nalezeno."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr "vybrané k odeslání"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr "Žádné zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr "0 z %i Knih"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr "Vyberte formát k odeslání do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr "Nemohu odeslat: Není připojeno žádné zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr "Žádná karta"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr "Nemohu odeslat: Zařízení nemá pamětovou kartu."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
"Automaticky zkonvertovat následující knihy, než se nahrají do zařízení?"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr "Odeslat katalog do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr "Odesílám zprávy do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr "Odesílám knihy do zařízení"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
@@ -9252,11 +9219,11 @@ msgstr ""
"žádné vhodné formáty. Převést knihu(y) do formátu, které přístroj primárně "
"podporuje."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr "Na zařízení není volné místo"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9862,7 +9829,7 @@ msgstr "Umístění"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "Datum"
@@ -9877,13 +9844,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr "Položka je prázdná"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr "Položka nemůže být nastavena na nic. Smažte ji."
@@ -10019,12 +9986,12 @@ msgid "Copy to author"
msgstr "Kopírovat k autorovi"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr "Neplatné jméno autora"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr "Jméno autora nemůže obsahovat znaky &."
@@ -11891,7 +11858,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -12803,12 +12770,12 @@ msgid "LRF Viewer toolbar"
msgstr "Nástrojová išta prohlížeče LRF"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "Následující strana"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "Předcházející strana"
@@ -13815,159 +13782,166 @@ msgstr "Použít interní &prohlížeč pro:"
msgid "Reset all disabled &confirmation dialogs"
msgstr "Vyresetovat všechny zakázané potvrzovací dialogy"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13976,7 +13950,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13986,49 +13960,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -14452,18 +14426,35 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
-msgstr "Získávání ladících informací"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr "Kopírovat do schránky"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
-msgstr "Ladit detekci zařízení"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
+msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
msgid "Getting device information"
@@ -16497,42 +16488,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr "Změna autorů pro mnoho knih může trvat delší dobu. Jste si jisti?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr "Změna metadat pro tak mnoho knih bude trvat dlouho. Jste si jisti?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "Hledání"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "Zduplikovat hledané jméno"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr "Uložené vyhledávací jméno %s je již používáno."
@@ -17438,43 +17429,68 @@ msgstr ""
msgid "No results found for:"
msgstr "Žádné výsledky nenalezeny pro:"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr "Podívat do slovníku"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr "Přejít na..."
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "Další sekce"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "Předchozí sekce"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr "Začátek dokumentu"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr "Konec dokumentu"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr "Začátek sekce"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr "Konec sekce"
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr "Listovat na další stránku"
@@ -18199,24 +18215,24 @@ msgstr ""
"běží."
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr "zaškrtnuto"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr "ano"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr "ne"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr "nezaškrtnuto"
@@ -18236,15 +18252,15 @@ msgstr "tentoměsíc"
msgid "daysago"
msgstr "dní zpět"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr "prázdný"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr "prázdný"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -18361,130 +18377,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Název vygenerovaného katalogu použit jako název v metadatech.\n"
-"Výchozí: '%default'\n"
-"Platí pro: výstupní formáty ePub a MOBI"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Zahrnout 'Titles' sekci v katalogu.\n"
-"Výchozí: '%default'\n"
-"Aplikuje se na: ePub, MOBI výstupní formáty"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Zahrnout 'Série' sekci do katalogu.\n"
-"Výchozí: '%default'\n"
-"Použije se na: ePub, MOBI výstupní formáty"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Zahrnout sekci 'Nedávno přidané' do katalogu.\n"
-"Výchozí: '%default'\n"
-"Použité na: ePub, MOBI výstupní formáty"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -18492,38 +18493,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-"Tag indikující knihu jako položku seznamu přání.\n"
-"Výchozí: '%default'\n"
-"Aplikuje se na: ePub, MOBI výstupní formáty"
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -18533,15 +18525,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr "Nenalezeny žádné povolené žánry v katalogu.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr "Žádné dostupné knihy do katalogu"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -18552,14 +18544,14 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
@@ -18567,7 +18559,7 @@ msgstr ""
"Žádné dostupné knihy do katalogu.\n"
"Zkontrolujte kritérium 'Vyloučené knihy' v E-book volbě.\n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr "Žádné dostupné knihy k zařazení do katalogu"
@@ -18668,7 +18660,7 @@ msgstr ""
"Výchozí je neprovádět žádné filtrování."
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -18952,7 +18944,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr "Musíte zadat označení, název a datový typ"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -18963,7 +18955,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
@@ -18973,7 +18965,7 @@ msgstr ""
"Pokud je deklarováno, volba --search je ignorována.\n"
"Výchozí: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
@@ -18984,17 +18976,17 @@ msgstr ""
"příručce.\n"
"Výchozí: bez filtrování"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
"Zobrazit podrobné výstupní informace. Užitečné pro hledání chyb v programu"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr "Chyba: Musíte zadat výstupní soubor katalogu"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -19006,7 +18998,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
@@ -19014,11 +19006,11 @@ msgstr ""
"Pokud sloupec ukládá více hodnot, přidá zvolené hodnoty do jedné existující, "
"místo toho, aby se nahradila."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr "Chyba: Musíte zadat název pole, id a hodnotu"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -19032,20 +19024,20 @@ msgstr ""
" Seznam dostupných vlastních sloupců. Zobrazí popisky sloupců a ids.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr "Zobrazit podrobnosti pro každý sloupec."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr "Ztratíte všechna data ve sloupci: %r. Jste si jisti (a/n)? "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr "a"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -19055,15 +19047,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr "Bez dotazu na potvrzení"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr "Chyba: Musíte zadat šířku sloupce"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -19076,41 +19068,41 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr "Chyba: Musíte zadat akci (přidat|odstranit|seznam)"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr "Název:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr "Hledaný řetězec:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr "Chyba: Musíte zadat název a hledaný řetězec"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr "přidáno"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr "Chyba: Musíte zadat název"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr "odstraněno"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
"Chyba: Akce %s nebyla uznána, musí být jedna z: (přidat|odstranit|seznam)"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -19124,13 +19116,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -19140,12 +19132,12 @@ msgstr ""
"%prog check_library [options]\n"
"Provede nějaké kontroly na filesystému, kde je knihovna. Reporty jsou {0}\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr "Výstup ve formátu CSV"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
@@ -19153,7 +19145,7 @@ msgstr ""
"Čárkou oddělený seznam reportů.\n"
"Výchozí: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
@@ -19161,7 +19153,7 @@ msgstr ""
"Čárkami oddělený seznam ignorovaných přípon.\n"
"Výchozí: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
@@ -19169,11 +19161,11 @@ msgstr ""
"Čárkami oddělený seznam ignorovaných jmen.\n"
"Výchozí: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr "Neznámé hlášení o kontrole"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -19188,19 +19180,19 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
"Opravdu proveď obnovu. Příkaz nebude spuštěn, dokud je volba zvolena."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr "Musíte poskytnout %s volbu pro spuštění obnovy"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -19212,7 +19204,7 @@ msgstr ""
"Vytvoří report kategorií informací v databázi.\n"
"Informace je ekvivalentem toho, co se zobrazuje v panelu tagů.\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
@@ -19220,7 +19212,7 @@ msgstr ""
"Výstupem je jen počet položek v kategorii namísto počtu položek v rámci "
"kategorie."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
@@ -19228,7 +19220,7 @@ msgstr ""
"Znak, který se umístí kolem hodnoty kategorie v CSV módu. Výchozí jsou "
"uvozovky (\")."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
@@ -19236,15 +19228,15 @@ msgstr ""
"Čárkami oddělený seznam kategorií hledaných jmen.\n"
"Výchozí: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr "Řetězec použitý k oddělení polí v režimu CSV. Výchozí je čárka."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr "POLOŽKY KATEGORIE"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -19269,31 +19261,31 @@ msgstr ""
"Štítek musí obsahovat pouze malá písmena, číslice a podtržítka, a musí "
"začínat písmenem"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr "%(tt)s Průměrné hodnocení je %(rating)3.1f"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr "vytváření uživatelských sloupců "
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr "
Migruji starou databázi do knihovy ebooků v %s
"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr "Kopírování %s"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr "Zhutňování databáze"
@@ -19566,7 +19558,7 @@ msgstr "Všechny knihy"
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr "Nejnovější"
diff --git a/src/calibre/translations/cy.po b/src/calibre/translations/cy.po
index 0f529077cf..da964c2ba6 100644
--- a/src/calibre/translations/cy.po
+++ b/src/calibre/translations/cy.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-02-26 20:21+0000\n"
"Last-Translator: Rachael Munns \n"
"Language-Team: Welsh \n"
@@ -16,8 +16,8 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? "
"2 : 3;\n"
-"X-Launchpad-Export-Date: 2012-08-04 05:04+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:42+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -27,8 +27,8 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -116,7 +116,7 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -159,8 +159,8 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -186,15 +186,15 @@ msgstr "Dim yn gwneud dim byd"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -709,7 +709,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -720,62 +720,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Am y SONY PRS 300 y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Am y SONY PRS-900 y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Am y Microsoft Reader y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Am lyfrau Mobipocket y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Am y Hanlin V3 a'i chlonau y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Am y Hanlin V5 a'i chlonau y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Am y Cybook G3 y mae'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Am y Cybook Opus ydy'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Am yr Amazon Kindle ydy'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Am yr IRex ILiad ydy'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Am yr IRex Digital Reader 1000 ydy'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Am yr IRex Digital Reader 800 ydy'r proffeil yma"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Am y B&N Nook ydy'r proffeil yma"
@@ -790,69 +790,69 @@ msgid ""
"devices."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Am y Kobo Reader ydy'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Am y SONY PRS-300 ydy'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Yn addas am bob ddyfais e-inc"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Am y 5-modfedd JetBook ydy'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Am yr Amazon Kindle DX ydy'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Am yr Amazon Kindle Fire ydy'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Am y B&N Nook Color y mae'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Am y Sanda Bambook y mae'r proffeil yma"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr ""
@@ -928,8 +928,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr ""
@@ -939,26 +939,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Iawn"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Sail"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Cerdyn A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Cerdyn B"
@@ -977,17 +977,17 @@ msgstr "Cofnodydd dadfygio"
msgid "Communicate with Android phones."
msgstr "Cyfathrebwch gyda ffoniau Android"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Cyfathrebwch gyda ffoniau S60"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Cyfathrebwch gyda tabledau WebOS"
@@ -1115,28 +1115,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Newyddion"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Catalog"
@@ -1197,8 +1195,8 @@ msgstr "Wrthi'n adalw rhestr o lyfrau ar y ddyfais..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1208,8 +1206,8 @@ msgstr "Wrthi'n anfon lyfrau i'r ddyfais..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1231,8 +1229,8 @@ msgstr "Wrthi'n dileu lyfrau o'r ddyfais"
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1710,6 +1708,14 @@ msgstr "Cyfathrebwch gyda'r COBY"
msgid "Communicate with the Ex124G"
msgstr "Cyfathrebwch gyda'r Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Cyfathrebwich gyda'r tabled rhyngrwyd Nokia 770"
@@ -1751,21 +1757,25 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Y cyfan, trefnwyd gan y teitl"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Y cyfan, trefnwyd gan yr awdur"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1858,92 +1868,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr ""
@@ -3738,7 +3724,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr ""
@@ -3918,7 +3904,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4072,70 +4058,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr ""
@@ -4753,7 +4739,7 @@ msgid "Merging user annotations into database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -5013,7 +4999,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5155,6 +5141,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5263,14 +5250,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr ""
@@ -6109,7 +6096,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr ""
@@ -6247,6 +6234,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6394,7 +6382,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6418,7 +6406,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6437,7 +6425,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6541,164 +6529,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr ""
@@ -8401,216 +8363,221 @@ msgstr ""
msgid "tags to remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9121,7 +9088,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr ""
@@ -9136,13 +9103,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -9270,12 +9237,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr ""
@@ -11080,7 +11047,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -11976,12 +11943,12 @@ msgid "LRF Viewer toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr ""
@@ -12962,159 +12929,166 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13123,7 +13097,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13133,49 +13107,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -13582,17 +13556,34 @@ msgstr ""
msgid "Colors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
@@ -15592,42 +15583,42 @@ msgstr ""
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr ""
@@ -16514,43 +16505,68 @@ msgstr ""
msgid "No results found for:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr ""
@@ -17236,24 +17252,24 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr ""
@@ -17273,15 +17289,15 @@ msgstr ""
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -17382,118 +17398,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -17501,35 +17514,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -17539,15 +17546,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -17558,20 +17565,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -17662,7 +17669,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -17930,7 +17937,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -17941,30 +17948,30 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
"Default: no filtering"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -17976,17 +17983,17 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -17995,20 +18002,20 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18018,15 +18025,15 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18039,40 +18046,40 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -18086,13 +18093,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -18100,34 +18107,34 @@ msgid ""
"{0}\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -18142,18 +18149,18 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -18161,33 +18168,33 @@ msgid ""
"information is the equivalent of what is shown in the tags pane.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -18210,31 +18217,31 @@ msgid ""
"start with a letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr ""
@@ -18488,7 +18495,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr ""
diff --git a/src/calibre/translations/da.po b/src/calibre/translations/da.po
index e3943a4b22..a5cc649a62 100644
--- a/src/calibre/translations/da.po
+++ b/src/calibre/translations/da.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
"PO-Revision-Date: 2012-07-13 17:59+0000\n"
"Last-Translator: Jens Holm \n"
"Language-Team: Danish \n"
@@ -15,8 +15,8 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-04 04:51+0000\n"
-"X-Generator: Launchpad (build 15742)\n"
+"X-Launchpad-Export-Date: 2012-08-11 05:29+0000\n"
+"X-Generator: Launchpad (build 15780)\n"
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56
msgid "Does absolutely nothing"
@@ -26,8 +26,8 @@ msgstr "Gør absolut ingenting"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -115,7 +115,7 @@ msgstr "Gør absolut ingenting"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -158,8 +158,8 @@ msgstr "Gør absolut ingenting"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -185,15 +185,15 @@ msgstr "Gør absolut ingenting"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -727,7 +727,7 @@ msgstr ""
"du intet aner om kildedokumentet."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -739,62 +739,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Denne profil er forbeholdt SONY's PRS-300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Denne profil er forbeholdt SONY's PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Denne profil er beregnet for Microsoft Reader"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Denne profil er beregnet til Mobipocket-bøgerne"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Denne profil er beregnet til Hanlin V3 og kloner."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Denne profil er forbeholdt Harlin V5 og kloner."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Denne profil er beregnet til Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Denne profil er beregnet til Cybook Opus."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Denne profil er beregnet til Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Denne profil er beregnet til Irex Illiad."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Denne profil er beregnet til IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Denne profil er beregnet til IRex Digital Reader 800"
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Denne profil er forbeholdt B&N's Nook."
@@ -812,22 +812,22 @@ msgstr ""
"hvis du vil generere et dokument beregnet til at blive læst på computere "
"eller flere enhedstyper."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr "Beregnet til iPad og lignende enheder med en opløsning på 768x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr "Beregnet for iPad 3 og lignende enheder med opløsning på 1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
"Forbeholdt til generiske tavle-pc enheder, ændrer ikke billedstørrelser"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
@@ -835,27 +835,27 @@ msgstr ""
"Tilsigtet Samsung Galaxy og ligende tavlecomputer enheder med en opløsning "
"på 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Denne profil er beregnet til Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Denne profil er beregnet til SONY's PRS-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Egnet til brug med enhver e-blæk enhed"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr "Egnet til brug med enhver storskærms e-blæk enhed"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Denne profil er beregnet til 5\" JetBook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -863,23 +863,23 @@ msgstr ""
"Denne profil er beregnet til SONYs PRS serie. PRS 500/505/700 etc. i "
"liggende tilstand. Hovedsageligt egnet til tegneserier."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Denne profil er beregnet til Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Denne profil er beregnet til Amazon Kindle Fire"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Denne profil er forbeholdt B&N Nook Color."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Denne profil er beregnet til Sanda Bambook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr "Denne profil er til brug for PocketBook Pro 900 model serien"
@@ -966,8 +966,8 @@ msgstr "Deaktivér det angivne udvidelsesmodul"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr "Sti til bibliotek for lang. Skal være kortere end %d tegn."
@@ -976,26 +976,26 @@ msgstr "Sti til bibliotek for lang. Skal være kortere end %d tegn."
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Ja"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Main/hjem/primær"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Kort A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Kort B"
@@ -1017,7 +1017,7 @@ msgstr "Fejlsøgnings log"
msgid "Communicate with Android phones."
msgstr "Kommunikér med Android telefoner"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1025,11 +1025,11 @@ msgstr ""
"Komma separeret liste af mapper til at sende e-bøger til, på enheden. Den "
"første som findes, vil blive brugt."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Kommunikér med S60 telefoner."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Kommunikerer med WebOS tablets"
@@ -1186,28 +1186,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Nyheder"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalog"
@@ -1275,8 +1273,8 @@ msgstr "Henter liste over bøger på enheden..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1286,8 +1284,8 @@ msgstr "Overfører bøger til enhed..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1309,8 +1307,8 @@ msgstr "Fjerner bøger fra enhed..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1802,6 +1800,14 @@ msgstr ""
msgid "Communicate with the Ex124G"
msgstr "Kommunikerer nu med Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Kommunikér med Nokia 770 internet tablet."
@@ -1843,15 +1849,18 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "Alle efter titel"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Alle efter forfatter"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
@@ -1860,6 +1869,7 @@ msgstr ""
"enheden. Muligheder omfatter: "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -1952,92 +1962,68 @@ msgid ""
"multiple authors. Leave this disabled if you use Metadata Plugboards."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr "Hent enhedsoplysninger..."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "Kommunikér med Samsung SNE ebogslæser."
@@ -4073,7 +4059,7 @@ msgstr "Nej"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Titel"
@@ -4268,7 +4254,7 @@ msgstr ""
"fra LibraryThing.com\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4426,70 +4412,70 @@ msgid "No details available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Indholdsfortegnelse"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "Titelside"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "Indeks"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "Ordliste"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "Anerkendelser"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "Litteraturliste"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "Kolofon"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "Ophavsret"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "Dedikation"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "Epigraf"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "Forord"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "Illustrationsliste"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr "Tabelliste"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "Bemærkninger"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "Forord"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "Hovedtekst"
@@ -5162,7 +5148,7 @@ msgid "Merging user annotations into database"
msgstr "Fletter brugernoter ind i database"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr "Hent noter (eksperimentiel)"
@@ -5424,7 +5410,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -5566,6 +5552,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -5675,14 +5662,14 @@ msgid "Main memory"
msgstr "Arbejdshukommelse"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr "Hukommelsekort A"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr "Hukommelsekort B"
@@ -6539,7 +6526,7 @@ msgid "The specified directory could not be processed."
msgstr "Den angivne mappe kunne ikke behandles."
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr "Ingen bøger"
@@ -6691,6 +6678,7 @@ msgstr ""
"importeret ind i calibres bibliotek"
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -6841,7 +6829,7 @@ msgstr "BibTeX valg"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -6865,7 +6853,7 @@ msgstr "Muligheder angivet til"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -6884,7 +6872,7 @@ msgstr "output"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -6988,164 +6976,138 @@ msgstr ""
msgid "CSV/XML Options"
msgstr "CSV/XML valgmuligheder"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr "E-bogsmuligheder"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr "Bøger efter &genre"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr "Seneste &tilføjede"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr "&Beskrivelser"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr "Bøger efter &series"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr "Bøger efter &titel"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr "Bøger efter forfatter"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr "Læste bøger"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr "Søjler indeholdende 'læst' status"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr "'læst bog' mønster"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr "Andre valgmuligheder"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr "&Før"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr "&Efter"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr "&Separator"
@@ -8883,206 +8845,211 @@ msgstr "Mærker at tilføje"
msgid "tags to remove"
msgstr "Mærker at fjerne"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr "Ingen detaljer tilgængelig."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr "Enhed er ikke længere forbundet."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr "Fejlfind enhedsdetektion"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr "Hent enhedsinformation"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr "Hent liste af bøger fra enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr "Hent noter fra enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr "Send metadata til enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr "Send collections til enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr "Upload %d bøger til enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr "Slet bøger fra enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr "Download bøger fra enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr "Se bøger på enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr "Angiv standard send til enhedsaktion"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr "Send til arbejdshukommelse"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr "Send til hukommelseskort A"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr "Send til hukommelseskort B"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr "Arbejdshukommelse"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr "Send angivet format til"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr "Send og slet fra bibliotek"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr "Skub enhed ud"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "Fejl"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr "Kommunikationsfejl med enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr "Ingen egnede formater"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr "Vælg mappe til at åbne som enhed"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr "Fejl ved kommunikation med enhed"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "Enhed: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr " detekteret."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr "valgt til at sende"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr "Ingen enhed"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr "0 af %i bøger"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr "Vælg format til at sende til enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr "Kan ikke sende: Ingen enhed er forbundet"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr "Intet hukommelseskort"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr "Kan ikke sende: Enheden har intet hukommelseskort"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr "Auto konvertér følgende bøger før upload til enheden?"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr "Sender kataloger til enheden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr "Sender nyheder til enheden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr "Sender bøger til enheden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
@@ -9090,11 +9057,11 @@ msgstr ""
"Kunne ikke uploade følgende bøger til enheden, da ingen egnede formater blev "
"fundet. Konvertér bog/bøgerne til et format understøttet af din enhed først."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr "Ingen plads på enheden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -9623,7 +9590,7 @@ msgstr "Placering"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "Dato"
@@ -9638,13 +9605,13 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr "Emne er blankt"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr "Et emne kan ikke sættes til ingenting. Slet det istedet."
@@ -9774,12 +9741,12 @@ msgid "Copy to author"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr "Ugyldigt forfatternavn"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr "Forfatternavne kan ikke indeholde & tegnet."
@@ -11649,7 +11616,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr ""
@@ -12562,12 +12529,12 @@ msgid "LRF Viewer toolbar"
msgstr "LRF-viser værktøjslinje"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "Næste side"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "Forrige side"
@@ -13574,159 +13541,166 @@ msgstr "Brug intern &viser for:"
msgid "Reset all disabled &confirmation dialogs"
msgstr "Nulstil alle deaktiverede &bekræftigelsesdialoger"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr "er lig med"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr "er mindre end"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr "er større end"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr "har"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr "har ikke"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr "er angivet"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr "er ikke indstillet"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr "er"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr "er ikke"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
-msgid "Enter a number"
-msgstr "Indtast et tal"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
-msgid "Enter a date in the format YYYY-MM-DD"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
-msgid "Enter a string."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
-msgid "Enter a regular expression"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+msgid "Enter a number"
+msgstr "Indtast et tal"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr "til"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -13735,7 +13709,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:480
#, python-format
msgid ""
"
Set the color of %(col)s to %(color)s if the "
@@ -13745,49 +13719,49 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:484
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:495
#, python-format
msgid ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
"started.
You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr "Tilføj regel"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr "Fjern regel"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr "Ingen regel er valgt"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr "Ingen regel valgt for %s."
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr ""
@@ -14215,18 +14189,35 @@ msgstr ""
msgid "Colors"
msgstr "Farver"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
-msgstr "Få fejlfindingsinformation"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
+msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr "Kopiér til &udklipsholder"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
-msgstr "Fejlfind enhedsdetektion"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
+msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
msgid "Getting device information"
@@ -16289,46 +16280,46 @@ msgstr "%p%"
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
"Ændring af forfatterne for adskillige bøger kan tage et stykke tid. Er du "
"sikker?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
"Ændring af metadataene for adskillige bøger kan tage et stykke tid. Er du "
"sikker?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "Søgninger"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr "Navnet %s anvendes allerede"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "Duplikér søgenavn"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr "Det gemte søgenavn %s er allerede brugt."
@@ -17229,43 +17220,68 @@ msgstr ""
msgid "No results found for:"
msgstr "Ingen resultater fundet for:"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr "&Opslag i ordbog"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr "Gå til..."
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "Næste sektion"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "Forrige sektion"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr "Dokument start"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr "Dokument slut"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr "Sektion start"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr "Sektion slut"
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr "Rul til den næste side"
@@ -17992,24 +18008,24 @@ msgstr ""
"(FQDN) eller IP-adressen på computeren, calibre kører på."
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr "markeret"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr "ja"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr "nej"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr "umarkeret"
@@ -18029,15 +18045,15 @@ msgstr "denne måned"
msgid "daysago"
msgstr "dage siden"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr "tom"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr "blank"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -18158,133 +18174,115 @@ msgid ""
"Applies to: CSV, XML output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Titel på genereret katalog anvendt som titel i metadata.\n"
-"Standard: '%default'\n"
-"Anvendes til: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Regex beskrivende mærker til at eksludere som genre.\n"
-"Standard: '%default' eksluderer parantesomsluttede mærker, f.eks. '[]'\n"
-"Anvendes til: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inkludér 'Title' sektion i kataloget.\n"
-"Standard: '%default'\n"
-"Anvendes til: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inkludér 'serie' sektion i katalog.\n"
-"Standard: '%default'\n"
-"Anvendes på: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Inkludér 'Recently Added' sektion i kataloget.\n"
-"Standard: '%default'\n"
-"Anvendes til: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:134
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:137
#, python-format
msgid ""
"Specifies the output profile. In some cases, an output profile is required "
@@ -18292,47 +18290,29 @@ msgid ""
"'kindle_dx' creates a structured Table of Contents with Sections and "
"Articles.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Specificerer output-profil. I nogle tilfælde, er en output-profil krævet "
-"for at optimere kataloget til enheden. For eksempel, 'kindle' eller "
-"'kindle_dx' opretter en struktureret indholdsfortegnelse med sektioner og "
-"artikler.\n"
-"Standard: '%default'\n"
-"Anvendes til: ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:141
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:144
msgid ""
-"field:pattern indicating book has been read.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Specifies the rules used to include prefixes indicating read books, wishlist "
+"items and other user-specified prefixes.\n"
+"The model for a prefix rule is ('','','','').\n"
+"When multiple rules are defined, the first matching rule will be used.\n"
+"Default:\n"
msgstr ""
-"field:pattern indikerer at bogen har været læst.\n"
-"Default: '%default'\n"
-"Vedrører ePub, MOBI output-formater"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:147
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153
#, python-format
msgid ""
"Size hint (in inches) for book covers in catalog.\n"
"Range: 1.0 - 2.0\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:155
-#, python-format
-msgid ""
-"Tag indicating book to be displayed as wishlist item.\n"
-"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
-msgstr ""
-"Mærk indikeret bog til at blive vist som ønskeliste emne.\n"
-"Standard: '%default'\n"
-"Anvendes på: ePub, MOBI output-formater"
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:258
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:259
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -18342,15 +18322,15 @@ msgstr ""
msgid "Symbols"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:502
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:505
msgid "No enabled genres found to catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:506
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:509
msgid "No books available to catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:581
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:584
msgid ""
"Inconsistent Author Sort values for\n"
"Author '{0}':\n"
@@ -18361,20 +18341,20 @@ msgid ""
"dialog, then rebuild the catalog.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:598
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:601
msgid ""
"Warning: inconsistent Author Sort values for\n"
"Author '{0}':\n"
"'{1}' <> '{2}'\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:797
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:816
msgid ""
"No books found to catalog.\n"
"Check 'Excluded books' criteria in E-book options.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:799
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:818
msgid "No books available to include in catalog"
msgstr ""
@@ -18481,7 +18461,7 @@ msgstr ""
"brugermanualen. Standard er ingen filtrering."
#: /home/kovid/work/calibre/src/calibre/library/cli.py:160
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1218
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1220
msgid ""
"The maximum width of a single line in the output. Defaults to detecting "
"screen size."
@@ -18797,7 +18777,7 @@ msgstr ""
msgid "You must specify label, name and datatype"
msgstr "Du skal specificere label, name og datatype"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:768
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:769
msgid ""
"\n"
" %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n"
@@ -18815,7 +18795,7 @@ msgstr ""
" Options styrer hvordan indgange vises i det genererede katalog-ouput.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:781
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:782
msgid ""
"Comma-separated list of database IDs to catalog.\n"
"If declared, --search is ignored.\n"
@@ -18825,7 +18805,7 @@ msgstr ""
"Hvis erklæret, --search bliver ignoreret.\n"
"Standard: all"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:785
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:786
msgid ""
"Filter the results by the search query. For the format of the search query, "
"please see the search-related documentation in the User Manual.\n"
@@ -18835,16 +18815,16 @@ msgstr ""
"søgeforespørgsel, venligst se søgerelateret dokumentation i brugermanualen.\n"
"Standard: Ingen filtrering"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:791
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:792
#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:545
msgid "Show detailed output information. Useful for debugging"
msgstr "Vis detaljeret output-information. Anvendeligt ved fejlfinding"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:804
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:806
msgid "Error: You must specify a catalog output file"
msgstr "Fejl: Du skal specificere en katalog output-fil"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:853
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:855
msgid ""
"\n"
" %prog set_custom [options] column id value\n"
@@ -18866,7 +18846,7 @@ msgstr ""
" -kommandoen.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:863
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:865
msgid ""
"If the column stores multiple values, append the specified values to the "
"existing ones, instead of replacing them."
@@ -18874,11 +18854,11 @@ msgstr ""
"Hvis kolonnen gemmer multiple værdier, tilføjes de specificerede værdier til "
"de eksisterende, istedet for at overskrive dem."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:874
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:876
msgid "Error: You must specify a field name, id and value"
msgstr "Fejl: Du skal specificere et feltnavn, id og value"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:894
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:896
msgid ""
"\n"
" %prog custom_columns [options]\n"
@@ -18893,20 +18873,20 @@ msgstr ""
"ids.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:900
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:902
msgid "Show details for each column."
msgstr "Vis detaljer for hver kolonner."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:912
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
#, python-format
msgid "You will lose all data in the column: %r. Are you sure (y/n)? "
msgstr "Du vil miste alle data i kolonnen: %r. Er du sikker (y/n)? "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:914
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:916
msgid "y"
msgstr "y"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:921
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:923
msgid ""
"\n"
" %prog remove_custom_column [options] label\n"
@@ -18923,15 +18903,15 @@ msgstr ""
" kolonner med custom_columns-kommandoen.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:928
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:930
msgid "Do not ask for confirmation"
msgstr "Spørger/spørg ikke efter bekræftelse"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:938
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:940
msgid "Error: You must specify a column label"
msgstr "Fejl: Du skal specificere en kolonne label"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:949
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:951
msgid ""
"\n"
" %prog saved_searches [options] list\n"
@@ -18954,40 +18934,40 @@ msgstr ""
" vil den blive overskrevet.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:966
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:968
msgid "Error: You must specify an action (add|remove|list)"
msgstr "Fejl: Du skal angive en aktion (tilføj|fjern|liste)"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:974
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:976
msgid "Name:"
msgstr "Navn:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:975
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:977
msgid "Search string:"
msgstr "Søgestreng:"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:981
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:983
msgid "Error: You must specify a name and a search string"
msgstr "Fejl: Du skal angive et navn og en søgestreng"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:984
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:986
msgid "added"
msgstr "tilføjet"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:989
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:991
msgid "Error: You must specify a name"
msgstr "Fejl: Du skal angive et navn"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:992
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:994
msgid "removed"
msgstr "fjernet"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:996
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:998
#, python-format
msgid "Error: Action %s not recognized, must be one of: (add|remove|list)"
msgstr "Fejl: Aktion %s ikke genkendt, skal være en af: (tilføj|fjern|liste)"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1003
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1005
msgid ""
"%prog backup_metadata [options]\n"
"\n"
@@ -19001,13 +18981,13 @@ msgid ""
"automatically, every time metadata is changed.\n"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1014
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1016
msgid ""
"Normally, this command only operates on books that have out of date OPF "
"files. This option makes it operate on all books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1055
msgid ""
"%prog check_library [options]\n"
"\n"
@@ -19019,12 +18999,12 @@ msgstr ""
"Udføre nogle check på filsystemet som repræsenterer et bibliotek. Rapporter "
"er {0}\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1060
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1210
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1062
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
msgid "Output in CSV"
msgstr "Output i CSV"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1063
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1065
msgid ""
"Comma-separated list of reports.\n"
"Default: all"
@@ -19032,7 +19012,7 @@ msgstr ""
"Komma-separeret liste af rapporter.\n"
"Standard: Alle"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1067
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1069
msgid ""
"Comma-separated list of extensions to ignore.\n"
"Default: all"
@@ -19040,7 +19020,7 @@ msgstr ""
"Komma-separeret liste af fil-extensions som ignoreres.\n"
"Standard: Alle"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1071
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1073
msgid ""
"Comma-separated list of names to ignore.\n"
"Default: all"
@@ -19048,11 +19028,11 @@ msgstr ""
"Komma-separeret liste af navne som ignoreres.\n"
"Standard: Alle"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1101
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1103
msgid "Unknown report check"
msgstr "Ukendt rapport check"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1135
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1137
msgid ""
"%prog restore_database [options]\n"
"\n"
@@ -19081,7 +19061,7 @@ msgstr ""
"efter hvad der er fundet i OPF-filerne.\n"
" "
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1149
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1151
msgid ""
"Really do the recovery. The command will not run unless this option is "
"specified."
@@ -19089,12 +19069,12 @@ msgstr ""
"Skal opretningen virkelig udføres. Kommanden vil ikke køre, medmindre denne "
"mulighed bliver angivet."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1162
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1164
#, python-format
msgid "You must provide the %s option to do a recovery"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1199
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1201
msgid ""
"%prog list_categories [options]\n"
"\n"
@@ -19106,7 +19086,7 @@ msgstr ""
"Laver en rapport af kategoriinformationen i databasen.\n"
"Informationen er ækvivalenten af hvad som vises i mærkeruden.\n"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1207
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1209
msgid ""
"Output only the number of items in a category instead of the counts per item "
"within the category"
@@ -19114,7 +19094,7 @@ msgstr ""
"Output kun antallet af emner i en kategori, istedet for antallet per emne "
"indenfor kategorien"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1212
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1214
msgid ""
"The character to put around the category value in CSV mode. Default is "
"quotes (\")."
@@ -19122,7 +19102,7 @@ msgstr ""
"Tegn til at sætte omkring kategoriværdien i CSV-tilstand. Standard er "
"gåseøjne (\")."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1215
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1217
msgid ""
"Comma-separated list of category lookup names.\n"
"Default: all"
@@ -19130,16 +19110,16 @@ msgstr ""
"Kommasepareret liste af kategori opslagsnavne.\n"
"Standard: alle"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1221
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1223
msgid "The string used to separate fields in CSV mode. Default is a comma."
msgstr ""
"Streng anvendt til at separere felter i CSV-tilstand. Standard er et komma."
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1259
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1261
msgid "CATEGORY ITEMS"
msgstr "KATEGORI EMNER"
-#: /home/kovid/work/calibre/src/calibre/library/cli.py:1332
+#: /home/kovid/work/calibre/src/calibre/library/cli.py:1334
#, python-format
msgid ""
"%%prog command [options] [arguments]\n"
@@ -19172,31 +19152,31 @@ msgstr ""
"Mærket må kun indeholde småbogstaver, cifre og bundstreger - og skal begynde "
"med et bogstav"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:69
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:70
#, python-format
msgid "%(tt)sAverage rating is %(rating)3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:218
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:219
msgid "restored preference "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:224
#: /home/kovid/work/calibre/src/calibre/library/restore.py:234
msgid "creating custom column "
msgstr "opret tilpasset søjle "
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3557
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3561
#, python-format
msgid "
Migrating old database to ebook library in %s
"
msgstr "
Flytter gammel database til e-bogsbibliotek i %s
"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3586
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3590
#, python-format
msgid "Copying %s"
msgstr "Kopierer %s"
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3603
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3607
msgid "Compacting database"
msgstr "Komprimerer database"
@@ -19475,7 +19455,7 @@ msgstr "Alle bøger"
#: /home/kovid/work/calibre/src/calibre/library/server/ajax.py:295
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:341
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:625
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Newest"
msgstr "Nyeste"
diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po
index 46aed38800..43ab0fad9a 100644
--- a/src/calibre/translations/de.po
+++ b/src/calibre/translations/de.po
@@ -7,16 +7,16 @@ msgid ""
msgstr ""
"Project-Id-Version: de\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-08-03 04:51+0000\n"
-"PO-Revision-Date: 2012-08-08 13:16+0000\n"
-"Last-Translator: Stanley \n"
+"POT-Creation-Date: 2012-08-10 06:01+0000\n"
+"PO-Revision-Date: 2012-08-14 16:56+0000\n"
+"Last-Translator: Patrick Haake \n"
"Language-Team: American English \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Launchpad-Export-Date: 2012-08-09 04:39+0000\n"
-"X-Generator: Launchpad (build 15761)\n"
+"X-Launchpad-Export-Date: 2012-08-15 04:39+0000\n"
+"X-Generator: Launchpad (build 15801)\n"
"X-Poedit-Bookmarks: 3327,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
"Generated-By: pygettext.py 1.5\n"
@@ -48,8 +48,8 @@ msgstr "Macht absolut gar nichts"
#: /home/kovid/work/calibre/src/calibre/db/cache.py:106
#: /home/kovid/work/calibre/src/calibre/db/cache.py:109
#: /home/kovid/work/calibre/src/calibre/db/cache.py:120
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:343
#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:345
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:101
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
@@ -137,7 +137,7 @@ msgstr "Macht absolut gar nichts"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/main.py:423
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:210
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:212
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:857
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:860
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator/spine.py:62
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:353
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/parse_utils.py:356
@@ -180,8 +180,8 @@ msgstr "Macht absolut gar nichts"
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:143
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:145
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1295
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1324
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1327
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:128
@@ -207,15 +207,15 @@ msgstr "Macht absolut gar nichts"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:186
#: /home/kovid/work/calibre/src/calibre/library/cli.py:235
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:584
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:592
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:603
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2169
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2323
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2745
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3392
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3394
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3531
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:585
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:593
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:604
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2171
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2325
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2749
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3396
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3398
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3535
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:250
#: /home/kovid/work/calibre/src/calibre/library/server/content.py:251
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247
@@ -740,7 +740,7 @@ msgstr ""
"hilfreich, wenn Sie nichts über das Eingabe-Dokument wissen."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:59
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:463
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:459
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/600/700 etc."
msgstr ""
@@ -752,62 +752,62 @@ msgid "This profile is intended for the SONY PRS 300."
msgstr "Dieses Profil ist geeignet für das SONY PRS 300."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:499
msgid "This profile is intended for the SONY PRS-900."
msgstr "Dieses Profil ist geeignet für das SONY PRS-900."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:88
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:548
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:544
msgid "This profile is intended for the Microsoft Reader."
msgstr "Dieses Profil ist geeignet für den Microsoft Reader."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:99
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:559
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:555
msgid "This profile is intended for the Mobipocket books."
msgstr "Dieses Profil ist geeignet für Mobipocket-Bücher."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:112
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:572
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:568
msgid "This profile is intended for the Hanlin V3 and its clones."
msgstr "Dieses Profil ist geeignet für den Hanlin V3 und dessen Klone."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:124
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:584
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:580
msgid "This profile is intended for the Hanlin V5 and its clones."
msgstr "Dieses Profil ist geeignet für den Hanlin V5 und dessen Klone."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:134
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:592
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:588
msgid "This profile is intended for the Cybook G3."
msgstr "Dieses Profil ist geeignet für das Cybook G3."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:147
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:606
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:602
msgid "This profile is intended for the Cybook Opus."
msgstr "Dieses Profil ist geeignet für den Cybook Opus."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:159
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:619
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:615
msgid "This profile is intended for the Amazon Kindle."
msgstr "Dieses Profil ist geeignet für den Amazon Kindle."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:171
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:685
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:677
msgid "This profile is intended for the Irex Illiad."
msgstr "Dieses Profil ist geeignet für den Irex Illiad."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:183
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:698
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:690
msgid "This profile is intended for the IRex Digital Reader 1000."
msgstr "Dieses Profil ist geeignet für den IRex Digital Reader 1000."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:196
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:704
msgid "This profile is intended for the IRex Digital Reader 800."
msgstr "Dieses Profil ist geeignet für den IRex Digital Reader 800."
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:208
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:726
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:718
msgid "This profile is intended for the B&N Nook."
msgstr "Dieses Profil ist geeignet für den B&N Nook."
@@ -825,26 +825,26 @@ msgstr ""
"hilfreich, wenn Sie ein Dokument zum Lesen an einem Computer oder auf einer "
"Reihe von verschiedenen Geräten erstellen wollen."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:277
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275
msgid ""
"Intended for the iPad and similar devices with a resolution of 768x1024"
msgstr ""
"Geeignet für das iPad und ähnliche Geräte mit einer Auflösung von 768 x1024"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:441
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437
msgid ""
"Intended for the iPad 3 and similar devices with a resolution of 1536x2048"
msgstr ""
"Vorgesehen für das iPad 3 und ähnliche Geräte mit einer Auflösung von "
"1536x2048"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:447
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:443
msgid "Intended for generic tablet devices, does no resizing of images"
msgstr ""
"Gedacht für allgemeine Tablet- PCs, führt keine Größenänderung bei Bildern "
"durch"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:455
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:451
msgid ""
"Intended for the Samsung Galaxy and similar tablet devices with a resolution "
"of 600x1280"
@@ -852,27 +852,27 @@ msgstr ""
"Gedacht für das Samsung Galaxy und ähnliche Tablet-Geräte mit einer "
"Auflösung von 600x1280"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:481
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:477
msgid "This profile is intended for the Kobo Reader."
msgstr "Dieses Profil ist geeignet für den Kobo Reader."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:490
msgid "This profile is intended for the SONY PRS-300."
msgstr "Dieses Profil ist geeignet für das SONY PRS-300."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:512
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:508
msgid "Suitable for use with any e-ink device"
msgstr "Verwendbar bei jedem E-Ink-Gerät"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:515
msgid "Suitable for use with any large screen e-ink device"
msgstr "Verwendbar bei jedem großformatigem E-ink-Gerät"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:524
msgid "This profile is intended for the 5-inch JetBook."
msgstr "Dieses Profil ist geeignet für das 5-Zoll JetBook."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:537
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:533
msgid ""
"This profile is intended for the SONY PRS line. The 500/505/700 etc, in "
"landscape mode. Mainly useful for comics."
@@ -880,23 +880,23 @@ msgstr ""
"Dieses Profil ist geeignet für die SONY PRS-Reihe. PRS 500/505/700 etc. in "
"horizontaler Darstellung. Vor allem für Comics hilfreich."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:645
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:639
msgid "This profile is intended for the Amazon Kindle DX."
msgstr "Dieses Profil ist geeignet für den Amazon Kindle DX."
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:669
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:661
msgid "This profile is intended for the Amazon Kindle Fire."
msgstr "Dieses Profil ist beabsichtigt für das Amazon Kindle fire"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:738
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:730
msgid "This profile is intended for the B&N Nook Color."
msgstr "Dieses Profil ist geeignet für den B&N Nook Color"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:749
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:741
msgid "This profile is intended for the Sanda Bambook."
msgstr "Dieses Profil ist geeignet für den Sanda Bambook"
-#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:764
+#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:756
msgid ""
"This profile is intended for the PocketBook Pro 900 series of devices."
msgstr "Dieses Profil ist für die Geräteserie PocketBook Pro 900 gedacht."
@@ -985,8 +985,8 @@ msgstr "Gewähltes Plugin ausschalten"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:308
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:742
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:133
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:142
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:134
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:143
#, python-format
msgid "Path to library too long. Must be less than %d characters."
msgstr "Pfad zur Datenbank zu lang. Muss kürzer als %d Zeichen sein"
@@ -995,26 +995,26 @@ msgstr "Pfad zur Datenbank zu lang. Muss kürzer als %d Zeichen sein"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:668
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1052
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:852
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:875
msgid "Yes"
msgstr "Ja"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:163
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1199
msgid "Main"
msgstr "Haupt"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1200
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1201
msgid "Card A"
msgstr "Karte A"
#: /home/kovid/work/calibre/src/calibre/db/fields.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1202
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1203
msgid "Card B"
msgstr "Karte B"
@@ -1035,7 +1035,7 @@ msgstr "Fehlerdiagnoseprotokoll"
msgid "Communicate with Android phones."
msgstr "Kommunikation mit Android-Telefonen."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:187
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:188
msgid ""
"Comma separated list of directories to send e-books to on the device. The "
"first one that exists will be used"
@@ -1043,11 +1043,11 @@ msgstr ""
"Durch Kommata getrennte Liste von Verzeichnissen an die E-Books auf das "
"Gerät gesendet werden. Das erste vorhandene wird benutzt"
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:283
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:284
msgid "Communicate with S60 phones."
msgstr "Kommunikation mit S60-Telefonen."
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:302
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:303
msgid "Communicate with WebOS tablets."
msgstr "Kommuniziere mit WebOS Tablets."
@@ -1211,28 +1211,26 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:769
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:788
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:207
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:213
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:247
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:222
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:228
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:262
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1052
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1058
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1093
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:469
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1195
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1197
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:369
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:382
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3249
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1198
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:370
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:383
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3253
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187
msgid "News"
msgstr "Nachrichten"
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2769
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3205
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3223
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3209
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3227
msgid "Catalog"
msgstr "Katalog"
@@ -1301,8 +1299,8 @@ msgstr "Die Liste der Bücher auf dem Gerät beziehen ..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:713
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:715
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:755
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
msgid "Transferring books to device..."
@@ -1312,8 +1310,8 @@ msgstr "Bücher ans Gerät übertragen ..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:480
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:515
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:726
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:737
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:768
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:779
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332
msgid "Adding books to device metadata listing..."
@@ -1335,8 +1333,8 @@ msgstr "Bücher vom Gerät entfernen ..."
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:475
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:757
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:763
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:799
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371
msgid "Removing books from device metadata listing..."
@@ -1874,6 +1872,14 @@ msgstr "Kommunikation mit dem COBY"
msgid "Communicate with the Ex124G"
msgstr "Kommuniziere mit dem Ex124G"
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:23
+msgid "MTP Device"
+msgstr "MTP Gerät"
+
+#: /home/kovid/work/calibre/src/calibre/devices/mtp/base.py:25
+msgid "Communicate with MTP devices"
+msgstr "kommuniziere mit MTP Gerät"
+
#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17
msgid "Communicate with the Nokia 770 internet tablet."
msgstr "Kommunikation mit dem Nokia 770 Internet Tablet."
@@ -1915,15 +1921,18 @@ msgid "Comments have been removed as the SONY reader chokes on them"
msgstr "Kommentare wurden entfernt, da der SONY reader damit Probleme hat"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
msgid "All by title"
msgstr "nach Titel"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
msgid "All by author"
msgstr "Alle nach Titel"
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:128
msgid ""
"Comma separated list of metadata fields to turn into collections on the "
"device. Possibilities include: "
@@ -1932,6 +1941,7 @@ msgstr ""
"Gerät zu erstellen. Möglichkeiten sind: "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:131
#, python-format
msgid ""
". Two special collections are available: %(abt)s:%(abtv)s and "
@@ -2056,38 +2066,38 @@ msgstr ""
"nur der erste Autor für Bücher von mehreren Autoren angezeigt. Lassen Sie "
"diese Option ausgeschaltet, wenn Sie Metadaten-Schalttafeln benutzen."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:53
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:54
msgid "SmartDevice"
msgstr "SmartDevice"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:55
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:56
msgid "Communicate with Smart Device apps"
msgstr "Mit SmartDevice Apps kommunizieren"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:110
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
msgid "Enable connections at startup"
msgstr "Verbindungen beim Start erlauben"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:111
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:115
msgid "Check this box to allow connections when calibre starts"
msgstr ""
"Aktiviere diese Option, um Verbindungen zu erlauben, sobald Calibre startet."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:113
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
msgid "Security password"
msgstr "Security Passwort"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:114
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:118
msgid "Enter a password that the device app must use to connect to calibre"
msgstr ""
"Ein Passwort, das die Device App zum Verbindungsaufbau zu Calibre benutzen "
"muss, eingeben"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:116
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
msgid "Use fixed network port"
msgstr "Festen Netzwerk-Port benutzen"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
msgid ""
"If checked, use the port number in the \"Port\" box, otherwise the driver "
"will pick a random port"
@@ -2095,11 +2105,11 @@ msgstr ""
"Wenn aktiviert, wird der eingestellte Port im Feld \"Port\" genutzt. Sonst "
"wird ein zufälliger Port vom Treiber gewählt."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:119
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:123
msgid "Port"
msgstr "Port"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:124
msgid ""
"Enter the port number the driver is to use if the \"fixed port\" box is "
"checked"
@@ -2107,48 +2117,25 @@ msgstr ""
"Port Nummer eingeben, die genutzt werden soll, wenn die Option \"Fester "
"Port\" aktiviert ist."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:121
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:125
msgid "Print extra debug information"
msgstr "Zusätzliche Debug-Informationen ausdrucken"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:126
msgid "Check this box if requested when reporting problems"
msgstr ""
+"Markieren Sie dieses Kästchen, wenn angefordert, bei Problemberichten"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:359
-msgid "Device did not respond in reasonable time"
-msgstr "Das Gerät hat nach einer bestimmten Zeit nicht geantwortet."
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:514
+#, python-format
+msgid "Too many connection attempts from %s"
+msgstr "Zu viele Verbindungsversuche von %s"
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:365
-msgid "Device closed the network connection"
-msgstr "Gerät hat die Netzwerkverbindung getrennt."
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:587
+#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:621
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95
msgid "Get device information..."
msgstr "Geräte-Information beziehen ..."
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:659
-msgid "Protocol error -- book metadata not returned"
-msgstr "Protokollfehler -- Metadaten des Buches nicht zurückgegeben"
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:678
-msgid "Protocol error -- sync_booklists"
-msgstr "Protokoll Fehler -- sync_booklists"
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:709
-#, python-format
-msgid "Sending book %s to device failed"
-msgstr "Senden des Buches %s zum Device fehlgeschlagen"
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:750
-msgid "Protocol error - delete books"
-msgstr "Protokoll Fehler- Bücher löschen"
-
-#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:786
-msgid "request for book data failed"
-msgstr "Anfrage nach Buch-Daten ist fehlgeschlagen."
-
#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17
msgid "Communicate with the Samsung SNE eBook reader."
msgstr "Kommunikation mit dem Samsung SNE E-Book-Reader."
@@ -2276,7 +2263,7 @@ msgstr "Metadaten aus Dateien auf dem Gerät lesen"
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:67
msgid "Use author sort instead of author"
-msgstr "Verwende Sortierung nach Autor statt Autor"
+msgstr "Verwende Autorensortierung statt Autor"
#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:69
msgid "Template to control how books are saved"
@@ -4460,7 +4447,7 @@ msgstr "Nein"
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/library/cli.py:555
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:375
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:583
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:585
msgid "Title"
msgstr "Titel"
@@ -4669,7 +4656,7 @@ msgstr ""
"LibraryThing.com laden.\n"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1451
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1275
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:41
msgid "Cover"
@@ -4847,70 +4834,70 @@ msgid "No details available"
msgstr "Keine Details verfügbar"
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer8/toc.py:15
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1277
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/toc.py:217
msgid "Table of Contents"
msgstr "Inhaltsverzeichnis"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1276
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
msgid "Title Page"
msgstr "Titelseite"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1278
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
msgid "Index"
msgstr "Index"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1279
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
msgid "Glossary"
msgstr "Glossar"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1280
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
msgid "Acknowledgements"
msgstr "Danksagung"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1281
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
msgid "Bibliography"
msgstr "Literaturverzeichnis"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1282
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
msgid "Colophon"
msgstr "Schlussschrift"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1283
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
msgid "Copyright"
msgstr "Copyright"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1284
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
msgid "Dedication"
msgstr "Widmung"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1285
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
msgid "Epigraph"
msgstr "Epigraph"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1286
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
msgid "Foreword"
msgstr "Vorwort"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1287
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
msgid "List of Illustrations"
msgstr "Abbildungsverzeichnis"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1288
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1292
msgid "List of Tables"
msgstr "Tabellenverzeichnis"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1289
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1293
msgid "Notes"
msgstr "Anmerkungen"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1290
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1294
msgid "Preface"
msgstr "Vorwort"
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1291
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1295
msgid "Main Text"
msgstr "Haupttext"
@@ -5623,7 +5610,7 @@ msgid "Merging user annotations into database"
msgstr "Füge Benutzeranmerkungen zur Datenbank hinzu"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:683
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:706
msgid "Fetch annotations (experimental)"
msgstr "Anmerkungen abrufen (experimentell)"
@@ -5902,7 +5889,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:403
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:859
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:114
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:128
@@ -6059,6 +6046,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:551
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:112
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:676
@@ -6179,14 +6167,14 @@ msgid "Main memory"
msgstr "Hauptspeicher"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:239
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:640
msgid "Storage Card A"
msgstr "Speicherkarte A"
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:240
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:610
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:619
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:633
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
msgid "Storage Card B"
msgstr "Speicherkarte B"
@@ -7125,7 +7113,7 @@ msgid "The specified directory could not be processed."
msgstr "Das angegebene Verzeichnis konnte nicht bearbeitet werden."
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1013
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1045
msgid "No books"
msgstr "Keine Bücher"
@@ -7280,6 +7268,7 @@ msgstr ""
"Import in die Bibliothek von Calibre abgesucht"
#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:57
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:194
@@ -7431,7 +7420,7 @@ msgstr "BibTeX Einstellungen"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/djvu_input.py:15
@@ -7455,7 +7444,7 @@ msgstr "Einstellungen für"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:19
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:24
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output.py:18
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15
@@ -7474,7 +7463,7 @@ msgstr "Ausgabe"
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_bibtex_ui.py:21
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:42
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:295
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/convert/azw3_output_ui.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:103
@@ -7585,176 +7574,153 @@ msgstr ""
msgid "CSV/XML Options"
msgstr "CSV/XML Einstellungen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:23
msgid "E-book options"
msgstr "E-Book Einstellungen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296
-msgid "Sections to include in catalog."
-msgstr "Abschnitte zur Übernahme in den Katalog"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:218
+msgid "Enabled sections will be included in the generated catalog."
+msgstr "Aktiviert Bereiche werden in der generierten Katalog aufgenommen."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:219
msgid "Included sections"
msgstr "Eingeschlossene Abschnitte"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:220
msgid "Books by &Genre"
msgstr "Bücher nach Genre"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:221
msgid "Recently &Added"
msgstr "Zuletzt hinzugefügt"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:222
msgid "&Descriptions"
msgstr "Beschreibungen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:223
msgid "Books by &Series"
msgstr "Bücher nach Buchreihen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:224
msgid "Books by &Title"
msgstr "Bücher nach Titel"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:225
msgid "Books by Author"
msgstr "Bücher nach Autor"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:226
msgid ""
-"
Default pattern \n"
-"\\[.+\\]\n"
-"excludes tags of the form [tag], \n"
-"e.g., [Project Gutenberg]
"
+"A regular expression describing genres to be excluded from the generated "
+"catalog. Genres are derived from the tags applied to your books.\n"
+"The default pattern \\[.+\\]|\\+ excludes tags of the form [tag], e.g., "
+"[Test book], and '+', the default tag for a read book."
msgstr ""
-"
Vorgabemuster \n"
-" \\[.+\\]\n"
-"schließt Schlagwörter der Form [tag] aus, \n"
-" z.B. [Project Gutenberg]
"
+"Ein regulärer Ausdruck, der die vom erzeugten Katalog auszuschließenden "
+"Genres beschreibt. Genres werden von den Tags\n"
+"abgeleitet, die auf ihre Bücher angewandt werden. Das Stanardmuster \\[.+\\"
+"]\\+ schließt Tags der Form [tag] und '+', das\n"
+"Standardtag für gelesene Bücher, aus."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:228
msgid "Excluded genres"
msgstr "Ausgeschlossene Genres"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:229
msgid "Tags to &exclude"
msgstr "Auszuschließende Tags"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310
-msgid ""
-"Books matching either pattern will not be included in generated catalog. "
-msgstr ""
-"Bücher, die einem der Suchmuster entsprechen, werden nicht in den "
-"generierten Katalog aufgenommen. "
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:230
+msgid "Reset to default"
+msgstr "Auf Voreinstellungen zurücksetzen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:232
+msgid ""
+"Books matching any of the exclusion rules will be excluded from the "
+"generated catalog. "
+msgstr ""
+"Bücher, die einem der Ausschlusskriterien entsprechen, wenden von der "
+"Katalogerstellung ausgeschlossen. "
+
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:233
msgid "Excluded books"
msgstr "Ausgeschlossene Bücher"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:234
msgid ""
-"
Comma-separated list of tags to exclude.\n"
-"Default: ~,Catalog"
+"The first matching prefix rule applies a prefix to book listings in the "
+"generated catalog."
msgstr ""
-"
Komma separierte Liste von auszuschließenden Schlagwörtern.\n"
-"Voreinstellung: ~,Catalog"
+"Die erste zutreffende Präfixregel wendet einen Präfix auf Bücherlisten im "
+"erzeugten Katalog an."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320
-msgid "&Column/value"
-msgstr "&Spalte/Wert"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:235
+msgid "Prefixes"
+msgstr "Präfixe"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316
-msgid "Column containing additional exclusion criteria"
-msgstr "Spalte mit zusätzlichen Ausschlußkriterien"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317
-msgid "Exclusion pattern"
-msgstr "Ausschlusskriterien"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318
-msgid "Matching books will be displayed with a check mark"
-msgstr "Entsprechende Bücher werden mit einem Häkchen versehen"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319
-msgid "Read books"
-msgstr "Gelesene Bücher"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321
-msgid "Column containing 'read' status"
-msgstr "Spalte mit 'Gelesen'- Status"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322
-msgid "'read book' pattern"
-msgstr "Muster für 'Gelesenes Buch'"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:236
msgid "Other options"
msgstr "Weitere Optionen"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324
-msgid "&Wishlist tag"
-msgstr "&Wunschlisten-Schlagwort"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:237
+msgid "&Thumb width"
+msgstr "&Thumbnail Breite"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325
-msgid "Books tagged as Wishlist items will be displayed with an X"
-msgstr ""
-"Bücher, die als Wunschlisten- Eintrag gekennzeichnet sind, werden mit einem "
-"X angezeigt"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:238
+msgid "Size hint for cover thumbnails included in Descriptions section."
+msgstr "Größe der Coverthumbnails im Beschreibungsabschnitt"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326
-msgid "&Thumbnail width"
-msgstr "Breite der Vorschau"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327
-msgid "Size hint for Description cover thumbnails"
-msgstr "Größenhinweis für Umschlagbild- Vorschauen"
-
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:239
msgid " inch"
msgstr " inch"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329
-msgid "&Description note"
-msgstr "Beschreibungshinweis"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:240
+msgid "&Extra note"
+msgstr "&Extra Notiz"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330
-msgid "Custom column source for note to include in Description header area"
-msgstr "Benutzerdefinierte Spaltenquelle für Notizen in der Beschreibung"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:241
+msgid "Custom column source for text to include in Description section."
+msgstr ""
+"Quelle für den Text der im Abschnitt Beschreibung der benutzerdefinierten "
+"Spalte eingefügt werden soll."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:242
msgid "&Merge with Comments"
msgstr "Zusammenführen mit Kommentaren"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332
-msgid "Additional content merged with Comments during catalog generation"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:243
+msgid ""
+"Custom column containing additional content to be merged with Comments "
+"metadata."
msgstr ""
-"Zusätzliche Inhalte und Kommentare werden während der Katalogerzeugung "
-"zusammengeführt"
+"Benutzerdefinierte Spalte mit zusätzlichem Inhalt, die mit den Kommentaren "
+"zusammengeführt wird."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333
-msgid "Merge additional content before Comments"
-msgstr "Zusätzliche Inhalte vor den Kommentaren einfügen"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:244
+msgid "Merge additional content before Comments metadata."
+msgstr "Zusätzlichen Inhalt vor den Metadaten für Kommentare einfügen."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:245
msgid "&Before"
msgstr "Vorher"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335
-msgid "Merge additional content after Comments"
-msgstr "Zusätzliche Inhalte nach den Kommentaren einfügen"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:246
+msgid "Merge additional content after Comments metadata."
+msgstr "Zusätzlichen Inhalt nach den Metadaten für Kommentare einfügen."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:247
msgid "&After"
msgstr "Nachher"
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337
-msgid "Separate Comments and additional content with horizontal rule"
-msgstr "Kommentare und zusätzliche Inhalte durch horizontale Linie trennen"
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:248
+msgid ""
+"Separate Comments metadata and additional content with a horizontal rule."
+msgstr ""
+"Metadaten für Kommentare und zusätzlichen Inhalt mit einer horizontalen "
+"Linie trennen."
-#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338
+#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:249
msgid "&Separator"
msgstr "Trennzeichen"
@@ -9585,133 +9551,138 @@ msgstr "Schlagwort hinzufügen"
msgid "tags to remove"
msgstr "Zu entfernende Schlagwörter"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:50
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:148
msgid "No details available."
msgstr "Keine weiteren Informationen verfügbar."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195
msgid "Device no longer connected."
msgstr "Gerät ist nicht mehr verbunden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:27
+msgid "Debug device detection"
+msgstr "Fehlerdiagnose bei der Geräteerkennung"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:398
msgid "Get device information"
msgstr "Geräteinformationen erstellen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Get list of books on device"
msgstr "Liste der Bücher auf dem Gerät erstellen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423
msgid "Get annotations from device"
msgstr "Anmerkungen vom Gerät laden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:435
msgid "Send metadata to device"
msgstr "Metadaten zum Gerät senden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:440
msgid "Send collections to device"
msgstr "Sammlungen zum Gerät schicken"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490
#, python-format
msgid "Upload %d books to device"
msgstr "%d Bücher auf das Gerät laden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:506
msgid "Delete books from device"
msgstr "Bücher vom Gerät löschen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:524
msgid "Download books from device"
msgstr "Bücher vom Gerät herunterladen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "View book on device"
msgstr "Buch auf dem Gerät ansehen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614
msgid "Set default send to device action"
msgstr "Geben Sie die voreingestellte Übertragungsart an"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:597
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:620
msgid "Send to main memory"
msgstr "An Hauptspeicher senden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
msgid "Send to storage card A"
msgstr "An Speicherkarte A senden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:624
msgid "Send to storage card B"
msgstr "An Speicherkarte B senden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:606
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:615
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:629
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:638
msgid "Main Memory"
msgstr "Hauptspeicher"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:650
msgid "Send specific format to"
msgstr "Schicke spezifisches Format an"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:628
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:651
msgid "Send and delete from library"
msgstr "Übertragen und aus der Bibliothek löschen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:671
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:694
msgid "Eject device"
msgstr "Gerät auswerfen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:752
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:775
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:332
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:58
msgid "Error"
msgstr "Fehler"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776
msgid "Error communicating with device"
msgstr "Fehler bei der Kommunikation mit dem Gerät"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:773
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1374
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
msgid "No suitable formats"
msgstr "Keine geeigneten Formate"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:789
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:821
msgid "Select folder to open as device"
msgstr "Verzeichnis wählen, das als Gerät geöffnet werden soll"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:839
msgid "Running jobs"
msgstr "Laufende Aufgaben"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:808
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:840
msgid "Cannot configure the device while there are running device jobs."
msgstr "Kann das Gerät nicht konfigurieren, solange Geräteaufgaben laufen."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:845
#, python-format
msgid "Configure %s"
msgstr "Konfiguriere %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
msgid "Disconnect device"
msgstr "Gerät trennen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:825
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
#, python-format
msgid "Disconnect and re-connect the %s for your changes to be applied."
msgstr "Trenne und verbinde %s neu, um die Änderungen anzuwenden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:865
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
msgid "Error talking to device"
msgstr "Fehler in der Kommunikation zum Gerät"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:898
msgid ""
"There was a temporary error talking to the device. Please unplug and "
"reconnect the device or reboot."
@@ -9719,75 +9690,75 @@ msgstr ""
"Es gab einen temporären Fehler beim Kommunizieren mit dem Gerät. Bitte das "
"Gerät neu verbinden oder neustarten."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:909
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:941
msgid "Device: "
msgstr "Gerät: "
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:911
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:943
msgid " detected."
msgstr " gefunden."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046
msgid "selected to send"
msgstr "zum Übertragen ausgewählt"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1021
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1051
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1053
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1083
msgid "No device"
msgstr "Kein Gerät"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1054
msgid "No device connected"
msgstr "Kein Gerät angeschlossen"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1038
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1070
#, python-format
msgid "%(num)i of %(total)i Books"
msgstr "%(num)i von %(total)i Büchern"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1042
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1074
#, python-format
msgid "0 of %i Books"
msgstr "0 von %i Büchern"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1043
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1075
msgid "Choose format to send to device"
msgstr "Format wählen, das ans Gerät geschickt wird"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1052
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1084
msgid "Cannot send: No device is connected"
msgstr "Übertragung schlug fehl: Kein Gerät verbunden"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1087
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1091
msgid "No card"
msgstr "Keine Speicherkarte"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1060
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1092
msgid "Cannot send: Device has no storage card"
msgstr "Übertragung schlug fehl: Keine Speicherkarte im Gerät"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1121
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1204
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1336
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1153
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1236
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1368
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
"Die folgenden Bücher vor dem Laden auf das Gerät automatisch konvertieren?"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1150
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
msgid "Sending catalogs to device."
msgstr "Sende Kataloge ans Gerät."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1249
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1281
msgid "Sending news to device."
msgstr "Sende Nachrichten an das Gerät."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1335
msgid "Sending books to device."
msgstr "Sende Bücher an das Gerät."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1343
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1375
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found. Convert the book(s) to a format supported by your device first."
@@ -9796,11 +9767,11 @@ msgstr ""
"fehlen. Konvertieren Sie die Bücher zuerst in ein von Ihrem Gerät "
"unterstütztes Format."
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1416
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1448
msgid "No space on device"
msgstr "Gerätespeicher voll"
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1417
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1449
msgid ""
"
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -10446,7 +10417,7 @@ msgstr "Ort"
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:365
-#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:582
+#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:584
msgid "Date"
msgstr "Datum"
@@ -10461,13 +10432,13 @@ msgstr "%(curr)s (war %(initial)s)"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:86
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
msgid "Item is blank"
msgstr "Eintrag ist leer"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/device_category_editor.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:928
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:929
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
"Ein Element kann nicht auf nichts eingestellt werden. Löschen Sie es "
@@ -10606,12 +10577,12 @@ msgid "Copy to author"
msgstr "Kopiere nach Autor"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:977
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
msgid "Invalid author name"
msgstr "Ungültiger Autorenname"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:978
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:979
msgid "Author names cannot contain & characters."
msgstr "Autorennamen dürfen nicht das Zeichen & enthalten."
@@ -10644,29 +10615,29 @@ msgid ""
"generated from the author. Exactly how this value is automatically\n"
"generated can be controlled via Preferences->Advanced->Tweaks"
msgstr ""
-"Setzt alle Werte für die Sortierung nach Autoren auf einen\n"
-"automatisch aus dem Autorenfeld generierten Wert zurück.\n"
+"Setzt alle Werte für die Autorensortierung auf einen\n"
+"automatisch aus dem Autor(en) -Feld generierten Wert zurück.\n"
"Wie genau dieser Wert erzeugt wird, kann in Einstellungen->\n"
"Erweitert->Kniffe eingestellt werden."
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:96
msgid "Recalculate all author sort values"
-msgstr "Neuerzeugung aller Sortierung nach Autor- Werte"
+msgstr "Neuerzeugung aller Autorensortierungs- Werte"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:97
msgid ""
"Copy author sort to author for every author. You typically use this button\n"
"after changing Preferences->Advanced->Tweaks->Author sort name algorithm"
msgstr ""
-"Kopiert für jeden Autor den Wert der Sortierung nach Autor in das "
-"Autorenfeld. Üblicherweise\n"
+"Kopiert für jeden Autor den Wert der Autorensortierung in das Autor(en) -"
+"Feld. Üblicherweise\n"
"nutzen Sie diese Möglichkeit nach der Änderung von Einstellungen->Erweitert-"
">Kniffe->\n"
"Algorithmus für Autorensortierung"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:99
msgid "Copy all author sort values to author"
-msgstr "Kopiert alle Sortierung nach Autor- Einträge ins Autorenfeld"
+msgstr "Kopiert alle Autorensortierungs- Einträge in das Autorenfeld"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:45
msgid "Details of job"
@@ -10953,7 +10924,7 @@ msgstr "Meta-Informationen bearbeiten"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:549
msgid "A&utomatically set author sort"
-msgstr "Automatisch Sortierung nach Autor setzen"
+msgstr "Autorensortierung a&utomatisch setzen"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:550
msgid "&Swap title and author"
@@ -12380,6 +12351,9 @@ msgid ""
"interface when calibre starts. You should not do this if you are using a "
"network that is not secure and you are not setting a password."
msgstr ""
+"Aktivieren Sie diese Box, wenn Calibre automatisch die Multimediaoberfläche "
+"beim Start anzeigen soll. Sie sollten diese Funktion nicht verwenden, wenn "
+"Sie ein unsicheres Netzwerk nutzen und kein Passwort gesetzt haben."
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/smartdevice_ui.py:63
msgid "Smart device control"
@@ -12632,7 +12606,7 @@ msgid "The template box cannot be empty"
msgstr "Das Feld Vorlage darf nicht leer sein"
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:110
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:264
msgid "Set the color of the column:"
msgstr "Spaltenfarbe setzen"
@@ -13339,7 +13313,7 @@ msgstr "Kann keine Tastenkombination mit %s finden"
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:58
msgid "Eject this device"
-msgstr "Diese Gerät auswerfen"
+msgstr "Dieses Gerät auswerfen"
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:61
msgid "Configure this device"
@@ -13571,12 +13545,12 @@ msgid "LRF Viewer toolbar"
msgstr "Symbolleiste des LRF-Betrachters"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:504
msgid "Next Page"
msgstr "Nächste Seite"
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:505
msgid "Previous Page"
msgstr "Vorherige Seite"
@@ -13791,24 +13765,24 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:139
msgid "Title &sort:"
-msgstr "&Sortierung nach Titel:"
+msgstr "&Titelsortierung:"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:148
msgid ""
" The green color indicates that the current title sort matches the current "
"title"
msgstr ""
-" Die grüne Farbe zeigt an, dass die derzeitige Sortierung nach Titel mit dem "
-"Titel übereinstimmt."
+" Die grüne Farbe zeigt an, dass die derzeitige Titelsortierung mit dem Titel "
+"übereinstimmt."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:151
msgid ""
" The red color warns that the current title sort does not match the current "
"title. No action is required if this is what you want."
msgstr ""
-" Die rote Farbe zeigt an, dass die derzeitige Sortierung nach Titel nicht "
-"mit dem Titel übereinstimmt. Es ist keine Maßnahme erforderlich sollten Sie "
-"dies so wünschen."
+" Die rote Farbe zeigt an, dass die derzeitige Titelsortierung nicht mit dem "
+"Titel übereinstimmt. Es ist keine Maßnahme erforderlich sollten Sie dies so "
+"wünschen."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:225
msgid "Authors changed"
@@ -13843,7 +13817,7 @@ msgid ""
" The green color indicates that the current author sort matches the current "
"author"
msgstr ""
-" Die grüne Farbe zeigt an, dass die derzeitige Sortierung nach Autor mit dem "
+" Die grüne Farbe zeigt an, dass die derzeitige Autorensortierung mit dem "
"Autor übereinstimmt"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:323
@@ -13851,9 +13825,9 @@ msgid ""
" The red color indicates that the current author sort does not match the "
"current author. No action is required if this is what you want."
msgstr ""
-" Die rote Farbe zeigt an, dass die derzeitige Sortierung nach Autor nicht "
-"mit dem Autor übereinstimmt. Es ist keine Maßnahme erforderlich sollten Sie "
-"dies so wünschen."
+" Die rote Farbe zeigt an, dass die derzeitige Autorensortierung nicht mit "
+"dem Autor übereinstimmt. Es ist keine Maßnahme erforderlich sollten Sie dies "
+"so wünschen."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:502
msgid "&Number:"
@@ -14126,9 +14100,9 @@ msgid ""
"Using this button to create title sort will change title sort from red to "
"green."
msgstr ""
-"Erstellt automatisch die Sortierung nach Titel anhand des aktuellen Titels.\n"
-"Bei Benutzung dieses Buttons wird das Feld \"Sortierung nach Title\" von Rot "
-"nach Grün wechseln."
+"Erstellt automatisch die Titelsortierung anhand des aktuellen Titels.\n"
+"Bei Benutzung dieses Buttons wird das Feld \"Titelsortierung\" von Rot nach "
+"Grün wechseln."
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:126
msgid ""
@@ -14145,11 +14119,11 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:132
msgid "Set author sort from author"
-msgstr "\"Autor(en)\" in das \"Sortierung nach Autor\" -Feld setzen"
+msgstr "Die Autorensortierung aus Feld Autor übernehmen"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:133
msgid "Set author from author sort"
-msgstr "\"Sortierung nach Autor\" in das \"Autor(en)\" -Feld setzen"
+msgstr "Autor aus Feld Autorensortierung übernehmen"
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136
msgid "Copy author to author sort"
@@ -14355,7 +14329,7 @@ msgid ""
"the default settings."
msgstr ""
"Einstellungen auf Standardwerte zurücksetzen. Zum tatsächlichen Speichern "
-"der Standardeinstellungen muß Übernehmen geklickt werden."
+"der Standardeinstellungen muß \"Anwenden\" geklickt werden."
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/__init__.py:340
msgid "Configure "
@@ -14702,87 +14676,87 @@ msgstr "Internen &Betrachter verwenden für:"
msgid "Reset all disabled &confirmation dialogs"
msgstr "Zurü&cksetzen aller ausgeschalteten Bestätigungsdialoge"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:28
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:33
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
msgid "is true"
msgstr "ist Wahr"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:29
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
msgid "is false"
msgstr "ist unwahr"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
msgid "is undefined"
msgstr "nicht definiert"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
msgid "has id"
msgstr "hat ID"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
msgid "does not have id"
msgstr "hat nicht ID"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:41
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
msgid "is equal to"
msgstr "ist gleich"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
msgid "is less than"
msgstr "ist weniger als"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
msgid "is greater than"
msgstr "ist größer als"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:46
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
msgid "has"
msgstr "hat"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:47
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
msgid "does not have"
msgstr "nicht hat"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
msgid "has pattern"
msgstr "hat Muster"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
msgid "does not have pattern"
msgstr "hat nicht Muster"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
msgid "is set"
msgstr "ist gesetzt"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
msgid "is not set"
msgstr "ist nicht gesetzt"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:54
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
msgid "is"
msgstr "ist"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
msgid "is not"
msgstr "ist nicht"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
msgid "matches pattern"
msgstr "stimmt mit dem Muster überein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
msgid "does not match pattern"
msgstr "stimmt nicht mit dem Muster überein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:78
msgid "If the ___ column ___ values"
msgstr "Wenn die Spalte ___ ___ Werte"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:217
msgid ""
"Enter either an identifier type or an identifier type and value of the form "
"identifier:value"
@@ -14790,76 +14764,87 @@ msgstr ""
"Gäbe entweder einen Identifiertyp oder einen Identifiertyp mit einem Wert in "
"der Form Identifier:Wert an"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
+msgid ""
+"Enter a 3 letter ISO language code, like fra for French or deu for German or "
+"eng for English. You can also use the full language name, in which case "
+"calibre will try to automatically convert it to the language code."
+msgstr ""
+"Geben Sie den dreistelligen ISO_Sprachcode ein, wie 'fra' für Französisch, "
+"'deu' für Deutsch oder 'eng' für Englisch. Sie können auch den vollständigen "
+"Sprachnamen verwenden. In diesem Fall wird Calibre versuchen, ihn "
+"automatisch in den Sprachcode zu übersetzen."
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
msgid "Enter a number"
msgstr "Geben Sie eine Zahl ein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:219
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:230
msgid "Enter a date in the format YYYY-MM-DD"
msgstr "Geben Sie ein Datum im Format YYYY-MM-DD ein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:221
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:232
msgid "Enter a string."
msgstr "Geben Sie einen Text ein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:223
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:234
msgid "Enter a regular expression"
msgstr "Geben Sie eine Regular Expression ein"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:225
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
#, python-format
msgid "You can match multiple values by separating them with %s"
msgstr "Durch Trennung mit %s können Sie mehrere Werte auswählen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:240
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:251
msgid "Create/edit a column coloring rule"
msgstr "Erstelle/bearbeite Regel für Spaltenfarbe"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:245
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:256
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
"Erstellen Sie eine Farbschema-Regel durch ausfüllen der unteren Eingabefelder"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
msgid "to"
msgstr "zu"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:281
msgid "Only if the following conditions are all satisfied:"
msgstr "Nur wenn die folgenden Bedingungen alle erfüllt sind:"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:291
msgid "Add another condition"
msgstr "Andere Bedingungen hinzufügen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:284
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:295
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
"Sie können Bedingungen ausschalten wenn Sie die Eingabefelder löschen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:338
msgid "Sample Text"
msgstr "Beispieltext"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:369
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:380
msgid "Invalid condition"
msgstr "Ungültiger Zustand"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:370
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:381
#, python-format
msgid "One of the conditions for this rule is invalid: %s"
msgstr "Eine bedingung für diese Regel ist ungültig: %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:375
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:386
msgid "No conditions"
msgstr "Kein Zustand"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:387
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
"Sie müssen der Regel mindestens eine Bedingung hinzufügen die nicht leer ist"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:464
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:475
#, python-format
msgid ""
"\n"
@@ -14872,7 +14857,7 @@ msgstr ""
"
If the %(col)s column %(action)s value: %(val)s"
msgstr ""
"
Wenn die %(col)s Spalte %(action)s Wert: %(val)s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid ""
"You can control the color of columns in the book list by creating \"rules\" "
"that tell calibre what color to use. Click the Add Rule button below to get "
@@ -14906,36 +14891,36 @@ msgstr ""
"
Sie können eine bereits angelegte Regel ändern, indem Sie doppelt "
"darauf klicken."
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:519
msgid "Add Rule"
msgstr "Regel hinzufügen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:522
msgid "Remove Rule"
msgstr "Regel entfernen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:528
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:539
msgid "Move the selected rule up"
msgstr "Ausgewählte Regel nach oben schieben"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:533
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:544
msgid "Move the selected rule down"
msgstr "Ausgewählte Regel nach unten schieben"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:552
msgid "Add Advanced Rule"
msgstr "Erweiterte Regel hinzufügen"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:589
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:600
msgid "No rule selected"
msgstr "Keine Regel ausgewählt"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:590
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:601
#, python-format
msgid "No rule selected for %s."
msgstr "Keine Regel ausgewählt für %s"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:595
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:606
msgid "removal"
msgstr "beseitigen"
@@ -15413,18 +15398,40 @@ msgstr ""
msgid "Colors"
msgstr "Farben"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:21
-msgid "Getting debug information"
-msgstr "Erhalte Information zur Fehlerdiagnose"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
+msgid "Getting debug information, please wait"
+msgstr "Sammle Debug-Informationen, bitte warten"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:22
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:25
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:32
msgid "Copy to &clipboard"
msgstr "In die Zwis&chenablage kopieren"
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:24
-msgid "Debug device detection"
-msgstr "Fehlerdiagnose bei der Geräteerkennung"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:43
+msgid "Device already detected"
+msgstr "Geräte bereits erkannt"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:44
+#, python-format
+msgid ""
+"A device (%s) is already detected by calibre. If you wish to debug the "
+"detection of another device, first disconnect this device."
+msgstr ""
+"Ein Gerät (%s) ist bereits von Calibre erkannt worden. Wenn Sie die "
+"Erkennung von einem anderen Gerät zu debuggen möchten, trennen Sie zuerst "
+"das angeschlossene Gerät."
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:57
+msgid "Debugging failed"
+msgstr "Debugging gescheitert"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_debug.py:58
+msgid ""
+"Running debug device detection failed. Click Show Details for more "
+"information."
+msgstr ""
+"Laufende Debug-Geräte-Erkennung fehlgeschlagen. Klicken Sie auf \"Zeige "
+"Details\" für weitere Informationen."
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31
msgid "Getting device information"
@@ -17188,9 +17195,9 @@ msgid ""
"these tweaks should be available on the website from where you downloaded "
"the plugins."
msgstr ""
-"Hinzufügen/bearbeiten von Tweaks für alle Plugins, die Sie installiert "
+"Hinzufügen/Bearbeiten von Tweaks für alle Plugins, die Sie installiert "
"haben. Eine Anleitung für diesen Tweak sollte auf der Webseite, von der Sie "
-"dieses Plugin geladen haben verfügbar sein."
+"dieses Plugin geladen haben, verfügbar sein."
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:331
msgid "Search for tweak"
@@ -17224,9 +17231,9 @@ msgid ""
"calibre. Your changes will only take effect after a restart of "
"calibre."
msgstr ""
-"Werte für die Einstellungen werden unten gezeigt. Editiere sie um die "
-"Funktionalität von Calibre zu ändern. Dein Einstellungen werden erst nach "
-"einem Neustart von Calibre Wirkung haben."
+"Werte für die Einstellungen werden unten angezeigt. Editieren Sie sie, um "
+"das Verhalten von Calibre zu ändern. Ihre Änderungen werden erst nach einem "
+"Neustart von Calibre wirksam."
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:116
msgid "Edit tweaks for any custom plugins you have installed"
@@ -17798,48 +17805,48 @@ msgstr "%p%"
msgid "The grouped search term name is \"{0}\""
msgstr "Der gruppierte Suchbegriff ist \"{0}\""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:765
msgid ""
"Changing the authors for several books can take a while. Are you sure?"
msgstr ""
"Das Ändern der Autoren für mehrere Bücher kann einige Zeit dauern. Sind Sie "
"sicher?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:769
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:770
msgid ""
"Changing the metadata for that many books can take a while. Are you sure?"
msgstr ""
"Das Ändern der Metadaten für so viele Bücher kann einige Zeit dauern. Sind "
"Sie sicher?"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:856
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:857
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:493
msgid "Searches"
msgstr "Suchergebnisse"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:953
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:962
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
msgid "Rename user category"
msgstr "Benutzerkategorie umbenennen"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:934
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:935
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
"Hochkommas können bei der Umbezeichnung von Benutzerkategorien nicht im "
"Namen verwendet werden"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:954
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:963
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:955
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:964
#, python-format
msgid "The name %s is already used"
msgstr "Der Name %s wird bereits benutzt"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:982
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
msgid "Duplicate search name"
msgstr "Such-Name duplizieren"
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:983
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:984
#, python-format
msgid "The saved search name %s is already used."
msgstr "Der gespeicherte Such-Name %s wird schon verwendet."
@@ -18806,49 +18813,74 @@ msgstr "Gespeichertes Thema löschen:"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:428
msgid "&Theming"
-msgstr ""
+msgstr "&Thematisierung"
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/dictionary.py:53
msgid "No results found for:"
msgstr "Kein Ergebnis gefunden für:"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470
msgid "&Lookup in dictionary"
msgstr "Im Wörterbuch nachsch&lagen"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:475
+msgid "View &image..."
+msgstr "Betrachte Bild..."
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:478
msgid "&Search for next occurrence"
msgstr "&Suche nach dem nächsten Vorkommen"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:479
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138
msgid "Go to..."
msgstr "Gehe zu..."
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:491
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
msgid "Next Section"
msgstr "Nächster Abschnitt"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:492
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:496
msgid "Previous Section"
msgstr "Vorheriger Abschnitt"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:494
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
msgid "Document Start"
msgstr "Beginn des Dokuments"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:495
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:499
msgid "Document End"
msgstr "Ende des Dokuments"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:501
msgid "Section Start"
msgstr "Beginn des Abschnitts"
-#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:502
msgid "Section End"
msgstr "Ende des Abschnitts"
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:37
+msgid "Zoom &in"
+msgstr "Vergrößern"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:38
+msgid "Zoom &out"
+msgstr "Verkleinern"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:39
+msgid "&Save as"
+msgstr "Speichern als"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:63
+msgid "Choose a file to save to"
+msgstr "Wählen Sie eine Datei zum speichern"
+
+#: /home/kovid/work/calibre/src/calibre/gui2/viewer/image_popup.py:88
+#, python-format
+msgid "View Image: %s"
+msgstr "Zeige Bild: %s"
+
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12
msgid "Scroll to the next page"
msgstr "Zur nächsten Seite blättern"
@@ -19619,24 +19651,24 @@ msgstr ""
"Calibre läuft."
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:612
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:617
msgid "checked"
msgstr "ausgewählt"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:177
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:610
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:615
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "yes"
msgstr "ja"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:609
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:223
msgid "no"
msgstr "nein"
#: /home/kovid/work/calibre/src/calibre/library/caches.py:179
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:611
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:616
msgid "unchecked"
msgstr "nicht ausgewählt"
@@ -19656,15 +19688,15 @@ msgstr "in diesem Monat"
msgid "daysago"
msgstr "vor Tagen"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:613
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:618
msgid "empty"
msgstr "leer"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:614
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:619
msgid "blank"
msgstr "leer"
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:626
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:631
msgid "Invalid boolean query \"{0}\""
msgstr "Ungültige booleschen Abfrage \"{0}\""
@@ -19813,167 +19845,170 @@ msgstr ""
"Vorgabe: '%default'\n"
"Gilt für CSV- und XML-Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:37
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:39
#, python-format
msgid ""
"Title of generated catalog used as title in metadata.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Titel des erzeugten Katalogs für die Verwendung in den Metadaten.\n"
+"Titel des erzeugten Katalogs wie er als Titel in den Metadaten verwendet "
+"wird.\n"
"Standard: '%default'\n"
-"Betrifft: ePub und MOBI Ausgabeformate"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:44
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:46
#, python-format
msgid ""
"Save the output from different stages of the conversion pipeline to the "
"specified directory. Useful if you are unsure at which stage of the "
"conversion process a bug is occurring.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Speichern Sie die Ausgabe von verschiedenen Phasen der Konvertierungs-"
-"Pipeline in das angegebene Verzeichnis. Nützlich, wenn Sie nicht sicher sind "
-"in welchem Stadium des Konvertierungsprozesses ein Fehler auftritt.\n"
+"Speichere die Ausgabe der verschiedenen Stufen der Konversions-Pipeline in "
+"das angegebene Verzeichnis. Nützlich, wenn Sie unsicher sind, bei welcher "
+"Stufe des Konversions-Prozesses ein Fehler auftritt.\n"
"Standard: '%default'\n"
-"Gilt für: ePub, MOBI Ausgabeformate"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:54
-#, python-format
-msgid ""
-"field:pattern specifying custom field/contents indicating book should be "
-"excluded.\n"
-"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
-msgstr ""
-"Feld: Benutzerdefinierte Felder/Inhalte - Muster für Bücher, welche "
-"ausgeschlossen werden sollen.\n"
-"Standard: '%default'\n"
-"Gilt für: ePub, MOBI Ausgabeformate"
-
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:61
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56
#, python-format
msgid ""
"Regex describing tags to exclude as genres.\n"
-"Default: '%default' excludes bracketed tags, e.g. '[]'\n"
-"Applies to: ePub, MOBI output formats"
+"Default: '%default' excludes bracketed tags, e.g. '[Project Gutenberg]', and "
+"'+', the default tag for read books.\n"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Regex Ausdruck für Schlagwörter, die als Genres ausgeschlossen werden.\n"
-"Standard: '%default' schließt in eckigen Klammern aufgeführe Schlagwörter "
-"aus, z.B. '[]'\n"
-"Betrifft: ePub und MOBI Ausgabeformate"
+"Regulärer Ausdruck, der die Tags beschreibt, die von den Genres "
+"ausgeschlossen werden sollen.\n"
+"Standard: '%default' schließt mit '[]' geklammerte Tags aus, z.B. '[Projekt "
+"Gutenberg]', und '+', das Standardtag für gelesene Bücher.\n"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67
-#, python-format
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:64
msgid ""
-"Comma-separated list of tag words indicating book should be excluded from "
-"output. For example: 'skip' will match 'skip this book' and 'Skip will like "
-"this'. Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Specifies the rules used to exclude books from the generated catalog.\n"
+"The model for an exclusion rule is either\n"
+"('','Tags','') or\n"
+"('','','').\n"
+"For example:\n"
+"(('Archived books','#status','Archived'),)\n"
+"will exclude a book with a value of 'Archived' in the custom column "
+"'status'.\n"
+"When multiple rules are defined, all rules will be applied.\n"
+"Default: \n"
msgstr ""
-"Durch ein Komma getrennte Liste mit Tags die angeben, welche Bücher von der "
-"Ausgabe ausgenommen sind. Zum Beispiel: 'skip' wird 'skip this book' und "
-"'Skip will like this' erzielen. Standard: '%default'\n"
-"Angewendet auf: ePub, MOBI Ausgabeformate"
+"Spezifiziert die Regeln um Bücher vom erzeugten Katalog auszuschließen.\n"
+"Das Format der Ausschlussregeln ist entweder\n"
+"('','Tags','') oder\n"
+"('','','').\n"
+"Zum Beispiel:\n"
+"(('Archivierte Bücher','#status','Archiviert'),)\n"
+"schließt Bücher mit dem Wert 'Archiviert' in der benutzerdefinierten Spalte "
+"'status' aus..\n"
+"Falls mehrere Regeln definiert sind, werden alle angewandt.\n"
+"Standard: \n"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:75
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:78
#, python-format
msgid ""
"Include 'Authors' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"'Autoren' Sektion in den Katalog einfügen.\n"
+"Abschnitt 'Autoren' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Wird angewendet bei: ePub, MOBI Ausgabeformaten"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:82
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:85
#, python-format
msgid ""
"Include 'Descriptions' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"'Beschreibungen' Sektion in den Katalog einfügen.\n"
+"Abschnitt 'Beschreibungen' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Wird angewendet bei: ePub, MOBI Ausgabeformaten"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:89
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:92
#, python-format
msgid ""
"Include 'Genres' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"'Genre' Sektion in den Katalog einfügen.\n"
+"Abschnitt 'Genres' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Wird angewendet bei: ePub, MOBI Ausgabeformaten"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:96
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:99
#, python-format
msgid ""
"Include 'Titles' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"'Titel' Abschnitt im Katalog einschließen.\n"
+"Abschnitt 'Titel' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Betrifft: ePub und MOBI Ausgabeformate"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:103
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:106
#, python-format
msgid ""
"Include 'Series' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Serien- Sektion im Katalog erstellen.\n"
+"Abschnitt 'Serien' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Angewendet bei: ePub-, MOBI- Ausgabeformaten"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:110
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:113
#, python-format
msgid ""
"Include 'Recently Added' section in catalog.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"'Zuletzt hinzugefügt' Abschnitt im Katalog einschließen.\n"
+"Abschnitt 'Kürzlich hinzugefügt' im Katalog einschließen.\n"
"Standard: '%default'\n"
-"Betrifft: ePub und MOBI Ausgabeformate"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:117
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:120
#, python-format
msgid ""
"Custom field containing note text to insert in Description header.\n"
"Default: '%default'\n"
-"Applies to: ePub, MOBI output formats"
+"Applies to: AZW3, ePub, MOBI output formats"
msgstr ""
-"Benutzerdefiniertes Feld mit Notizen für den Beschreibungskopf.\n"
+"Benutzerdefiniertes Notiz-Feld dessen Inhalt in den Beschreibungskopf "
+"eingefügt wird.\n"
"Standard: '%default'\n"
-"Wird angewendet bei: ePub, MOBI Ausgabeformaten"
+"Anwendbar auf: AZW3, ePub, MOBI Ausgabeformate"
-#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:124
+#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:127
#, python-format
msgid ""
-":[before|after]:[True|False] specifying:\n"
+"#:[before|after]:[True|False] specifying:\n"
" Custom field containing notes to merge with Comments\n"
" [before|after] Placement of notes with respect to Comments\n"
" [True|False] - A horizontal rule is inserted between notes and Comments\n"
"Default: '%default'\n"
-"Applies to ePub, MOBI output formats"
+"Applies to AZW3, ePub, MOBI output formats"
msgstr ""
-":[before|after]:[True|False] Bedeutung:\n"
-"