diff --git a/Changelog.yaml b/Changelog.yaml index f23566cb67..8ec96fc055 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -4,6 +4,13 @@ # for important features/bug fixes. # Also, each release can have new and improved recipes. +- version: 0.7.0 + date: 2010-06-04 + + new features: + - title: "Go to http://calibre-ebook.com/new-in/seven to see what's new in 0.7.0" + type: major + - version: 0.6.55 date: 2010-05-28 diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 78ea150821..e4a1c521c2 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = 'calibre' -__version__ = '0.6.55' +__version__ = '0.7.0' __author__ = "Kovid Goyal " import re diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 461a729d50..daa42892db 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -22,10 +22,46 @@ from calibre.devices.errors import UserFeedback from PIL import Image as PILImage if isosx: - import appscript + try: + import appscript + appscript + except: + # appscript fails to load on 10.4 + appscript = None if iswindows: import pythoncom, win32com.client + +class ITUNES(DevicePlugin): + ''' + try: + pythoncom.CoInitialize() + finally: + pythoncom.CoUninitialize() + ''' + + name = 'Apple device interface' + gui_name = 'Apple device' + icon = I('devices/ipad.png') + description = _('Communicate with iBooks through iTunes.') + supported_platforms = ['osx','windows'] + author = 'GRiker' + #: The version of this plugin as a 3-tuple (major, minor, revision) + version = (0, 4, 0) + + OPEN_FEEDBACK_MESSAGE = _( + 'Apple device detected, launching iTunes, please wait ...') + + FORMATS = ['epub'] + + # Product IDs: + # 0x1292:iPhone 3G + # 0x129a:iPad + VENDOR_ID = [0x05ac] + PRODUCT_ID = [0x129a] + BCD = [0x01] + + # iTunes enumerations Sources = [ 'Unknown', 'Library', @@ -43,34 +79,27 @@ if iswindows: 'BMP' ] -class ITUNES(DevicePlugin): - ''' - try: - pythoncom.CoInitialize() - finally: - pythoncom.CoUninitialize() - ''' + PlaylistKind = [ + 'Unknown', + 'Library', + 'User', + 'CD', + 'Device', + 'Radio Tuner' + ] - name = 'Apple device interface' - gui_name = 'Apple device' - icon = I('devices/ipad.png') - description = _('Communicate with iBooks through iTunes.') - supported_platforms = ['osx','windows'] - author = 'GRiker' - #: The version of this plugin as a 3-tuple (major, minor, revision) - version = (1, 0, 0) - - OPEN_FEEDBACK_MESSAGE = _( - 'Apple device detected, launching iTunes, please wait ...') - - FORMATS = ['epub'] - - # Product IDs: - # 0x1292:iPhone 3G - # 0x129a:iPad - VENDOR_ID = [0x05ac] - PRODUCT_ID = [0x129a] - BCD = [0x01] + PlaylistSpecialKind = [ + 'Unknown', + 'Purchased Music', + 'Party Shuffle', + 'Podcasts', + 'Folder', + 'Video', + 'Music', + 'Movies', + 'TV Shows', + 'Books', + ] # Properties cached_books = {} @@ -268,6 +297,8 @@ class ITUNES(DevicePlugin): instantiate iTunes if necessary This gets called ~1x/second while device fingerprint is sensed ''' + if appscript is None: + return False if self.iTunes: # Check for connected book-capable device @@ -452,12 +483,14 @@ class ITUNES(DevicePlugin): if isosx: self.iTunes.eject(self.sources['iPod']) elif iswindows: - try: - pythoncom.CoInitialize() - self.iTunes = win32com.client.Dispatch("iTunes.Application") - self.iTunes.sources.ItemByName(self.sources['iPod']).EjectIPod() - finally: - pythoncom.CoUninitialize() + if 'iPod' in self.sources: + try: + pythoncom.CoInitialize() + self.iTunes = win32com.client.Dispatch("iTunes.Application") + self.iTunes.sources.ItemByName(self.sources['iPod']).EjectIPod() + + finally: + pythoncom.CoUninitialize() self.iTunes = None self.sources = None @@ -628,7 +661,7 @@ class ITUNES(DevicePlugin): if self.update_needed: if DEBUG: self.log.info(' calling _update_device') - self._update_device(msg=self.update_msg) + self._update_device(msg=self.update_msg, wait=False) self.update_needed = False # Get actual size of updated books on device @@ -729,12 +762,13 @@ class ITUNES(DevicePlugin): self.problem_msg = _("Some cover art could not be converted.\n" "Click 'Show Details' for a list.") + if DEBUG: + self.log.info("ITUNES.upload_books():") + self._dump_files(files, header='upload_books()') + self._dump_cached_books('upload_books()') + self._dump_update_list('upload_books()') + if isosx: - if DEBUG: - self.log.info("ITUNES.upload_books():") - self._dump_files(files, header='upload_books()') - self._dump_cached_books('upload_books()') - self._dump_update_list('upload_books()') for (i,file) in enumerate(files): path = self.path_template % (metadata[i].title, metadata[i].author[0]) # Delete existing from Library|Books, add to self.update_list @@ -829,11 +863,36 @@ class ITUNES(DevicePlugin): try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - lib = self.iTunes.sources.ItemByName('Library') - lib_playlists = [pl.Name for pl in lib.Playlists] - if not 'Books' in lib_playlists: - self.log.error(" no 'Books' playlist in Library") - library_books = lib.Playlists.ItemByName('Books') + + for source in self.iTunes.sources: + if source.Kind == self.Sources.index('Library'): + lib = source + if DEBUG: + self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) + break + else: + if DEBUG: + self.log.info(" Library source not found") + + if lib is not None: + lib_books = None + for pl in lib.Playlists: + if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if DEBUG: + self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + lib_books = pl + break + else: + if DEBUG: + self.log.error(" no Books playlist found") + + # +# lib = self.iTunes.sources.ItemByName('Library') +# lib_playlists = [pl.Name for pl in lib.Playlists] +# if not 'Books' in lib_playlists: +# self.log.error(" no 'Books' playlist in Library") +# library_books = lib.Playlists.ItemByName('Books') + # for (i,file) in enumerate(files): path = self.path_template % (metadata[i].title, metadata[i].author[0]) @@ -852,10 +911,10 @@ class ITUNES(DevicePlugin): # Add to iTunes Library|Books if isinstance(file,PersistentTemporaryFile): - op_status = library_books.AddFile(file._name) + op_status = lib_books.AddFile(file._name) self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" % file._name) else: - op_status = library_books.AddFile(file) + op_status = lib_books.AddFile(file) self.log.info(" iTunes adding '%s'" % file) if DEBUG: @@ -1053,20 +1112,6 @@ class ITUNES(DevicePlugin): ub['author'])) self.log.info() - def _find_device_book(self, cached_book): - ''' - Windows-only method to get a handle to a device book in the current pythoncom session - ''' - SearchField = ['All','Visible','Artists','Titles','Composers','SongNames'] - if iswindows: - dev_books = self.iTunes.sources.ItemByName(self.sources['iPod']).Playlists.ItemByName('Books') - hits = dev_books.Search(cached_book['title'],SearchField.index('Titles')) - if hits: - for hit in hits: - if hit.Artist == cached_book['author']: - return hit - return None - def _find_library_book(self, cached_book): ''' Windows-only method to get a handle to a library book in the current pythoncom session @@ -1076,7 +1121,28 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info("ITUNES._find_library_book()") self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) - lib_books = self.iTunes.sources.ItemByName('Library').Playlists.ItemByName('Books') + + for source in self.iTunes.sources: + if source.Kind == self.Sources.index('Library'): + lib = source + if DEBUG: + self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) + break + else: + if DEBUG: + self.log.info(" Library source not found") + + if lib is not None: + lib_books = None + for pl in lib.Playlists: + if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if DEBUG: + self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + lib_books = pl + break + else: + if DEBUG: + self.log.error(" no Books playlist found") attempts = 9 while attempts: @@ -1114,12 +1180,6 @@ class ITUNES(DevicePlugin): except: zfw = zipfile.ZipFile(archive_path, mode='a') else: -# if DEBUG: -# if isosx: -# self.log.info("ITUNES._generate_thumbnail(): cached thumb found for '%s'" % book.name()) -# elif iswindows: -# self.log.info("ITUNES._generate_thumbnail(): cached thumb found for '%s'" % book.Name) - return thumb_data if isosx: @@ -1153,7 +1213,7 @@ class ITUNES(DevicePlugin): return None # Save the cover from iTunes - tmp_thumb = os.path.join(tempfile.gettempdir(), "thumb.%s" % ArtworkFormat[book.Artwork.Item(1).Format]) + tmp_thumb = os.path.join(tempfile.gettempdir(), "thumb.%s" % self.ArtworkFormat[book.Artwork.Item(1).Format]) book.Artwork.Item(1).SaveArtworkToFile(tmp_thumb) try: # Resize the cover @@ -1177,8 +1237,6 @@ class ITUNES(DevicePlugin): def _get_device_book_size(self, title, author): ''' Fetch the size of a book stored on the device - - Windows: If sync-in-progress, this call blocked until sync completes ''' if DEBUG: self.log.info("ITUNES._get_device_book_size():\n looking for title: '%s' author: '%s'" % @@ -1207,53 +1265,134 @@ class ITUNES(DevicePlugin): def _get_device_books(self): ''' - Assumes pythoncom wrapper + Assumes pythoncom wrapper for Windows ''' + if DEBUG: + self.log.info("\nITUNES._get_device_books()") + + device_books = [] if isosx: if 'iPod' in self.sources: connected_device = self.sources['iPod'] - if 'Books' in self.iTunes.sources[connected_device].playlists.name(): - return self.iTunes.sources[connected_device].playlists['Books'].file_tracks() - return [] + device = self.iTunes.sources[connected_device] + for pl in device.playlists(): + if pl.special_kind() == appscript.k.Books: + if DEBUG: + self.log.info(" Book playlist: '%s' special_kind: '%s'" % (pl.name(), pl.special_kind())) + books = pl.file_tracks() + break + else: + self.log.error(" book_playlist not found") + + for book in books: + if book.kind() in ['Book','Protected book']: + device_books.append(book) + else: + if DEBUG: + self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) elif iswindows: if 'iPod' in self.sources: - connected_device = self.sources['iPod'] - dev = self.iTunes.sources.ItemByName(connected_device) - dev_playlists = [pl.Name for pl in dev.Playlists] - if 'Books' in dev_playlists: - return self.iTunes.sources.ItemByName(connected_device).Playlists.ItemByName('Books').Tracks - else: - return [] - if DEBUG: - self.log.warning('ITUNES._get_device_book(): No iPod device connected') - return [] + try: + pythoncom.CoInitialize() + connected_device = self.sources['iPod'] + device = self.iTunes.sources.ItemByName(connected_device) + + dev_books = None + for pl in device.Playlists: + if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if DEBUG: + self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + dev_books = pl.Tracks + break + else: + if DEBUG: + self.log.info(" no Books playlist found") + + for book in dev_books: + if book.KindAsString in ['Book','Protected book']: + device_books.append(book) + else: + self.log.info(" ignoring '%s' of type %s" % (book.Name, book.KindAsString)) + + finally: + pythoncom.CoUninitialize() + + return device_books def _get_library_books(self): ''' Populate a dict of paths from iTunes Library|Books ''' + if DEBUG: + self.log.info("\nITUNES._get_library_books()") + library_books = {} + lib = None if isosx: - lib = self.iTunes.sources['library'] - if 'Books' in lib.playlists.name(): - lib_books = lib.playlists['Books'].file_tracks() + for source in self.iTunes.sources(): + if source.kind() == appscript.k.library: + lib = source + if DEBUG: + self.log.info(" Library source: '%s' kind: %s" % (lib.name(), lib.kind())) + break + else: + if DEBUG: + self.log.error(' Library source not found') + + if lib is not None: + lib_books = None + for pl in lib.playlists(): + if pl.special_kind() == appscript.k.Books: + if DEBUG: + self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.name(), pl.special_kind())) + break + lib_books = pl.file_tracks() for book in lib_books: - path = self.path_template % (book.name(), book.artist()) - library_books[path] = book + if book.kind() in ['Book','Protected book']: + path = self.path_template % (book.name(), book.artist()) + library_books[path] = book + else: + if DEBUG: + self.log.info(" ignoring library book of type '%s'" % book.kind()) + else: + if DEBUG: + self.log.info('ITUNES._get_library_books():\n No Books playlist') + elif iswindows: + lib = None try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - lib = self.iTunes.sources.ItemByName('Library') - lib_playlists = [pl.Name for pl in lib.Playlists] - if 'Books' in lib_playlists: - lib_books = lib.Playlists.ItemByName('Books').Tracks + for source in self.iTunes.sources: + if source.Kind == self.Sources.index('Library'): + lib = source + self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) + break + else: + self.log.error(" Library source not found") + + if lib is not None: + lib_books = None + for pl in lib.Playlists: + if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if DEBUG: + self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + lib_books = pl.Tracks + break + else: + if DEBUG: + self.log.error(" no Books playlist found") + for book in lib_books: - path = self.path_template % (book.Name, book.Artist) - library_books[path] = book + if book.KindAsString in ['Book','Protected book']: + path = self.path_template % (book.Name, book.Artist) + library_books[path] = book + else: + if DEBUG: + self.log.info(" ignoring '%s' of type %s" % (book.Name, book.KindAsString)) finally: pythoncom.CoUninitialize() @@ -1429,7 +1568,7 @@ class ITUNES(DevicePlugin): try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - result = self.iTunes.UpdateIPod() + self.iTunes.UpdateIPod() if wait: if DEBUG: sys.stdout.write(" waiting for iPad sync to complete ...") @@ -1448,11 +1587,9 @@ class ITUNES(DevicePlugin): sys.stdout.write('\n') sys.stdout.flush() break - finally: pythoncom.CoUninitialize() - class BookList(list): ''' A list of books. Each Book object must have the fields: diff --git a/src/calibre/ebooks/metadata/html.py b/src/calibre/ebooks/metadata/html.py index 45b592c709..aa74548e83 100644 --- a/src/calibre/ebooks/metadata/html.py +++ b/src/calibre/ebooks/metadata/html.py @@ -44,7 +44,8 @@ def get_metadata_(src, encoding=None): author = match.group(2).replace(',', ';') ent_pat = re.compile(r'&(\S+)?;') - title = ent_pat.sub(entity_to_unicode, title) + if title: + title = ent_pat.sub(entity_to_unicode, title) if author: author = ent_pat.sub(entity_to_unicode, author) mi = MetaInformation(title, [author] if author else None) diff --git a/src/calibre/ebooks/oeb/transforms/flatcss.py b/src/calibre/ebooks/oeb/transforms/flatcss.py index 2c4ef1e7f2..dd735fe13e 100644 --- a/src/calibre/ebooks/oeb/transforms/flatcss.py +++ b/src/calibre/ebooks/oeb/transforms/flatcss.py @@ -201,7 +201,11 @@ class CSSFlattener(object): tag = barename(node.tag) style = stylizer.style(node) cssdict = style.cssdict() - font_size = style['font-size'] + try: + font_size = style['font-size'] + except: + font_size = self.sbase if self.sbase is not None else \ + self.context.source.fbase if 'align' in node.attrib: cssdict['text-align'] = node.attrib['align'] del node.attrib['align'] diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index 98e31b2252..dd0451c087 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -9,7 +9,7 @@ The Graphical User Interface *(GUI)* provides access to all library management and ebook format conversion features. The basic workflow for using |app| is to first add books to the library from your hard disk. |app| will automatically try to read metadata from the books and add them -to its internal database. Once they are in the database, you can performa various +to its internal database. Once they are in the database, you can perform a various :ref:`actions` on them that include conversion from one format to another, transfer to the reading device, viewing on your computer, editing metadata, including covers, etc. @@ -243,7 +243,7 @@ Now, you can access your saved search in the Tag Browser under "Searches". A sin Preferences --------------- -The Preferences dialog allows you to set some global defaults used by all of |app|. To access it, click the |cbi|. +The Preferences dialog allows you to change the way various aspects of |app| work. To access it, click the |cbi|. .. |cbi| image:: images/configuration.png @@ -251,7 +251,7 @@ The Preferences dialog allows you to set some global defaults used by all of |ap Guessing metadata from file names ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -In the :guilabel:`Advanced` section of the configuration dialog, you can specify a regularexpression that |app| will use to try and guess metadata from the names of ebook files +In the :guilabel:`Add/Save` section of the configuration dialog, you can specify a regular expression that |app| will use to try and guess metadata from the names of ebook files that you add to the library. The default regular expression is:: title - author @@ -265,18 +265,13 @@ will be interpreted to have the title: Foundation and Earth and author: Isaac As .. tip:: If the filename does not contain the hyphen, the regular expression will fail. -.. tip:: - If you want to only use metadata guessed from filenames and not metadata read from the file itself, you can tell |app| to do this, via the configuration dialog, accessed by the button to the right - of the search box. - .. _book_details: Book Details ------------- .. image:: images/book_details.png -The Book Details display shows you extra information and the cover for the currently selected book. THe comments section is truncated if the comments are too long. To see the full comments as well as -a larger image of the cover, click anywhere in the Book Details area. +The Book Details display shows you extra information and the cover for the currently selected book. .. _jobs: diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index f1238f594d..901eb38234 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.6.55\n" -"POT-Creation-Date: 2010-05-31 10:04+MDT\n" -"PO-Revision-Date: 2010-05-31 10:04+MDT\n" +"Project-Id-Version: calibre 0.7.0\n" +"POT-Creation-Date: 2010-06-04 18:14+MDT\n" +"PO-Revision-Date: 2010-06-04 18:14+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -68,9 +68,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:818 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:909 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:914 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:980 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:908 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:913 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:979 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:108 @@ -98,8 +98,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:272 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:170 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:177 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 @@ -119,18 +119,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:358 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:986 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1760 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1763 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1797 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1800 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:185 #: /home/kovid/work/calibre/src/calibre/library/cli.py:213 #: /home/kovid/work/calibre/src/calibre/library/database.py:913 #: /home/kovid/work/calibre/src/calibre/library/database2.py:308 #: /home/kovid/work/calibre/src/calibre/library/database2.py:320 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:863 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:900 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1294 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1296 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1418 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:884 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:921 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1400 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1402 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1524 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:268 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:131 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134 @@ -156,11 +156,11 @@ msgstr "" msgid "Metadata reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:237 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:235 msgid "Metadata writer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:267 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 msgid "Catalog generator" msgstr "" @@ -247,7 +247,7 @@ msgid "This profile tries to provide sane defaults and is useful if you know not msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:57 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:262 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:266 msgid "This profile is intended for the SONY PRS line. The 500/505/600/700 etc." msgstr "" @@ -256,62 +256,62 @@ msgid "This profile is intended for the SONY PRS 300." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:78 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:296 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:300 msgid "This profile is intended for the SONY PRS-900." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:326 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:330 msgid "This profile is intended for the Microsoft Reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:97 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:337 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:341 msgid "This profile is intended for the Mobipocket books." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:110 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:350 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:354 msgid "This profile is intended for the Hanlin V3 and its clones." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:122 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:362 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:366 msgid "This profile is intended for the Hanlin V5 and its clones." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:132 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:370 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:374 msgid "This profile is intended for the Cybook G3." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:145 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:383 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:387 msgid "This profile is intended for the Cybook Opus." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:157 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:394 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:398 msgid "This profile is intended for the Amazon Kindle." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:169 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:429 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:433 msgid "This profile is intended for the Irex Illiad." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:181 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:442 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:446 msgid "This profile is intended for the IRex Digital Reader 1000." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:194 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:456 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:460 msgid "This profile is intended for the IRex Digital Reader 800." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:206 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:470 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:474 msgid "This profile is intended for the B&N Nook." msgstr "" @@ -323,27 +323,27 @@ msgstr "" msgid "This profile tries to provide sane defaults and is useful if you want to produce a document intended to be read at a computer or on a range of devices." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:251 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:254 msgid "Intended for the iPad and similar devices with a resolution of 768x1024" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:279 msgid "This profile is intended for the Kobo Reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:287 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:291 msgid "This profile is intended for the SONY PRS-300." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:305 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:309 msgid "This profile is intended for the 5-inch JetBook." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:314 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 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:412 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:416 msgid "This profile is intended for the Amazon Kindle DX." msgstr "" @@ -415,50 +415,50 @@ msgstr "" msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:51 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:57 msgid "Communicate with iBooks through iTunes." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:56 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 msgid "Apple device detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:114 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:132 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:135 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:125 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:146 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:195 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:226 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:793 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:930 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:242 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:827 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:964 msgid "%d of %d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:232 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:935 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:248 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:969 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:349 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:421 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:588 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:614 #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:28 msgid "settings for device drivers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:590 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:616 #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:30 msgid "Ordered list of formats the device will accept" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:704 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:729 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -691,7 +691,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 #: /home/kovid/work/calibre/src/calibre/library/database2.py:147 #: /home/kovid/work/calibre/src/calibre/library/database2.py:158 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1178 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1284 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:120 msgid "News" msgstr "" @@ -1533,7 +1533,7 @@ msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1001 @@ -1543,7 +1543,7 @@ msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:386 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:301 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1010 @@ -1751,7 +1751,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1220 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1371 msgid "Cover" msgstr "" @@ -1788,70 +1788,70 @@ msgstr "" msgid "This is an Amazon Topaz book. It cannot be processed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 msgid "Title Page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 msgid "Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 msgid "Index" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1376 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 msgid "Glossary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1377 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1376 msgid "Acknowledgements" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1378 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1377 msgid "Bibliography" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1379 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1378 msgid "Colophon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1380 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1379 msgid "Copyright" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1381 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1380 msgid "Dedication" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1382 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1381 msgid "Epigraph" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1383 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1382 msgid "Foreword" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1384 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1383 msgid "List of Illustrations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1385 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1384 msgid "List of Tables" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1386 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1385 msgid "Notes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1387 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1386 msgid "Preface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1388 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1387 msgid "Main Text" msgstr "" @@ -2263,20 +2263,24 @@ msgstr "" msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 +msgid "tag browser categories not to display" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:382 msgid "Choose Files" msgstr "" @@ -2284,61 +2288,61 @@ msgstr "" msgid "Searching in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:229 msgid "Adding..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:242 msgid "Searching in all sub-directories..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:255 msgid "Path error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256 msgid "The specified directory could not be processed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:260 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:599 msgid "No books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:259 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1892 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1929 msgid "No books found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:327 msgid "Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:340 msgid "Adding failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:341 msgid "The add books process seems to have hung. Try restarting calibre and adding the books in smaller increments, until you find the problem book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:351 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:353 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:352 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:354 msgid "Books with the same title as the following already exist in the database. Add them anyway?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:357 msgid "Adding duplicates..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:423 msgid "Saving..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:476 msgid "Saved" msgstr "" @@ -2419,15 +2423,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:604 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 @@ -2436,6 +2440,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 @@ -2444,6 +2450,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 @@ -2548,8 +2556,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 #: /home/kovid/work/calibre/src/calibre/library/catalog.py:222 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1141 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1159 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1265 msgid "Catalog" msgstr "" @@ -3208,20 +3216,20 @@ msgstr "" msgid "RB Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:75 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2137 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2174 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 msgid "Cannot build regex using the GUI builder without a book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 msgid "No formats available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:100 msgid "Open book" msgstr "" @@ -3938,159 +3946,159 @@ msgstr "" msgid "new email address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:487 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:489 msgid "System port selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:490 msgid "The value %d you have chosen for the content server port is a system port. Your operating system may not allow the server to run on this port. To be safe choose a port number larger than 1024." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:927 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1641 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 msgid "Failed to install command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:513 msgid "Command line tools installed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:512 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:514 msgid "Command line tools installed in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 msgid "If you move calibre.app, you have to re-install the command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:566 msgid "No valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 msgid "%s is not a valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:568 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:570 msgid "Choose plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:580 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:582 msgid "Plugin cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:581 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583 msgid "The plugin: %s cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:590 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:592 msgid "Plugin not customizable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:591 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:593 msgid "Plugin: %s does not need customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:601 msgid "Customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:637 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:639 msgid "Cannot remove builtin plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:638 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:640 msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:669 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:671 msgid "You must select a column to delete it" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676 msgid "The selected column is not a custom column" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:675 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:677 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 msgid "Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678 msgid "Do you really want to delete column %s and all its data?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:743 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:745 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:752 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:780 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:767 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:802 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:804 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:587 msgid "Select location for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:809 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:811 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:810 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:812 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:862 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:867 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:865 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:870 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:863 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:866 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:867 msgid "
Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:868 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:871 msgid "Invalid database location.
Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:873 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:876 msgid "Must restart" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:874 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:877 msgid "The changes you made require that Calibre be restarted. Please restart as soon as practical." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:911 msgid "Checking database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:928 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:931 msgid "Failed to check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:936 msgid "Some inconsistencies found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:934 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:937 msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." msgstr "" @@ -4182,288 +4190,292 @@ msgstr "" msgid "Sending to &device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 msgid "Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 msgid "Show notification when &new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 msgid "Download &social metadata (tags/ratings/etc.) by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 msgid "&Overwrite author and title by default when fetching metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535 msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 msgid "Normal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 msgid "High" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 msgid "Low" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 msgid "Job &priority:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 msgid "Preferred &output format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 msgid "Preferred &input format order:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 msgid "Show ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 -msgid "Show cover &browser in a separate window (needs restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 -msgid "Search as you type" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 -msgid "Automatically send downloaded &news to ebook reader" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 -msgid "&Delete news from library when it is automatically sent to reader" +msgid "Show &splash screen at startup" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 -msgid "&Number of covers to show in browse mode (needs restart):" +msgid "Show cover &browser in a separate window (needs restart)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 -msgid "Toolbar" +msgid "Search as you type" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 -msgid "Large" +msgid "Automatically send downloaded &news to ebook reader" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 -msgid "Medium" +msgid "&Delete news from library when it is automatically sent to reader" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 -msgid "Small" +msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 -msgid "&Button size in toolbar" +msgid "Toolbar" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 -msgid "Show &text in toolbar buttons" +msgid "Large" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 -msgid "Select visible &columns in library view" +msgid "Medium" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 +msgid "Small" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 -msgid "Remove a user-defined column" +msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 -msgid "Add a user-defined column" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 +msgid "Show &text in toolbar buttons" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 +msgid "Select visible &columns in library view" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 -msgid "Edit settings of a user-defined column" +msgid "Remove a user-defined column" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 -msgid "Use internal &viewer for:" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 +msgid "Add a user-defined column" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 -msgid "Add an email address to which to send books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 -msgid "&Add email" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 -msgid "Make &default" +msgid "Edit settings of a user-defined column" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:570 -msgid "&Remove email" +msgid "Use internal &viewer for:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571 -msgid "calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked." +msgid "Add an email address to which to send books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572 -msgid "&Maximum number of waiting worker processes (needs restart):" +msgid "&Add email" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:573 -msgid "&Check database integrity" +msgid "Make &default" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:574 -msgid "&Install command line tools" +msgid "&Remove email" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575 -msgid "Open calibre &configuration directory" +msgid "calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:576 -msgid "Limit the max. simultaneous jobs to the available CPU &cores" +msgid "&Maximum number of waiting worker processes (needs restart):" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:577 -msgid "Debug &device detection" +msgid "&Check database integrity" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:578 -msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." +msgid "&Install command line tools" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:579 -msgid "Server &port:" +msgid "Open calibre &configuration directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:580 +msgid "Limit the max. simultaneous jobs to the available CPU &cores" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:581 +msgid "Debug &device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:582 +msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:583 +msgid "Server &port:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:584 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 msgid "&Username:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:581 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:585 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 msgid "&Password:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:582 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:584 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:588 msgid "Max. &cover size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:585 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 msgid "&Show password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 msgid "Max. &OPDS items per query:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 msgid "&Start Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:588 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:592 msgid "St&op Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:593 msgid "&Test Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:594 msgid "Run server &automatically on startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:595 msgid "View &server logs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:592 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:596 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 msgid "" "

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

Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:594 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:595 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 msgid "Enable/&Disable plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:596 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 msgid "&Customize plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Remove plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 msgid "Add new plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 msgid "Plugin &file:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 msgid "&Add" msgstr "" @@ -4921,7 +4933,7 @@ msgid "Choose formats for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1345 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1382 msgid "Books" msgstr "" @@ -5111,6 +5123,45 @@ msgstr "" msgid "Aborting..." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:54 +msgid "The current saved search will be permanently deleted. Are you sure?" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:83 +msgid "Saved Search Editor" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:84 +msgid "Saved Search: " +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 +msgid "Select a saved search to edit" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 +msgid "Delete this selected saved search" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 +msgid "Enter a new saved search name." +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 +msgid "Add the new saved search" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 +msgid "Change the contents of the saved search" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119 msgid "Need username and password" msgstr "" @@ -5336,27 +5387,26 @@ msgstr "" msgid "Choose formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:72 msgid "Authors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:101 msgid "Publishers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:110 msgid " (not on any book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:162 msgid "The current tag category will be permanently deleted. Are you sure?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:153 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 -msgid "Tag Editor" +msgid "User Categories Editor" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 @@ -5404,6 +5454,7 @@ msgid "Select the content kind of the new category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:93 msgid "Are your sure?" msgstr "" @@ -5411,6 +5462,10 @@ msgstr "" msgid "The following tags are used by one or more books. Are you certain you want to delete them?" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 +msgid "Tag Editor" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 msgid "A&vailable tags" msgstr "" @@ -5443,6 +5498,64 @@ msgstr "" msgid "Add tag to available tags and apply it to current book" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:429 +msgid "Item is blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:430 +msgid "An item cannot be set to nothing. Delete it instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:66 +msgid "Item already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:67 +msgid "The item %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 +msgid "No item selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 +msgid "You must select one item from the list of Available items." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 +msgid "No items selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 +msgid "You must select at least one items from the list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 +msgid "Are you certain you want to delete the following items?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 +msgid "Category Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 +msgid "Items in use" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 +msgid "Delete item from database. This will unapply the item from all books and then remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 +msgid "Rename the item in every book where it is used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 +msgid "Ctrl+S" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 msgid "Test email settings" msgstr "" @@ -5790,7 +5903,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:638 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1068 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:356 msgid "The lookup/search name is \"{0}\"" msgstr "" @@ -5820,51 +5933,51 @@ msgstr "" msgid "Double click to edit me

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 msgid "Hide column %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 msgid "Sort on %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 msgid "Ascending" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 msgid "Descending" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 msgid "Change text alignment for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 msgid "Left" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 msgid "Right" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 msgid "Center" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 msgid "Show column" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 msgid "Restore default layout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:471 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:479 msgid "Not allowed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:472 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:480 msgid "Dropping onto a device is not supported. First add the book to the calibre library." msgstr "" @@ -5942,106 +6055,114 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 msgid "Start minimized to system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 msgid "Log debugging information to console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:36 msgid "Do not check for updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 msgid "Choose a location for your calibre e-book library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:76 msgid "Failed to create library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:77 msgid "Failed to create calibre library at: %r. Aborting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +msgid "Initializing user interface..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 msgid "Repairing failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "The database repair failed. Starting with a new empty library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595 msgid "Calibre Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Choose a location for your new calibre e-book library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218 msgid "Bad database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186 msgid "Bad database location %r. calibre will now quit." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:199 msgid "Corrupted database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 msgid "Your calibre database appears to be corrupted. Do you want calibre to try and repair it automatically? If you say No, a new empty calibre library will be created." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 msgid "Repairing database. This can take a very long time for a large collection" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219 msgid "Bad database location %r. Will start with a new, empty calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 +msgid "Starting %s: Loading books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 msgid "If you are sure it is not running" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 msgid "Cannot Start " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 msgid "%s is already running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 msgid "may be running in the system tray, in the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 msgid "upper right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:285 msgid "lower right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 msgid "try rebooting your computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:265 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:302 msgid "try deleting the file" msgstr "" @@ -6156,7 +6277,7 @@ msgid "Send to device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 msgid "Save to disk" msgstr "" @@ -6181,7 +6302,7 @@ msgid "C" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:433 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 msgid "View" msgstr "" @@ -6354,11 +6475,44 @@ msgstr "" msgid "Cover browser could not be loaded: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:148 +msgid "Rename" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:153 +msgid "Hide category %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:156 +msgid "Show category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:160 +msgid "Show all categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:167 +msgid "Manage " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:171 +msgid "Manage Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:182 +msgid "Manage User Categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:348 #: /home/kovid/work/calibre/src/calibre/library/database2.py:244 msgid "Searches" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:439 +msgid "The name %s is already used." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182 msgid "Convert book %d of %d (%s)" @@ -6394,189 +6548,189 @@ msgstr "" msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:70 msgid "Save single format to disk..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:162 msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:168 msgid "Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:208 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:210 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:213 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:218 msgid "&Restart" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:258 msgid "

For help see the: User Manual
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:264 msgid "%s: %s by Kovid Goyal %%(version)s
%%(device)s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:283 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 msgid "Download metadata and covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 msgid "Download only metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 msgid "Download only covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:288 msgid "Download only social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 msgid "Merge into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 msgid "Merge into first selected book - keep others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:302 msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:305 msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:356 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:350 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2253 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2290 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:353 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2256 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2293 msgid "Save only %s format to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:375 msgid "Remove selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:377 msgid "Remove files of a specific format from selected books.." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:379 msgid "Remove all formats from selected books, except..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:381 msgid "Remove covers from selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:413 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:420 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:421 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 msgid "Create catalog of books in your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:440 msgid "Run welcome wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:480 msgid "Similar books..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:568 msgid "Calibre Quick Start Guide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:695 msgid "Select folder to open as device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:769 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:806 msgid "Browse by covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:837 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:874 msgid "({0} of {1})" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:842 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:879 msgid "(all books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:844 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:881 msgid "({0} of all)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:954 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:991 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:956 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:993 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:988 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1025 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1037 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1001 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1038 msgid "" "\n" "

The database of books on the reader is corrupted. Try the following:\n" @@ -6587,386 +6741,386 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1064 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1241 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1101 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1278 msgid "Use library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1242 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1102 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1279 msgid "User annotations generated from main library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1072 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1558 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1615 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1653 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1674 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1804 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1869 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1987 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1109 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1595 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1652 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1690 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1711 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1841 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2024 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1073 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1110 msgid "No books selected to fetch annotations from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1135 msgid "Merging user annotations into database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1126 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1163 msgid "%s
Last Page Read: %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1132 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1169 msgid "%s
Last Page Read: Location %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1151 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1188 msgid "Location %d • %s
%s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1160 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1197 msgid "Page %d • %s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1165 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202 msgid "Location %d • %s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1322 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1323 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1334 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1385 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1371 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1422 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1346 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1383 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1347 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1384 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1348 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1385 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1349 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1386 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1350 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1387 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1351 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1352 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1389 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1353 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1390 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1354 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1391 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1355 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1359 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1396 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1394 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1432 msgid "Some duplicates were found and merged into the following existing books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1404 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1441 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1442 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1462 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1428 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2131 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2156 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2168 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2193 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1438 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1475 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1456 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1493 msgid "Choose formats not to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1494 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1531 msgid "The selected books will be permanently deleted and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1548 msgid "The selected books will be permanently deleted from your device. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1526 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1563 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1594 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1573 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1610 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1575 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1612 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1575 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1612 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1577 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1614 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1599 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1636 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1600 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1637 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1640 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1614 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1652 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1651 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1689 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1673 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1676 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1710 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1713 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1677 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1714 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1681 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1718 msgid "All book formats and metadata from the selected books will be added to the first selected book.

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

Please confirm you want to proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1692 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1729 msgid "All book formats and metadata from the selected books will be merged into the first selected book.

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

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

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1704 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1741 msgid "You are about to merge more than 5 books. Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1803 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1840 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1806 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1843 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1839 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1876 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1840 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1847 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1848 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1884 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1885 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1886 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1870 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1887 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1924 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1930 msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1903 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1940 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1906 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1943 msgid "Export Catalog Directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1907 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1944 msgid "Select destination for %s.%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1921 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1958 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1935 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1972 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1986 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2023 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2015 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2052 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2131 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2189 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2168 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2226 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2145 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2182 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2146 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2155 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2192 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2227 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2231 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2236 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2268 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2273 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2232 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2269 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2237 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2274 msgid "Cannot configure before calibre is restarted." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2285 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2322 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2323 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2336 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2373 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2342 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2379 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2343 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2380 msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2366 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2394 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2403 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2431 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2404 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2380 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2417 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2395 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2432 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2442 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2479 msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2467 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2504 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2470 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2507 msgid "" " is communicating with the device!
\n" " Quitting may cause corruption on the device.
\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2474 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2511 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2526 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2563 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2545 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2582 msgid "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2553 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2590 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2554 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2591 msgid "%s has been updated to version %s. See the new features. Visit the download page?" msgstr "" @@ -8096,7 +8250,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:655 -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:497 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:503 msgid "Show detailed output information. Useful for debugging" msgstr "" @@ -8187,27 +8341,27 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1444 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1550 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1473 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1579 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1490 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1596 msgid "Compacting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1583 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1689 msgid "Checking SQL integrity..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1621 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1728 msgid "Checking for missing files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1643 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1750 msgid "Checked id" msgstr "" @@ -8363,10 +8517,13 @@ msgid "Write process PID to the specified file" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:112 -#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 msgid "%d books" msgstr "" +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 +msgid "%d items" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 msgid "RATING: %s
" msgstr "" @@ -8622,91 +8779,91 @@ msgstr "" msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595 msgid "The \"%s\" recipe needs a username and password." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:654 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:692 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:656 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:694 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:662 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:700 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:666 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:821 msgid "Could not fetch article. Run with -vv to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:842 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:773 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:847 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:779 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:853 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:781 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:855 msgid "Generating masthead..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:861 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:936 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:877 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:952 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:887 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:899 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:974 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:934 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009 msgid "Masthead image downloaded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1205 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1196 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1276 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1207 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1287 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1224 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1304 msgid "Fetching feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1371 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1451 msgid "Failed to log in, check your username and password for the calibre Periodicals service." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1387 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 msgid "You do not have permission to download this issue. Either your subscription has expired or you have exceeded the maximum allowed downloads for today." msgstr "" @@ -8725,46 +8882,46 @@ msgstr "" msgid "Custom" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:474 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 msgid "" "%prog URL\n" "\n" "Where URL is for example http://google.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:477 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 msgid "Base directory into which URL is saved. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 msgid "Timeout in seconds to wait for a response from the server. Default: %default s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 msgid "Maximum number of levels to recurse i.e. depth of links to follow. Default %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 msgid "The maximum number of files to download. This only applies to files from tags. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:488 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 msgid "Minimum interval in seconds between consecutive fetches. Default is %default s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:490 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:496 msgid "The character encoding for the websites you are trying to download. The default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:498 msgid "Only links that match this regular expression will be followed. This option can be specified multiple times, in which case as long as a link matches any one regexp, it will be followed. By default all links are followed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:500 msgid "Any link that matches this regular expression will be ignored. This option can be specified multiple times, in which case as long as any regexp matches a link, it will be ignored.By default, no links are ignored. If both --filter-regexp and --match-regexp are specified, then --filter-regexp is applied first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:496 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:502 msgid "Do not download CSS stylesheets." msgstr "" diff --git a/src/calibre/utils/magick_draw.py b/src/calibre/utils/magick_draw.py index 5625da0869..aeb5bb2268 100644 --- a/src/calibre/utils/magick_draw.py +++ b/src/calibre/utils/magick_draw.py @@ -161,6 +161,19 @@ def create_text_arc(text, font_size, font=None, bgcolor='white'): p.MagickTrimImage(canvas, 0) return canvas +def add_borders_to_image(path_to_image, left=0, top=0, right=0, bottom=0, + border_color='white'): + with p.ImageMagick(): + img = load_image(path_to_image) + lwidth = p.MagickGetImageWidth(img) + lheight = p.MagickGetImageHeight(img) + canvas = create_canvas(lwidth+left+right, lheight+top+bottom, + border_color) + compose_image(canvas, img, left, top) + p.DestroyMagickWand(img) + with open(path_to_image, 'wb') as f: + p.MagickWriteImage(canvas, f) + p.DestroyMagickWand(canvas) def create_cover_page(top_lines, logo_path, width=590, height=750, bgcolor='white', output_format='png'):